---
title: "Every bank's latest official rate for one pair"
method: GET
path: "/api/v1/central-banks/rates"
tags: ["Central Bank Rates"]
---

# Every bank's latest official rate for one pair

`GET /api/v1/central-banks/rates`

## Request

- Base URL: `https://allratestoday.com`
- URL: `https://allratestoday.com/api/v1/central-banks/rates`
- Auth: one of:
  - HTTP bearer
  - API key in cookie `art_session`

Cross-bank comparison: each covered source's most recent official rate for the requested pair in a single call, with min/max/median and spread in basis points. Pairs a bank does not publish directly are cross-computed via that bank's own table only (never mixing banks) and flagged `derived`. Sources whose newest publication is older than 30 days are flagged `stale` and excluded from the spread stats. Banks that cannot produce the pair are skipped. Methodology: https://allratestoday.com/official-rates-methodology/. Available on all plans.

## Query parameters

- `source` string, required
- `target` string, required
- `format` 'json' | 'csv' | 'xml' | 'xlsx'

## Response `200`

Latest rate for the pair from every source that can produce it

- object
  - `source` string
  - `target` string
  - `as_of` string, date: Newest rate_date among the returned banks; each bank also carries its own rate_date
  - `count` integer
  - `banks` object[]
    - `code` string
    - `name` string
    - `rate` number
    - `rate_date` string, date
    - `rate_type` string
    - `derived` boolean: True when the pair was inverted or cross-computed from the bank's own table rather than printed directly
    - `method` 'published' | 'inverse' | 'cross'
    - `stale` boolean: True when the bank's newest publication is older than 30 days (e.g. quarterly sources)
  - `stats` object, nullable: Computed over non-stale banks only; null when no fresh source covers the pair
    - `min` number
    - `max` number
    - `median` number
    - `spread_bps` number: (max - min) / median in basis points
    - `banks_in_stats` integer
  - `methodology` string
  - `disclaimer` string

## Other responses

- `400`: Invalid or missing parameters
- `401`: Authentication required — provide an API key via `Authorization: Bearer art_live_...` (free keys at https://allratestoday.com/register)
- `404`: No covered source publishes rates covering the requested pair
- `429`: Monthly request limit exceeded (X-Monthly-Limit / X-Monthly-Used / X-Monthly-Resets headers included)

---

[API](https://skmtc.dev/allratestoday/apis/allratestoday-exchange-rate-central-bank-rates-api.md) · [All operations](https://skmtc.dev/allratestoday/apis/allratestoday-exchange-rate-central-bank-rates-api/llms.txt) · [OpenAPI document](https://skmtc.dev/allratestoday/apis/allratestoday-exchange-rate-central-bank-rates-api/revisions/c2e58e9b4da4?raw)
