Bridge
Skipo's records of each bridge transfer with the bridge counterparty: the bridge deposit addresses where the counterparty pays Skipo, the sends to the counterparty, and the receipts from it. Every route is a read. An account that is not the bridge counterparty reads an empty section.
GET /v2/bridge/deposit-addresses
List the bridge deposit addresses
The book of Skipo's bridge deposit addresses: where the bridge counterparty pays Skipo on each network, for bridge payments and refunds. A bare array with one row per assetSymbol and networkId pair the bridge offers, like GET /v2/deposit-addresses, plus minimumDeposit.
tag, tagType and tagLabel are null on BSC, ETH and TRON. An account that is not the bridge counterparty reads [].
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
assetSymbol | query | string | no | Restrict to one asset, by its settled code. An asset the bridge does not offer answers [], not an error. |
Responses
| Code | Description | Body |
|---|---|---|
200 | Success. | object |
401 | application/problem+json (RFC 9457) — branch on code, not on the status: unauthorized (not retryable), key_expired (not retryable), key_revoked (not retryable). | — |
403 | application/problem+json (RFC 9457) — branch on code, not on the status: insufficient_scope (not retryable), ip_not_allowed (not retryable), api_access_disabled (not retryable). | — |
429 | application/problem+json (RFC 9457) — branch on code, not on the status: rate_limited (retryable). | — |
500 | application/problem+json (RFC 9457) — branch on code, not on the status: internal_error (retryable). | — |
502 | application/problem+json (RFC 9457) — branch on code, not on the status: downstream_unavailable (retryable). | — |
503 | application/problem+json (RFC 9457) — branch on code, not on the status: maintenance (retryable). | — |
GET /v2/bridge/deposits
List the bridge receipts
Every receipt from the bridge counterparty at a Skipo bridge deposit address, its payments and its refunds, newest first: createdAt descending, then id descending. createdAt is when Skipo first detected the receipt. An account that is not the bridge counterparty reads an empty page.
startDate is inclusive and endDate is EXCLUSIVE, both on createdAt. transactionHash matches the on-chain hash exactly, with hex digits in either case.
Bridge values. subType is always EXTERNAL_CRYPTO, fee is always "0" and amount equals total: the tokens received on chain, truncated to the asset's amountIncrement. multiplier is "1" and base repeats the top level in both assetFormats. bankReference, senderName, senderNationalId, senderBankId, senderAccount, bankDescription and valueDate are null.
depositData keys. Every key is present on every row. The chain block is networkId, networkName, networkNativeAsset, evmChainId and assetType, as on GET /v2/deposits. The bridge keys are transactionHash, sourceAddress (the on-chain sender), depositAddress (the bridge deposit address that received the tokens), depositTag (null), statusReason (null unless status is FAILED, then DROPPED), updatedAt (when the row last changed) and completedAt (null unless status is COMPLETED).
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
page | query | integer | no | Default: 1. |
limit | query | integer | no | Default: 25. |
assetSymbol | query | string | no | Exact settled asset code. |
status | query | string | no | PENDING, IN_PROGRESS, COMPLETED or FAILED, matched as a string. An unknown value answers an empty page. |
subType | query | INTERNAL | EXTERNAL_CRYPTO | EXTERNAL_FIAT_BANK | EXTERNAL_FIAT_REDPAY_CHARGEBACK | no | Every bridge receipt is EXTERNAL_CRYPTO, so any other sub-type answers an empty page. |
assetFormat | query | base | rebased | no | Accepted as on GET /v2/deposits. A bridge receipt is a settled token amount, so base and rebased answer the same figures, with multiplier "1". |
startDate | query | string | no | Inclusive ISO-8601 lower bound on createdAt. |
endDate | query | string | no | EXCLUSIVE ISO-8601 upper bound on createdAt. |
transactionHash | query | string | no | Exact on-chain hash of the receipt. Hex digits match in either case. |
Responses
| Code | Description | Body |
|---|---|---|
200 | Success. | data: DepositResource[] · pagination: PaginationMeta |
401 | application/problem+json (RFC 9457) — branch on code, not on the status: unauthorized (not retryable), key_expired (not retryable), key_revoked (not retryable). | — |
403 | application/problem+json (RFC 9457) — branch on code, not on the status: insufficient_scope (not retryable), ip_not_allowed (not retryable), api_access_disabled (not retryable). | — |
429 | application/problem+json (RFC 9457) — branch on code, not on the status: rate_limited (retryable). | — |
500 | application/problem+json (RFC 9457) — branch on code, not on the status: internal_error (retryable). | — |
502 | application/problem+json (RFC 9457) — branch on code, not on the status: downstream_unavailable (retryable). | — |
503 | application/problem+json (RFC 9457) — branch on code, not on the status: maintenance (retryable). | — |
GET /v2/bridge/deposits/{id}
Get a bridge receipt by id
One bridge receipt, with the same content as its row on GET /v2/bridge/deposits. Takes the same assetFormat. An id that is not a bridge receipt of this account answers 404 not_found.
depositData keys. Every key is present on every row. The chain block is networkId, networkName, networkNativeAsset, evmChainId and assetType, as on GET /v2/deposits. The bridge keys are transactionHash, sourceAddress (the on-chain sender), depositAddress (the bridge deposit address that received the tokens), depositTag (null), statusReason (null unless status is FAILED, then DROPPED), updatedAt (when the row last changed) and completedAt (null unless status is COMPLETED).
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | yes | |
assetFormat | query | base | rebased | no | Accepted as on GET /v2/deposits. A bridge receipt is a settled token amount, so base and rebased answer the same figures, with multiplier "1". |
Responses
| Code | Description | Body |
|---|---|---|
200 | Success. | DepositResource |
401 | application/problem+json (RFC 9457) — branch on code, not on the status: unauthorized (not retryable), key_expired (not retryable), key_revoked (not retryable). | — |
403 | application/problem+json (RFC 9457) — branch on code, not on the status: insufficient_scope (not retryable), ip_not_allowed (not retryable), api_access_disabled (not retryable). | — |
404 | application/problem+json (RFC 9457) — branch on code, not on the status: not_found (not retryable). | — |
429 | application/problem+json (RFC 9457) — branch on code, not on the status: rate_limited (retryable). | — |
500 | application/problem+json (RFC 9457) — branch on code, not on the status: internal_error (retryable). | — |
502 | application/problem+json (RFC 9457) — branch on code, not on the status: downstream_unavailable (retryable). | — |
503 | application/problem+json (RFC 9457) — branch on code, not on the status: maintenance (retryable). | — |
GET /v2/bridge/withdrawals
List the bridge sends
Every bridge send from Skipo to the bridge counterparty, newest first: createdAt descending, then id descending. A send is listed once it carries its transactionHash. An account that is not the bridge counterparty reads an empty page.
startDate is inclusive and endDate is EXCLUSIVE, both on createdAt. transactionHash matches the on-chain hash exactly, with hex digits in either case. clientReferenceId matches withdrawalData.clientReferenceId exactly.
Bridge values. subType is always EXTERNAL_CRYPTO, fee is always "0" and amount equals total: the exact tokens sent. multiplier is "1" and base repeats the top level in both assetFormats. bankReference is null.
withdrawalData keys. Every key is present on every row. The chain block is networkId, networkName, networkNativeAsset, evmChainId and assetType, as on GET /v2/withdrawals. The bridge keys are transactionHash, destinationAddress (the counterparty's address the tokens went to), destinationTag (null), sourceAddress (the Skipo custody address that sent them), clientReferenceId (the reference Skipo gave the counterparty for this send), networkFee and networkFeeAssetSymbol (the gas Skipo paid for a COMPLETED send, in the network's native coin, informational only, and null on any other row), statusReason (null unless status is FAILED, then REVERTED or DROPPED), updatedAt (when the row last changed) and completedAt (null unless status is COMPLETED).
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
page | query | integer | no | Default: 1. |
limit | query | integer | no | Default: 25. |
assetSymbol | query | string | no | Exact settled asset code. |
status | query | string | no | PENDING, IN_PROGRESS, COMPLETED or FAILED, matched as a string. An unknown value answers an empty page. |
subType | query | INTERNAL | EXTERNAL_CRYPTO | EXTERNAL_FIAT_BANK | EXTERNAL_FIAT_REDPAY | NETWORK_FEE | TRANSFER_FEE | no | Every bridge send is EXTERNAL_CRYPTO, so any other sub-type answers an empty page. |
assetFormat | query | base | rebased | no | Accepted as on GET /v2/withdrawals. A bridge send is a settled token amount, so base and rebased answer the same figures, with multiplier "1". |
startDate | query | string | no | Inclusive ISO-8601 lower bound on createdAt. |
endDate | query | string | no | EXCLUSIVE ISO-8601 upper bound on createdAt. |
transactionHash | query | string | no | Exact on-chain hash of the send. Hex digits match in either case. |
clientReferenceId | query | string | no | Exact match on withdrawalData.clientReferenceId. |
Responses
| Code | Description | Body |
|---|---|---|
200 | Success. | data: WithdrawalResource[] · pagination: PaginationMeta |
401 | application/problem+json (RFC 9457) — branch on code, not on the status: unauthorized (not retryable), key_expired (not retryable), key_revoked (not retryable). | — |
403 | application/problem+json (RFC 9457) — branch on code, not on the status: insufficient_scope (not retryable), ip_not_allowed (not retryable), api_access_disabled (not retryable). | — |
429 | application/problem+json (RFC 9457) — branch on code, not on the status: rate_limited (retryable). | — |
500 | application/problem+json (RFC 9457) — branch on code, not on the status: internal_error (retryable). | — |
502 | application/problem+json (RFC 9457) — branch on code, not on the status: downstream_unavailable (retryable). | — |
503 | application/problem+json (RFC 9457) — branch on code, not on the status: maintenance (retryable). | — |
GET /v2/bridge/withdrawals/{id}
Get a bridge send by id
One bridge send, with the same content as its row on GET /v2/bridge/withdrawals. Takes the same assetFormat. An id that is not a bridge send of this account answers 404 not_found.
withdrawalData keys. Every key is present on every row. The chain block is networkId, networkName, networkNativeAsset, evmChainId and assetType, as on GET /v2/withdrawals. The bridge keys are transactionHash, destinationAddress (the counterparty's address the tokens went to), destinationTag (null), sourceAddress (the Skipo custody address that sent them), clientReferenceId (the reference Skipo gave the counterparty for this send), networkFee and networkFeeAssetSymbol (the gas Skipo paid for a COMPLETED send, in the network's native coin, informational only, and null on any other row), statusReason (null unless status is FAILED, then REVERTED or DROPPED), updatedAt (when the row last changed) and completedAt (null unless status is COMPLETED).
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | yes | |
assetFormat | query | base | rebased | no | Accepted as on GET /v2/withdrawals. A bridge send is a settled token amount, so base and rebased answer the same figures, with multiplier "1". |
Responses
| Code | Description | Body |
|---|---|---|
200 | Success. | WithdrawalResource |
401 | application/problem+json (RFC 9457) — branch on code, not on the status: unauthorized (not retryable), key_expired (not retryable), key_revoked (not retryable). | — |
403 | application/problem+json (RFC 9457) — branch on code, not on the status: insufficient_scope (not retryable), ip_not_allowed (not retryable), api_access_disabled (not retryable). | — |
404 | application/problem+json (RFC 9457) — branch on code, not on the status: not_found (not retryable). | — |
429 | application/problem+json (RFC 9457) — branch on code, not on the status: rate_limited (retryable). | — |
500 | application/problem+json (RFC 9457) — branch on code, not on the status: internal_error (retryable). | — |
502 | application/problem+json (RFC 9457) — branch on code, not on the status: downstream_unavailable (retryable). | — |
503 | application/problem+json (RFC 9457) — branch on code, not on the status: maintenance (retryable). | — |
Schemas
BridgeDepositAddressResource
| Field | Type | Description |
|---|---|---|
assetSymbol | string | Asset this address credits, as the SETTLED asset code — the same value every other v2 endpoint takes as assetSymbol. e.g. USDT. |
networkId | string | The chain this address is on. The SAME key as GET /v2/assets networks[].networkId and GET /v2/contacts crypto.networkId, so an address, an asset and a destination line up without parsing prose. ⚠️ An address is only valid on THIS chain. Several chains can share an address format — every EVM chain does — so the same string may appear under more than one networkId. Sending over a chain that is not listed here loses the funds: Skipo credits only the chains it sweeps. e.g. TRON. |
networkName | string | Human-readable chain name. Display only. e.g. Tron (TRC20). |
address | string | The address to send to. Stable: Skipo does not rotate or retire deposit addresses, so it is safe to cache and to re-display. Re-reading this endpoint never mints a new one. e.g. TDunhSa7jkTNuKrusUTU1MUHtqXoBPKETV. |
tag | string | null | Destination tag / memo, on the chains that route by it. null when the chain has none — never an empty string, so a missing tag and a blank tag cannot be confused. ⚠️ When tagRequired is true this value is MANDATORY. On those chains Skipo shares one address across accounts and the tag is the only thing that identifies yours: a deposit sent without it, or with the wrong one, does not credit automatically. e.g. null. |
tagRequired | boolean | Whether the chain routes by tag. Read THIS rather than testing tag for null — it is the chain's property, not this row's. e.g. false. |
tagType | MEMO | DESTINATION_TAG | null | Which of the two names this chain uses for the tag — MEMO (Stellar) or DESTINATION_TAG (XRP). null when tagRequired is false. A machine key, not a label: render it in your own copy and your own language. e.g. null. |
tagLabel | string | null | The chain's own word for the tag, as Skipo shows it. Display only; branch on tagType. e.g. Memo. |
minimumDeposit | string | The minimum deposit at this address, in assetSymbol, as a decimal string. The counterparty keeps every payment and every refund to this address at or above it. e.g. 0.1. |
DepositBaseRepresentation
| Field | Type | Description |
|---|---|---|
asset | string | null | Asset code of the settled token. Populated on every read, including a rebased one — the rebased ticker maps back to the settled code through the maintainers snapshot. null only if that lookup misses, which means the asset is unknown to the snapshot rather than that the code was unobtainable. It is never the underlying ticker: a plausible-looking wrong code is worse than an obvious gap when reconciling against a webhook. e.g. USDT. |
amount | string | Amount deposited, in settled units. Positive magnitude. e.g. 2000. |
fee | string | Always zero — Skipo charges no deposit fees. e.g. 0. |
total | string | Total credited, in settled units. Positive magnitude. e.g. 2000. |
DepositResource
| Field | Type | Description |
|---|---|---|
id | string | Deposit id. Use it to re-fetch this deposit and to match its ledger entry (source.id). e.g. 503c85d1-b415-4ad4-9c0c-3881e105101e. |
type | string | e.g. DEPOSIT. |
subType | INTERNAL | EXTERNAL_CRYPTO | EXTERNAL_FIAT_BANK | EXTERNAL_FIAT_REDPAY_CHARGEBACK | |
assetSymbol | string | Asset code of the deposit. e.g. USDT. |
amount | string | Amount deposited. Positive magnitude, in assetSymbol. e.g. 2000. |
fee | string | Fee charged by Skipo for this deposit. Always zero — Skipo does not charge deposit fees. Present for a consistent shape across resources. e.g. 0. |
total | string | Total credited to the balance. Positive magnitude, in assetSymbol. e.g. 2000. |
status | string | e.g. COMPLETED. |
createdAt | string | e.g. 2026-07-15T18:08:14.637Z. |
transactionHash | string | null | On-chain transaction hash, when this deposit had one. null otherwise — an off-chain deposit (bank transfer, internal transfer, earn distribution) never has one, and an on-chain deposit that has not been broadcast yet does not have one YET. Top-level so that reading it never requires branching on subType. It is the same value as depositData.transactionHash, which remains for the sub-types that already published it; this field additionally covers on-chain sub-types that carry a hash but publish no depositData block. NOT a bank reference: on a fiat deposit this is always null, even though the underlying record may hold the bank's own transaction id. Do not assume a 0x prefix — BTC, Solana and Tron hashes have none. e.g. 0x6392dc8a37abbfdc125c599aa57704100f7423e460d001ccabd09bc939c89e4d. |
bankReference | string | null | The bank's or payment provider's own reference for this deposit, when one was recorded. null on every non-fiat deposit, and null on a fiat deposit that carries no reference (the large majority — 225 of 112,281 bank deposits on prod have one). The counterpart of transactionHash: a deposit is settled either on a chain or through a bank, so at most one of the two fields is ever populated. Free-form and short (1-19 characters, not always numeric) — it is whatever the bank supplied, so treat it as an opaque string for reconciliation, never parse it. e.g. null. |
senderName | string | null | Name of the bank account the transfer came FROM, as the sending bank reported it. null on every non-fiat deposit and on a fiat deposit created by an operator. Unnormalised — casing and accents are the bank’s, not ours. e.g. JANE DOE. |
senderNationalId | string | null | National id of the sending account holder (in Chile, the RUT), and the key Skipo matches an incoming transfer on. ⚠️ Published ONLY when it equals your own — the nationalId on GET /v2/account. It is null whenever the money came from anyone else, so this field confirms a deposit was self-funded and never discloses a third party. On the automated rail that is the normal case by construction: Skipo credits whoever owns the sending id, so the sender IS the holder. Compared ignoring formatting, so 12.345.678-9 and 123456789 match. e.g. 12.345.678-9. |
senderBankId | string | null | Identifier of the sending bank, as the rail reported it. Opaque — do not parse. e.g. BANCO_DE_CHILE. |
senderAccount | string | null | Account number the transfer came from, as the sending bank reported it. e.g. 00-123-45678-90. |
bankDescription | string | null | Free text the sender put on the transfer, when the rail carried any. Empty on most deposits (76.5% on prod), so treat its absence as normal rather than as an error. Distinct from bankReference, which is the operator’s own number for the movement. e.g. transferencia. |
valueDate | string | null | When the money actually MOVED, as the rail reported it — as opposed to createdAt, which is when Skipo credited it. null on every non-fiat deposit. Use this to reconcile a month-end: on prod the two fall in different months on 1 deposit in 27 months, and the median gap is 91 seconds. Join to the ledger on source.id. NOT the clearing deadline the rail also publishes — that one falls AFTER the credit and would push deposits into the following month. e.g. 2026-08-20T14:03:11Z. |
assetFormat | base | rebased | Which representation the top-level money fields are expressed in. Echoes what the request RESOLVED to, so a response that took the default is as self-describing as one that asked. e.g. rebased. |
multiplier | string | Rebase factor as it stood when the deposit was created — not today. "1" when no scaling applies. base.amount x multiplier = amount when assetFormat is rebased. "1" is NOT a claim that the asset does not rebase; read GET /v2/assets for its class. e.g. 1. |
base | DepositBaseRepresentation | |
depositData | object | Sub-type-specific details. The keys depend on transactionSubType, so branch on that rather than probing for fields. For EXTERNAL_CRYPTO this carries the CANONICAL chain identity, the same five fields GET /v2/assets[].networks and GET /v2/contacts publish — networkId (BSC, ETH, TRON), networkName, networkNativeAsset, evmChainId and assetType (the token standard, BEP20/ERC20/TRC20). Join on networkId: it is the one field that means the same thing on every v2 resource, so a movement, an asset and a saved destination line up without parsing prose. ⚠️ networkSymbol has been REMOVED from this block. It was the raw stored value and it disagreed with itself across the estate — 164,192 movements say BEP20 for the same chain 1,614 call BSC, and it also carried values that are not networks (INTERNAL, FIAT_NETWORK) and prose (Dogecoin, XRP Ledger). networkId replaces it and is a stable key. networkName above is the human-readable form. The canonical fields are always present on an EXTERNAL_CRYPTO movement and are null when the chain cannot be resolved, so the shape never changes underneath you. |
PaginationMeta
| Field | Type | Description |
|---|---|---|
page | number | e.g. 1. |
limit | number | e.g. 25. |
totalItems | number | e.g. 100. |
totalPages | number | e.g. 4. |
Problem
| Field | Type | Description |
|---|---|---|
type | string | Stable problem-type URI. Resolves to docs for this error. e.g. https://docs.skipo.com/errors/rate_limited. |
title | string | Short, human-readable summary (stable, English). e.g. Rate limit exceeded. |
status | number | HTTP status code. e.g. 429. |
code | string | Stable machine-readable error code (equals the last path segment of type). e.g. rate_limited. |
retryable | boolean | Whether retrying the identical request may succeed. e.g. true. |
detail (optional) | string | Human-readable, possibly localized detail. |
instance (optional) | string | The request path that produced the error. |
traceId (optional) | string | Trace id — joins BigQuery api_request and Cloud Logging. |
WithdrawalBaseRepresentation
| Field | Type | Description |
|---|---|---|
asset | string | null | Asset code of the settled token. Populated on every read, including a rebased one — the rebased ticker maps back to the settled code through the maintainers snapshot. null only if that lookup misses, which means the asset is unknown to the snapshot rather than that the code was unobtainable. It is never the underlying ticker: a plausible-looking wrong code is worse than an obvious gap when reconciling against a webhook. e.g. USDT. |
amount | string | Amount withdrawn excluding the fee, in settled units. Positive magnitude. e.g. 1954.78138064. |
fee | string | Skipo withdrawal fee, in settled units. Positive magnitude. e.g. 0.5. |
total | string | Total debited (amount + fee), in settled units. Positive magnitude. e.g. 1955.28138064. |
WithdrawalResource
| Field | Type | Description |
|---|---|---|
id | string | Withdrawal id. Use it to re-fetch this withdrawal and to match its ledger entry (source.id). e.g. 9bba6d71-5966-4045-962f-77a737e14226. |
type | string | e.g. WITHDRAWAL. |
subType | INTERNAL | EXTERNAL_CRYPTO | EXTERNAL_FIAT_BANK | EXTERNAL_FIAT_REDPAY | NETWORK_FEE | TRANSFER_FEE | |
assetSymbol | string | Asset code of the withdrawal. e.g. USDT. |
amount | string | Amount withdrawn, excluding the fee. Positive magnitude, in assetSymbol. e.g. 1954.78138064. |
fee | string | The withdrawal fee charged by Skipo, in assetSymbol. A flat fee — NOT the blockchain network fee, which Skipo absorbs. Positive magnitude. e.g. 0.5. |
total | string | Total debited from the balance (amount + fee). Positive magnitude, in assetSymbol. e.g. 1955.28138064. |
status | string | e.g. COMPLETED. |
createdAt | string | e.g. 2026-07-16T16:58:54.216Z. |
transactionHash | string | null | On-chain transaction hash, when this withdrawal had one. null otherwise — an off-chain withdrawal (bank payout, internal transfer) never has one, and an on-chain withdrawal that has not been broadcast yet does not have one YET, so a PENDING withdrawal reports null and the hash appears on a later read. Top-level so that reading it never requires branching on subType. It is the same value as withdrawalData.transactionHash, which remains for the sub-types that already published it; this field additionally covers on-chain sub-types that carry a hash but publish no withdrawalData block. NOT a bank reference: on a fiat payout this is always null, even though the underlying record may hold the bank's own transaction id. Do not assume a 0x prefix — BTC, Solana and Tron hashes have none. e.g. 0x8b3275b467d90d99bd99bb7bfec9402e393ce870d741131a9d69a7d42640ac5b. |
bankReference | string | null | The bank's or payment provider's own reference for this payout, when one was recorded. null on every non-fiat withdrawal, and null on a fiat withdrawal that carries no reference (the large majority — 73 of 14,502 bank payouts on prod have one). It is recorded when the payout is confirmed, so a PENDING bank withdrawal reports null. The counterpart of transactionHash: a withdrawal settles either on a chain or through a bank, so at most one of the two fields is ever populated. Free-form and short (3-19 characters, not always numeric) — it is whatever the bank supplied, so treat it as an opaque string for reconciliation, never parse it. e.g. null. |
assetFormat | base | rebased | Which representation the top-level money fields are expressed in. Echoes what the request RESOLVED to, so a response that took the default is as self-describing as one that asked. POST /v2/withdrawals always answers base: a creation returns the figures as booked. e.g. rebased. |
multiplier | string | Rebase factor as it stood when the withdrawal was created — not today. "1" when no scaling applies. base.amount x multiplier = amount when assetFormat is rebased. "1" is NOT a claim that the asset does not rebase; read GET /v2/assets for its class. e.g. 1. |
base | WithdrawalBaseRepresentation | |
withdrawalData | object | Sub-type-specific details. The keys depend on transactionSubType, so branch on that rather than probing for fields. For EXTERNAL_CRYPTO this carries the CANONICAL chain identity, the same five fields GET /v2/assets[].networks and GET /v2/contacts publish — networkId (BSC, ETH, TRON), networkName, networkNativeAsset, evmChainId and assetType (the token standard, BEP20/ERC20/TRC20). Join on networkId: it is the one field that means the same thing on every v2 resource, so a movement, an asset and a saved destination line up without parsing prose. ⚠️ networkSymbol has been REMOVED from this block. It was the raw stored value and it disagreed with itself across the estate — 164,192 movements say BEP20 for the same chain 1,614 call BSC, and it also carried values that are not networks (INTERNAL, FIAT_NETWORK) and prose (Dogecoin, XRP Ledger). networkId replaces it and is a stable key. networkName above is the human-readable form. The canonical fields are always present on an EXTERNAL_CRYPTO movement and are null when the chain cannot be resolved, so the shape never changes underneath you. |
Back to the endpoint reference. See also: Pagination · Errors · Ids and correlation.