Revolut Market Data API

Retrieve real-time and historical market data for Revolut X.

Operations 3

GET /order-book/{symbol} Get order book snapshot #
GET /candles/{symbol} Get historical OHLCV candles #
GET /tickers Get all tickers #

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/revolut-market-data-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

revolut-market-data-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  version: 1.0.0
  title: Revolut X Crypto Exchange REST Market Data API
  description: As a Revolut X customer, you can use the Revolut X REST API to streamline your trading experience.
  contact: {}
servers:
- url: https://revx.revolut.com/api/1.0
  description: Production server (uses live data)
- url: https://revx.revolut.codes/api/1.0
  description: Dev server (uses test data)
security:
- ApiKey: []
tags:
- name: Market Data
  description: Retrieve real-time and historical market data for Revolut X.
paths:
  /order-book/{symbol}:
    get:
      tags:
      - Market Data
      summary: Get order book snapshot
      operationId: getOrderBook
      description: Retrieve the current order book snapshot (bids and asks) for a specific trading pair.
      parameters:
      - $ref: '#/components/parameters/XRevxTimestamp'
      - $ref: '#/components/parameters/XRevxSignature'
      - name: symbol
        in: path
        required: true
        description: The trading pair symbol (e.g., BTC-USD).
        schema:
          type: string
        example: BTC-USD
      - name: limit
        in: query
        description: Depth of the order book to return (number of levels).
        schema:
          type: integer
          format: int32
          minimum: 1
          maximum: 50
          default: 20
          example: 20
      responses:
        '200':
          description: 'OK


            The Order Book snapshot for the given trading pair.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrderBook'
              examples:
                OrderBookResponse:
                  summary: Order book response
                  $ref: '#/components/examples/OrderBook'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '409':
          $ref: '#/components/responses/Conflict'
        '429':
          $ref: '#/components/responses/RateLimitExceeded'
        5XX:
          $ref: '#/components/responses/ServerError'
  /candles/{symbol}:
    get:
      tags:
      - Market Data
      summary: Get historical OHLCV candles
      operationId: getCandles
      description: 'Retrieve historical market data (Open, High, Low, Close, Volume) for a specific symbol.

        If there is trading volume, the view is based on recent trades.

        If there is no volume, the view is based on the Mid Price (Bid/Ask average).'
      parameters:
      - $ref: '#/components/parameters/XRevxTimestamp'
      - $ref: '#/components/parameters/XRevxSignature'
      - name: symbol
        in: path
        required: true
        description: The trading pair symbol (e.g., BTC-USD).
        example: BTC-USD
        schema:
          type: string
      - name: interval
        in: query
        description: Time interval between candles in minutes.
        schema:
          type: integer
          format: int32
          default: 5
          enum:
          - 1
          - 5
          - 15
          - 30
          - 60
          - 240
          - 1440
          - 2880
          - 5760
          - 10080
          - 20160
          - 40320
          example: 5
      - name: since
        in: query
        description: 'Start timestamp for the query in Unix epoch milliseconds.


          :::note

          If omitted, up to 5000 candles leading up to the `until` parameter will be returned.

          :::'
        schema:
          type: integer
          format: int64
          example: 3318215482991
      - name: until
        in: query
        description: 'End timestamp for the query in Unix epoch milliseconds.


          :::note

          If omitted, this defaults to the current timestamp.

          :::'
        schema:
          type: integer
          format: int64
          example: 3318215482991
      responses:
        '200':
          description: 'OK


            List of OHLCV candles.'
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Candle'
                required:
                - data
              examples:
                CandlesResponse:
                  summary: Candles response
                  $ref: '#/components/examples/CandlesResponseExample'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '409':
          $ref: '#/components/responses/Conflict'
        '429':
          $ref: '#/components/responses/RateLimitExceeded'
        5XX:
          $ref: '#/components/responses/ServerError'
  /tickers:
    get:
      tags:
      - Market Data
      summary: Get all tickers
      operationId: getTicker
      description: 'Retrieves the latest market data snapshots for all supported currency pairs.

        The response includes the current best bid and ask prices, the calculated mid-price, and the last traded price for each active symbol.'
      parameters:
      - $ref: '#/components/parameters/XRevxTimestamp'
      - $ref: '#/components/parameters/XRevxSignature'
      - name: symbols
        in: query
        description: Filter tickers by specific currency pairs (comma-separated).
        schema:
          type: array
          items:
            type: string
        style: form
        explode: false
        example: BTC-USD,ETH-USD
      responses:
        '200':
          description: 'OK


            The list of tickers.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TickersResponse'
              examples:
                TickersResponse:
                  summary: Tickers response
                  $ref: '#/components/examples/TickersResponseExample'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/RateLimitExceeded'
        5XX:
          $ref: '#/components/responses/ServerError'
components:
  schemas:
    ErrorResponse:
      type: object
      description: Standard error response structure
      required:
      - error_id
      - message
      - timestamp
      properties:
        error_id:
          type: string
          format: uuid
          description: Unique identifier for this specific error occurrence.
        message:
          type: string
          description: Human-readable description of the error.
        timestamp:
          type: integer
          format: int64
          description: The time the error occurred in Unix epoch milliseconds.
    OrderBook:
      type: object
      properties:
        data:
          type: object
          properties:
            asks:
              type: array
              description: The list of asks (sell orders), sorted by price in descending order.
              items:
                $ref: '#/components/schemas/OrderBookPriceLevel'
            bids:
              type: array
              description: The list of bids (buy orders), sorted by price in descending order.
              items:
                $ref: '#/components/schemas/OrderBookPriceLevel'
          required:
          - asks
          - bids
        metadata:
          type: object
          properties:
            timestamp:
              type: integer
              format: int64
              description: Timestamp when the order book snapshot was generated, returned in Unix epoch milliseconds.
              example: 3318215482991
          required:
          - timestamp
      required:
      - data
      - metadata
    OrderBookPriceLevel:
      type: object
      description: A single order book price level.
      properties:
        aid:
          type: string
          description: Crypto-asset ID code.
          example: ETH
        anm:
          type: string
          description: Crypto-asset full name.
          example: Ethereum
        s:
          type: string
          description: The side of the price level.
          enum:
          - SELL
          - BUYI
          example: SELL
        p:
          type: string
          description: Price in major currency units. For example, for USD, 4600 represents 4600 dollars.
          example: '4600'
        pc:
          type: string
          description: Price currency.
          example: USD
        pn:
          type: string
          description: Price notation.
          example: MONE
        q:
          type: string
          description: Aggregated quantity at this price level.
          example: '17'
        qc:
          type: string
          description: Quantity currency.
          example: ETH
        qn:
          type: string
          description: Quantity notation.
          example: UNIT
        ve:
          type: string
          description: Venue of execution. Always equals `REVX`.
          example: REVX
        'no':
          type: string
          description: Number of orders at the price level.
          example: '3'
        ts:
          type: string
          description: Trading system. Always equals `CLOB` (Central Limit Order Book).
          example: CLOB
        pdt:
          type: integer
          format: int64
          description: Publication date and time, returned in Unix epoch milliseconds
          example: 3318215482991
      required:
      - aid
      - anm
      - s
      - p
      - pc
      - pn
      - q
      - qc
      - qn
      - ve
      - 'no'
      - ts
      - pdt
    Ticker:
      type: object
      description: 'Real-time market data snapshot for a specific trading pair.

        Includes the current best bid/ask prices and the most recent trade price.'
      required:
      - symbol
      - bid
      - ask
      - mid
      - last_price
      properties:
        symbol:
          type: string
          description: The unique identifier for the currency pair (e.g., `BTC/USD`).
          example: BTC/USD
        bid:
          type: string
          format: decimal
          description: 'The current highest price a buyer is willing to pay.

            Represents the top price in the buy order book.'
          example: '65100.50'
        ask:
          type: string
          format: decimal
          description: 'The current lowest price a seller is willing to accept.

            Represents the top price in the sell order book.'
          example: '65101.00'
        mid:
          type: string
          format: decimal
          description: 'The arithmetic midpoint between the best bid and best ask prices.

            Calculated as `(bid + ask) / 2`.'
          example: '65100.75'
        last_price:
          type: string
          format: decimal
          description: The price at which the most recent trade was successfully executed.
          example: '65101.00'
    Candle:
      type: object
      required:
      - start
      - open
      - high
      - low
      - close
      - volume
      properties:
        start:
          type: integer
          format: int64
          description: Start timestamp of the candle in Unix epoch milliseconds.
        open:
          type: string
          format: decimal
          description: Opening price.
        high:
          type: string
          format: decimal
          description: Highest price during the interval.
        low:
          type: string
          format: decimal
          description: Lowest price during the interval.
        close:
          type: string
          format: decimal
          description: Closing price.
        volume:
          type: string
          format: decimal
          description: Total trading volume during the interval.
    TickersResponse:
      type: object
      description: Response containing ticker information for currency pairs.
      required:
      - data
      - metadata
      properties:
        data:
          type: array
          description: List of ticker information for currency pairs.
          items:
            $ref: '#/components/schemas/Ticker'
        metadata:
          type: object
          description: Metadata about the response.
          required:
          - timestamp
          properties:
            timestamp:
              type: integer
              format: int64
              description: The time the data was captured in Unix epoch milliseconds.
              example: 1770201294631
  responses:
    Unauthorized:
      description: Unauthorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            message: API key can only be used for authentication from whitelisted IP
            error_id: 7d85b5e7-d0f0-4696-b7b5-a300d0d03a5e
            timestamp: 3318215482991
    RateLimitExceeded:
      description: Rate Limit Exceeded
      headers:
        Retry-After:
          description: The number of milliseconds to wait before making a new request.
          schema:
            type: integer
            example: 5000
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            message: Rate Limit Exceeded
            error_id: 7d85b5e7-d0f0-4696-b7b5-a300d0d03a5e
            timestamp: 3318215482991
    Forbidden:
      description: Forbidden
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            message: Forbidden
            error_id: 7d85b5e7-d0f0-4696-b7b5-a300d0d03a5e
            timestamp: 3318215482991
    BadRequest:
      description: Bad request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            message: 'No such pair: BTC-BTC'
            error_id: 7d85b5e7-d0f0-4696-b7b5-a300d0d03a5e
            timestamp: 3318215482991
    ServerError:
      description: Server Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            message: Something went wrong!
            error_id: 7d85b5e7-d0f0-4696-b7b5-a300d0d03a5e
            timestamp: 3318215482991
    Conflict:
      description: Conflict
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            message: Request timestamp is in the future
            error_id: 7d85b5e7-d0f0-4696-b7b5-a300d0d03a5e
            timestamp: 3318215482991
  examples:
    TickersResponseExample:
      value:
        data:
        - symbol: BTC/USD
          bid: '0.02'
          ask: '0.02'
          mid: '0.02'
          last_price: '0.02'
        - symbol: ETH/USD
          bid: '0.02'
          ask: '0.02'
          mid: '0.02'
          last_price: '0.02'
        metadata:
          timestamp: 1770201294631
    CandlesResponseExample:
      value:
        data:
        - start: 3318215482991
          open: '92087.81'
          high: '92133.89'
          low: '92052.39'
          close: '92067.31'
          volume: '0.00067964'
        - start: 3318215782991
          open: '90390.46'
          high: '90395'
          low: '90358.84'
          close: '90395'
          volume: '0.00230816'
    OrderBook:
      value:
        data:
          asks:
          - aid: ETH
            anm: Ethereum
            s: SELL
            p: '4600'
            pc: USD
            pn: MONE
            q: '17'
            qc: ETH
            qn: UNIT
            ve: REVX
            'no': '3'
            ts: CLOB
            pdt: 3318215482991
          - aid: ETH
            anm: Ethereum
            s: SELL
            p: '4555'
            pc: USD
            pn: MONE
            q: '2.1234'
            qc: ETH
            qn: UNIT
            ve: REVX
            'no': '2'
            ts: CLOB
            pdt: 3318215482991
          bids:
          - aid: ETH
            anm: Ethereum
            s: BUYI
            p: '4550'
            pc: USD
            pn: MONE
            q: '0.25'
            qc: ETH
            qn: UNIT
            ve: REVX
            'no': '1'
            ts: CLOB
            pdt: 3318215482991
          - aid: ETH
            anm: Ethereum
            s: BUYI
            p: '4500'
            pc: USD
            pn: MONE
            q: '24.42'
            qc: ETH
            qn: UNIT
            ve: REVX
            'no': '5'
            ts: CLOB
            pdt: 3318215482991
        metadata:
          timestamp: 3318215482991
  parameters:
    XRevxTimestamp:
      in: header
      name: X-Revx-Timestamp
      required: true
      description: "Current timestamp in Unix epoch milliseconds. \nUsed to prevent replay attacks and construct the signature.\nProvided with other authentication headers."
      schema:
        type: integer
        example: 1746007718237
    XRevxSignature:
      in: header
      name: X-Revx-Signature
      required: true
      description: "The Ed25519 signature of the request. \nProvided with other authentication headers.\n\n:::tip\nSee **Authentication headers: Signing a request** for details on how to generate this.\n:::"
      schema:
        type: string
        example: 2h/t5o8w+l5s+fjyfA0n/e7j4u5b7h4e+g4k4c8h7a2p6k0g7j1f+w0i2j3k9r0l3s8m5t6r+q1s+o3v/t4x8v5y+w1r+m2t/k3w/j4y+
  securitySchemes:
    ApiKey:
      type: apiKey
      in: header
      name: X-Revx-API-Key
      description: "The [API key](https://developer.revolut.com/docs/api/revolut-x-crypto-exchange#api-key) obtained from the [Revolut X web app](https://exchange.revolut.com/).\nIt takes the form of a 64-character alphanumeric string, and must be provided with other authentication headers.\n\nA sample API key might look like this: \n```sh\nM1VKFtwB0M9C9QJO7goPlwrOytrJsSNE19txsmpsWIKz7xYu3f8aNucIyynAhYBy\n```\n\nEach API key directly maps to the user account (either Business or Retail)."