Assets

Notabene names every crypto asset with standard identifiers, so a transfer always says exactly which token moves on which blockchain. Use them for the asset, its blockchain, the addresses and the amounts in your calls.

Assets, tokens and blockchains

TermWhat it meansIdentifier
AssetThe instrument itself, whatever the blockchain, such as USDC or Bitcoin.An id in your asset registry
TokenOne deployment of an asset on one blockchain. USDC on Ethereum and USDC on Polygon are two tokens of the same asset.CAIP-19, for example eip155:1/erc20:0x...
BlockchainThe network a token lives on.CAIP-2, for example eip155:1
TermWhat it meansIdentifier
AssetThe instrument itself, whatever the blockchain, such as USDC or Bitcoin.An id in your asset registry
TokenOne deployment of an asset on one blockchain. USDC on Ethereum and USDC on Polygon are two tokens of the same asset.CAIP-19, for example eip155:1/erc20:0x...
BlockchainThe network a token lives on.CAIP-2, for example eip155:1

Native coins have a CAIP-19 identifier too: ETH on Ethereum is eip155:1/slip44:60, and BTC is bip122:000000000019d6689c085ae165831e93/slip44:0.

Naming the asset in a transfer

In asset, send the token’s CAIP-19 identifier. You can also send a plain symbol such as ETH or BTC, which Notabene resolves to its CAIP-19 identifier, and transfers and webhooks then show that identifier. Use CAIP-19 for any token that exists on more than one blockchain, such as USDT on Ethereum and on Polygon, so there is no doubt about which one you mean.

JSON
{
  "asset": "eip155:1/erc20:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
  "amount": "250.00",
  "settlement_address": "eip155:1:0x5aAeb6053F3E94C9b9A09f33669435E7Ef1BeAed"
}
{
  "asset": "eip155:1/erc20:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
  "amount": "250.00",
  "settlement_address": "eip155:1:0x5aAeb6053F3E94C9b9A09f33669435E7Ef1BeAed"
}

The full call is in Withdrawals, and the other fields that describe the movement of funds follow the same standards.

FieldFormatExample
amount string, decimalThe amount in whole units of the asset, as a decimal string."0.5" for 0.5 ETH, not an amount in wei
settlement_address, source_address string, CAIP-10CAIP-10. A bare address is read on the asset’s blockchain.eip155:1:0x5aAe…eAed
settlement_id string, CAIP-220CAIP-220, or a raw transaction hash read on the address’s blockchain.eip155:1:tx/0x9b1f…
memo_tag stringThe XRPL destination tag or Stellar memo. It is the same as appending :tag to the address."1234567"
FieldFormatExample
amount, string, decimalThe amount in whole units of the asset, as a decimal string."0.5" for 0.5 ETH, not an amount in wei
settlement_address, source_address, string, CAIP-10CAIP-10. A bare address is read on the asset’s blockchain.eip155:1:0x5aAe…eAed
settlement_id, string, CAIP-220CAIP-220, or a raw transaction hash read on the address’s blockchain.eip155:1:tx/0x9b1f…
memo_tag, stringThe XRPL destination tag or Stellar memo. It is the same as appending :tag to the address."1234567"

Find an asset

Search Notabene’s asset list by symbol, name, blockchain or contract address. Each result shows the symbols you can send in asset and the CAIP-19 identifier they resolve to.

To resolve one symbol or identifier from your backend instead, call GET /api/v1/customers/{customer}/assets/resolve?asset=USDT-ETH, which answers with its CAIP-19 identifier, its blockchain, its name and its decimals.

Fiat value and thresholds

Notabene values each transfer in fiat to compare it with the Travel Rule threshold that applies. To use your own valuation, send fiat_amount_usd with the transfer, and it then takes precedence over Notabene’s pricing as the value the threshold is compared against. Send it for any asset Notabene cannot price, and when you assess such a transfer, fiatAmountUsd is required.

Your currencies, under My Organization › Currencies in the dashboard, are the fiat currencies amounts are shown in and thresholds are measured in. GET /api/v1/currencies lists them.

The tokens you support

Each token carries a support status that your token rules use, so a transfer in a token you do not support can be flagged or rejected automatically. You see and change it in the dashboard under My Organization › Tokens.

Token statusWhat your token rules do
SupportedApprove the transfer.
WatchedFlag the transfer for review.
Not supportedReject the transfer.
Not reviewedUse the verdict you set for Not reviewed tokens, if you set one.
Token statusWhat your token rules do
SupportedApprove the transfer.
WatchedFlag the transfer for review.
Not supportedReject the transfer.
Not reviewedUse the verdict you set for Not reviewed tokens, if you set one.

Blockchains, under My Organization › Blockchains, have a support status too but no rules of their own, so their status reaches a transfer only through their tokens.

  • When a blockchain is Not supported, every token on it becomes Not supported.
  • When a blockchain is Not reviewed, every token on it becomes Not reviewed.
  • When a blockchain is Supported, its tokens stay Not reviewed until you mark each one Supported.
  • Marking a token Supported also marks its blockchain Supported.
  • A token used in a transfer you create is added to your supported tokens automatically.

Through the API, GET /api/v1/tokens and GET /api/v1/chains list your tokens and blockchains with their status, and PUT /api/v1/tokens/{id}/trust and PUT /api/v1/chain/trust/{caip2} change it. How the API values New, Authorized, Flagged, Banned and HumanReview correspond to these statuses is still to be confirmed. (placeholder)

Adding a token or a blockchain

If a token is missing from your lists, register it with POST /api/v1/tokens, which takes the token’s CAIP-19 identifier, its blockchain, contract address, decimals, name and symbol. Add asset_id to link the token to an asset in your registry, so that the same asset on several blockchains stays one asset. A missing blockchain goes to POST /api/v1/chains with its CAIP-2 identifier and its name, while POST /api/v1/assets registers an asset.



Did this page help you?