allratestoday-com Market Rates API
Live and historical mid-market rates (updated ~every 60 seconds)
Live and historical mid-market rates (updated ~every 60 seconds)
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/allratestoday-com:allratestoday-com-market-rates-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: AllRatesToday Exchange Rate & Central Bank Rates Market…
description: 'Live mid-market exchange rates for 160+ currencies plus official rates from 122 central banks and 4 tax authorities (ECB, the Fed, Bank of Canada, CBSL, Banxico, HMRC, US Treasury and more).
## Data
- **Market rates** (`/api/rate`, `/api/v1/rates`, `/api/historical-rates`): live mid-market rates, refreshed roughly every 60 seconds.
- **Central-bank rates** (`/api/v1/central-bank/*`, `/api/open/central-bank/*`): the official tables exactly as published by each institution, one table per publication date. History reaches back to 2000 and earlier for major sources (ECB from 1999, Bank of Canada from 1950s-era series where published).
- **Daily Reference Rate** (`/api/open/reference-rate`, `/api/v1/reference-rate/*`): one immutable mid-market USD table per business day, fixed at 16:00 London (median of a five-minute sampling window). For index calculation, research and reporting; not a registered benchmark. Methodology: https://allratestoday.com/reference-rate/
## Authentication
Most endpoints require an API key sent as `Authorization: Bearer art_live_...`. Get a free key at https://allratestoday.com/register, or self-issue a 100-call trial key with no account via `POST /api/agent/keys` (built for AI agents). Logged-in dashboard users can also authenticate with their session cookie.
Keyless endpoints: `/api/v1/symbols` and `/api/open/central-bank/{bank}` (attribution required), plus JSON reads of `/api/public/central-bank/{bank}`.
## Output formats
Endpoints that return tabular data accept `?format=json|csv|xml|xlsx` (CSV is UTF-8 with BOM; XLSX is a real Excel workbook; default json).
## Plans
Free plan: latest central-bank tables included. Historical central-bank dates and time series require a paid plan. See https://allratestoday.com/pricing.'
version: 2.2.0
contact:
name: AllRatesToday Support
url: https://allratestoday.com
email: support@allratestoday.com
servers:
- url: https://allratestoday.com
description: Production
tags:
- name: Market Rates
description: Live and historical mid-market rates (updated ~every 60 seconds)
paths:
/api/rate:
get:
tags:
- Market Rates
operationId: getRate
summary: Current exchange rate for one currency pair
description: 'Live mid-market rate between two currencies, refreshed roughly every 60 seconds. Requires an API key: pass it as `Authorization: Bearer art_live_...` or, for simple cross-origin GETs, as `?key=` (alias `?apiKey=`). CORS-enabled.'
security:
- bearerAuth: []
- apiKeyQuery: []
parameters:
- name: source
in: query
required: true
description: Source currency code (ISO 4217)
schema:
type: string
minLength: 3
maxLength: 3
example: USD
- name: target
in: query
required: true
description: Target currency code (ISO 4217)
schema:
type: string
minLength: 3
maxLength: 3
example: EUR
- name: key
in: query
required: false
description: API key (alternative to the Authorization header; `apiKey` also accepted)
schema:
type: string
example: art_live_xxxxx
- name: apiKey
in: query
required: false
description: Alias for `key` — the same query-string fallback under its camelCase name.
schema:
type: string
responses:
'200':
description: Current rate
content:
application/json:
schema:
type: object
required:
- rate
- source
properties:
rate:
type: number
format: double
example: 0.92145
source:
type: string
description: Data source class
example: mid-market
example:
rate: 0.92145
source: mid-market
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/QuotaExceeded'
'502':
description: Upstream rate provider error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/api/historical-rates:
get:
tags:
- Market Rates
operationId: getHistoricalRates
summary: Historical market rates for a currency pair
description: Time series of mid-market rates for one pair over a preset period. `1d` returns hourly points; `7d` and `30d` daily points; `1y` weekly-sampled points. Requires an API key (Bearer header) or a logged-in session.
security:
- bearerAuth: []
- sessionCookie: []
parameters:
- name: source
in: query
required: true
description: Source currency code (ISO 4217)
schema:
type: string
example: USD
- name: target
in: query
required: true
description: Target currency code (ISO 4217)
schema:
type: string
example: LKR
- name: period
in: query
required: false
description: Time window
schema:
type: string
enum:
- 1d
- 7d
- 30d
- 1y
default: 7d
- $ref: '#/components/parameters/Format'
responses:
'200':
description: Historical series (oldest first)
content:
application/json:
schema:
type: object
required:
- source
- target
- data
- period
properties:
source:
type: string
example: USD
target:
type: string
example: LKR
data:
type: array
items:
type: object
properties:
date:
type: string
description: YYYY-MM-DD (ISO date-time for 1d period)
example: '2026-08-10'
rate:
type: number
format: double
example: 302.4512
timestamp:
type: integer
format: int64
description: Unix time in milliseconds
source_api:
type: string
example: mid-market
period:
type: string
enum:
- 1d
- 7d
- 30d
- 1y
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/QuotaExceeded'
'500':
description: Server or upstream error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/api/v1/rates:
get:
tags:
- Market Rates
operationId: getRatesV1
summary: Live and historical market rates (Wise-compatible)
description: The main authenticated rates endpoint, parameter-compatible with the Wise `/v1/rates` API. Refreshed roughly every 60 seconds (responses cached 60s). Omit `target` for all rates from `source`; pass comma-separated targets (e.g. `target=EUR,GBP,JPY`) for multiple pairs in one call; use `time` for a point-in-time rate or `from`/`to` (+ optional `group`) for a series.
security:
- bearerAuth: []
- sessionCookie: []
parameters:
- name: source
in: query
required: false
description: Source currency code (ISO 4217)
schema:
type: string
example: USD
- name: target
in: query
required: false
description: Target currency code; comma-separated list allowed (e.g. `EUR,GBP,JPY`)
schema:
type: string
example: EUR
- name: time
in: query
required: false
description: Historical point-in-time (ISO 8601)
schema:
type: string
format: date-time
- name: from
in: query
required: false
description: Series start date (YYYY-MM-DD)
schema:
type: string
format: date
- name: to
in: query
required: false
description: Series end date (YYYY-MM-DD, exclusive)
schema:
type: string
format: date
- name: group
in: query
required: false
description: Series granularity when using from/to
schema:
type: string
enum:
- minute
- hour
- day
- $ref: '#/components/parameters/Format'
- name: amount
in: query
required: false
description: Convert this amount instead of returning a bare rate. Changes the response to a conversion object and requires exactly one source and one target (400 with a comma-separated target list). Must be non-negative.
schema:
type: number
minimum: 0
example: 1000
- name: api_key
in: query
required: false
description: API key as a query parameter, for callers that cannot set a header (browser address bar, spreadsheet IMPORTDATA). Prefer the Authorization header in production.
schema:
type: string
responses:
'200':
description: Array of rate objects
content:
application/json:
schema:
type: array
items:
type: object
properties:
rate:
type: number
format: double
example: 0.92145
source:
type: string
example: USD
target:
type: string
example: EUR
time:
type: string
format: date-time
example: '2026-08-11T09:00:00Z'
example:
- rate: 0.92145
source: USD
target: EUR
time: '2026-08-11T09:00:00Z'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/QuotaExceeded'
'500':
description: Server or upstream error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/api/v1/symbols:
get:
tags:
- Market Rates
operationId: getSymbols
summary: List supported currencies
description: All supported currency codes, names, and symbols. No authentication required; CORS-enabled; cached 24 hours; does not count toward your monthly quota.
parameters:
- $ref: '#/components/parameters/Format'
responses:
'200':
description: Supported currencies
content:
application/json:
schema:
type: object
properties:
currencies:
type: array
items:
type: object
properties:
code:
type: string
example: USD
name:
type: string
example: US Dollar
symbol:
type: string
example: $
count:
type: integer
example: 161
'400':
$ref: '#/components/responses/BadRequest'
components:
responses:
Unauthorized:
description: 'Authentication required — provide an API key via `Authorization: Bearer art_live_...` (free keys at https://allratestoday.com/register)'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
BadRequest:
description: Invalid or missing parameters
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
QuotaExceeded:
description: Monthly request limit exceeded (X-Monthly-Limit / X-Monthly-Used / X-Monthly-Resets headers included)
content:
application/json:
schema:
type: object
properties:
error:
type: string
example: Request limit exceeded
used:
type: integer
limit:
type: integer
plan:
type: string
example: free
resets_at:
type: string
format: date-time
upgrade_url:
type: string
example: https://allratestoday.com/pricing
parameters:
Format:
name: format
in: query
required: false
description: Response format (default json). csv is UTF-8 with a BOM; xlsx is a real Excel workbook with typed dates and numbers; xml mirrors the JSON fields.
schema:
type: string
enum:
- json
- csv
- xml
- xlsx
default: json
schemas:
Error:
type: object
required:
- error
properties:
error:
type: string
description: Error message
hint:
type: string
description: Optional remediation hint
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: 'API key from your AllRatesToday dashboard. Example: `Authorization: Bearer art_live_xxxxx`. Free keys at https://allratestoday.com/register. Agents without an account: `POST /api/agent/keys` issues a 100-call trial key instantly.'
apiKeyQuery:
type: apiKey
in: query
name: key
description: API key as a query parameter (accepted on /api/rate only; `apiKey` is an alias)
sessionCookie:
type: apiKey
in: cookie
name: art_session
description: Session cookie for logged-in dashboard users