Crosschain Tracking
Historic Queries
Query Parameters
| Parameter | Description | Required |
|---|---|---|
| op | The query operation. See Query Operations | yes |
| criteria | The critaria of the query operation. | conditional |
Operations
Operation: journeys.list
Example arguments:
{
"pagination": {
"limit": 10
},
"op":"journeys.list"
}
Operation: journeys.by_id
Example arguments:
{
"op":"journeys.by_id",
"criteria": {
"id": "0x5c0184d34100766cb4f556f29b856ae53ac34e868d4997598e1865719bb7a145"
}
}
Criteria
When using the journeys.list operation, you can pass the following filters in the criteria object:
| Field | Type | Description |
|---|---|---|
address |
string | Filter by a source or destination address. Supports EVM (20-byte), Substrate SS58 or Solana addresses. |
txHash |
string | Filter by transaction hash. |
usdAmountGte |
number | Include only messages with total USD value greater than or equal to this amount. |
usdAmountLte |
number | Include only messages with total USD value less than or equal to this amount. |
sentAtGte |
number | Include only messages sent after this timestamp (milliseconds). |
sentAtLte |
number | Include only messages sent before this timestamp (milliseconds). |
assets |
array | Filter by asset identifiers (e.g., urn:ocn:polkadot:0|native). |
origins |
array | Filter by origin chains (URN format, e.g., urn:ocn:polkadot:2004). |
destinations |
array | Filter by destination chains (URN format). |
networks |
array | Filter by network identifiers (URN format). |
protocols |
array | Filter by protocols. Supported values: xcm, wh, wh_portal, wh_relayer, snowbridge, hyperbridge. |
status |
array | Filter by message status. Supported values: sent, received, timeout, failed. |
actions |
array | Filter by specific actions within the message. Supported values: transfer, teleport, swap, transact, queryResponse. |
Examples
Client Library
For usage example with the client library, please browse our example on GitHub
Curl Requests
curl https://api.ocelloids.net/query/crosschain \
--request POST \
--header 'Content-Type: application/json' \
--data '{
"pagination": {
"cursor": "",
"limit": 5
},
"args": {
"op": "journeys.list"
}
}'Response
{
"pageInfo": {
"hasNextPage": true,
"endCursor": "MTc2NDY5NDkxNDAwMHw0MzcyNzE="
},
"items": [
{
"id": 437275,
"correlationId": "0x3aed87a8ef867c378dd4b2a7d3bd135eb60847f2efc0309726e5aa83bbb1ed1d",
"tripId": null,
"status": "received",
"type": "transfer",
"originProtocol": "xcm",
"destinationProtocol": "xcm",
"origin": "urn:ocn:polkadot:2004",
"destination": "urn:ocn:polkadot:1000",
"from": "0xda3985513642d591ae95ef6dec4ff6d725373004",
"to": "0x66dd21797b3ab4b27ff723196324a33f7a80683bda78e0fcebf8e7cebb09a358",
"fromFormatted": null,
"toFormatted": "13KsaHFcQKSTd4m73Ub9yVwM1JGCZvipMyTZonHEXEceFYwS",
"sentAt": 1764694980000,
"recvAt": 1764695016000,
"createdAt": 1764695025095,
"stops": [
{
"type": "hrmp",
"from": {
"chainId": "urn:ocn:polkadot:2004",
"blockHash": "0x143af5279140e9179053c152ed6ffddb75b4633a810745d27f438fcafd83a765",
"blockNumber": "13559714",
"timestamp": 1764694980000,
"status": "Success",
"extrinsic": {
"blockPosition": 4,
"hash": "0xa24d9e50f337345569fd02766cf061c6fff26d445489333b7d12a5db9338880b",
"module": "Ethereum",
"method": "transact",
"evmTxHash": "0x3ca702a151f124a006ba292ae737fa74fd130a9580aa7096669067da9122cd10"
},
"event": {
"blockPosition": 7,
"module": "XcmpQueue",
"name": "XcmpMessageSent"
}
},
"to": {
"chainId": "urn:ocn:polkadot:1000",
"blockHash": "0xb59ddcaf3bfca10bb7f4f106be879bb00d060f999e83e3c4713cf542f6a370b3",
"blockNumber": "10638778",
"timestamp": 1764695016000,
"status": "Success",
"extrinsic": {},
"event": {
"blockPosition": 12,
"module": "MessageQueue",
"name": "Processed"
}
},
"relay": {
"chainId": "urn:ocn:polkadot:0",
"blockHash": "0x175d2da9faf637cc49ad256974890aba052c2fbc324bdc25f10eb9bc1b1a9eb1",
"blockNumber": "28896488",
"timestamp": 1764694992000,
"status": "Success",
"extrinsic": {
"blockPosition": 1
},
"event": {}
},
"messageHash": "0xb8f8d91c4a977c46a849333446ba832cb20823251a6b7acea242caf15dc49493",
"messageId": "0x1367fedd371bde990af00c55cfb35c3733a1318136d3520bf5cf884825570411",
"instructions": {
"type": "V5",
"value": [
// XCM instructions
]
}
}
],
"instructions": {
"type": "V5",
"value": [
// XCM instructions
]
},
"transactCalls": [],
"originTxPrimary": "0xa24d9e50f337345569fd02766cf061c6fff26d445489333b7d12a5db9338880b",
"originTxSecondary": "0x3ca702a151f124a006ba292ae737fa74fd130a9580aa7096669067da9122cd10",
"inConnectionFk": null,
"inConnectionData": null,
"outConnectionFk": null,
"outConnectionData": null,
"totalUsd": 16308.885600000003,
"assets": [
{
"asset": "urn:ocn:polkadot:0|native",
"symbol": "DOT",
"amount": "71530200000000",
"decimals": 10,
"usd": 16308.8856,
"role": "transfer",
"sequence": null
}
]
},
// more journeys...
]
}
Server-Sent Events (SSE)
- Endpoint
/sse/crosschain/default
Query String Parameters
All filters supported in journeys.list can be passed as URL query parameters to narrow down the stream. See
Criteria
.
Event types
new_journey
Triggered when a new cross-chain message is observed. The payload is the full journey object.
update_journey
Triggered when an existing message is updated (e.g., status changes, additional confirmations, or new stops). The payload includes the full updated message object.
Examples
Client Library
For usage example with the client library, please browse our example on GitHub
Browser Usage
const params = new URLSearchParams({ address: '13b6hRRYPHTxFzs9prvL2YGHQepvd4YhdDb9Tc7khySp3hMN' }).toString()
const source = new EventSource(`${httpUrl}/sse/crosschain/default?${params}`)
source.onopen = () => console.log("Connection open");
source.addEventListener('update_journey', (e) =>
console.log('update', JSON.parse(e.data))
)
source.addEventListener('new_journey', (e) =>
console.log('new', JSON.parse(e.data))
)
source.onerror = (error) => console.error('SSE error:', error)