{"openapi":"3.1.0","info":{"title":"ExchangeRate-API (BYOK) API","version":"0.1.0","description":"ExchangeRate-API (BYOK) lets an AI assistant read your own ExchangeRate-API data through the ExchangeRate-API API with a key you supply (API key). Read-only: 7 tools (get_latest_rates, convert_pair, convert_amount, get_historical_rates, convert_historical_amount, get_supported_codes, get_quota). The BYOK key travels with each request, is used for that one call only and is never stored, logged or...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-exchangerate-api.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-exchangerate-api/docs"},"termsOfService":"https://connectorbay.com/byok-exchangerate-api/terms"},"servers":[{"url":"https://byok-exchangerate-api.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-exchangerate-api/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/get_latest_rates":{"post":{"operationId":"get_latest_rates","summary":"Get the latest exchange rates of one base currency against all supported currencies, with last and next update times. Ea","description":"Get the latest exchange rates of one base currency against all supported currencies, with last and next update times. Each call counts against the monthly request quota of the plan (the free plan has a small quota). The service answers with result 'error' and an error-type when the key, plan or quota does not allow the call. Use for \"What are today's exchange rates for USD\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"base_code":{"description":"Three-letter ISO 4217 base currency code, for example 'USD'.","maxLength":3,"title":"Base Code","type":"string"}},"required":["base_code"],"title":"get_latest_ratesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/convert_pair":{"post":{"operationId":"convert_pair","summary":"Get the current exchange rate between two currencies. Each call counts against the monthly request quota of the plan (th","description":"Get the current exchange rate between two currencies. Each call counts against the monthly request quota of the plan (the free plan has a small quota). The service answers with result 'error' and an error-type when the key, plan or quota does not allow the call. Use for \"What is the EUR to GBP exchange rate\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"base_code":{"description":"Three-letter ISO 4217 base currency code, for example 'USD'.","maxLength":3,"title":"Base Code","type":"string"},"target_code":{"description":"Three-letter ISO 4217 target currency code, for example 'EUR'.","maxLength":3,"title":"Target Code","type":"string"}},"required":["base_code","target_code"],"title":"convert_pairArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/convert_amount":{"post":{"operationId":"convert_amount","summary":"Convert an amount from one currency to another at the current rate; returns the rate and the converted amount. Each call","description":"Convert an amount from one currency to another at the current rate; returns the rate and the converted amount. Each call counts against the monthly request quota of the plan (the free plan has a small quota). The service answers with result 'error' and an error-type when the key, plan or quota does not allow the call. Use for \"How much is 250 EUR in GBP\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"base_code":{"description":"Three-letter ISO 4217 base currency code, for example 'USD'.","maxLength":3,"title":"Base Code","type":"string"},"target_code":{"description":"Three-letter ISO 4217 target currency code, for example 'EUR'.","maxLength":3,"title":"Target Code","type":"string"},"amount":{"description":"Amount to convert as a decimal number, for example '100' or '2500.75'.","maxLength":20,"title":"Amount","type":"string"}},"required":["base_code","target_code","amount"],"title":"convert_amountArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_historical_rates":{"post":{"operationId":"get_historical_rates","summary":"Get the exchange rates of one base currency for a past date (Pro, Business and Volume plans only). Each call counts agai","description":"Get the exchange rates of one base currency for a past date (Pro, Business and Volume plans only). Each call counts against the monthly request quota of the plan (the free plan has a small quota). The service answers with result 'error' and an error-type when the key, plan or quota does not allow the call. Use for \"What were the USD exchange rates on 15 January 2026\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"base_code":{"description":"Three-letter ISO 4217 base currency code, for example 'USD'.","maxLength":3,"title":"Base Code","type":"string"},"year":{"description":"Four-digit year, for example 2026.","maximum":2100,"minimum":1990,"title":"Year","type":"integer"},"month":{"description":"Month number 1 to 12, without a leading zero.","maximum":12,"minimum":1,"title":"Month","type":"integer"},"day":{"description":"Day of the month 1 to 31, without a leading zero.","maximum":31,"minimum":1,"title":"Day","type":"integer"}},"required":["base_code","year","month","day"],"title":"get_historical_ratesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/convert_historical_amount":{"post":{"operationId":"convert_historical_amount","summary":"Convert an amount of one currency into all others at the rates of a past date (Pro, Business and Volume plans only). Eac","description":"Convert an amount of one currency into all others at the rates of a past date (Pro, Business and Volume plans only). Each call counts against the monthly request quota of the plan (the free plan has a small quota). The service answers with result 'error' and an error-type when the key, plan or quota does not allow the call. Use for \"What was 100 USD worth in other currencies on 15 January 2026\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"base_code":{"description":"Three-letter ISO 4217 base currency code, for example 'USD'.","maxLength":3,"title":"Base Code","type":"string"},"year":{"description":"Four-digit year, for example 2026.","maximum":2100,"minimum":1990,"title":"Year","type":"integer"},"month":{"description":"Month number 1 to 12, without a leading zero.","maximum":12,"minimum":1,"title":"Month","type":"integer"},"day":{"description":"Day of the month 1 to 31, without a leading zero.","maximum":31,"minimum":1,"title":"Day","type":"integer"},"amount":{"description":"Amount to convert as a decimal number, for example '100' or '2500.75'.","maxLength":20,"title":"Amount","type":"string"}},"required":["base_code","year","month","day","amount"],"title":"convert_historical_amountArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_supported_codes":{"post":{"operationId":"get_supported_codes","summary":"List all supported currency codes with their names. Each call counts against the monthly request quota of the plan (the ","description":"List all supported currency codes with their names. Each call counts against the monthly request quota of the plan (the free plan has a small quota). The service answers with result 'error' and an error-type when the key, plan or quota does not allow the call. Use for \"Which currencies does ExchangeRate-API support\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_supported_codesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_quota":{"post":{"operationId":"get_quota","summary":"Show the plan's request quota, the requests remaining and the day of the month the quota renews. This call counts agains","description":"Show the plan's request quota, the requests remaining and the day of the month the quota renews. This call counts against the quota and the figures can lag by up to an hour. Use for \"How many ExchangeRate-API requests do I have left this month\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_quotaArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}