Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
title: Crypto.com Exchange API v1 Transaction History API
version: 1.0.0
description: '## Welcome
Welcome to the Crypto.com Exchange API v1 reference documentation.'
servers:
- url: https://api.crypto.com/exchange/v1
description: Production
- url: https://uat-api.3ona.co/exchange/v1
description: UAT Sandbox
tags:
- name: Transaction History
description: History will be stored for recent 6 months record only. For records over 6 months, please contact our support team.
paths:
/private/get-order-detail:
post:
tags:
- Transaction History
x-apply-to:
- rest
summary: private/get-order-detail
description: Gets detail of a single order by order_id or client_oid.
operationId: privateGetOrderDetail
x-codeSamples:
- lang: JavaScript
label: JavaScript
source: "const ccxt = require('ccxt');\nconst exchange = new ccxt.cryptocom({\n apiKey: 'YOUR_API_KEY',\n secret: 'YOUR_SECRET',\n enableRateLimit: true,\n});\nconst res = await exchange.v1PrivatePostPrivateGetOrderDetail({\n order_id: '19848525',\n});\nconsole.log(res);\n"
- lang: Python
label: Python
source: "import ccxt\nexchange = ccxt.cryptocom({\n 'apiKey': 'YOUR_API_KEY',\n 'secret': 'YOUR_SECRET',\n 'enableRateLimit': True,\n})\nres = exchange.v1_private_post_private_get_order_detail({\n 'order_id': '19848525',\n})\nprint(res)\n"
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PrivateGetOrderDetailRequest'
example:
id: '1'
method: private/get-order-detail
api_key: YOUR_API_KEY
sig: DIGITAL_SIGNATURE
params:
order_id: '19848525'
nonce: '1587846358253'
responses:
'200':
description: Success.
content:
application/json:
schema:
$ref: '#/components/schemas/PrivateGetOrderDetailResponse'
example:
id: '1'
method: private/get-order-detail
code: '0'
result:
account_id: 52e7c00f-1324-5a6z-bfgt-de445bde21a5
order_id: '19848525'
client_oid: '1613571154900'
order_type: LIMIT
time_in_force: GOOD_TILL_CANCEL
side: BUY
exec_inst: []
quantity: '0.0100'
limit_price: '50000.0'
order_value: '500.000000'
maker_fee_rate: '0.000250'
taker_fee_rate: '0.000400'
avg_price: '0.0'
cumulative_quantity: '0.0000'
cumulative_value: '0.000000'
cumulative_fee: '0.000000'
status: ACTIVE
instrument_name: BTCUSD-PERP
fee_instrument_name: USD
reason: '43012'
create_time: '1613575617173'
create_time_ns: '1613575617173123456'
update_time: '1613575617173'
'400':
description: Bad request.
content:
application/json:
schema:
$ref: '#/components/schemas/PrivateGetOrderDetailResponse'
example:
id: '1'
method: private/get-order-detail
code: '40001'
message: BAD_REQUEST
'401':
description: Unauthorized.
content:
application/json:
schema:
$ref: '#/components/schemas/PrivateGetOrderDetailResponse'
example:
id: '1'
method: private/get-order-detail
code: '40101'
message: UNAUTHORIZED
'408':
description: Request timeout.
content:
application/json:
schema:
$ref: '#/components/schemas/PrivateGetOrderDetailResponse'
example:
id: '1'
method: private/get-order-detail
code: '40801'
message: REQUEST_TIMEOUT
'429':
description: Too many requests.
content:
application/json:
schema:
$ref: '#/components/schemas/PrivateGetOrderDetailResponse'
example:
id: '1'
method: private/get-order-detail
code: '42901'
message: TOO_MANY_REQUESTS
'500':
description: Internal server error.
content:
application/json:
schema:
$ref: '#/components/schemas/PrivateGetOrderDetailResponse'
example:
id: '1'
method: private/get-order-detail
code: '50001'
message: INTERNAL_SERVER_ERROR
/private/get-order-history:
post:
tags:
- Transaction History
x-apply-to:
- rest
summary: private/get-order-history
description: 'Gets the order history for a particular instrument.
Users should use `user.order` to keep track of real-time order updates, and `private/get-order-history` should primarily be used for recovery; typically when the websocket is disconnected.'
operationId: privateGetOrderHistory
x-codeSamples:
- lang: JavaScript
label: JavaScript
source: "const ccxt = require('ccxt');\nconst exchange = new ccxt.cryptocom({\n apiKey: 'YOUR_API_KEY',\n secret: 'YOUR_SECRET',\n enableRateLimit: true,\n});\nconst res = await exchange.v1PrivatePostPrivateGetOrderHistory({\n instrument_name: 'BTCUSD-PERP',\n start_time: \"1610905028000081486\",\n end_time: \"1613570791058211357\",\n limit: 20,\n});\nconsole.log(res);\n"
- lang: Python
label: Python
source: "import ccxt\nexchange = ccxt.cryptocom({\n 'apiKey': 'YOUR_API_KEY',\n 'secret': 'YOUR_SECRET',\n 'enableRateLimit': True,\n})\nres = exchange.v1_private_post_private_get_order_history({\n 'instrument_name': 'BTCUSD-PERP',\n 'start_time': \"1610905028000081486\",\n 'end_time': \"1613570791058211357\",\n 'limit': 20,\n})\nprint(res)\n"
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PrivateGetOrderHistoryRequest'
example:
id: '1'
method: private/get-order-history
api_key: YOUR_API_KEY
sig: DIGITAL_SIGNATURE
nonce: '1613570791060'
params:
instrument_name: BTCUSD-PERP
start_time: '1610905028000081486'
end_time: '1613570791058211357'
limit: 20
responses:
'200':
description: Success.
content:
application/json:
schema:
$ref: '#/components/schemas/PrivateGetOrderHistoryResponse'
example:
id: '1'
method: private/get-order-history
code: '0'
result:
data:
- account_id: 52e7c00f-1324-5a6z-bfgt-de445bde21a5
order_id: '18342311'
client_oid: '1613571154795'
order_type: LIMIT
time_in_force: GOOD_TILL_CANCEL
side: BUY
quantity: '0.0001'
limit_price: '51000.0'
order_value: '3.900100'
avg_price: '0.0'
cumulative_quantity: '0.0000'
status: CANCELED
instrument_name: BTCUSD-PERP
fee_instrument_name: USD
create_time: '1610905028000'
update_time: '1613571320251'
- account_id: 52e7c00f-1324-5a6z-bfgt-de445bde21a5
order_id: '18342500'
client_oid: '1613571154800'
order_type: LIMIT
side: BUY
quantity: '0.0500'
limit_price: '51283.0'
avg_price: '51278.5'
cumulative_quantity: '0.0500'
status: FILLED
instrument_name: BTCUSD-PERP
create_time: '1613570791059'
update_time: '1613570791060'
'400':
description: Bad request.
content:
application/json:
schema:
$ref: '#/components/schemas/PrivateGetOrderHistoryResponse'
example:
id: '1'
method: private/get-order-history
code: '40001'
message: BAD_REQUEST
'401':
description: Unauthorized.
content:
application/json:
schema:
$ref: '#/components/schemas/PrivateGetOrderHistoryResponse'
example:
id: '1'
method: private/get-order-history
code: '40101'
message: UNAUTHORIZED
'408':
description: Request timeout.
content:
application/json:
schema:
$ref: '#/components/schemas/PrivateGetOrderHistoryResponse'
example:
id: '1'
method: private/get-order-history
code: '40801'
message: REQUEST_TIMEOUT
'429':
description: Too many requests.
content:
application/json:
schema:
$ref: '#/components/schemas/PrivateGetOrderHistoryResponse'
example:
id: '1'
method: private/get-order-history
code: '42901'
message: TOO_MANY_REQUESTS
'500':
description: Internal server error.
content:
application/json:
schema:
$ref: '#/components/schemas/PrivateGetOrderHistoryResponse'
example:
id: '1'
method: private/get-order-history
code: '50001'
message: INTERNAL_SERVER_ERROR
/private/get-trades:
post:
tags:
- Transaction History
x-apply-to:
- rest
summary: private/get-trades
description: 'Gets all executed trades for a particular instrument.
Users should use `user.trade` to keep track of real-time trades, and `private/get-trades` should primarily be used for recovery; typically when the websocket is disconnected.'
operationId: privateGetTrades
x-codeSamples:
- lang: JavaScript
label: JavaScript
source: "const ccxt = require('ccxt');\nconst exchange = new ccxt.cryptocom({\n apiKey: 'YOUR_API_KEY',\n secret: 'YOUR_SECRET',\n enableRateLimit: true,\n});\nconst res = await exchange.v1PrivatePostPrivateGetTrades({\n instrument_name: 'BTCUSD-PERP',\n start_time: '1619089031996081486',\n end_time: '1619200052124211357',\n limit: 20,\n});\nconsole.log(res);\n"
- lang: Python
label: Python
source: "import ccxt\nexchange = ccxt.cryptocom({\n 'apiKey': 'YOUR_API_KEY',\n 'secret': 'YOUR_SECRET',\n 'enableRateLimit': True,\n})\nres = exchange.v1_private_post_private_get_trades({\n 'instrument_name': 'BTCUSD-PERP',\n 'start_time': '1619089031996081486',\n 'end_time': '1619200052124211357',\n 'limit': 20,\n})\nprint(res)\n"
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PrivateGetTradesRequest'
example:
id: '1'
method: private/get-trades
api_key: YOUR_API_KEY
sig: DIGITAL_SIGNATURE
nonce: '1613570791060'
params:
instrument_name: BTCUSD-PERP
start_time: '1619089031996081486'
end_time: '1619200052124211357'
limit: 20
responses:
'200':
description: Success.
content:
application/json:
schema:
$ref: '#/components/schemas/PrivateGetTradesResponse'
example:
id: '1'
method: private/get-trades
code: '0'
result:
data:
- account_id: 52e7c00f-1324-5a6z-bfgt-de445bde21a5
event_date: '2021-02-17'
journal_type: TRADING
traded_quantity: '0.0500'
traded_price: '51278.5'
fees: '-1.025570'
fee_credits: '-0.500000'
order_id: '19708564'
trade_id: '38554669'
trade_match_id: '76423'
client_oid: 7665b001-2753-4d17-b266-61ecb755922d
taker_side: MAKER
side: BUY
instrument_name: BTCUSD-PERP
fee_instrument_name: USD
create_time: '1613570791060'
create_time_ns: '1613570791060827635'
transact_time_ns: '1613570791060827635'
match_count: '1'
match_index: '0'
'400':
description: Bad request.
content:
application/json:
schema:
$ref: '#/components/schemas/PrivateGetTradesResponse'
example:
id: '1'
method: private/get-trades
code: '40001'
message: BAD_REQUEST
'401':
description: Unauthorized.
content:
application/json:
schema:
$ref: '#/components/schemas/PrivateGetTradesResponse'
example:
id: '1'
method: private/get-trades
code: '40101'
message: UNAUTHORIZED
'408':
description: Request timeout.
content:
application/json:
schema:
$ref: '#/components/schemas/PrivateGetTradesResponse'
example:
id: '1'
method: private/get-trades
code: '40801'
message: REQUEST_TIMEOUT
'429':
description: Too many requests.
content:
application/json:
schema:
$ref: '#/components/schemas/PrivateGetTradesResponse'
example:
id: '1'
method: private/get-trades
code: '42901'
message: TOO_MANY_REQUESTS
'500':
description: Internal server error.
content:
application/json:
schema:
$ref: '#/components/schemas/PrivateGetTradesResponse'
example:
id: '1'
method: private/get-trades
code: '50001'
message: INTERNAL_SERVER_ERROR
/private/get-transactions:
post:
tags:
- Transaction History
x-apply-to:
- rest
summary: private/get-transactions
description: Fetches recent transactions.
operationId: privateGetTransactions
x-codeSamples:
- lang: JavaScript
label: JavaScript
source: "const ccxt = require('ccxt');\nconst exchange = new ccxt.cryptocom({\n apiKey: 'YOUR_API_KEY',\n secret: 'YOUR_SECRET',\n enableRateLimit: true,\n});\nconst res = await exchange.v1PrivatePostPrivateGetTransactions({\n instrument_name: 'BTCUSD-PERP',\n start_time: '1619089031996081486',\n end_time: '1619200052124211357',\n limit: 20,\n});\nconsole.log(res);\n"
- lang: Python
label: Python
source: "import ccxt\nexchange = ccxt.cryptocom({\n 'apiKey': 'YOUR_API_KEY',\n 'secret': 'YOUR_SECRET',\n 'enableRateLimit': True,\n})\nres = exchange.v1_private_post_private_get_transactions({\n 'instrument_name': 'BTCUSD-PERP',\n 'start_time': '1619089031996081486',\n 'end_time': '1619200052124211357',\n 'limit': 20,\n})\nprint(res)\n"
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PrivateGetTransactionsRequest'
example:
id: '1'
method: private/get-transactions
api_key: YOUR_API_KEY
sig: DIGITAL_SIGNATURE
nonce: '1613640752166'
params:
instrument_name: BTCUSD-PERP
start_time: '1619089031996081486'
end_time: '1619200052124211357'
limit: 20
responses:
'200':
description: Success.
content:
application/json:
schema:
$ref: '#/components/schemas/PrivateGetTransactionsResponse'
example:
id: '1'
method: private/get-transactions
code: '0'
result:
data:
- account_id: 88888888-8888-8888-8888-000000000123
event_date: '2021-02-18'
journal_type: TRADING
journal_id: '187078'
transaction_qty: '-0.0005'
transaction_cost: '-24.500000'
realized_pnl: '-0.006125'
order_id: '72062'
trade_id: '71497'
trade_match_id: '8625'
event_timestamp_ms: '1613640752166'
event_timestamp_ns: '1613640752166234567'
client_oid: 6ac2421d-5078-4ef6-a9d5-9680602ce123
taker_side: MAKER
side: SELL
instrument_name: BTCUSD-PERP
- account_id: 88888888-8888-8888-8888-000000000123
event_date: '2021-02-18'
journal_type: SESSION_SETTLE
journal_id: '186959'
transaction_qty: '0'
transaction_cost: '0.000000'
realized_pnl: '-0.007800'
trade_match_id: '0'
event_timestamp_ms: '1613638800001'
event_timestamp_ns: '1613638800001124563'
client_oid: ''
taker_side: ''
instrument_name: BTCUSD-PERP
- account_id: 88888888-8888-8888-8888-000000000123
event_date: '2021-02-18'
journal_type: SESSION_SETTLE
journal_id: '186959'
transaction_qty: '0'
transaction_cost: '0.000000'
realized_pnl: '-0.007800'
trade_match_id: '0'
event_timestamp_ms: '1613638800002'
event_timestamp_ns: '1613638800001124563'
client_oid: ''
taker_side: ''
instrument_name: BTCUSD-PERP
isolation_id: '19848526'
isolation_type: ISOLATED_MARGIN
'400':
description: Bad request.
content:
application/json:
schema:
$ref: '#/components/schemas/PrivateGetTransactionsResponse'
example:
id: '1'
method: private/get-transactions
code: '40001'
message: BAD_REQUEST
'401':
description: Unauthorized.
content:
application/json:
schema:
$ref: '#/components/schemas/PrivateGetTransactionsResponse'
example:
id: '1'
method: private/get-transactions
code: '40101'
message: UNAUTHORIZED
'408':
description: Request timeout.
content:
application/json:
schema:
$ref: '#/components/schemas/PrivateGetTransactionsResponse'
example:
id: '1'
method: private/get-transactions
code: '40801'
message: REQUEST_TIMEOUT
'429':
description: Too many requests.
content:
application/json:
schema:
$ref: '#/components/schemas/PrivateGetTransactionsResponse'
example:
id: '1'
method: private/get-transactions
code: '42901'
message: TOO_MANY_REQUESTS
'500':
description: Internal server error.
content:
application/json:
schema:
$ref: '#/components/schemas/PrivateGetTransactionsResponse'
example:
id: '1'
method: private/get-transactions
code: '50001'
message: INTERNAL_SERVER_ERROR
components:
schemas:
PrivateGetOrderHistoryRequest:
$ref: exchange-schema.generated.yaml#/components/schemas/PrivateGetOrderHistoryRequest
PrivateGetOrderDetailRequest:
$ref: exchange-schema.generated.yaml#/components/schemas/PrivateGetOrderDetailRequest
PrivateGetTransactionsResponse:
$ref: exchange-schema.generated.yaml#/components/schemas/PrivateGetTransactionsResponse
PrivateGetTradesRequest:
$ref: exchange-schema.generated.yaml#/components/schemas/PrivateGetTradesRequest
PrivateGetTransactionsRequest:
$ref: exchange-schema.generated.yaml#/components/schemas/PrivateGetTransactionsRequest
PrivateGetOrderDetailResponse:
$ref: exchange-schema.generated.yaml#/components/schemas/PrivateGetOrderDetailResponse
PrivateGetTradesResponse:
$ref: exchange-schema.generated.yaml#/components/schemas/PrivateGetTradesResponse
PrivateGetOrderHistoryResponse:
$ref: exchange-schema.generated.yaml#/components/schemas/PrivateGetOrderHistoryResponse
x-additional-descriptions:
- name: Prediction Reference Data
slug: prediction-reference-data
x-guide: prediction-reference-data
tags:
- Reference and Market Data
location: insert
method: guide
description: "## Prediction Reference Data\n\nPrediction market instruments contain rich metadata from `public/get-events` and `public/get-instruments` response. This metadata enables partners to build flexible navigation hierarchies tailored to their application's needs.\n\n### Physical Instrument Hierarchy\n\nThe physical data model consists of two levels:\n\n```\nEvent (underlying game/match/tournament)\n └─ Instrument (tradable contract)\n```\n\n- Each **Event** groups related instruments under a common `event_symbol`. Event has metadata which allows you to extract League and Year information for higher level grouping, e.g. a Series.\n- Given an `event_symbol`, you can drill down for associated Instruments. Each **Instrument** represents a single tradable outcome with its own symbol and metadata.\n\nYou can try [Prediction Instrument Hierarchy Explorer](/prediction-explorer) to visualise the instrument hierarchy.\n\n### Event\n\nAn **Event** represents a real-world occurrence that can have tradable outcomes — such as a sports match, tournament, election, or other predictable event. Events are returned by `public/get-events` and serve as the grouping level for related instruments.\n\n#### Sample Event Response\n\n```json\n{\n \"symbol\": \"FIFA-00001-260629-M\",\n \"series_symbols\": [],\n \"name\": \"Japan @ Brazil\",\n \"description\": \"Japan @ Brazil\",\n \"event_date\": 1782766800000000000,\n \"last_updated_time\": 1782443710514350000,\n \"event_details\": {\n \"metaData\": {\n \"NAME\": \"Japan @ Brazil\",\n \"EVENT_DATE\": \"2026-06-29T17:00:00-04:00\",\n \"SPORTS_GROUPING\": \"SOCCER\"\n },\n \"eventName\": \"Japan @ Brazil\"\n }\n}\n```\n\n#### Key Event Fields\n\n| Field | Description | Example |\n|-------|-------------|---------|\n| `symbol` | Unique event identifier. The prefix indicates the league (e.g., `FIFA`, `MLB`, `UFC`). Use this to query instruments via `public/get-instruments?event_symbol=...` | `\"FIFA-00001-260629-M\"` |\n| `event_details.metaData.SPORTS_GROUPING` | Sport category for grouping events. Specific to sports events. | `\"SOCCER\"`, `\"MLB\"`, `\"ESPORT\"`, `\"MMA\"` |\n| `event_details.metaData.NAME` | Human-readable event name, typically in \"Away @ Home\" format for matches | `\"Japan @ Brazil\"` |\n| `event_details.metaData.EVENT_DATE` | Event start time in ISO 8601 format. Extract the year component for season-based grouping. | `\"2026-06-29T17:00:00-04:00\"` |\n\n### Instrument\n\nAn **Instrument** represents a single tradable option contract tied to a specific outcome of an event. Instruments are returned by `public/get-instruments` and contain rich metadata for building navigation hierarchies and displaying contract details.\n\n#### Sample Instrument Response\n\n```json\n{\n \"id\": -1,\n \"method\": \"public/get-instruments\",\n \"code\": 0,\n \"result\": {\n \"data\": [\n {\n \"symbol\": \"NX.F.OPT.FIFA-00001-260714-M.O.1.67.20260830\",\n \"inst_type\": \"BINARY_OPTION\",\n \"display_name\": \"France vs Spain ; Spain (2-Way) ; AT&T Stadium ; 260714\",\n \"base_ccy\": \"USD\",\n \"quote_ccy\": \"USD\",\n \"tradable\": true,\n \"expiry_timestamp_ms\": 1788127200000,\n \"underlying_symbol\": \"FIFA-00001-260714-M\",\n \"event_details\": {\n \"metaData\": {\n \"NAME\": \"Spain @ France\",\n \"VENUE\": \"AT&T Stadium\",\n \"LEAGUE\": \"FIFA\",\n \"EVENT_DATE\": \"2026-07-14T19:00:00+00:00\",\n \"PARTICIPANT\": \"Spain\",\n \"SPORTS_GROUPING\": \"SOCCER\",\n \"AWAY_PARTICIPANT\": \"Spain\",\n \"HOME_PARTICIPANT\": \"France\",\n \"PREDICT_CATEGORY\": \"Sports\",\n \"PREDICT_EVENT_TYPE\": \"Game\",\n \"PREDICT_MARKET_TYPE\": \"Game Line\",\n \"PREDICT_PERIOD_TYPE\": \"90 Minutes and Stoppage Time\",\n \"PREDICT_OUTCOME_TYPE\": \"Away\",\n \"PREDICT_CONTRACT_TYPE\": \"Moneyline (2-Way)\"\n },\n \"eventName\": \"Spain to win\"\n }\n },\n {\n \"symbol\": \"NX.F.OPT.FIFA-00001-260714-M.O.1.68.20260830\",\n \"inst_type\": \"BINARY_OPTION\",\n \"display_name\": \"France vs Spain ; France (2-Way) ; AT&T Stadium ; 260714\",\n \"base_ccy\": \"USD\",\n \"quote_ccy\": \"USD\",\n \"tradable\": true,\n \"expiry_timestamp_ms\": 1788127200000,\n \"underlying_symbol\": \"FIFA-00001-260714-M\",\n \"event_details\": {\n \"metaData\": {\n \"NAME\": \"Spain @ France\",\n \"VENUE\": \"AT&T Stadium\",\n \"LEAGUE\": \"FIFA\",\n \"EVENT_DATE\": \"2026-07-14T19:00:00+00:00\",\n \"PARTICIPANT\": \"France\",\n \"SPORTS_GROUPING\": \"SOCCER\",\n \"AWAY_PARTICIPANT\": \"Spain\",\n \"HOME_PARTICIPANT\": \"France\",\n \"PREDICT_CATEGORY\": \"Sports\",\n \"PREDICT_EVENT_TYPE\": \"Game\",\n \"PREDICT_MARKET_TYPE\": \"Game Line\",\n \"PREDICT_PERIOD_TYPE\": \"90 Minutes and Stoppage Time\",\n \"PREDICT_OUTCOME_TYPE\": \"Home\",\n \"PREDICT_CONTRACT_TYPE\": \"Moneyline (2-Way)\"\n },\n \"eventName\": \"France to win\"\n }\n }\n ]\n }\n}\n```\n\n#### Key Instrument Fields\n\nUse these metadata fields to build navigation hierarchies:\n\n| Field | Description | Example |\n|-------|-------------|---------|\n| `event_details.metaData.PREDICT_CATEGORY` | Top-level category for all prediction markets | `\"Sports\"`, `\"Politics\"`, `\"Culture\"` |\n| `event_details.metaData.SPORTS_GROUPING` | Sport category (for sports events) | `\"SOCCER\"`, `\"MLB\"`, `\"ESPORT\"`, `\"MMA\"` |\n| `event_details.metaData.LEAGUE` | Specific league within the sport | `\"FIFA\"`, `\"EPL\"`, `\"UCL\"`, `\"MLS\"` |\n| `event_details.metaData.EVENT_DATE` | Event start time (ISO 8601). Extract year for season grouping. | `\"2026-07-14T19:00:00+00:00\"` |\n| `event_details.metaData.NAME` | Human-readable event name in \"Away @ Home\" format | `\"Spain @ France\"` |\n| `event_details.metaData.PREDICT_CONTRACT_TYPE` | Type of contract/market | `\"Moneyline (2-Way)\"`, `\"Spread\"`, `\"Total Goals\"` |\n| `event_details.metaData.PREDICT_PERIOD_TYPE` | Time period the contract covers | `\"90 Minutes and Stoppage Time\"`, `\"Full Game\"`, `\"1st Half\"` |\n\n#### Example Hierarchy\n\nUsing the fields above, you can, for example, build a three-level navigation hierarchy:\n\n| Level | Fields | Example |\n|-------|--------|---------|\n| **Series** | `PREDICT_CATEGORY` → `SPORTS_GROUPING` → `LEAGUE` → `YEAR(EVENT_DATE)` | Sports > SOCCER > FIFA > 2026 |\n| **Event** | `NAME` → `PREDICT_CONTRACT_TYPE` → `PREDICT_PERIOD_TYPE` | Spain @ France > Moneyline (2-Way) > 90 Minutes and Stoppage Time |\n| **Contract** | The instrument record itself | `NX.F.OPT.FIFA-00001-260714-M.O.1.67.20260830` |\n\n### Getting Continuous Updates\n\nBoth `public/get-events` and `public/get-instruments` support pagination and incremental updates using `since` and `cursor` parameters.\n\n#### Initial Load\n\n```\nGET /dcm/v1/public/get-events?since=0\nGET /dcm/v1/public/get-instruments?since=0\n```\n\nUse `since=0` to fetch all available records from the beginning.\n\n#### Pagination\n\nWhen results exceed the page limit, the response includes a `next_cursor` field. Use it to fetch the next page:\n\n```\nGET /dcm/v1/public/get-events?since=0&cursor={next_cursor}\nGET /dcm/v1/public/get-instruments?since=0&cursor={next_cursor}\n```\n\nContinue paginating until no `next_cursor` is returned.\n\n#### Incremental Updates\n\nAfter the initial load, use the `last_updated_time` from the most recent record as your `since` value to fetch only new or updated records:\n\n```\nGET /dcm/v1/public/get-events?since={last_updated_time}\nGET /dcm/v1/public/get-instruments?since={last_updated_time}\n```\n\nThis enables efficient polling for changes without re-fetching the entire dataset.\n\n### Example: Continuously Building a 3-Level Instrument Hierarchy\n\nThis example demonstrates how to build and maintain a **Series > Event > Contract** hierarchy using REST polling with `since` and `cursor` parameters.\n\n**Goal:**\n- Build a 3-level navigation hierarchy: Series → Event → Contract\n- Keep data up-to-date via continuous REST polling\n\n**Procedure:**\n\n1. **Initialize tracking variables:**\n ```\n events_last_modified = 0\n instruments_last_modified = 0\n ```\n\n2. **Fetch events with changes:**\n ```\n GET /dcm/v1/public/get-events?since={events_last_modified}\n ```\n Paginate using `cursor` until all pages are retrieved.\n\n3. **For each event, fetch associated instruments:**\n ```\n GET /dcm/v1/public/get-instruments?event_symbol={symbol}&since={instruments_last_modified}\n ```\n This can be done in parallel for multiple events. Paginate each using `cursor`.\n\n4. **Build the hierarchy from instrument metadata:**\n - **Series level:** Group by `PREDICT_CATEGORY` → `SPORTS_GROUPING` → `LEAGUE` → `YEAR(EVENT_DATE)`\n - **Event level:** Group by `NAME` → `PREDICT_CONTRACT_TYPE` → `PREDICT_PERIOD_TYPE`\n - **Contract level:** Individual instrument records\n\n5. **Update tracking variables:**\n Record the maximum `last_updated_time` from events and instruments for the next polling cycle.\n\n6. **Sleep and repeat:**\n Wait for your desired polling interval, then return to step 2 with the updated `since` values.\n\nThis approach ensures you only fetch changed records on subsequent cycles, minimizing API calls and data transfer.\n\n### Full Meta Data Reference\n\nFor the complete metadata specification, please refer to [FIX Document Pack > Prediction Market Appendix](/docs/api/fix/fix-introduction) for details.\n"
- name: Instrument Status Updates
slug: instrument-status-updates
x-guide: instrument-status-updates
tags:
# --- truncated at 32 KB (38 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/crypto-com/refs/heads/main/openapi/crypto-com-transaction-history-api-openapi.yml