Frankfurter Rate API
The Rate API from Frankfurter — 1 operation(s) for rate.
The Rate API from Frankfurter — 1 operation(s) for rate.
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/frankfurter:frankfurter-rate-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a 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: 3.2.0
info:
title: Frankfurter Rate API
description: Frankfurter is an open-source API for current and historical foreign exchange rates published by central banks.
version: 2.1.1
license:
name: MIT
url: https://github.com/lineofflight/frankfurter/blob/main/LICENSE
contact:
url: https://github.com/lineofflight/frankfurter/issues
servers:
- url: https://api.frankfurter.dev/v2
tags:
- name: Rate
paths:
/rate/{base}/{quote}:
get:
operationId: getRate
summary: Get a single exchange rate pair
description: Returns the blended exchange rate for a single currency pair. Without a date param, returns the latest rate. A same-currency pair returns the identity rate of 1.
parameters:
- name: base
in: path
required: true
schema:
type: string
example: EUR
- name: quote
in: path
required: true
schema:
type: string
example: USD
- $ref: '#/components/parameters/date'
- $ref: '#/components/parameters/providers'
responses:
'200':
description: Exchange rate
content:
application/json:
schema:
$ref: '#/components/schemas/Rate'
example:
date: '2026-03-25'
base: EUR
quote: USD
rate: 1.1568
'422':
$ref: '#/components/responses/UnprocessableEntity'
'404':
$ref: '#/components/responses/NotFound'
'503':
$ref: '#/components/responses/ServiceUnavailable'
tags:
- Rate
components:
parameters:
date:
name: date
in: query
description: Specific date (YYYY-MM-DD). Cannot be combined with from/to.
required: false
schema:
type: string
format: date
example: '2024-01-15'
providers:
name: providers
in: query
description: Comma-separated list of data providers to include. A single provider includes its stored non-currency series. Selecting multiple providers blends only registered currencies and accounting units.
required: false
schema:
type: string
example: ECB,TCMB
responses:
ServiceUnavailable:
description: '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.'
headers:
Retry-After:
description: Seconds to wait before retrying. Sent when the server is at its limit of concurrent daily range computes.
schema:
type: integer
content:
application/json:
schema:
type: object
properties:
message:
type: string
UnprocessableEntity:
description: Invalid request
content:
application/json:
schema:
type: object
properties:
message:
type: string
NotFound:
description: No data found
content:
application/json:
schema:
type: object
properties:
message:
type: string
schemas:
Rate:
type: object
properties:
date:
type: string
format: date
description: The date of the rate
base:
type: string
description: Base currency or accounting unit code
quote:
type: string
description: Quote currency or accounting unit code
rate:
type: number
description: Exchange rate value
exclusiveMinimum: 0
providers:
type: array
description: '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. A one-day typo in a provider''s series is left out, so its entry shows the observation before it. Omitted on synthesized peg rows where no provider published the quote.'
items:
type: object
properties:
key:
type: string
description: Provider key
date:
type: string
format: date
description: Provider observation date used for this entry
rate:
type: number
exclusiveMinimum: 0
description: Provider's rate, rebased to the row's base
excluded:
type: boolean
description: Present and true when this entry did not contribute to the blended rate
required:
- key
- date
- rate
required:
- date
- base
- quote
- rate