---
title: "Get exchange rates"
method: GET
path: "/rates"
---

# Get exchange rates

`GET /rates`

Returns exchange rates blended across providers. Without date params, returns the latest rates. Each record is a single currency pair. The response includes an identity record for the base currency (base equals quote, rate 1), subject to the quotes filter like any other record.

## Query parameters

- `date` string, date
- `from` string, date
- `to` string, date
- `base` string
- `quotes` string
- `providers` string
- `group` 'week' | 'month'
- `expand` 'providers'

## Response `200`

Exchange rates

- Rate[]
  - `date` string, date, required — The date of the rate
  - `base` string, required — Base currency code
  - `quote` string, required — Quote currency code
  - `rate` number, required — Exchange rate value
  - `providers` object[] — Per-provider rates for this pair. Present only when `expand=providers` is set. Each entry has the provider's observation date and published rate (rebased to the row's base). Entries with `excluded: true` did not contribute to the blended `rate` — either flagged as outliers by the consensus filter, or overridden by a currency peg. Omitted on synthesized peg rows where no provider published the quote.
    - `key` string, required — Provider key
    - `date` string, date, required — Provider observation date used for this entry
    - `rate` number, required — Provider's rate, rebased to the row's base
    - `excluded` boolean — Present and true when this entry did not contribute to the blended rate

## Other responses

- `404` — No data found
- `422` — Invalid request

## Changes

- **2026-07-06** (v2) `0295842e0d54` — 1 info
  - added the required property `items/providers/items/date` to the response with the `200` status
- **2026-05-07** (v2) `4041a71e2865` — 1 breaking, 3 info
  - the `items/providers/items/` response's property type changed from `string` to `object` for status `200`
  - added the optional property `items/providers/items/excluded` to the response with the `200` status
  - added the required property `items/providers/items/key` to the response with the `200` status
  - added the required property `items/providers/items/rate` to the response with the `200` status
- **2026-04-28** (v2) `6f66aaf7e5a8` — 2 info
  - added the new optional `query` request parameter `expand`
  - added the optional property `items/providers` to the response with the `200` status
- **2026-03-27** (v2) `7f616d04dcbc` — 5 breaking
  - the response's body type changed from `object` to `string` for status `200`
  - removed the required property `base` from the response with the `200` status
  - removed the required property `date` from the response with the `200` status
  - removed the required property `quote` from the response with the `200` status
  - …1 more
- **2026-03-27** (v2) `66406a8d8dd1` — 1 info
  - added the media type `application/x-ndjson` for the response with the status `200`

[Full history](https://skmtc.dev/lineofflight/apis/frankfurter-api/changes/rates/get.md)

---

[API](https://skmtc.dev/lineofflight/apis/frankfurter-api.md) · [All operations](https://skmtc.dev/lineofflight/apis/frankfurter-api/llms.txt) · [OpenAPI document](https://skmtc.dev/lineofflight/apis/frankfurter-api/revisions/0295842e0d54?raw)
