PlatformAssets and networks

Assets and networks

The global network and token registries: a network's coinType and slug, a token's contractAddress and decimals, and the kill switch.

V3 Custody maintains two global registries: networks and tokens. They define which blockchains and assets the platform understands, and addresses, policies, reports, and the webhook all reference them.

Network registry

A network is described by two keys:

KeyMeaning
coinTypea BIP-44/SLIP-0044 identifier, unique (TRON is 195, Ethereum is 60)
slugthe lowercase on-chain network name; referenced by Address.network, tokens, and webhook matching

The network segment in a Vault's schema adds networks to this registry by coinType (see Vaults and derivation).

  • GET /api/v1/networks returns the global registry (sorted by coinType ascending). The picker uses it when creating a Vault and registering tokens.
  • POST /api/v1/networks registers a network.

Token registry

A token is tied to a network and describes an asset:

{
  "id": "cmr3f41z20001psp7phmyapw3",
  "code": "usdt",
  "symbol": "USDT",
  "name": "Tether USD",
  "networkId": "cmr3f...",
  "contractAddress": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
  "decimals": 6,
  "enabled": true
}
FieldMeaning
codea globally unique token code (immutable)
symbol / namedisplay values, mutable
networkIdthe network the token belongs to
contractAddressthe contract address (required for non-native tokens; unique per network; immutable)
decimalsthe token's scale (immutable)
enabledthe kill switch
  • Native coin: one per network. Non-native tokens must have a contractAddress, which the webhook uses to verify incoming deposits.
  • Uniqueness: code is unique globally, contractAddress is unique per network.
  • GET /api/v1/tokens lists tokens.
  • POST /api/v1/tokens registers a token (the network must come from the Networks registry, by networkCode).

Updates and the kill switch

PATCH /api/v1/tokens/{id} changes symbol, name, logoUri, and enabled. The code, contractAddress, and decimals fields are immutable.

enabled=false is the kill switch:

When enabled=falseBehavior
transfers of this tokenrejected with TOKEN_NOT_FOUND
webhookignores events for the token
new policies and Vaultscan't reference it
existing data and ledger accountsleft untouched

How this connects to everything else

Common mistakes

SymptomCause
token won't registerthe network isn't in the Networks registry; an existing networkCode is required
non-native token without contractAddressit's required for non-native tokens
duplicate contractAddressit must be unique per network
transfer fails with TOKEN_NOT_FOUNDthe token is disabled by the kill switch (enabled=false)
trying to change decimals/codethey're immutable; the only option is to recreate the token

Next steps