Frankfurter Rates API

Blended currency exchange rates

Documentation

Specifications

Schemas & Data

📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/frankfurter/refs/heads/main/json-schema/v2-rate-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/frankfurter/refs/heads/main/json-schema/v2-currency-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/frankfurter/refs/heads/main/json-schema/v2-currency-detail-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/frankfurter/refs/heads/main/json-schema/v2-provider-schema.json
📊
JSONStructure
https://raw.githubusercontent.com/api-evangelist/frankfurter/refs/heads/main/json-structure/v2-rate-structure.json
📊
JSONStructure
https://raw.githubusercontent.com/api-evangelist/frankfurter/refs/heads/main/json-structure/v2-currency-structure.json
📊
JSONStructure
https://raw.githubusercontent.com/api-evangelist/frankfurter/refs/heads/main/json-structure/v2-currency-detail-structure.json
📊
JSONStructure
https://raw.githubusercontent.com/api-evangelist/frankfurter/refs/heads/main/json-structure/v2-provider-structure.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/frankfurter/refs/heads/main/json-schema/v1-rates-on-date-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/frankfurter/refs/heads/main/json-schema/v1-rates-by-date-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/frankfurter/refs/heads/main/json-schema/v1-rates-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/frankfurter/refs/heads/main/json-schema/v1-currencies-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/frankfurter/refs/heads/main/json-schema/v1-amount-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/frankfurter/refs/heads/main/json-schema/v1-base-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/frankfurter/refs/heads/main/json-schema/v1-base-in-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/frankfurter/refs/heads/main/json-schema/v1-date-schema.json
📊
JSONStructure
https://raw.githubusercontent.com/api-evangelist/frankfurter/refs/heads/main/json-structure/v1-rates-on-date-structure.json
📊
JSONStructure
https://raw.githubusercontent.com/api-evangelist/frankfurter/refs/heads/main/json-structure/v1-rates-by-date-structure.json
📊
JSONStructure
https://raw.githubusercontent.com/api-evangelist/frankfurter/refs/heads/main/json-structure/v1-rates-structure.json
📊
JSONStructure
https://raw.githubusercontent.com/api-evangelist/frankfurter/refs/heads/main/json-structure/v1-currencies-structure.json
📊
JSONStructure
https://raw.githubusercontent.com/api-evangelist/frankfurter/refs/heads/main/json-structure/v1-amount-structure.json
📊
JSONStructure
https://raw.githubusercontent.com/api-evangelist/frankfurter/refs/heads/main/json-structure/v1-base-structure.json
📊
JSONStructure
https://raw.githubusercontent.com/api-evangelist/frankfurter/refs/heads/main/json-structure/v1-base-in-structure.json
📊
JSONStructure
https://raw.githubusercontent.com/api-evangelist/frankfurter/refs/heads/main/json-structure/v1-date-structure.json

Other Resources

OpenAPI Specification

frankfurter-rates-api-openapi.yml Raw ↑
openapi: 3.1.2
info:
  title: Frankfurter Currencies Rates API
  description: Frankfurter is an open-source API for current and historical foreign exchange rates, sourcing currency data from public providers like the European Central Bank.
  version: 1.0.0
  license:
    name: MIT
    url: https://github.com/lineofflight/frankfurter/blob/main/LICENSE
  contact:
    url: https://github.com/lineofflight/frankfurter/issues
  x-generated-from: upstream
  x-last-validated: '2026-05-29'
servers:
- url: https://api.frankfurter.dev/v1
tags:
- name: Rates
  description: Blended currency exchange rates
paths:
  /rates:
    get:
      operationId: getRates
      summary: Frankfurter Get Exchange Rates
      description: Returns exchange rates blended across providers. Without date params, returns the latest rates. Each record is a single currency pair.
      parameters:
      - $ref: '#/components/parameters/date'
      - $ref: '#/components/parameters/from'
      - $ref: '#/components/parameters/to'
      - $ref: '#/components/parameters/base'
      - $ref: '#/components/parameters/quotes'
      - $ref: '#/components/parameters/providers'
      - $ref: '#/components/parameters/group'
      - $ref: '#/components/parameters/expand'
      responses:
        '200':
          description: Exchange rates
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Rate'
              example:
              - date: '2024-01-15'
                base: EUR
                quote: USD
                rate: 1.089
              - date: '2024-01-15'
                base: EUR
                quote: GBP
                rate: 0.8623
            application/x-ndjson:
              schema:
                type: string
                description: NDJSON stream of Rate objects, one JSON object per line
              example: '{ "date": "2024-01-15", "base": "EUR", "quote": "USD", "rate": 1.089 }

                { "date": "2024-01-15", "base": "EUR", "quote": "GBP", "rate": 0.8623 }

                '
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '404':
          $ref: '#/components/responses/NotFound'
      tags:
      - Rates
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /rate/{base}/{quote}:
    get:
      operationId: getRate
      summary: Frankfurter 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.
      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'
      tags:
      - Rates
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
components:
  schemas:
    Rate:
      type: object
      properties:
        date:
          type: string
          format: date
          description: The date of the rate
        base:
          type: string
          description: Base currency code
        quote:
          type: string
          description: Quote currency 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 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.'
          items:
            type: object
            properties:
              key:
                type: string
                description: Provider key
              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
            - rate
      required:
      - date
      - base
      - quote
      - rate
  parameters:
    expand:
      name: expand
      in: query
      description: 'Comma-separated list of optional fields to include per record. Currently supports `providers`, which adds an array of `{ key, rate }` objects per record showing each provider''s individual rate. Outliers excluded from the blend (and providers whose rate was overridden by a currency peg) are flagged with `excluded: true`. The field is omitted on synthesized peg rows where no provider published the quote. In CSV output, the `providers` column is encoded as `KEY:RATE` pairs joined by `|`, with a trailing `*` on excluded entries (e.g. `ECB:0.92|FED:1.50*`).'
      required: false
      schema:
        type: string
        enum:
        - providers
        example: providers
    quotes:
      name: quotes
      in: query
      description: Comma-separated list of quote currencies to include
      required: false
      schema:
        type: string
        example: USD,GBP,JPY
    group:
      name: group
      in: query
      description: Downsample rates by time period. Only applies to date ranges.
      required: false
      schema:
        type: string
        enum:
        - week
        - month
        example: month
    from:
      name: from
      in: query
      description: Start of date range (YYYY-MM-DD)
      required: false
      schema:
        type: string
        format: date
        example: '2024-01-01'
    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'
    base:
      name: base
      in: query
      description: 'Base currency (default: EUR)'
      required: false
      schema:
        type: string
        default: EUR
        example: USD
    providers:
      name: providers
      in: query
      description: Comma-separated list of data providers to include
      required: false
      schema:
        type: string
        example: ECB,TCMB
    to:
      name: to
      in: query
      description: End of date range (YYYY-MM-DD). Defaults to today.
      required: false
      schema:
        type: string
        format: date
        example: '2024-01-31'
  responses:
    NotFound:
      description: No data found
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                type: string
    UnprocessableEntity:
      description: Invalid request
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                type: string