Exchange Rates API

Foreign exchange rate data for 170 world currencies drawn from 15+ sources: latest rates, single-date historical rates, time series, fluctuation between two dates, currency conversion and a supported-symbols list. Six GET endpoints under a /v1 path prefix.

Operations 6

GET /fluctuation exchangeratesapi :- /fluctuation #
GET /timeseries exchangeratesapi :- /timeseries #
GET /symbols exchangeratesapi :- /symbols #
GET /convert exchangeratesapi :- /convert #
GET /latest exchangeratesapi :- /latest #
GET /{date} exchangeratesapi :- /{date} #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/exchange-rates-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API 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 Specification

apilayer-exchangeratesapi-openapi.yml Raw ↑
openapi: 3.0.0
info:
  title: Exchange Rates API
  description: Powered by 15+ exchange rate data sources, the Exchange Rates API delivers real-time and historical exchange
    rate data for 170 world currencies. Endpoints cover latest rates, historical rates, currency conversion, time-series and
    fluctuation data.
  version: 1.0.0
servers:
- url: https://api.exchangeratesapi.io/v1
paths:
  /fluctuation:
    get:
      tags:
      - Endpoints
      summary: exchangeratesapi :- /fluctuation
      description: Returns fluctuation data (start rate, end rate, change and change percentage) between two dates for the
        requested currencies.
      operationId: exchangeratesapiFluctuation
      parameters:
      - name: access_key
        in: query
        description: A unique key assigned to each API account used to authenticate with the API.
        required: true
        schema:
          type: string
      - name: start_date
        in: query
        description: 'The start date of your preferred timeframe. [Format: YYYY-MM-DD]'
        required: true
        schema:
          type: string
          format: date
      - name: end_date
        in: query
        description: 'The end date of your preferred timeframe. [Format: YYYY-MM-DD]'
        required: true
        schema:
          type: string
          format: date
      - name: base
        in: query
        description: 'Change the base currency of your fluctuation data. [Default: EUR]'
        required: false
        schema:
          type: string
          example: EUR
      - name: symbols
        in: query
        description: Comma-separated list of currency codes to limit the output currencies.
        required: false
        schema:
          type: string
          example: USD,GBP,JPY
      - name: callback
        in: query
        description: JSONP callback function name. If provided, the response will be wrapped in this function.
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Fluctuation metrics (start/end rate, change, change %) per currency.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FluctuationResponse'
              examples:
                default:
                  value:
                    success: true
                    fluctuation: true
                    start_date: '2015-12-01'
                    end_date: '2015-12-24'
                    base: EUR
                    rates:
                      USD:
                        start_rate: 1.066494
                        end_rate: 1.073844
                        change: 0.00735
                        change_pct: 0.6899
        '400':
          description: Bad Request - validation error (e.g. invalid base currency, invalid date, invalid amount, invalid timeframe)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '404':
          $ref: '#/components/responses/404'
        '429':
          $ref: '#/components/responses/429'
        '500':
          $ref: '#/components/responses/500'
        '503':
          $ref: '#/components/responses/503'
  /timeseries:
    get:
      tags:
      - Endpoints
      summary: exchangeratesapi :- /timeseries
      description: Returns daily historical exchange rates between two dates (max. 365 days) for the requested currencies.
      operationId: exchangeratesapiTimeseries
      parameters:
      - name: access_key
        in: query
        description: A unique key assigned to each API account used to authenticate with the API.
        required: true
        schema:
          type: string
      - name: start_date
        in: query
        description: 'The start date of your preferred timeframe. [Format: YYYY-MM-DD]'
        required: true
        schema:
          type: string
          format: date
      - name: end_date
        in: query
        description: 'The end date of your preferred timeframe. [Format: YYYY-MM-DD]'
        required: true
        schema:
          type: string
          format: date
      - name: base
        in: query
        description: 'Change the base currency of your time-series data. [Default: EUR]'
        required: false
        schema:
          type: string
          example: EUR
      - name: symbols
        in: query
        description: Comma-separated list of currency codes to limit the output currencies.
        required: false
        schema:
          type: string
          example: USD,GBP,JPY
      - name: callback
        in: query
        description: JSONP callback function name. If provided, the response will be wrapped in this function.
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Daily time-series rates keyed by ISO date.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TimeSeriesResponse'
              examples:
                default:
                  value:
                    success: true
                    timeseries: true
                    start_date: '2012-05-01'
                    end_date: '2012-05-03'
                    base: EUR
                    rates:
                      '2012-05-01':
                        USD: 1.322891
                        AUD: 1.278047
                        CAD: 1.302303
                      '2012-05-02':
                        USD: 1.315066
                        AUD: 1.274202
                        CAD: 1.299083
        '400':
          description: Bad Request - validation error (e.g. invalid base currency, invalid date, invalid amount, invalid timeframe)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '404':
          $ref: '#/components/responses/404'
        '429':
          $ref: '#/components/responses/429'
        '500':
          $ref: '#/components/responses/500'
        '503':
          $ref: '#/components/responses/503'
  /symbols:
    get:
      tags:
      - Endpoints
      summary: exchangeratesapi :- /symbols
      description: Returns all currently supported currency symbols together with their full names.
      operationId: exchangeratesapiSymbols
      parameters:
      - name: access_key
        in: query
        description: A unique key assigned to each API account used to authenticate with the API.
        required: true
        schema:
          type: string
      - name: callback
        in: query
        description: JSONP callback function name. If provided, the response will be wrapped in this function.
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Supported currency symbols (code -> name).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SymbolsResponse'
              examples:
                default:
                  value:
                    success: true
                    symbols:
                      USD: United States Dollar
                      EUR: Euro
                      GBP: British Pound Sterling
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '404':
          $ref: '#/components/responses/404'
        '429':
          $ref: '#/components/responses/429'
        '500':
          $ref: '#/components/responses/500'
        '503':
          $ref: '#/components/responses/503'
  /convert:
    get:
      tags:
      - Endpoints
      summary: exchangeratesapi :- /convert
      description: Converts an amount from one currency to another using real-time or historical exchange rates.
      operationId: exchangeratesapiConvert
      parameters:
      - name: access_key
        in: query
        description: A unique key assigned to each API account used to authenticate with the API.
        required: true
        schema:
          type: string
      - name: from
        in: query
        description: The three-letter currency code of the currency you would like to convert from.
        required: true
        schema:
          type: string
          example: EUR
      - name: to
        in: query
        description: The three-letter currency code of the currency you would like to convert to.
        required: true
        schema:
          type: string
          example: GBP
      - name: amount
        in: query
        description: The amount to be converted.
        required: true
        schema:
          type: number
          example: 25
      - name: date
        in: query
        description: 'Perform the conversion using historical rates of a specific day. [Format: YYYY-MM-DD]'
        required: false
        schema:
          type: string
          format: date
      - name: callback
        in: query
        description: JSONP callback function name. If provided, the response will be wrapped in this function.
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Currency conversion result and metadata.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConvertResponse'
              examples:
                default:
                  value:
                    success: true
                    query:
                      from: GBP
                      to: JPY
                      amount: 25
                    info:
                      timestamp: 1519328414
                      rate: 148.972231
                    historical: true
                    date: '2018-02-22'
                    result: 3724.305775
        '400':
          description: Bad Request - validation error (e.g. invalid base currency, invalid date, invalid amount, invalid timeframe)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '404':
          $ref: '#/components/responses/404'
        '429':
          $ref: '#/components/responses/429'
        '500':
          $ref: '#/components/responses/500'
        '503':
          $ref: '#/components/responses/503'
  /latest:
    get:
      tags:
      - Endpoints
      summary: exchangeratesapi :- /latest
      description: Returns real-time exchange rate data for all available or a specific set of currencies.
      operationId: exchangeratesapiLatest
      parameters:
      - name: access_key
        in: query
        description: A unique key assigned to each API account used to authenticate with the API.
        required: true
        schema:
          type: string
      - name: base
        in: query
        description: 'Change the base currency of your exchange rate data. [Default: EUR]'
        required: false
        schema:
          type: string
          example: EUR
      - name: symbols
        in: query
        description: Comma-separated list of currency codes to limit the output currencies.
        required: false
        schema:
          type: string
          example: USD,GBP,JPY
      - name: callback
        in: query
        description: JSONP callback function name. If provided, the response will be wrapped in this function.
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Latest exchange rates snapshot.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LatestRatesResponse'
              examples:
                default:
                  value:
                    success: true
                    timestamp: 1519296206
                    base: EUR
                    date: '2025-09-15'
                    rates:
                      USD: 1.23396
                      GBP: 0.882047
                      JPY: 132.360679
        '400':
          description: Bad Request - validation error (e.g. invalid base currency, invalid date, invalid amount, invalid timeframe)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '404':
          $ref: '#/components/responses/404'
        '429':
          $ref: '#/components/responses/429'
        '500':
          $ref: '#/components/responses/500'
        '503':
          $ref: '#/components/responses/503'
  /{date}:
    get:
      tags:
      - Endpoints
      summary: exchangeratesapi :- /{date}
      description: 'Returns historical exchange rate data for a specific day. [Format: YYYY-MM-DD]'
      operationId: exchangeratesapiHistorical
      parameters:
      - name: date
        in: path
        description: 'The date you would like to request historical rates for. [Format: YYYY-MM-DD]'
        required: true
        schema:
          type: string
          format: date
      - name: access_key
        in: query
        description: A unique key assigned to each API account used to authenticate with the API.
        required: true
        schema:
          type: string
      - name: base
        in: query
        description: 'Change the base currency of your exchange rate data. [Default: EUR]'
        required: false
        schema:
          type: string
          example: EUR
      - name: symbols
        in: query
        description: Comma-separated list of currency codes to limit the output currencies.
        required: false
        schema:
          type: string
          example: USD,GBP,JPY
      - name: callback
        in: query
        description: JSONP callback function name. If provided, the response will be wrapped in this function.
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Historical rates for the requested date.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HistoricalRatesResponse'
              examples:
                default:
                  value:
                    success: true
                    historical: true
                    date: '2013-12-24'
                    timestamp: 1387929599
                    base: GBP
                    rates:
                      USD: 1.636492
                      EUR: 1.196476
                      CAD: 1.739516
        '400':
          description: Bad Request - validation error (e.g. invalid base currency, invalid date, invalid amount, invalid timeframe)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '404':
          $ref: '#/components/responses/404'
        '429':
          $ref: '#/components/responses/429'
        '500':
          $ref: '#/components/responses/500'
        '503':
          $ref: '#/components/responses/503'
components:
  schemas:
    SymbolsResponse:
      description: Supported currency symbols.
      properties:
        success:
          type: boolean
          example: true
        symbols:
          description: Map of currency code -> name.
          type: object
          additionalProperties:
            type: string
      type: object
      example:
        success: true
        symbols:
          USD: United States Dollar
          EUR: Euro
          GBP: British Pound Sterling
    LatestRatesResponse:
      description: Latest exchange rates snapshot.
      properties:
        success:
          type: boolean
          example: true
        timestamp:
          type: integer
          example: 1519296206
        base:
          type: string
          example: EUR
        date:
          type: string
          format: date
          example: '2025-09-15'
        rates:
          description: Map of currency code -> rate relative to base.
          type: object
          additionalProperties:
            type: number
      type: object
      example:
        success: true
        timestamp: 1519296206
        base: EUR
        date: '2025-09-15'
        rates:
          USD: 1.23396
          GBP: 0.882047
          JPY: 132.360679
    HistoricalRatesResponse:
      description: Historical rates for a date.
      properties:
        success:
          type: boolean
          example: true
        historical:
          type: boolean
          example: true
        date:
          type: string
          format: date
          example: '2013-12-24'
        timestamp:
          type: integer
          example: 1387929599
        base:
          type: string
          example: GBP
        rates:
          type: object
          additionalProperties:
            type: number
      type: object
      example:
        success: true
        historical: true
        date: '2013-12-24'
        timestamp: 1387929599
        base: GBP
        rates:
          USD: 1.636492
          EUR: 1.196476
          CAD: 1.739516
    ConvertQuery:
      properties:
        from:
          type: string
          example: GBP
        to:
          type: string
          example: JPY
        amount:
          type: number
          example: 25
      type: object
    ConvertInfo:
      properties:
        timestamp:
          type: integer
          example: 1519328414
        rate:
          type: number
          example: 148.972231
      type: object
    ConvertResponse:
      description: Convert endpoint response.
      properties:
        success:
          type: boolean
          example: true
        query:
          $ref: '#/components/schemas/ConvertQuery'
        info:
          $ref: '#/components/schemas/ConvertInfo'
        historical:
          type: boolean
          example: true
        date:
          type: string
          format: date
          example: '2018-02-22'
        result:
          type: number
          example: 3724.305775
      type: object
    TimeSeriesResponse:
      description: Daily time-series rates.
      properties:
        success:
          type: boolean
          example: true
        timeseries:
          type: boolean
          example: true
        start_date:
          type: string
          format: date
          example: '2012-05-01'
        end_date:
          type: string
          format: date
          example: '2012-05-03'
        base:
          type: string
          example: EUR
        rates:
          description: Map of ISO date -> (map of currency -> rate).
          type: object
          additionalProperties:
            type: object
            additionalProperties:
              type: number
      type: object
      example:
        success: true
        timeseries: true
        start_date: '2012-05-01'
        end_date: '2012-05-03'
        base: EUR
        rates:
          '2012-05-01':
            USD: 1.322891
            AUD: 1.278047
            CAD: 1.302303
          '2012-05-02':
            USD: 1.315066
            AUD: 1.274202
            CAD: 1.299083
    FluctuationResponse:
      description: Fluctuation analysis between two dates.
      properties:
        success:
          type: boolean
          example: true
        fluctuation:
          type: boolean
          example: true
        start_date:
          type: string
          format: date
          example: '2015-12-01'
        end_date:
          type: string
          format: date
          example: '2015-12-24'
        base:
          type: string
          example: EUR
        rates:
          description: Map of currency -> fluctuation metrics.
          type: object
          additionalProperties:
            properties:
              start_rate:
                type: number
              end_rate:
                type: number
              change:
                type: number
              change_pct:
                type: number
            type: object
      type: object
      example:
        success: true
        fluctuation: true
        start_date: '2015-12-01'
        end_date: '2015-12-24'
        base: EUR
        rates:
          USD:
            start_rate: 1.066494
            end_rate: 1.073844
            change: 0.00735
            change_pct: 0.6899
    Error:
      title: Error
      type: object
      required:
      - success
      - error
      properties:
        success:
          type: boolean
          example: false
        error:
          type: object
          properties:
            code:
              type: integer
              example: 101
            type:
              type: string
              example: invalid_access_key
            info:
              type: string
              example: 'You have not supplied a valid API Access Key. [Technical Support: support@apilayer.com]'
  responses:
    '401':
      description: Unauthorized
      content:
        application/json; Charset=UTF-8:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            account_on_hold:
              summary: account_on_hold
              value:
                success: false
                error:
                  code: 107
                  type: account_on_hold
                  info: 'Your account currently has open invoices and API has been automatically disabled. Please settle your
                    open balance or downgrade to the Free Plan to restore API access. [Support: support@apilayer.com]'
            invalid_access_key:
              summary: invalid_access_key
              value:
                success: false
                error:
                  code: 101
                  type: invalid_access_key
                  info: 'You have not supplied a valid API Access Key. [Technical Support: support@apilayer.com]'
            missing_access_key:
              summary: missing_access_key
              value:
                success: false
                error:
                  code: 101
                  type: missing_access_key
                  info: 'You have not supplied an API Access Key. [Required format: access_key=YOUR_ACCESS_KEY]'
            inactive_user:
              summary: inactive_user
              value:
                success: false
                error:
                  code: 102
                  type: inactive_user
                  info: Permission denied - User not active.
    '403':
      description: Forbidden
      content:
        application/json; Charset=UTF-8:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            https_access_restricted:
              summary: https_access_restricted
              value:
                success: false
                error:
                  code: 105
                  type: https_access_restricted
                  info: Access Restricted - Your current Subscription Plan does not support HTTPS Encryption.
            function_access_restricted:
              summary: function_access_restricted
              value:
                success: false
                error:
                  code: 105
                  type: function_access_restricted
                  info: Access Restricted - Your current Subscription Plan does not support this API Function.
            api_access_blocked:
              summary: api_access_blocked
              value:
                success: false
                error:
                  code: 104
                  type: api_access_blocked
                  info: Your API access has been temporarily disabled. Please upgrade your Subscription Plan or contact support.
    '404':
      description: Not Found
      content:
        application/json; Charset=UTF-8:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            invalid_api_function:
              summary: invalid_api_function
              value:
                success: false
                error:
                  code: 103
                  type: invalid_api_function
                  info: This API Function does not exist.
            404_not_found:
              summary: 404_not_found
              value:
                success: false
                error:
                  code: 404
                  type: 404_not_found
                  info: 404 - The requested resource could not be found. Please try again or contact support.
    '429':
      description: Too Many Requests
      content:
        application/json; Charset=UTF-8:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            usage_limit_reached:
              summary: usage_limit_reached
              value:
                success: false
                error:
                  code: 104
                  type: usage_limit_reached
                  info: Your monthly usage limit has been reached. Please upgrade your Subscription Plan.
            daily_usage_limit_reached:
              summary: daily_usage_limit_reached
              value:
                success: false
                error:
                  code: 104
                  type: daily_usage_limit_reached
                  info: Your daily usage limit has been reached. Please try again tomorrow or upgrade your subscription plan.
            fair_use_limit_reached:
              summary: fair_use_limit_reached
              value:
                success: false
                error:
                  code: 104
                  type: fair_use_limit_reached
                  info: 'Your fair use limit has been reached. [Please contact support: support@apilayer.com]'
            rate_limit_reached:
              summary: rate_limit_reached
              value:
                success: false
                error:
                  code: 106
                  type: rate_limit_reached
                  info: 'You have exceeded the maximum rate limitation allowed on your subscription plan. Please refer to
                    the "Rate Limits" section of the API Documentation for details. '
    '500':
      description: Internal Server Error
      content:
        application/json; Charset=UTF-8:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            internal_error:
              summary: internal_error
              value:
                success: false
                error:
                  code: 0
                  type: internal_error
                  info: 'An error has occured. [Technical Support: support@apilayer.com]'
    '503':
      description: Service Unavailable
      content:
        application/json; Charset=UTF-8:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            maintenance_mode:
              summary: maintenance_mode
              value:
                success: false
                error:
                  code: 503
                  type: maintenance_mode
                  info: ''