The assets group of endpoints provides information about the assets available on the platform, as well as the networks and rails used to transfer them.

Assets

Assets represent the various financial instruments available on the platform, categorized by their type and features.

Asset shape

An asset has the following properties:

{
  "code": "BTC",
  "name": "Bitcoin",
  "type": "crypto",
  "logo": "https://cdn.uphold.com/assets/BTC.svg",
  "features": [
    "buy",
    "deposit",
    "sell",
    "transfer",
    "withdraw"
  ],
  "symbol": "₿",
  "decimals": 8
}

Types of assets

There are different types of assets available on the platform:

Features

Each asset has a unique code and a set of features. These features determine the type of transactions that can be performed with the asset:

  • buy: The ability to purchase the asset, that is, when it’s specified as the destination in a transaction (e.g., asset associated with the destination node) and the origin node has a different asset.
  • transfer: The ability to transfer the asset, that is, when the origin and destination node assets are the same.
  • sell: The ability to sell the asset, that is, when it’s specified as the origin node in a transaction (e.g., asset associated to the account) and the destination node asset is different.
  • deposit: The ability to perform a deposit of the asset when specified as origin node of a transaction (e.g., through an external account).
  • withdraw: The ability to perform a withdrawal of the asset when specified as origin node of a transaction (e.g., through an external account).

Please note that these features can be contextualized with a user, meaning that a user may have access to some features of an asset and not others.

Networks

Networks are the underlying protocol in which the transfer of certain assets are made.

Network shape

A network has the following base properties:

{
  "type": "crypto",
  "code": "bitcoin",
  "name": "Bitcoin",
  "logo": "https://cdn.uphold.com/assets/BTC.svg"
}
The network may have additional properties depending on the type. For example, the network above has two more properties named exampleAddress and explorer, which are available for networks of type crypto.

Types of networks

There are different types of networks available on the platform:

Rails

A rail is a combination of an asset and a network, which together define whether a deposit or a withdrawal of a given asset under that network is possible.

Rail shape

A rail has the following base properties:

{
  "type": "crypto",
  "asset": "USDC",
  "network": "ethereum",
  "features": [
    "deposit",
    "withdraw"
  ],
  "decimals": 6
}
The rail may have additional properties depending on the type. For example, the rail above has one more property named contractAddress, which is available for rails of type crypto.

In some rare cases, the decimals property on the rail is different than the decimals defined in the asset. If you are initiating a deposit or a withdrawal transaction, use the decimals of the corresponding rail to truncate or round the decimal places in the user interface.

Types of rails

There are different types of rails available on the platform, which are analogous to the types of networks:

Features and deposits / withdrawals

A deposit is possible if:

  • The rail has the deposit feature.
  • The origin asset has the deposit feature.
  • The destination asset has:
    • The transfer feature if the origin and destination assets are the same.
    • The buy feature if converting between assets.

A withdrawal is possible if:

  • The rail has the withdraw feature.
  • The origin asset has:
    • The transfer feature if the origin and destination assets are the same.
    • The sell feature if converting between assets.
  • The deposit asset has the withdraw feature.