allratestoday-com Market Rates API

Live and historical mid-market rates (updated ~every 60 seconds)

Operations 4

GET /api/rate Current exchange rate for one currency pair #
GET /api/historical-rates Historical market rates for a currency pair #
GET /api/v1/rates Live and historical market rates (Wise-compatible) #
GET /api/v1/symbols List supported currencies #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/allratestoday-com:allratestoday-com-market-rates-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

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 Specification

allratestoday-com-market-rates-api-openapi.yml Raw ↑
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