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
Asset
The instrument itself, whatever the blockchain, such as USDC or Bitcoin.
Identifier
An id in your asset registry
Token
One deployment of an asset on one blockchain. USDC on Ethereum and USDC on Polygon are two tokens of the same asset.
Identifier
CAIP-19, for example eip155:1/
Blockchain
The network a token lives on.
Identifier
CAIP-2, for example eip155:1
| Term | What it means | Identifier |
|---|---|---|
| Asset | The instrument itself, whatever the blockchain, such as USDC or Bitcoin. | An id in your asset registry |
| Token | One 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... |
| Blockchain | The 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.
{
"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.
| Field | Format | Example |
|---|---|---|
amount string, decimal | The 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-10 | CAIP-10. A bare address is read on the asset’s blockchain. | eip155:1:0x5aAe…eAed |
settlement_id string, CAIP-220 | CAIP-220, or a raw transaction hash read on the address’s blockchain. | eip155:1:tx/ |
memo_tag string | The XRPL destination tag or Stellar memo. It is the same as appending :tag to the address. | "1234567" |
| Field | Format | Example |
|---|---|---|
amount, string, decimal | The 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-10 | CAIP-10. A bare address is read on the asset’s blockchain. | eip155:1:0x5aAe…eAed |
settlement_id, string, CAIP-220 | CAIP-220, or a raw transaction hash read on the address’s blockchain. | eip155:1:tx/0x9b1f… |
memo_tag, string | The 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 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.
Supported
Approve the transfer.
Watched
Flag the transfer for review.
Not supported
Reject the transfer.
Not reviewed
Use the verdict you set for Not reviewed tokens, if you set one.
| Token status | What your token rules do |
|---|---|
| Supported | Approve the transfer. |
| Watched | Flag the transfer for review. |
| Not supported | Reject the transfer. |
| Not reviewed | Use 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.
- A token can only be marked Supported once its blockchain is Supported, so mark the blockchain first.
- 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. A token’s {id} there is its caip19, URL-encoded. 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 its asset with POST /api/v1/assets, then the token with POST /api/v1/tokens, passing the id from the first answer as asset_id. That keeps the same asset on several blockchains as one asset. The dashboard lists it under My Organization › Tokens once one of its tokens is on a blockchain you support. A token without an asset_id shows only under its blockchain.
Besides asset_id, a token takes its CAIP-19 identifier, its blockchain, decimals, name and symbol, and its contract address with no chain prefix. For a native coin, the address is slip44: and the coin type, as in slip44:60, and a testnet’s native coin uses coin type 1, as in eip155:11155111/slip44:1. Identifiers are compared exactly, so the same address in another case makes a second token.
A missing blockchain goes to POST /api/v1/chains with its CAIP-2 identifier and its name.
Updated 3 days ago
