{"openapi":"3.1.0","info":{"title":"ForexRateAPI (BYOK) API","version":"0.1.0","description":"ForexRateAPI (BYOK) lets an AI assistant read your own ForexRateAPI data through the ForexRateAPI API with a key you supply (ForexRateAPI key). Read-only: 9 tools (list_symbols, get_latest_rates, get_historical_rates, get_hourly_rates, get_ohlc, convert_currency, get_timeframe_rates, get_rate_changes, get_usage). The BYOK key travels with each request, is used for that one call only and is never...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-forexrateapi.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-forexrateapi/docs"},"termsOfService":"https://connectorbay.com/byok-forexrateapi/terms"},"servers":[{"url":"https://byok-forexrateapi.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-forexrateapi/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/list_symbols":{"post":{"operationId":"list_symbols","summary":"List all supported currency codes with their names. Does not count against the monthly quota. Use for \"Which currencies ","description":"List all supported currency codes with their names. Does not count against the monthly quota. Use for \"Which currencies does ForexRateAPI support\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_symbolsArguments","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_latest_rates":{"post":{"operationId":"get_latest_rates","summary":"Get the latest exchange rates (delayed by plan) for all or selected currencies against a base currency. Use for \"What ar","description":"Get the latest exchange rates (delayed by plan) for all or selected currencies against a base currency. Use for \"What are the current USD rates for EUR, JPY and INR\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"base":{"anyOf":[{"maxLength":3,"type":"string"},{"type":"null"}],"default":null,"description":"Base currency code the rates are quoted against (default USD).","title":"Base"},"currencies":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated currency codes to include, for example 'EUR,JPY,INR'. Omit for all.","title":"Currencies"}},"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/get_historical_rates":{"post":{"operationId":"get_historical_rates","summary":"Get exchange rates for one past day (YYYY-MM-DD, or 'yesterday'). Free plans reach the latest 30 days. Use for \"What was","description":"Get exchange rates for one past day (YYYY-MM-DD, or 'yesterday'). Free plans reach the latest 30 days. Use for \"What was the USD to EUR rate on 2026-10-01\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"date":{"description":"Day to look up as YYYY-MM-DD, or the word 'yesterday'.","maxLength":10,"title":"Date","type":"string"},"base":{"anyOf":[{"maxLength":3,"type":"string"},{"type":"null"}],"default":null,"description":"Base currency code the rates are quoted against (default USD).","title":"Base"},"currencies":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated currency codes to include, for example 'EUR,JPY,INR'. Omit for all.","title":"Currencies"}},"required":["date"],"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/get_hourly_rates":{"post":{"operationId":"get_hourly_rates","summary":"Get hourly rates (24 points per day) for one currency over a date range of up to 7 days; free plans cover the latest 2 d","description":"Get hourly rates (24 points per day) for one currency over a date range of up to 7 days; free plans cover the latest 2 days. Use for \"Show hourly USD to EUR rates for 2026-10-14\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"currency":{"description":"Single currency code, for example 'EUR'.","maxLength":3,"title":"Currency","type":"string"},"base":{"anyOf":[{"maxLength":3,"type":"string"},{"type":"null"}],"default":null,"description":"Base currency code the rates are quoted against (default USD).","title":"Base"},"start_date":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"First day, YYYY-MM-DD (default today, earliest 2025-06-19).","title":"Start Date"},"end_date":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Last day, YYYY-MM-DD (default today).","title":"End Date"}},"required":["currency"],"title":"get_hourly_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/get_ohlc":{"post":{"operationId":"get_ohlc","summary":"Get open, high, low and close of a currency pair for one day (GMT day). Free plans reach the latest 5 days. Use for \"Wha","description":"Get open, high, low and close of a currency pair for one day (GMT day). Free plans reach the latest 5 days. Use for \"What were the EUR to USD open, high, low and close on 2026-10-14\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"currency":{"description":"Quote currency code, for example 'USD'.","maxLength":3,"title":"Currency","type":"string"},"date":{"description":"Day, YYYY-MM-DD.","maxLength":10,"title":"Date","type":"string"},"base":{"anyOf":[{"maxLength":3,"type":"string"},{"type":"null"}],"default":null,"description":"Base currency code the rates are quoted against (default USD).","title":"Base"}},"required":["currency","date"],"title":"get_ohlcArguments","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_currency":{"post":{"operationId":"convert_currency","summary":"Convert an amount from one currency to another at the live rate, or at the midpoint of a past day. Use for \"How much is ","description":"Convert an amount from one currency to another at the live rate, or at the midpoint of a past day. Use for \"How much is 100 USD in EUR\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"to_currency":{"description":"Currency code to convert to, for example 'EUR'.","maxLength":3,"title":"To Currency","type":"string"},"amount":{"description":"Amount to convert.","title":"Amount","type":"number"},"from_currency":{"anyOf":[{"maxLength":3,"type":"string"},{"type":"null"}],"default":null,"description":"Currency code to convert from (default USD).","title":"From Currency"},"date":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Use the rate of this day, YYYY-MM-DD (optional).","title":"Date"}},"required":["to_currency","amount"],"title":"convert_currencyArguments","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_timeframe_rates":{"post":{"operationId":"get_timeframe_rates","summary":"Get daily exchange rates between two dates for all or selected currencies. Use for \"Show USD to EUR daily rates for the ","description":"Get daily exchange rates between two dates for all or selected currencies. Use for \"Show USD to EUR daily rates for the first half of October 2026\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start_date":{"description":"First day, YYYY-MM-DD.","maxLength":10,"title":"Start Date","type":"string"},"end_date":{"description":"Last day, YYYY-MM-DD.","maxLength":10,"title":"End Date","type":"string"},"base":{"anyOf":[{"maxLength":3,"type":"string"},{"type":"null"}],"default":null,"description":"Base currency code the rates are quoted against (default USD).","title":"Base"},"currencies":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated currency codes to include, for example 'EUR,JPY,INR'. Omit for all.","title":"Currencies"}},"required":["start_date","end_date"],"title":"get_timeframe_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/get_rate_changes":{"post":{"operationId":"get_rate_changes","summary":"Get start rate, end rate, change and percentage change of currencies between two dates, or over a preset period (recent,","description":"Get start rate, end rate, change and percentage change of currencies between two dates, or over a preset period (recent, yesterday, week, month, year). Use for \"How much did USD move against EUR over the last month\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start_date":{"description":"First day, YYYY-MM-DD.","maxLength":10,"title":"Start Date","type":"string"},"end_date":{"description":"Last day, YYYY-MM-DD.","maxLength":10,"title":"End Date","type":"string"},"base":{"anyOf":[{"maxLength":3,"type":"string"},{"type":"null"}],"default":null,"description":"Base currency code the rates are quoted against (default USD).","title":"Base"},"currencies":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated currency codes to include, for example 'EUR,JPY,INR'. Omit for all.","title":"Currencies"},"date_type":{"anyOf":[{"enum":["recent","yesterday","week","month","year"],"type":"string"},{"type":"null"}],"default":null,"description":"Paid plans: recent, yesterday, week, month or year; overrides the dates.","title":"Date Type"}},"required":["start_date","end_date"],"title":"get_rate_changesArguments","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_usage":{"post":{"operationId":"get_usage","summary":"Show the plan, requests used, total monthly quota and remaining requests of the key. Does not count against the quota. U","description":"Show the plan, requests used, total monthly quota and remaining requests of the key. Does not count against the quota. Use for \"How many ForexRateAPI requests do I have left this month\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_usageArguments","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}}}}