CurrencyAPI Range Exchange Rates API

Returns time-series exchange rate data between a start and end datetime in one call, with selectable accuracy of day (up to 366 days), hour, quarter hour, or minute for charting and FX analytics.

OpenAPI Specification

currencyapi-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: CurrencyAPI
  description: >-
    CurrencyAPI (currencyapi.com, an Everapi product) is a foreign exchange rate
    and currency conversion REST API. A single versioned surface at
    https://api.currencyapi.com/v3 provides the latest exchange rates, historical
    end-of-day rates back to 1999, time-series ranges with day/hour/quarter-hour/
    minute accuracy, value conversion, currency metadata, and account quota
    status. All endpoints are GET requests authenticated with an API key passed
    either as an "apikey" HTTP header (recommended) or an "apikey" query
    parameter. Only successful calls count against your quota; the status
    endpoint is never counted.
  version: '3.0'
  contact:
    name: CurrencyAPI
    url: https://currencyapi.com
  termsOfService: https://currencyapi.com/terms
servers:
  - url: https://api.currencyapi.com/v3
    description: Production
security:
  - apiKeyHeader: []
  - apiKeyQuery: []
tags:
  - name: Latest
    description: Latest foreign exchange rates.
  - name: Historical
    description: End-of-day historical exchange rates back to 1999.
  - name: Range
    description: Time-series exchange rates for a datetime range.
  - name: Convert
    description: Convert a value between currencies.
  - name: Currencies
    description: Supported currency metadata.
  - name: Status
    description: API health and account quota status.
paths:
  /latest:
    get:
      operationId: getLatestExchangeRates
      tags:
        - Latest
      summary: Latest exchange rates
      description: >-
        Returns the latest exchange rates for the given base currency against
        all available currencies or a selected list. Rate freshness depends on
        plan - daily on Free, hourly on Small, every 60 seconds on Medium and
        above.
      parameters:
        - $ref: '#/components/parameters/baseCurrency'
        - $ref: '#/components/parameters/currencies'
        - $ref: '#/components/parameters/type'
      responses:
        '200':
          description: Latest exchange rates keyed by currency code.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RatesResponse'
              example:
                meta:
                  last_updated_at: '2023-06-23T10:15:59Z'
                data:
                  AED:
                    code: AED
                    value: 3.67306
                  EUR:
                    code: EUR
                    value: 0.91234
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/RateLimited'
  /historical:
    get:
      operationId: getHistoricalExchangeRates
      tags:
        - Historical
      summary: Historical exchange rates
      description: >-
        Returns end-of-day exchange rates for a specific date. Historical data
        extends back to 1999.
      parameters:
        - name: date
          in: query
          required: true
          description: 'Date to retrieve historical rates from (format: 2021-12-31).'
          schema:
            type: string
            format: date
            example: '2022-01-01'
        - $ref: '#/components/parameters/baseCurrency'
        - $ref: '#/components/parameters/currencies'
        - $ref: '#/components/parameters/type'
      responses:
        '200':
          description: Historical exchange rates for the requested date.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RatesResponse'
              example:
                meta:
                  last_updated_at: '2022-01-01T23:59:59Z'
                data:
                  AED:
                    code: AED
                    value: 3.67306
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/RateLimited'
  /range:
    get:
      operationId: getRangeExchangeRates
      tags:
        - Range
      summary: Range (time-series) exchange rates
      description: >-
        Returns exchange rate data for a datetime range in a single call.
        Accuracy constraints - day covers up to 366 days of history; hour allows
        a maximum 7-day range up to 3 months back; quarter_hour allows a maximum
        24-hour range up to 7 days back; minute allows a maximum 6-hour range up
        to 7 days back.
      parameters:
        - name: datetime_start
          in: query
          required: true
          description: 'ISO8601 datetime for the start of the range (format: 2022-12-01T00:00:00Z).'
          schema:
            type: string
            format: date-time
            example: '2022-12-01T00:00:00Z'
        - name: datetime_end
          in: query
          required: true
          description: 'ISO8601 datetime for the end of the range (format: 2022-12-31T23:59:59Z).'
          schema:
            type: string
            format: date-time
            example: '2022-12-31T23:59:59Z'
        - name: accuracy
          in: query
          required: false
          description: Accuracy of the time-series data points.
          schema:
            type: string
            enum:
              - day
              - hour
              - quarter_hour
              - minute
            default: day
        - $ref: '#/components/parameters/baseCurrency'
        - $ref: '#/components/parameters/currencies'
        - $ref: '#/components/parameters/type'
      responses:
        '200':
          description: Time-series exchange rate data points.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RangeResponse'
              example:
                data:
                  - datetime: '2022-01-01T23:59:59Z'
                    currencies:
                      AED:
                        code: AED
                        value: 3.67306
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/RateLimited'
  /convert:
    get:
      operationId: convertCurrency
      tags:
        - Convert
      summary: Convert a value between currencies
      description: >-
        Converts a monetary value from the base currency into one or more target
        currencies, using today's rates or the rates of a given historical date.
      parameters:
        - name: value
          in: query
          required: true
          description: The value you want to convert.
          schema:
            type: number
            example: 100
        - name: date
          in: query
          required: false
          description: 'Optional historical date to convert with (format: 2021-12-31). Defaults to the latest rates.'
          schema:
            type: string
            format: date
        - $ref: '#/components/parameters/baseCurrency'
        - $ref: '#/components/parameters/currencies'
        - $ref: '#/components/parameters/type'
      responses:
        '200':
          description: Converted values keyed by currency code.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RatesResponse'
              example:
                meta:
                  last_updated_at: '2022-01-01T23:59:59Z'
                data:
                  AED:
                    code: AED
                    value: 367.306
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/RateLimited'
  /currencies:
    get:
      operationId: listCurrencies
      tags:
        - Currencies
      summary: List supported currencies
      description: >-
        Returns metadata for all supported currencies - symbol, name, native
        symbol, decimal digits, rounding, code, plural name, type, and
        associated countries - optionally filtered by code or type.
      parameters:
        - $ref: '#/components/parameters/currencies'
        - $ref: '#/components/parameters/type'
      responses:
        '200':
          description: Supported currency metadata keyed by currency code.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    additionalProperties:
                      $ref: '#/components/schemas/Currency'
              example:
                data:
                  USD:
                    symbol: $
                    name: US Dollar
                    symbol_native: $
                    decimal_digits: 2
                    rounding: 0
                    code: USD
                    name_plural: US dollars
                    type: fiat
                    countries:
                      - US
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/RateLimited'
  /status:
    get:
      operationId: getStatus
      tags:
        - Status
      summary: API status and quota
      description: >-
        Checks whether the API is up and returns your monthly and grace quota
        usage. Requests to this endpoint do not count against your quota or
        rate limit.
      responses:
        '200':
          description: Account quota status.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatusResponse'
              example:
                account_id: 313373133731337
                quotas:
                  month:
                    total: 300
                    used: 72
                    remaining: 229
                  grace:
                    total: 0
                    used: 0
                    remaining: 0
        '401':
          $ref: '#/components/responses/Unauthorized'
components:
  securitySchemes:
    apiKeyHeader:
      type: apiKey
      in: header
      name: apikey
      description: API key passed as an HTTP header (recommended).
    apiKeyQuery:
      type: apiKey
      in: query
      name: apikey
      description: API key passed as a query parameter (may expose the key in access logs).
  parameters:
    baseCurrency:
      name: base_currency
      in: query
      required: false
      description: The base currency to which all results are behaving relative to. Defaults to USD.
      schema:
        type: string
        default: USD
        example: USD
    currencies:
      name: currencies
      in: query
      required: false
      description: A list of comma-separated currency codes you want to receive (e.g. EUR,USD,CAD). Defaults to all available currencies.
      schema:
        type: string
        example: EUR,USD,CAD
    type:
      name: type
      in: query
      required: false
      description: The type of currency you want to get. Defaults to all types.
      schema:
        type: string
        enum:
          - fiat
          - metal
          - crypto
  responses:
    Unauthorized:
      description: Invalid or missing API key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    ValidationError:
      description: Validation error - incorrect or missing parameters. Failed requests do not count against your quota.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    RateLimited:
      description: >-
        Monthly quota or per-minute rate limit exceeded. Inspect the
        X-RateLimit-Limit-Quota-Minute, X-RateLimit-Limit-Quota-Month,
        X-RateLimit-Remaining-Quota-Minute, and X-RateLimit-Remaining-Quota-Month
        response headers to monitor consumption.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  schemas:
    RatesResponse:
      type: object
      properties:
        meta:
          type: object
          properties:
            last_updated_at:
              type: string
              format: date-time
        data:
          type: object
          description: Exchange rate objects keyed by currency code.
          additionalProperties:
            $ref: '#/components/schemas/Rate'
    RangeResponse:
      type: object
      properties:
        data:
          type: array
          items:
            type: object
            properties:
              datetime:
                type: string
                format: date-time
              currencies:
                type: object
                additionalProperties:
                  $ref: '#/components/schemas/Rate'
    Rate:
      type: object
      properties:
        code:
          type: string
          description: ISO currency code.
          example: EUR
        value:
          type: number
          description: Exchange rate value relative to the base currency.
          example: 0.91234
    Currency:
      type: object
      properties:
        symbol:
          type: string
        name:
          type: string
        symbol_native:
          type: string
        decimal_digits:
          type: integer
        rounding:
          type: number
        code:
          type: string
        name_plural:
          type: string
        type:
          type: string
          enum:
            - fiat
            - metal
            - crypto
        countries:
          type: array
          items:
            type: string
    StatusResponse:
      type: object
      properties:
        account_id:
          type: integer
          format: int64
        quotas:
          type: object
          properties:
            month:
              $ref: '#/components/schemas/Quota'
            grace:
              $ref: '#/components/schemas/Quota'
    Quota:
      type: object
      properties:
        total:
          type: integer
        used:
          type: integer
        remaining:
          type: integer
    Error:
      type: object
      properties:
        message:
          type: string
        errors:
          type: object
          additionalProperties:
            type: array
            items:
              type: string