Skip to main content
The B2B API uses CAIP identifiers for accounts and assets. CAIP gives EVM and non-EVM resources one wire format. Fields that end in AccountId or assetId use CAIP. Do not send bare addresses in these fields. Two deliberate exceptions appear in the B2B API:
  • Enrollment and chain activation accept numeric chainIds. These values select configured chains. They do not identify an account or an asset.
  • EIP-712 requires a bare EVM address in domain.verifyingContract.

CAIP-10 account forms

CAIP-10 identifies an account. The B2B API uses two forms:

Chain-agnostic: <namespace>:0:<address>

Use this form when an account has the same address on each chain in a namespace. An EVM externally owned account (EOA) uses this form. The chain reference is the literal string 0 as specified in CAIP-10 §Abstract Account Addresses.
Use this form for end-user wallets (ownerAccountId) and agent wallets (agentAccountId).

Chain-bound: <namespace>:<chainId>:<address>

Use this form when an account exists on one chain only. Each smart-contract account is chain-bound because its deployment exists on one chain.
Use this form for portfolio smart accounts (SmartAccount.accountId) and withdrawal recipients (recipientAccountId).

Solana accounts

Solana does not have a chain-agnostic 0 form. Solana accounts use the mainnet CAIP-2 reference as the chain segment. This reference is the chain genesis hash.
Use this form for these accounts:
  • Solana-rooted owner wallets (ownerAccountId, Model B)
  • The pooled agent (agentAccountId)
  • Swig sub-account smart accounts (SmartAccount.accountId)
EVM-rooted Solana enrollment (Model A) keeps the EVM eip155:0:<addr> owner form. Only the returned smart accounts use solana: addresses.

Rules for each field

Validation

The API validates and normalizes each CAIP-10 string for its namespace. EVM addresses are not case-sensitive. The API converts them to lowercase. Therefore, uppercase and lowercase EVM addresses are equivalent for lookup. Solana base58 addresses are case-sensitive. The API keeps their case.

CAIP-19 for Assets

CAIP-19 identifies an asset. The B2B API uses it for strategy allocation assetIds and withdrawal assetIds.

ERC-20 on EVM

Example for USDC on Ethereum mainnet:

SPL on Solana

Common IDs

Build CAIP strings

Do not manually join CAIP strings in the client. A missing 0x, incorrect case, or incorrect chain reference produces 400 API_400. Use a CAIP-10 or CAIP-19 library. If you cannot use a library, use these canonical forms:
Example for an EVM smart account on Base:

Exception: EIP-712 verifyingContract

In a signed EIP-712 envelope, domain.verifyingContract is a bare EVM address. It is not a CAIP-10 identifier. EIP-712 requires this form because wallets do not use CAIP for this field. This exception applies only to the signed envelope. Do not use this form for other fields.

Common errors

  • Do not send bare hex to an *AccountId field. The API rejects bare hex. Convert the value to the correct CAIP-10 form.
  • Do not use eip155:0:<addr> as a withdrawal recipient. A withdrawal recipient must be chain-bound.
  • Do not send a chain-bound EVM owner during enrollment. Use eip155:0:<addr> for an EVM owner. Model B Solana enrollment is the exception. It uses the mainnet solana:5eykt4…:<base58> form.
  • Do not compare raw EVM account strings. Normalize EVM identifiers with a CAIP-10 parser before comparison. Do not convert Solana identifiers to lowercase.