For the complete documentation index, see llms.txt. This page is also available as Markdown.

Cronos IBC Bridge Activity API

A guide for querying IBC transfers between Cronos POS (crypto-org-chain-mainnet-1), Cronos EVM (cronosmainnet_25-1), and other supported Cosmos chains via the public Cronos bridge-indexer API.

Base URL & Authentication

What this API covers

  • IBC transfers between supported chains, indexed end-to-end: source chain transaction, destination chain transaction, amount, denom, status.

  • Includes the x/cronos auto-conversion from IBC voucher to native basecro on the EVM side. The API reports the logical transfer as a single activity even though on-chain, it involves two-stage transfers.

Does NOT cover:

  • Cosmos-side MsgSend transfers within a single chain

  • Smart-contract internal transfers on the EVM side

  • Fee payments, staking rewards, module-account sweeps

For those flows you need to parse block_results events directly (see Cosmos SDK documentation on transfer events coin_received and coin_spent ).

Supported networks and address formats

Chain
Network Parameter
Required Address Format
Example Prefix

Cronos EVM

cronosevm

Ethereum hex (0x...)

0x

Cronos EVM (Cosmos)

cronos

Bech32 with HRP crc

crc1...

Cronos POS

cryptoorgchain

Bech32 with HRP cro

cro1...

Cosmos Hub

cosmoshub

Bech32 with HRP cosmos

cosmos1...

Other IBC-connected chains

(others)

Chain-specific bech32 HRP

varies

IMPORTANT:

Passing the wrong address format for a given network returns {"result": [], "pagination": {...}} with no error, just an empty result set.

This is the most common reason you will think an address has no IBC activity when it actually does.

Converting between address formats

cronosevm and cronos refer to the same underlying account, just expressed differently.

To convert:

Or programmatically: take the 20-byte raw address and bech32-encode with HRP crc (testnet: tcrc); Cronos POS addresses use HRP cro (testnet: tcro).

Always lowercase addresses before passing them to the API.

Endpoints

Global activities

  • GET /bridges/activities

  • Full Path: https://cronos.org/indexing/api/v1/bridges/activities

Returns IBC activities across all addresses. Filter to one address using the cronosAddress (crc1... address) query parameter.

Per-account activities

  • GET /bridges/{network}/account/{account}/activities

  • Full Path: https://cronos.org/indexing/api/v1/bridges/{network}/account/{account}/activities

Scope queries to a specific account on a specific chain.

  • {network} must be one of: cronosevm, cronos, cryptoorgchain, cosmoshub, or other supported chain slug.

  • {account} must be in the address format matching the network

See Supported networks and address formats for parameter details.

Examples:

Transaction lookup

  • GET /bridges/txs/{hash}

  • Full URL Path: https://cronos.org/indexing/api/v1/bridges/txs/{hash}

Returns a single activity by source or destination transaction hash. Use when you know the transaction hash but need the paired cross-chain context.

Query parameters

Parameter
Values/Format
Notes

order

sourceBlockTime.desc or sourceBlockHeight.desc

Default is ASC. Only .desc accepted; .asc returns error. Omit for ascending.

status

pending, cancelled, counterparty_confirmed, failed_on_chain, counterparty_rejected

Lowercase

id.gt

Integer

Cursor-based pagination: records with id > value

createdAt.lt

RFC3339 timestamp

Created before

createdAt.gt

RFC3339 timestamp

Created after

createdAt.ago

Go duration e.g. 24h, 7d

Created before now minus duration

updatedAt.gt

RFC3339 timestamp

Updated after

sourceBlockTime.lt

RFC3339 timestamp

Source block range filter: before

sourceBlockTime.gt

RFC3339 timestamp

Source block range filter: after

sourceBlockTime.ago

Go duration e.g. 24h, 7d

Source block range filter: before now minus duration

destinationBlockTime.gt

RFC3339 timestamp

Destination block after

pagination.limit

Integer

Default 20, max 100

pagination.page

Integer

1-indexed

Response schema

Identifying direction

Direction from the perspective of Cronos EVM is determined by sourceChain and destinationChain:

Direction
Condition

Inbound to Cronos EVM

(Cronos POS -> Cronos EVM)

sourceChain == "Crypto.org-Chain" AND destinationChain == "Cronos"

Outbound from Cronos EVM

(Cronos EVM -> Cronos POS)

sourceChain == "Cronos" AND destinationChain == "Crypto.org-Chain"

When filtering by a Cronos-side address, it appears in:

  • destinationAddress for inbound records

  • sourceAddress for outbound records

Amount interpretation

  • amount: raw on-chain amount in the smallest unit of the source chain

  • denom: source-chain denom (e.g. basecro)

  • displayAmount: human-readable amount divided by the correct decimal factor

  • displayDenom: user-facing ticker (e.g. CRO)

Note the decimal mismatch: Cronos POS uses 8-decimal basecro (1 CRO = 10⁸ basecro), while Cronos EVM uses 18-decimal basecro (1 CRO = 10¹⁸ basecro). The API reports the source-side raw amount in amount. For a Cronos POS→Cronos EVM transfer of 10 CRO, amount will be 1000000000 (10 × 10⁸), while the balance credited on CEVM is 10000000000000000000 (10 × 10¹⁸) after x/cronos auto-conversion.

Status values

Status
Meaning

Pending

Source tx submitted, destination not yet delivered

CounterpartyConfirmed

Packet successfully delivered on destination (normal success state

CounterpartyRejected

Destination rejected the packet (rare; usually denom/channel mismatch)

FailedOnChain

Source transaction failed

Cancelled

User/relayer cancelled before delivery

For balance reconciliation, only CounterpartyConfirmed inbound records should be credited.

Worked example

Cronos EVM Address: 0x582f7c906f15f6fe913f890fd4d11e07ae3b4468

Option A - query by hex address via cronosevm:

Option B - convert to bech32 first, then query via cronos:

Both return the same 4 records, all inbound from Cronos POS:

Cronos EVM destinationBlockHeight
Cronos POS sourceBlockHeight
Time (UTC)
Amount

840

3,121,648

2021-11-08 02:17:16

10 CRO

869

3,121,677

2021-11-08 02:19:56

20 CRO

1,524

3,122,266

2021-11-08 03:20:05

1,000 CRO

4,103

3,124,582

2021-11-08 07:17:02

100 CRO

Direct cross-check: cronosd q bank balances crc1tqhheyr0zhm0ayfl3y8af5g7q7hrk3rgs7lwya --height 840 returns 10000000000000000000 basecro (= 10 CRO), matching the first activity's displayAmount.

Common query recipes

All inbound IBC transfers to a Cronos EVM address in a date range:

Last 24h of bridge activity, all addresses:

Pending transfers for a Cronos POS address:

Paginate all history for an address (Python):

Gotchas and limitations

  1. Address format must match the network slug: cronosevm expects 0x hex; cronos expects crc1 bech32; cryptoorgchain expects cro1 bech32; cosmoshub expects cosmos1 bech32. Wrong format returns empty results with no error.

  2. cronosevm and cronos are the same account: two representations of the same Cronos EVM address. Either can be used; pick whichever you already have on hand.

  3. Order param: only .desc is accepted. Omit the param entirely for ascending order.

  4. Decimal mismatch: amount is in source-chain units. For Cronos POS->Cronos EVM the balance credit on CEVM is 10^10 x amount (Cronos POS uses 8-decimal basecro; CEVM uses 18-decimal). Always use displayAmount for user-facing presentation.

  5. No EVM-side tx hash: destinationTransactionId is the CometBFT tx hash on Cronos EVM (the IBC MsgRecvPacket), not an EVM transaction hash. There is no EVM tx for IBC receives - they are Cosmos-side operations. As a result, Cronos EVM explorers do not surface these IBC transfers; query them via this API or a Cosmos-side explorer instead.

  6. Auto-conversion is implicit: the record shows the logical transfer but does not expose the two-stage x/cronos conversion. Balance reconciliation should credit the destination address in native basecro (18-decimal on Cronos EVM) even though on-chain there is a transient IBC voucher.

  7. Rate limits: not documented. Treat as reasonable use - paginate at limit=100 and avoid parallel bulk pulls.

  8. Bridges only: native Cosmos MsgSend, Gravity Bridge, and smart-contract transfers are not covered by this API.

Last updated

Was this helpful?