{"openapi":"3.1.0","info":{"title":"Live Exchange Rates — Markgit","version":"1.0.0","description":"Get current or historical exchange rates from the open-source Frankfurter API, which aggregates official central-bank data. Upstream docs: https://frankfurter.dev/"},"servers":[{"url":"https://api.markgit.com"}],"paths":{"/v1/tools/frankfurter-exchange-rates/quote":{"post":{"operationId":"quote_frankfurter_exchange_rates","summary":"Get an exact quote for Live Exchange Rates","security":[{"bearerAuth":[]}],"responses":{"201":{"description":"Exact quote and policy decision","content":{"application/json":{"schema":{"type":"object","required":["quote","tool","controls"],"properties":{"quote":{"type":"object","required":["id","priceUsd","feeUsd","totalUsd","expiresAt"],"properties":{"id":{"type":"string","format":"uuid"},"priceUsd":{"type":"string"},"feeUsd":{"type":"string"},"totalUsd":{"type":"string"},"expiresAt":{"type":"string","format":"date-time"}}},"controls":{"type":"object","properties":{"approved":{"type":"boolean"},"violations":{"type":"array","items":{"type":"string"}}}}}}}}}}}},"/v1/tools/frankfurter-exchange-rates/call":{"post":{"operationId":"call_frankfurter_exchange_rates","summary":"Call Live Exchange Rates","security":[{"bearerAuth":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["quoteId","input"],"properties":{"quoteId":{"type":"string","format":"uuid"},"input":{"type":"object","required":["base","quotes"],"properties":{"base":{"type":"string","example":"USD","description":"ISO 4217 base currency code."},"date":{"type":"string","format":"date","example":"2026-01-02","description":"Optional historical date in YYYY-MM-DD format."},"quotes":{"type":"string","example":"EUR,GBP","description":"Comma-separated ISO 4217 target currency codes."}}},"approval":{"type":"object","description":"Required unless policy.approval.requirement is covered_by_user_policy.","properties":{"manifestDigest":{"type":"string","const":"4fbb5938534fb454a38ad46d969fb10cfbdf7203368dfdc1d1a9eb60c726c252"}}}}}}}},"responses":{"200":{"description":"Normalized tool result","content":{"application/json":{"schema":{"type":"object","required":["id","tool","status","cost","output","error"],"properties":{"id":{"type":"string","description":"Execution identifier"},"tool":{"type":"object","properties":{"id":{"type":"string"},"slug":{"const":"frankfurter-exchange-rates"},"name":{"const":"Live Exchange Rates"}}},"status":{"type":"string","enum":["completed","failed"]},"cost":{"type":"object","properties":{"priceUsd":{"type":"string"},"feeUsd":{"type":"string"},"totalUsd":{"type":"string"},"currency":{"const":"USD"}}},"output":{"type":"array","items":{"type":"object","required":["date","base","quote","rate"],"properties":{"base":{"type":"string"},"date":{"type":"string","format":"date"},"rate":{"type":"number"},"quote":{"type":"string"}}}},"error":{"anyOf":[{"type":"null"},{"type":"object","properties":{"message":{"type":"string"}}}]}}}}}}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"Markgit API key"}}},"x-markgit":{"tool":{"id":"0f7fd0be-8705-402c-9018-3087f757437f","slug":"frankfurter-exchange-rates"},"pricing":{"type":"free","currency":"USD","amount":"0.0000"},"usage":{"count":1,"uniqueUsers":1,"tracked":true,"coverage":"markgit_calls","invocationsLabel":"Under 1K invokes","usersLabel":"Under 100 users"},"version":{"number":1,"manifestDigest":"4fbb5938534fb454a38ad46d969fb10cfbdf7203368dfdc1d1a9eb60c726c252","immutable":true},"trust":{"provider":{"tier":"unverified","paymentVerified":false},"endpoint":{"status":"unverified","origin":"https://api.frankfurter.dev","verifiedAt":null},"version":{"status":"versioned","manifestDigest":"4fbb5938534fb454a38ad46d969fb10cfbdf7203368dfdc1d1a9eb60c726c252"},"behavior":{"status":"new","evidence":"markgit_calls"}},"risk":{"level":"medium","capabilities":{"declared":true,"readOnly":false,"destructive":false,"idempotent":false,"openWorld":true,"readsPrivateData":false,"seesUntrustedContent":true,"writesExternalData":false,"sendsMessages":false,"spendsMoney":false,"executesCode":false,"requiresUserCredential":false,"allowedOutboundDomains":["api.frankfurter.dev"],"dataRetention":"unknown"}},"policy":{"callable":true,"monetizationEligible":true,"eligibleForAutoCall":false,"riskLevel":"medium","approval":{"requirement":"explicit_unverified","manifestDigest":"4fbb5938534fb454a38ad46d969fb10cfbdf7203368dfdc1d1a9eb60c726c252"},"reasons":["endpoint origin is not verified"]},"directEndpoint":null}}