Skip to content

CAIP-19 currency identifiers

BTC Direct API v1 and v2 support CAIP-19: a chain-agnostic standard for uniquely identifying blockchain assets. This allows you to reference currencies by their canonical on-chain identity rather than BTC Direct’s internal currency codes.

This is especially useful when:

  • Your application already tracks assets by on-chain identifier
  • You need to distinguish multi-network tokens unambiguously (e.g. USDC on Ethereum vs. USDC on Solana)

A CAIP-19 identifier follows this structure:

{chain_id}/{asset_namespace}:{asset_reference}

Some examples for currencies available on BTC Direct:

CurrencyCAIP-19 identifier
Bitcoinbip122:000000000019d6689c085ae165831e93/slip44:0
Ethereumeip155:1/slip44:60
Euroswift:0/iso4217:EUR
USDC (Solana)solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/spl:EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v

All v2 endpoints that return currency information include sourceCurrency and targetCurrency objects containing the CAIP-19 identifier alongside the code, ticker, and name.

Currency object

{
"code": "USDC_SOL",
"ticker": "USDC",
"name": "USD Coin (Solana)",
"caip19": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/spl:EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
}

Endpoints that include CAIP-19 identifiers in their responses:

EndpointField(s)
GET /api/v2/prices{pair}.sourceCurrency, {pair}.targetCurrency
GET /api/v2/buy/orders/{id}sourceCurrency, targetCurrency
GET /api/v2/sell/orders/{id}sourceCurrency, targetCurrency
GET /api/v2/user/dca-codestargetCurrency
POST /api/v2/buy/checkoutsourceCurrency, targetCurrency (response)

Example: prices response

{
"BTC-EUR": {
"sourceCurrency": {
"code": "BTC",
"ticker": "BTC",
"name": "Bitcoin",
"caip19": "bip122:000000000019d6689c085ae165831e93/slip44:0"
},
"targetCurrency": {
"code": "EUR",
"ticker": "EUR",
"name": "Euro",
"caip19": "swift:0/iso4217:EUR"
},
"buy": 54355.90,
"sell": 52722.66
}
}

On quote and order creation endpoints, you can identify currencies using CAIP-19 by providing sourceCurrency and targetCurrency. When both fields are present, they take precedence over the standard currency parameters ( currencyPair in v1, baseCurrency / quoteCurrency in v2).

The direction of the order determines which currency maps to which field:

Order typesourceCurrencytargetCurrency
Buy: fiat to crypto (F2C)Fiat (e.g. EUR)Crypto (e.g. BTC)
Sell: crypto to fiat (C2F)Crypto (e.g. BTC)Fiat (e.g. EUR)

In short: source is what the customer sends, target is what they receive.

POST /api/v1/buy/quote

{
"sourceCurrency": "swift:0/iso4217:EUR",
"targetCurrency": "bip122:000000000019d6689c085ae165831e93/slip44:0",
"paymentMethod": "iDeal",
"fiatAmount": 100
}

When sourceCurrency and targetCurrency are provided, currencyPair is derived automatically and any currencyPair value in the request is ignored.

POST /api/v1/sell/quote

{
"sourceCurrency": "bip122:000000000019d6689c085ae165831e93/slip44:0",
"targetCurrency": "swift:0/iso4217:EUR",
"cryptoAmount": 0.01
}

When sourceCurrency and targetCurrency are provided, currencyPair is derived automatically and any currencyPair value in the request is ignored.

POST /api/v2/buy/checkout

{
"sourceCurrency": "swift:0/iso4217:EUR",
"targetCurrency": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/spl:EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"paymentMethod": "iDeal",
"quoteCurrencyAmount": 100
}

When sourceCurrency and targetCurrency are provided, they take precedence over baseCurrency and quoteCurrency.

POST /api/v2/buy/offer

{
"sourceCurrency": "swift:0/iso4217:EUR",
"targetCurrency": "bip122:000000000019d6689c085ae165831e93/slip44:0",
"paymentMethod": "iDeal",
"quoteCurrencyAmount": 100,
"returnUrl": "https://example.com/return"
}

When sourceCurrency and targetCurrency are provided, they take precedence over baseCurrency and quoteCurrency.

CAIP-19 currency identifiers are not yet supported in the Widget integration. The Widget currently uses baseCurrency and quoteCurrency to identify currencies. CAIP-19 support for widgets is planned for a future release.

If you need CAIP-19-based currency resolution today, use the API integration instead.