Revolut Market Data API
Retrieve real-time and historical market data for Revolut X.
Retrieve real-time and historical market data for Revolut X.
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/revolut-market-data-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
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:
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)."