Crosschain Tracking

Track historic and real-time crosschain activity.
Agent Icon
AGENT ID
crosschain
PROVIDES
queries, streams
The Crosschain Activity API provides historic and real-time data on cross-chain messages across XCM and major bridges. It supports filtering by key parameters like addresses, chains, and assets. Real-time updates are available via Server-Sent Events (SSE) for live monitoring.

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 external link

Curl Requests

List All Journeys Request
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 external link

Browser Usage

Stream journeys for an address
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)