---
title: "Get a provider's exchange rates"
method: GET
path: "/providers/{provider}/rates"
---

# Get a provider's exchange rates

`GET /providers/{provider}/rates`

Returns one provider's rates as published, unblended. Identical to `/rates?providers={provider}`: same parameters, same records, same limits. Native-base records carry the provider's published digits; other bases are derived. Sending `providers` here returns 422. Unknown provider returns 404.

## Path parameters

- `provider` string, required

## Query parameters

- `date` string, date
- `from` string, date
- `to` string, date
- `base` string
- `quotes` 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
- `503` — The request deadline expired before the response could be computed, or the worker process is already running its limit of concurrent live daily-range computes (any daily range served live: with providers, with expand=providers, or before the precomputed blend is ready). In the second case a Retry-After header says how many seconds to wait before retrying. Otherwise retry with a narrower request: filter with quotes, aggregate with group, or split the range into shorter requests.

## Changes

- **2026-09-10** (v2) `479dfde7e7ba` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/lineofflight/apis/frankfurter-api/changes/providers/:provider/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/dc028aa0440e?raw)
