This site has been deprecated. Please use developers.bitgo.com instead.

BitGo API Reference (0.1.0)

Download OpenAPI specification:Download

BitGo Engineering: support@bitgo.com

Overview

BitGo provides a simple and robust RESTful API and client SDK to integrate digital currency wallets with your application. In BitGo Platform V2, we extend our API and SDK so that you can manage multiple digital currencies and wallets through a single, unified interface.

With the BitGo SDK you can:

  • Create multi-signature wallets
  • List wallet balances and transactions
  • Create and sign transactions
  • Monitor transactions and receive notifications
  • Securely authenticate users
  • Run multi-user workflows in enterprise environments
  • Apply policies and spending limits

This is the latest documentation for the BitGo APIs, which is generated from the OpenAPI 3.0 schema. OpenAPI technology improves the validation of client requests and increases the consistency between the API documentation and server-side implementation of API endpoints.

When calling BitGo APIs, implement a 100 second timeout to ensure that you do not terminate connections prematurely.

Multi-Signature Wallets

Multi-signature wallets are highly secure because they allow for each transaction to be approved by more than one person with one or more devices. Without multiple signatures, all credentials to approve a transaction must reside with a single person on one device. If that person or device is compromised by an attacker, all funds can be taken without recourse and without the ability to audit the individual that invoked the key.

BitGo's multi-signature wallets allow you to keep control of your Bitcoin or other cryptocurrency despite introducing the concept of a co-signer. This allows enterprises to set up and maintain roles, policies, and rules on the wallet, making digital currency usable for businesses.

For more information, read the BitGo whitepaper, Digital Asset Wallet Security - A Comparison: Multi-Signature and Multi-Party Computation.

User Authentication

All calls to endpoints that require authentication must pass the client access token in the Authorization HTTP header of the request message.

Access Token

You can create an access token in the BitGo web UI at User Settings > Developer Options. An access token can limit access by:

  • Expiration date
  • Operations
  • Client IP addresses

The format of the header is Authorization: Bearer <TOKEN>.

The following example uses HTTPie to call the Get session API from the command line:

$ http -v get https://app.bitgo-test.com/api/v2/user/me Authorization:"Bearer $TEST_TOKEN"
GET /api/v2/user/me HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Authorization: Bearer v2x83...
Connection: keep-alive
Host: app.bitgo-test.com
User-Agent: HTTPie/1.0.0

HTTP/1.1 200 OK
...

Warning: Only use this method in a test environment. Using a bearer authentication in this way sends the token in plain text, although, still over HTTPS. In production, BitGo strongly recommends that you use Auth V2 or Auth V3 authentication schemes provided in BitGo's SDK and Express application.

Auth V2

BitGo's SDK and Express App secures tokens using our Auth V2 protocol, which does not send the access token over the wire. For this reason, we recommend that API requests from 3rd party clients should be proxied through BitGo Express.

The Auth V2 scheme is used by default when you make requests to BitGo Express using the Bearer <token> authentication method with a V2 access token (beginning with the prefix v2x). BitGo Express uses the provided token to calculate the correct authentication information, without exposing the token outside the BitGo Express application process.

Auth V3

Auth V3 is similar to the Auth V2 scheme, with additional protections against replay attacks and protocol downgrades.

Specifically, V3 adds the following verification steps to the Auth V2 scheme:

  • Request timestamp validity window

If the request timestamp on an incoming request is more than five minutes behind the server clock when a request is being checked for authenticity, it is considered invalid and the request is rejected with a 401 Unauthorized.

  • Request replay checking

In Auth V2, each incoming request must bear a valid hashed message authentication code (HMAC) which proves knowledge of the user's access token without revealing it to the BitGo server or the transport layer carrying the request. If a previous request is replayed, the HMAC value remains valid and the BitGo server could be instructed to repeat a previous action (for example, return a list of transfers or list wallet balances).

Auth V3 prevents this type of attack by saving all valid HMAC values up to the duration of the request validity window. Requests with HMAC values that were used for a previous request are rejected with a 401 Unauthorized and not processed.

  • Protocol downgrade protection

To prevent Auth V3 requests from being captured and modified in an attempt to downgrade them to Auth V2 for replay, the authentication scheme version (in the bitgo-auth-version request header) is added to the HMAC subject calculated by the client and verified by the server. Since altering the auth version requires calculating a new HMAC value, which in turn requires knowledge of the user's access token, the bitgo-auth-version header cannot be altered by a man-in-the-middle to downgrade the auth version and perform a request replay attack.

Currently, the Auth V3 scheme is not used by default; it can be enabled with the startup flag --authversion in BitGo Express or the BitGo SDK. For more, see BitGo Express README.

Software Development Kit

The BitGo web APIs allow developers to create and manage multi-signature wallets, manipulate their policies, and interact with multiple digital currencies over a single robust interface.

Sensitive operations, such as the creation of user private keys and signing of transactions, must be performed client-side. For this we recommend our Software Development Kit (SDK), which implements client-side wallet features and interfaces with our APIs.

Currently, our SDK is available in JavaScript and runs in either Node.js or a browser. If your application does not use native JavaScript, refer to the BitGo Express REST API guide, which offers the same feature set via a local server daemon.

Installing the JavaScript SDK (via npm)

npm install --save bitgo

To initialize your environment and authenticate, use the following code:

const BitGoJS = require('bitgo');
// Read the user authentication section to get your API access token
const bitgo = new BitGoJS.BitGo({
  env: 'test',
  accessToken: process.env.ACCESS_TOKEN,
});
const coin = bitgo.coin('tbtc');

BitGo Express REST API

The BitGo Express REST API is a lightweight service for developers who want to use the BitGo service, but are developing in a language other than JavaScript.

BitGo Express runs as a service in your own data center and handles the client-side operations involving your own keys, such as partially signing transactions before submitting them to BitGo. This ensures your keys never leave your network, and are never seen by BitGo. BitGo Express can also proxy the standard BitGo REST APIs, providing a unified interface to BitGo through a single REST API.

We recommend using Docker to run BitGo Express, and we also support running from the source code directly.

To try out BitGo Express, run this command:

docker run -it -p 3080:3080 bitgosdk/express:latest

You should see this output from BitGo Express:

BitGo-Express running
Environment: test
Base URI: http://0.0.0.0:3080

To make sure the service is up and running, send a ping request to BitGo Express with curl:

$ curl localhost:3080/api/v2/ping
{"status":"service is ok!","environment":"BitGo Testnet","configEnv":"testnet","configVersion":79}

Note: Make all BitGo REST API calls to the machine on which bitgo-express is running. BitGo Express will either handle the request itself or proxy it to the BitGo service.

For more, see BitGo Express README.

Environments

BitGo has two separate environments available for development and production. For security reasons, all BitGo API requests are made using TLS over HTTPS.

Test Environment

The BitGo test environment is used by default in our examples and the SDK. It is entirely separate from BitGo's production environment and there is no overlap in either data or accounts. You will need to create accounts at app.bitgo-test.com.

In the test environment, you can use the value 0000000 in place of the one-time password (OTP) when authenticating.

This environment is connected to the TestNet networks of various digital currencies we support. Tokens on these networks can be obtained from faucets and do not represent real money.

Production Environment

The BitGo production endpoint is live and used by partners and our own web application on app.bitgo.com.

To use this environment, specify { env: 'prod' } when using the SDK or -e prod when running BitGo Express. SSL certifications should be provided to secure traffic to and from the BitGo Express instances when operating in the Production environment.

Coin / Digital Currency Support

BitGo Platform V2 supports a variety of digital currencies, with more being added every quarter.

To select a coin use the following (replacing btc with your chosen coin identifier):

var bitgo = new BitGoJS.BitGo({
  env: 'test',
  accessToken: process.env.ACCESS_TOKEN,
});
var coin = bitgo.coin('btc');

Coins in Production

For supported ECR20 and TERC20 tokens, see Ethereum - ERC20 Tokens.

Blockchain Native Coin Mainnet Id Testnet Id Base Unit Divisibility Family BitGo Access BitGo Wallets
Algorand Algo ALGO tALGO microAlgo 10-6 Account Enterprise Hot/Cold
Avax C-Chain Avax AVAX tAVAX wei 10-18 Account Enterprise Hot/Cold
Bitcoin Bitcoin BTC tBTC satoshi 10-8 UTXO All Hot/Cold
Bitcoin Cash Bitcoin Cash BCH tBCH satoshi 10-8 UTXO All Hot/Cold
Bitcoin Gold Bitcoin Gold BTG n/a satoshi 10-8 UTXO All Hot/Cold
Casper Casper CSPR tCSPR mote 10-9 Account Enterprise Hot/Cold
Celo CELO CELO tCELO wei 10-18 Account Enterprise Hot
Dash Dash DASH tDASH duff 10-8 UTXO All Hot/Cold
EOS EOS EOS tEOS - 10-4 Account Enterprise Hot/Cold
Ethereum Ether ETH tETH wei 10-18 Account Enterprise Hot/Cold
Hedera HBAR HBAR tHBAR tinybar 10-8 Account Enterprise Hot/Cold
Litecoin Litecoin LTC tLTC microlitecoins 10-8 UTXO All Hot/Cold
RSK Smart Bitcoin Smart Bitcoin RBTC tRBTC wei 10-18 Account Enterprise Hot/Cold
Stacks Stacks STX tSTX micro-STX 10-6 UTXO All Hot/Cold
Stellar Lumen XLM tXLM stroop 10-7 Account All Hot/Cold
Tezos tez XTZ tXTZ micro tez 10-6 Account Enterprise Hot
Tron Tronix TRX tTRX sun 10-6 Account All Hot/Cold
XRP Ledger XRP XRP tXRP drop 10-8 Account Enterprise Hot/Cold
Zcash Zec ZEC tZEC zatoshi 10-8 UTXO All Hot/Cold

HTTP Status Codes

The BitGo API returns the following HTTP status codes:

HTTP Status Meaning Description
200 Success The operation succeeded
201 Created A new object was created
202 Accepted The operation succeeded, but requires approval (e.g., sending funds)
206 Partial Content The server is delivering only part of the resource.
400 Bad Request The client request is invalid
401 Unauthorized Authentication failed (e.g., invalid token specified by the Authorization header)
403 Forbidden Authentication failed, but the operation is not allowed
404 Not Found Requested resource does not exist
429 Too Many Requests Client request rate exceeded the limit

Error Handling

When the server returns a 4xx status code, the response body contains an error object with the following structure:

{
  "error": "invalid wallet id",
  "name": "InvalidWalletId",
  "requestId": "cjo7uw7si0buzttlmazmvthay"
}

The name value is an error code that does not change. The error value is a human-readable message which may change.

Pagination

Certain routes, such as listing wallets or transactions, may return an array of results and require pagination.

By default, the API returns 25 results per request. The limit parameter can be used to increase the number of results per request, up to a maximum of 500.

To get the next batch of results, call the same route again with a prevId request parameter corresponding to the nextBatchPrevId property received in the last call.

bitgo
  .coin('tbtc')
  .wallets()
  .list({ limit: 50 })
  .then(function (wallets) {
    // print wallet list
    console.dir(wallets);
  });
curl \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/tbtc/wallet?limit=50

Example JSON Response:

{
  "coin": "tbtc",
  "wallets": [
    {
      "_wallet": {
        "id": "585a0860c5a04c696edd2c331ce2f346",
        "coin": "tbtc",
        "label": "V2 TBTC Test Wallet",
        ...
      }
    },
    ...
  ],
  "count": 50,
  "nextBatchPrevId": "590b73478c8fc40727b0c3d421ec909c"
}

Balance Strings

For most digital currencies, the wallet, transaction, and address objects have balance properties that return an integer value. But some currencies have ranges that exceed values that can be stored as a typical number in JavaScript.

In BitGo Platform V2, balance properties with a string data type were added for all digital currencies (and have the suffix, String). BitGo recommends that you use string balances for all currencies (and not number) to ensure values do not exceed the programmable number limit.

Integer String (recommended)
balance balanceString
confirmedBalance confirmedBalanceString
spendableBalance spendableBalanceString

BitGo UTXO Library

The BitGo UTXO Library (@bitgo/utxo-lib) is an open source library for UTXO transaction building and does not require a BitGo account or the BitGo SDK to be used. The library allows any developer working with UTXO-based blockchains to easily build and sign their own transactions.

For more, see the BitGo UTXO Library.

Trading Account Settings

Tools for managing BitGo offchain Trading Account Settings

Get Trading Account Settings

The Get Trading Account Settings API displays the current settings on your trading account.

path Parameters
enterpriseId
required
string

Enterprise ID

accountId
required
string

Trading Account ID

Responses

Response Schema: application/json
accountId
string (WalletId)
affirmationExpirationTime
number

Expiration time for new settlements and affirmations, in milliseconds. If this amount of time passes before a settlement is affirmed, rejected, or canceled, the settlement will be marked as failed

object (FeeRate)

Fee rates set for a given account

referralCode
string

Referral code of given account

Response samples

Content type
application/json
{
  • "accountId": "59cd72485007a239fb00282ed480da1f",
  • "affirmationExpirationTime": 86400000,
  • "feeRates": {
    • "settlement": 5
    },
  • "referralCode": "FC8G"
}

Update Trading Account Settings

The Update Trading Account Settings API allows you to modify the settings on your trading account.

path Parameters
enterpriseId
required
string

Enterprise ID

accountId
required
string

Trading Account ID

Request Body schema: application/json

Account settings to update and their new values

affirmationExpirationTime
number

Expiration time for new settlements and affirmations, in milliseconds. If this amount of time passes before a settlement is affirmed, rejected, or canceled, the settlement will be marked as failed.

Responses

Response Schema: application/json
accountId
string (WalletId)
affirmationExpirationTime
number

Expiration time for new settlements and affirmations, in milliseconds. If this amount of time passes before a settlement is affirmed, rejected, or canceled, the settlement will be marked as failed

object (FeeRate)

Fee rates set for a given account

referralCode
string

Referral code of given account

Request samples

Content type
application/json
{
  • "affirmationExpirationTime": 86400000
}

Response samples

Content type
application/json
{
  • "accountId": "59cd72485007a239fb00282ed480da1f",
  • "affirmationExpirationTime": 86400000,
  • "feeRates": {
    • "settlement": 5
    },
  • "referralCode": "FC8G"
}

Clearing & Settlement

Tools for initiating post-trade settlement activity between BitGo custodial counterparties

Create Trade Payload

The Create Trade Payload API builds an unsigned trade payload, which serves as an authorization to move funds from your trading account to a counterparty's trading account. This payload must be cryptographically signed with your private key to authorize the movement of funds

path Parameters
enterpriseId
required
string

Enterprise ID

accountId
required
string

Trading Account ID

Request Body schema: application/json

Parameters to serialize into a trade payload

version
string
Value: "1.2.0"

Payload version to create. It is recommended to specify the most recent version for maximum security and compatibility. Older payload versions are subject to deprecation at a later date.

Array of objects[ items ]

Responses

Response Schema: application/json
payload
string (Trade Payload)

This payload must be cryptographically signed with a trading account's private key to authorize the movement of funds

Request samples

Content type
application/json
{
  • "version": "1.2.0",
  • "amounts": [
    • {
      }
    ]
}

Response samples

Content type
application/json
{
  • "payload": "{\"version\":\"1.2.0\",\"accountId\":\"59cd72485007a239fb00282ed480da1f\",\"amounts\":[{\"accountId\":\"5e20faa843795147000da79b8a01f757\",\"sendSubtotal\":\"1000000\",\"sendAmount\":\"1000000\",\"sendCurrency\":\"ofctusd\",\"receiveAmount\":\"1000000\",\"receiveCurrency\":\"ofctbtc\"},{\"accountId\":\"59cd72485007a239fb00282ed480da1f\",\"sendSubtotal\":\"1000000\",\"sendAmount\":\"1000000\",\"sendCurrency\":\"ofctbtc\",\"receiveAmount\":\"1000000\",\"receiveCurrency\":\"ofctusd\"}],\"nonceHold\":\"zq/aCtZC4XOlDyRGFdlsww==\",\"nonceSettle\":\"FnG6xbzehNn0o/0Qt3UeUg==\"}"
}

Calculate Settlement Fees

The Calculate Settlement Fees method will calculate the fees that will be taken out for settlement

path Parameters
enterpriseId
required
string

Enterprise ID

accountId
required
string

Trading Account ID

Request Body schema: application/json

Parameters to calculate fees for settlement

counterpartyAccountId
string

the counterparty account id for the given trade

sendAmount
string

Amount of specified offchain currency this trade account will receive, in "base units" (i.e. cents for USD, Satoshi for BTC, Wei for ETH, etc.)

sendCurrency
string

Offchain currency this trading account will send

receiveAmount
string

Amount of specified offchain currency this trading account will receive, in "base units" (i.e. cents for USD, Satoshi for BTC, Wei for ETH, etc.)

receiveCurrency
string

Offchain currency this trading account will receive

Responses

Response Schema: application/json
feeRate
string
feeAmount
string

the fee amount that will be paid by this trading account for the given settlement amount

feeCurrency
string

the currency the given feeAmount will be paid in

Request samples

Content type
application/json
{
  • "counterpartyAccountId": "string",
  • "sendAmount": "1000000",
  • "sendCurrency": "ofcbtc",
  • "receiveAmount": "3000",
  • "receiveCurrency": "ofcsud"
}

Response samples

Content type
application/json
{
  • "feeRate": "string",
  • "feeAmount": "string",
  • "feeCurrency": "string"
}

Create Settlement

The Create Settlement API initiates a settlement between the requester and a designated counterparty. It will create a Settlement object and an Affirmation object for every trading account involved. Requester must also include a signed payload as part of their request. Locks will be placed on every trading account and stored in the Affirmation object.

path Parameters
enterpriseId
required
string

Enterprise ID

accountId
required
string

Trading Account ID

Request Body schema: application/json
payload
string (Trade Payload)

This payload must be cryptographically signed with a trading account's private key to authorize the movement of funds

signature
string

The payload cryptographically signed by trading account

Array of objects (Trade) [ items ]

Responses

Response Schema: application/json
id
string <uuid>

Settlement ID

requesterAccountId
string

Trading account that is requesting settlement

requesterAccountName
string

Name of trading account that is requesting settlement

status
string (SettlementStatus)
Enum: "canceled" "pending" "rejected" "settled" "failed"

The current status of the settlement

type
string
Enum: "direct" "agency"

The current status of the settlement

Array of objects (Affirmation) [ items ]
expireAt
string <date-time>

ISO date string

finalizedAt
string <date-time>

ISO date string

createdAt
string <date-time>

ISO date string

Array of objects (Trade) [ items ]

Request samples

Content type
application/json
{
  • "payload": "{\"version\":\"1.2.0\",\"accountId\":\"59cd72485007a239fb00282ed480da1f\",\"amounts\":[{\"accountId\":\"5e20faa843795147000da79b8a01f757\",\"sendSubtotal\":\"1000000\",\"sendAmount\":\"1000000\",\"sendCurrency\":\"ofctusd\",\"receiveAmount\":\"1000000\",\"receiveCurrency\":\"ofctbtc\"},{\"accountId\":\"59cd72485007a239fb00282ed480da1f\",\"sendSubtotal\":\"1000000\",\"sendAmount\":\"1000000\",\"sendCurrency\":\"ofctbtc\",\"receiveAmount\":\"1000000\",\"receiveCurrency\":\"ofctusd\"}],\"nonceHold\":\"zq/aCtZC4XOlDyRGFdlsww==\",\"nonceSettle\":\"FnG6xbzehNn0o/0Qt3UeUg==\"}",
  • "signature": "1f0f5b4b45106f98bb9c67ba525ead5bd919f14ab1258e25ab16f9d530856f307228431104f39eb0a249f88cd66a79abfe7aee1de96a288af237b4202c82dd8919",
  • "trades": [
    • {
      }
    ]
}

Response samples

Content type
application/json
{
  • "id": "5be99b8a-6eb5-4ed6-b135-894bb22c5454",
  • "requesterAccountId": "5caed8b6e9abd8e865e3a942a74967d3",
  • "requesterAccountName": "Enterprise A Trading Account",
  • "status": "pending",
  • "type": "direct",
  • "affirmations": [
    • {
      }
    ],
  • "expireAt": "2019-08-24T14:15:22Z",
  • "finalizedAt": "2019-08-24T14:15:22Z",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "trades": [
    • {
      }
    ]
}

List Settlements by Trading Account

The List Settlements by Trading Account API lists Settlements under a trading account. Settlements can also be filtered by status.

path Parameters
enterpriseId
required
string

Enterprise ID

accountId
required
string

Trading Account ID

query Parameters
status
string (SettlementStatus)
Enum: "canceled" "pending" "rejected" "settled" "failed"
Example: status=pending

Filter by Settlement status

Responses

Response Schema: application/json
Array
id
string <uuid>

Settlement ID

requesterAccountId
string

Trading account that is requesting settlement

requesterAccountName
string

Name of trading account that is requesting settlement

status
string (SettlementStatus)
Enum: "canceled" "pending" "rejected" "settled" "failed"

The current status of the settlement

type
string
Enum: "direct" "agency"

The current status of the settlement

Array of objects (Affirmation) [ items ]
expireAt
string <date-time>

ISO date string

finalizedAt
string <date-time>

ISO date string

createdAt
string <date-time>

ISO date string

Array of objects (Trade) [ items ]

Response samples

Content type
application/json
[
  • {
    • "id": "5be99b8a-6eb5-4ed6-b135-894bb22c5454",
    • "requesterAccountId": "5caed8b6e9abd8e865e3a942a74967d3",
    • "requesterAccountName": "Enterprise A Trading Account",
    • "status": "pending",
    • "type": "direct",
    • "affirmations": [
      ],
    • "expireAt": "2019-08-24T14:15:22Z",
    • "finalizedAt": "2019-08-24T14:15:22Z",
    • "createdAt": "2019-08-24T14:15:22Z",
    • "trades": [
      ]
    }
]

List Settlements by Enterprise

The List Settlements by Enterprise API lists Settlements under an enterprise. Settlements can also be filtered by status.

path Parameters
enterpriseId
required
string

Enterprise ID

query Parameters
status
string (SettlementStatus)
Enum: "canceled" "pending" "rejected" "settled" "failed"
Example: status=pending

Filter by Settlement status

Responses

Response Schema: application/json
Array
id
string <uuid>

Settlement ID

requesterAccountId
string

Trading account that is requesting settlement

requesterAccountName
string

Name of trading account that is requesting settlement

status
string (SettlementStatus)
Enum: "canceled" "pending" "rejected" "settled" "failed"

The current status of the settlement

type
string
Enum: "direct" "agency"

The current status of the settlement

Array of objects (Affirmation) [ items ]
expireAt
string <date-time>

ISO date string

finalizedAt
string <date-time>

ISO date string

createdAt
string <date-time>

ISO date string

Array of objects (Trade) [ items ]

Response samples

Content type
application/json
[
  • {
    • "id": "5be99b8a-6eb5-4ed6-b135-894bb22c5454",
    • "requesterAccountId": "5caed8b6e9abd8e865e3a942a74967d3",
    • "requesterAccountName": "Enterprise A Trading Account",
    • "status": "pending",
    • "type": "direct",
    • "affirmations": [
      ],
    • "expireAt": "2019-08-24T14:15:22Z",
    • "finalizedAt": "2019-08-24T14:15:22Z",
    • "createdAt": "2019-08-24T14:15:22Z",
    • "trades": [
      ]
    }
]

Get Settlement

The Get Settlement API gets a Settlement by ID.

path Parameters
enterpriseId
required
string

Enterprise ID

accountId
required
string

Trading Account ID

settlementId
required
string

Settlement ID

Responses

Response Schema: application/json
id
string <uuid>

Settlement ID

requesterAccountId
string

Trading account that is requesting settlement

requesterAccountName
string

Name of trading account that is requesting settlement

status
string (SettlementStatus)
Enum: "canceled" "pending" "rejected" "settled" "failed"

The current status of the settlement

type
string
Enum: "direct" "agency"

The current status of the settlement

Array of objects (Affirmation) [ items ]
expireAt
string <date-time>

ISO date string

finalizedAt
string <date-time>

ISO date string

createdAt
string <date-time>

ISO date string

Array of objects (Trade) [ items ]

Response samples

Content type
application/json
{
  • "id": "5be99b8a-6eb5-4ed6-b135-894bb22c5454",
  • "requesterAccountId": "5caed8b6e9abd8e865e3a942a74967d3",
  • "requesterAccountName": "Enterprise A Trading Account",
  • "status": "pending",
  • "type": "direct",
  • "affirmations": [
    • {
      }
    ],
  • "expireAt": "2019-08-24T14:15:22Z",
  • "finalizedAt": "2019-08-24T14:15:22Z",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "trades": [
    • {
      }
    ]
}

List Affirmations by Trading Account

The List Affirmations by Trading Account API lists Affirmations under a trading account. Affirmations can also be filtered by status.

path Parameters
enterpriseId
required
string

Enterprise ID

accountId
required
string

Trading Account ID

query Parameters
status
string (AffirmationStatus)
Enum: "pending" "overdue" "rejected" "affirmed" "failed" "canceled"
Example: status=pending

Filter by Affirmation status

Responses

Response Schema: application/json
Array
id
string <uuid>

Affirmation ID

counterpartyAccountId
string <uuid>

The account ID of the counterparty

counterpartyName
string

The name of the counterparty's trading account

partyAccountId
string <uuid>

Trading account that the Affirmation belongs to

status
string (AffirmationStatus)
Enum: "pending" "overdue" "rejected" "affirmed" "failed" "canceled"

The current status of the affirmation

settlement
string <uuid>

Settlement ID associated with this Affirmation

object (Lock)

Assets locked up on a trading account

payload
string

Stringified JSON of trade payload. If the Affirmation signature is not found, then payload is automatically calculated and populated here

signature
string

The payload cryptographically signed by trading account. Used to authorize the movement of funds

createdAt
string <date-time>

ISO date string

expireAt
string <date-time>

ISO date string

Response samples

Content type
application/json
[
  • {
    • "id": "ff88a76c-af71-4f70-b136-ecb3e9b8dcbc",
    • "counterpartyAccountId": "5e20faa843795147000da79b8a01f757",
    • "counterpartyName": "Trader Account",
    • "partyAccountId": "59cd72485007a239fb00282ed480da1f",
    • "status": "pending",
    • "settlement": "5be99b8a-6eb5-4ed6-b135-894bb22c5454",
    • "lock": {
      },
    • "payload": "{\"version\":\"1.2.0\",\"accountId\":\"59cd72485007a239fb00282ed480da1f\",\"amounts\":[{\"accountId\":\"5e20faa843795147000da79b8a01f757\",\"sendSubtotal\":\"1000000\",\"sendAmount\":\"1000000\",\"sendCurrency\":\"ofctusd\",\"receiveAmount\":\"1000000\",\"receiveCurrency\":\"ofctbtc\"},{\"accountId\":\"59cd72485007a239fb00282ed480da1f\",\"sendSubtotal\":\"1000000\",\"sendAmount\":\"1000000\",\"sendCurrency\":\"ofctbtc\",\"receiveAmount\":\"1000000\",\"receiveCurrency\":\"ofctusd\"}],\"nonceHold\":\"zq/aCtZC4XOlDyRGFdlsww==\",\"nonceSettle\":\"FnG6xbzehNn0o/0Qt3UeUg==\"}",
    • "createdAt": "2019-05-02T00:37:48.804Z",
    • "expireAt": "2019-05-03T00:37:49.196Z"
    }
]

List Affirmations by Enterprise

The List Affirmations by Enterprise API lists Affirmations under an enterprise. Affirmations can also be filtered by status.

path Parameters
enterpriseId
required
string

Enterprise ID

query Parameters
status
string (AffirmationStatus)
Enum: "pending" "overdue" "rejected" "affirmed" "failed" "canceled"
Example: status=pending

Filter by Affirmation status

Responses

Response Schema: application/json
Array
id
string <uuid>

Affirmation ID

counterpartyAccountId
string <uuid>

The account ID of the counterparty

counterpartyName
string

The name of the counterparty's trading account

partyAccountId
string <uuid>

Trading account that the Affirmation belongs to

status
string (AffirmationStatus)
Enum: "pending" "overdue" "rejected" "affirmed" "failed" "canceled"

The current status of the affirmation

settlement
string <uuid>

Settlement ID associated with this Affirmation

object (Lock)

Assets locked up on a trading account

payload
string

Stringified JSON of trade payload. If the Affirmation signature is not found, then payload is automatically calculated and populated here

signature
string

The payload cryptographically signed by trading account. Used to authorize the movement of funds

createdAt
string <date-time>

ISO date string

expireAt
string <date-time>

ISO date string

Response samples

Content type
application/json
[
  • {
    • "id": "ff88a76c-af71-4f70-b136-ecb3e9b8dcbc",
    • "counterpartyAccountId": "5e20faa843795147000da79b8a01f757",
    • "counterpartyName": "Trader Account",
    • "partyAccountId": "59cd72485007a239fb00282ed480da1f",
    • "status": "pending",
    • "settlement": "5be99b8a-6eb5-4ed6-b135-894bb22c5454",
    • "lock": {
      },
    • "payload": "{\"version\":\"1.2.0\",\"accountId\":\"59cd72485007a239fb00282ed480da1f\",\"amounts\":[{\"accountId\":\"5e20faa843795147000da79b8a01f757\",\"sendSubtotal\":\"1000000\",\"sendAmount\":\"1000000\",\"sendCurrency\":\"ofctusd\",\"receiveAmount\":\"1000000\",\"receiveCurrency\":\"ofctbtc\"},{\"accountId\":\"59cd72485007a239fb00282ed480da1f\",\"sendSubtotal\":\"1000000\",\"sendAmount\":\"1000000\",\"sendCurrency\":\"ofctbtc\",\"receiveAmount\":\"1000000\",\"receiveCurrency\":\"ofctusd\"}],\"nonceHold\":\"zq/aCtZC4XOlDyRGFdlsww==\",\"nonceSettle\":\"FnG6xbzehNn0o/0Qt3UeUg==\"}",
    • "createdAt": "2019-05-02T00:37:48.804Z",
    • "expireAt": "2019-05-03T00:37:49.196Z"
    }
]

Get Affirmation

The Get Affirmation API gets an Affirmation by ID.

path Parameters
enterpriseId
required
string

Enterprise ID

accountId
required
string

Trading Account ID

affirmationId
required
string

Affirmation ID

Responses

Response Schema: application/json
id
string <uuid>

Affirmation ID

counterpartyAccountId
string <uuid>

The account ID of the counterparty

counterpartyName
string

The name of the counterparty's trading account

partyAccountId
string <uuid>

Trading account that the Affirmation belongs to

status
string (AffirmationStatus)
Enum: "pending" "overdue" "rejected" "affirmed" "failed" "canceled"

The current status of the affirmation

settlement
string <uuid>

Settlement ID associated with this Affirmation

object (Lock)

Assets locked up on a trading account

payload
string

Stringified JSON of trade payload. If the Affirmation signature is not found, then payload is automatically calculated and populated here

signature
string

The payload cryptographically signed by trading account. Used to authorize the movement of funds

createdAt
string <date-time>

ISO date string

expireAt
string <date-time>

ISO date string

Response samples

Content type
application/json
{
  • "id": "ff88a76c-af71-4f70-b136-ecb3e9b8dcbc",
  • "counterpartyAccountId": "5e20faa843795147000da79b8a01f757",
  • "counterpartyName": "Trader Account",
  • "partyAccountId": "59cd72485007a239fb00282ed480da1f",
  • "status": "pending",
  • "settlement": "5be99b8a-6eb5-4ed6-b135-894bb22c5454",
  • "lock": {
    • "id": "b44616d8-142d-41d7-8037-b6b08f65919f",
    • "accountId": "5ca309aa4b389efa274c7fbc8cfc1c72",
    • "status": "active",
    • "amount": "1000000",
    • "currency": "ofctusd",
    • "createdAt": "2019-05-02T00:37:48.696Z"
    },
  • "payload": "{\"version\":\"1.2.0\",\"accountId\":\"59cd72485007a239fb00282ed480da1f\",\"amounts\":[{\"accountId\":\"5e20faa843795147000da79b8a01f757\",\"sendSubtotal\":\"1000000\",\"sendAmount\":\"1000000\",\"sendCurrency\":\"ofctusd\",\"receiveAmount\":\"1000000\",\"receiveCurrency\":\"ofctbtc\"},{\"accountId\":\"59cd72485007a239fb00282ed480da1f\",\"sendSubtotal\":\"1000000\",\"sendAmount\":\"1000000\",\"sendCurrency\":\"ofctbtc\",\"receiveAmount\":\"1000000\",\"receiveCurrency\":\"ofctusd\"}],\"nonceHold\":\"zq/aCtZC4XOlDyRGFdlsww==\",\"nonceSettle\":\"FnG6xbzehNn0o/0Qt3UeUg==\"}",
  • "createdAt": "2019-05-02T00:37:48.804Z",
  • "expireAt": "2019-05-03T00:37:49.196Z"
}

Update Affirmation

The Update Affirmation API handles affirming and rejecting an affirmation.

path Parameters
enterpriseId
required
string

Enterprise ID

accountId
required
string

Trading Account ID

affirmationId
required
string

Affirmation ID

Request Body schema: application/json

The Affirmations to update.

status
string
Enum: "affirmed" "rejected" "canceled"

The updated status of the Affirmation.

payload
string (Trade Payload)

This payload must be cryptographically signed with a trading account's private key to authorize the movement of funds

signature
string

The payload cryptographically signed by trading account.

Responses

Response Schema: application/json
id
string <uuid>

Affirmation ID

counterpartyAccountId
string <uuid>

The account ID of the counterparty

counterpartyName
string

The name of the counterparty's trading account

partyAccountId
string <uuid>

Trading account that the Affirmation belongs to

status
string (AffirmationStatus)
Enum: "pending" "overdue" "rejected" "affirmed" "failed" "canceled"

The current status of the affirmation

settlement
string <uuid>

Settlement ID associated with this Affirmation

object (Lock)

Assets locked up on a trading account

payload
string

Stringified JSON of trade payload. If the Affirmation signature is not found, then payload is automatically calculated and populated here

signature
string

The payload cryptographically signed by trading account. Used to authorize the movement of funds

createdAt
string <date-time>

ISO date string

expireAt
string <date-time>

ISO date string

Request samples

Content type
application/json
{
  • "status": "affirmed",
  • "payload": "{\"version\":\"1.2.0\",\"accountId\":\"59cd72485007a239fb00282ed480da1f\",\"amounts\":[{\"accountId\":\"5e20faa843795147000da79b8a01f757\",\"sendSubtotal\":\"1000000\",\"sendAmount\":\"1000000\",\"sendCurrency\":\"ofctusd\",\"receiveAmount\":\"1000000\",\"receiveCurrency\":\"ofctbtc\"},{\"accountId\":\"59cd72485007a239fb00282ed480da1f\",\"sendSubtotal\":\"1000000\",\"sendAmount\":\"1000000\",\"sendCurrency\":\"ofctbtc\",\"receiveAmount\":\"1000000\",\"receiveCurrency\":\"ofctusd\"}],\"nonceHold\":\"zq/aCtZC4XOlDyRGFdlsww==\",\"nonceSettle\":\"FnG6xbzehNn0o/0Qt3UeUg==\"}",
  • "signature": "1f0f5b4b45106f98bb9c67ba525ead5bd919f14ab1258e25ab16f9d530856f307228431104f39eb0a249f88cd66a79abfe7aee1de96a288af237b4202c82dd8919"
}

Response samples

Content type
application/json
{
  • "id": "ff88a76c-af71-4f70-b136-ecb3e9b8dcbc",
  • "counterpartyAccountId": "5e20faa843795147000da79b8a01f757",
  • "counterpartyName": "Trader Account",
  • "partyAccountId": "59cd72485007a239fb00282ed480da1f",
  • "status": "pending",
  • "settlement": "5be99b8a-6eb5-4ed6-b135-894bb22c5454",
  • "lock": {
    • "id": "b44616d8-142d-41d7-8037-b6b08f65919f",
    • "accountId": "5ca309aa4b389efa274c7fbc8cfc1c72",
    • "status": "active",
    • "amount": "1000000",
    • "currency": "ofctusd",
    • "createdAt": "2019-05-02T00:37:48.696Z"
    },
  • "payload": "{\"version\":\"1.2.0\",\"accountId\":\"59cd72485007a239fb00282ed480da1f\",\"amounts\":[{\"accountId\":\"5e20faa843795147000da79b8a01f757\",\"sendSubtotal\":\"1000000\",\"sendAmount\":\"1000000\",\"sendCurrency\":\"ofctusd\",\"receiveAmount\":\"1000000\",\"receiveCurrency\":\"ofctbtc\"},{\"accountId\":\"59cd72485007a239fb00282ed480da1f\",\"sendSubtotal\":\"1000000\",\"sendAmount\":\"1000000\",\"sendCurrency\":\"ofctbtc\",\"receiveAmount\":\"1000000\",\"receiveCurrency\":\"ofctusd\"}],\"nonceHold\":\"zq/aCtZC4XOlDyRGFdlsww==\",\"nonceSettle\":\"FnG6xbzehNn0o/0Qt3UeUg==\"}",
  • "createdAt": "2019-05-02T00:37:48.804Z",
  • "expireAt": "2019-05-03T00:37:49.196Z"
}

Trading Partners

Tools for referring and accessing trading partner details for clearing and settlement

List Trading Partners

The List Trading Partners API gets the trading partners for the given trading account.

path Parameters
enterpriseId
required
string

Enterprise ID

accountId
required
string

Trading Account ID

query Parameters
status
string (TradingPartnerStatus)
Enum: "accepted" "rejected" "canceled" "pending" "unknown"
Example: status=accepted

Status of trading partner relationship

Responses

Response Schema: application/json
Array of objects (TradingPartner) [ items ]

Response samples

Content type
application/json
{
  • "tradingPartners": [
    • {
      }
    ]
}

Add Trading Partner

The Add Trading Partners API lets you add a trading partner given your trading partner's referral code

path Parameters
enterpriseId
required
string

Enterprise ID

accountId
required
string

Trading Account ID

Request Body schema: application/json
referralCode
required
string

Trading partner's referral code

type
required
string (TradingPartnerType)
Enum: "direct" "agency"

Partnership type between two trading accounts

requesterSide
required
string (TradingReferralRequesterSide)
Enum: "primary" "secondary"

Requester is the primary or the secondary account in the trading partnership. e.g. If the requester wants their partner as the agent, then they are secondary account and their partner is the primary account.

Responses

Response Schema: application/json
id
string <uuid>

unique ID of the trading partnership, used for updating partnerships

primaryAccountId
string

primary account ID of the partnership

primaryEnterpriseName
string

enterprise name of the primary account ID

secondaryAccountId
string

secondary account ID of the partnership

secondaryEnterpriseName
string

enterprise name of the secondary account ID

status
string (TradingPartnerStatus)
Enum: "accepted" "rejected" "canceled" "pending" "unknown"

Partnership status between two trading accounts

type
string (TradingPartnerType)
Enum: "direct" "agency"

Partnership type between two trading accounts

updatedAt
string <date-time>

ISO date string

requesterAccountId
string

account ID that initiated the trading partner request

Request samples

Content type
application/json
{
  • "referralCode": "FC8G",
  • "type": "direct",
  • "requesterSide": "primary"
}

Response samples

Content type
application/json
{
  • "id": "456ed60d-3fd7-4463-88ba-1e489a48c530",
  • "primaryEnterpriseName": "Trading Partner Co.",
  • "primaryAccountId": "585cf0c85573c3a8416ac85f",
  • "secondaryEnterpriseName": "Requester Co.",
  • "secondaryAccountId": "585ci0c855g3c3a8416ac85g",
  • "status": "accepted",
  • "type": "direct",
  • "updatedAt": "2019-05-03T00:37:49.196Z",
  • "requesterAccountId": "585ci0c855g3c3a8416ac85g"
}

List Trading Partners By Enterprise

The List Trading Partners By Enterprise API gets the trading partners for the given enterprise.

path Parameters
enterpriseId
required
string

Enterprise ID

query Parameters
status
string (TradingPartnerStatus)
Enum: "accepted" "rejected" "canceled" "pending" "unknown"
Example: status=accepted

Status of trading partner relationship

Responses

Response Schema: application/json
Array of objects (TradingPartner) [ items ]

Response samples

Content type
application/json
{
  • "tradingPartners": [
    • {
      }
    ]
}

Update Trading Partner Request

The Update Trading Partner Request API allows you to accept, reject, or cancel a pending trading partner request

path Parameters
enterpriseId
required
string

Enterprise ID

accountId
required
string

Your trading account ID

partnershipId
required
string <uuid>

unique ID of the trading partnership that is to be updated

Request Body schema: application/json

Trading partner status update

status
required
string (TradingPartnerStatus)
Enum: "accepted" "rejected" "canceled" "pending" "unknown"

Partnership status between two trading accounts

Responses

Response Schema: application/json
id
string <uuid>

unique ID of the trading partnership, used for updating partnerships

primaryAccountId
string

primary account ID of the partnership

primaryEnterpriseName
string

enterprise name of the primary account ID

secondaryAccountId
string

secondary account ID of the partnership

secondaryEnterpriseName
string

enterprise name of the secondary account ID

status
string (TradingPartnerStatus)
Enum: "accepted" "rejected" "canceled" "pending" "unknown"

Partnership status between two trading accounts

type
string (TradingPartnerType)
Enum: "direct" "agency"

Partnership type between two trading accounts

updatedAt
string <date-time>

ISO date string

requesterAccountId
string

account ID that initiated the trading partner request

Request samples

Content type
application/json
{
  • "status": "accepted"
}

Response samples

Content type
application/json
{
  • "id": "456ed60d-3fd7-4463-88ba-1e489a48c530",
  • "primaryEnterpriseName": "Trading Partner Co.",
  • "primaryAccountId": "585cf0c85573c3a8416ac85f",
  • "secondaryEnterpriseName": "Requester Co.",
  • "secondaryAccountId": "585ci0c855g3c3a8416ac85g",
  • "status": "accepted",
  • "type": "direct",
  • "updatedAt": "2019-05-03T00:37:49.196Z",
  • "requesterAccountId": "585ci0c855g3c3a8416ac85g"
}

Account Balance Check

The Account Balance Check API verifies whether an account has enough funds to support a settlement of some amount.

path Parameters
enterpriseId
required
string

Enterprise ID

accountId
required
string

Your trading account ID

partnerAccountId
required
string

Trading partner's trading account ID to balance check

query Parameters
amount
required
string

Amount of offchain currency to balance check. Integer as a string

currency
required
string

Offchain currency to balance check

Responses

Response Schema: application/json
check
boolean

Response samples

Content type
application/json
{
  • "check": true
}

Portfolio REST API

Rate-Limiting

All REST endpoints are rate-limited to 10 requests/second. Once the limit is reached, requests will be rejected with 429 Too Many Requests

The following headers are returned on every request

HeaderDescription
X-Ratelimit-LimitRequest limit per second
X-Ratelimit-RemainingRemaining number of requests allowed in interval
X-Ratelimit-ResetDuration in milliseconds until the total quota resets
The following header is also returned if the response is 429 Too Many Requests
HeaderDescription
Retry-AfterDuration in seconds of how long to wait before making a new request

Get Current User

Get the current user’s public information

Responses

Response Schema: application/json
id
required
string <uuid>
firstName
required
string
lastName
required
string
email
required
string <email>

Response samples

Content type
application/json
{
  • "id": "a253c86c-1f0f-42cc-bcd0-2dcc5040b204",
  • "firstName": "Uncle",
  • "lastName": "MoneyPenny",
  • "email": "uncle.moneypenny@bitgo.com"
}

List Portfolios

Get a list of the portfolios to which the user with the access token belongs

Responses

Response Schema: application/json
Array
id
required
string <uuid>
name
required
string
organization_id
required
string <uuid>
organization_name
required
string

Response samples

Content type
application/json
[
  • {
    • "id": "c702a0d4-0a09-4d86-bd6a-76540359a497",
    • "name": "Main Portfolio",
    • "organization_id": "15e108fd-4ea8-458a-b329-cc4750729e9b",
    • "organization_name": "Lumina Technologies, Inc."
    }
]

List Historical Prices

Get a list of daily historical prices in the portfolio's functional currency - defaults to prior month

path Parameters
portfolioId
required
string

The id of the portfolio to retrieve

query Parameters
instrument
required
string

Symbol of instrument to be queried

startDate
string <date-time>

Must be provided if endDate is provided. Otherwise, will default to one month ago

endDate
string <date-time>

Must have corresponding startDate if provided

Responses

Response Schema: application/json
Array
time
required
string <date-time>
open
required
number <float>
high
required
number <float>
low
required
number <float>
close
required
number <float>
base_volume
required
number <float>
quote_volume
required
number <float>

Response samples

Content type
application/json
[
  • {
    • "time": "2014-11-07T22:19:28.578Z",
    • "open": 576.0590066,
    • "high": 576.0590066,
    • "low": 575.8330204,
    • "close": 575.978887,
    • "base_volume": 296.23,
    • "quote_volume": 170627.62385
    }
]

List Connections

Get a list of the connections for a given portfolio to which the user with the access token belongs

path Parameters
portfolioId
required
string

The id of the portfolio to retrieve

Responses

Response Schema: application/json
Array
id
required
string <uuid>
name
required
string
institution_id
required
string <uuid>
institution_name
required
string
last_sync
string <date-time>
sync_status
string (SyncStatus)
Enum: "idle" "scheduled" "processing" "error"

Response samples

Content type
application/json
[
  • {
    • "id": "35de9881-731b-475b-ab48-c39e3edd9985",
    • "name": "CoinbasePro",
    • "institution_id": "0911b966-3f6a-4320-8d64-a1d310a9d80e",
    • "institution_name": "Coinbase Pro",
    • "last_sync": "2018-03-28T16:58:30Z",
    • "sync_status": "idle"
    }
]

Get Connection

Get information for a single connection within a given portfolio to which the user with the access token belongs

path Parameters
portfolioId
required
string

The id of the portfolio to retrieve

connectionId
required
string

The id of the connection to retrieve

Responses

Response Schema: application/json
id
required
string <uuid>
name
required
string
institution_id
required
string <uuid>
institution_name
required
string
last_sync
string <date-time>
sync_status
string (SyncStatus)
Enum: "idle" "scheduled" "processing" "error"

Response samples

Content type
application/json
{
  • "id": "35de9881-731b-475b-ab48-c39e3edd9985",
  • "name": "CoinbasePro",
  • "institution_id": "0911b966-3f6a-4320-8d64-a1d310a9d80e",
  • "institution_name": "Coinbase Pro",
  • "last_sync": "2018-03-28T16:58:30Z",
  • "sync_status": "idle"
}

List Accounts

Get a list of the accounts for a given portfolio to which the user with the access token belongs

path Parameters
portfolioId
required
string

The id of the portfolio to retrieve

Responses

Response Schema: application/json
Array
id
required
string <uuid>
name
required
string
type
required
string (PortfolioAccountType)
Enum: "checking" "exchange" "savings" "blockchain_wallet" "custodial_wallet" "unaccounted_assets" "blockchain_hd_wallet" "custom" "broker" "blockchain_multisig_wallet" "trading_wallet"

Response samples

Content type
application/json
[
  • {
    • "id": "ca0eda2d-0b76-4aba-94dd-88bc06ea5b92",
    • "name": "Coinbase Pro Main Account",
    • "type": "exchange"
    }
]

Get Account

Get information for a single account within a given portfolio to which the user with the access token belongs

path Parameters
portfolioId
required
string

The id of the portfolio to retrieve

accountId
required
string

The id of the account to retrieve

Responses

Response Schema: application/json
id
required
string <uuid>
name
required
string
type
required
string (PortfolioAccountType)
Enum: "checking" "exchange" "savings" "blockchain_wallet" "custodial_wallet" "unaccounted_assets" "blockchain_hd_wallet" "custom" "broker" "blockchain_multisig_wallet" "trading_wallet"

Response samples

Content type
application/json
{
  • "id": "ca0eda2d-0b76-4aba-94dd-88bc06ea5b92",
  • "name": "Coinbase Pro Main Account",
  • "type": "exchange"
}

List Balances

Get balance information (grouped by instrument) for a single portfolio to which the user with the access token belongs

path Parameters
portfolioId
required
string

The id of the portfolio to retrieve

Responses

Response Schema: application/json
Array
instrument_id
required
string <uuid>
instrument_symbol
string

Currency symbol

quantity
required
string <decimal>
marketPrice
required
string <decimal>
marketValue
required
string <decimal>

Response samples

Content type
application/json
[
  • {
    • "instrument_id": "6016e0a9-545a-45fb-8370-caab1680956a",
    • "instrument_symbol": "BTC",
    • "quantity": "0.02713510000000001",
    • "marketPrice": "15659.03",
    • "marketValue": "424.9093449530002"
    }
]

List Connection Balances

Get balance information (grouped by instrument) for a single connection within a given portfolio to which the user with the access token belongs

path Parameters
portfolioId
required
string

The id of the portfolio to retrieve

connectionId
required
string

The id of the connection to retrieve

Responses

Response Schema: application/json
Array
instrument_id
required
string <uuid>
instrument_symbol
string

Currency symbol

quantity
required
string <decimal>
marketPrice
required
string <decimal>
marketValue
required
string <decimal>

Response samples

Content type
application/json
[
  • {
    • "instrument_id": "6016e0a9-545a-45fb-8370-caab1680956a",
    • "instrument_symbol": "BTC",
    • "quantity": "0.02713510000000001",
    • "marketPrice": "15659.03",
    • "marketValue": "424.9093449530002"
    }
]

List Account Balances

Get balance information (grouped by instrument) for a single account within a given portfolio to which the user with the access token belongs

path Parameters
portfolioId
required
string

The id of the portfolio to retrieve

accountId
required
string

The id of the account to retrieve

Responses

Response Schema: application/json
Array
instrument_id
required
string <uuid>
instrument_symbol
string

Currency symbol

quantity
required
string <decimal>
marketPrice
required
string <decimal>
marketValue
required
string <decimal>

Response samples

Content type
application/json
[
  • {
    • "instrument_id": "6016e0a9-545a-45fb-8370-caab1680956a",
    • "instrument_symbol": "BTC",
    • "quantity": "0.02713510000000001",
    • "marketPrice": "15659.03",
    • "marketValue": "424.9093449530002"
    }
]

List Transactions

List all transactions for a given portfolio to which the user with the access token belongs

path Parameters
portfolioId
required
string

The id of the portfolio to retrieve

query Parameters
offset
integer
limit
integer

Responses

Response Schema: application/json
required
Array of objects (Transaction) [ items ]

Response samples

Content type
application/json
{
  • "data": [
    • {
      }
    ]
}

Get Transaction

Get details for a single transaction by Transaction ID within a given portfolio to which the user with the access token belongs

path Parameters
portfolioId
required
string

The id of the portfolio to retrieve

transactionId
required
string

The id of the transaction to retrieve

Responses

Response Schema: application/json
id
required
string <uuid>
trade_date
required
string <date-time>
settlement_date
required
string <date-time>
product
string

Product name e.g. BTC-USD

type
required
string (TransactionType)
Enum: "buy" "sell" "cash" "dividends_interest_fees" "pending" "transfer" "cancel" "blockchain_action"
subtype
required
string
transaction_hash
string
fees
required
string <decimal>
unitPrice
required
string <decimal>
quantity
required
string <decimal>
totalAmount
required
string <decimal>

Response samples

Content type
application/json
{
  • "id": "7e0c768e-2d16-4c1e-b39d-06fa20009397",
  • "trade_date": "2014-11-07T22:19:28.578Z",
  • "settlement_date": "2014-11-07T22:19:28.578Z",
  • "product": "BTC-USD",
  • "type": "buy",
  • "subtype": "deposit",
  • "transaction_hash": "",
  • "fees": "0",
  • "unitPrice": "10000.00",
  • "quantity": "0.001",
  • "totalAmount": "1"
}

List Line Items

List all accounting line items within a given portfolio to which the user with the access token belongs

path Parameters
portfolioId
required
string

The id of the portfolio to retrieve

query Parameters
offset
integer
limit
integer

Responses

Response Schema: application/json
required
Array of objects (LineItem) [ items ]

Response samples

Content type
application/json
{
  • "data": [
    • {
      }
    ]
}

Get Line Item

Get details for a single accounting line item by Line Item ID within a given portfolio to which the user with the access token belongs

path Parameters
portfolioId
required
string

The id of the portfolio to retrieve

itemId
required
string

The id of the accounting line item to retrieve

Responses

Response Schema: application/json
id
required
string <uuid>
exchange_order_id
string
exchange_trade_id
string
account_id
required
string <uuid>
connection_id
required
string <uuid>
transaction_date
required
string <date-time>
transaction_completed_date
required
string <date-time>
instrument_id
required
string <uuid>
instrument_symbol
required
string

Currency symbol

type
required
string (LineItemType)
Enum: "sent" "received"
source
required
string (LineItemSource)
Enum: "api" "csv" "manual" "system" "manual_reconciliation" "smart_reconciliation"
unitPrice
required
string <decimal>
quantity
required
string <decimal>
value
required
string <decimal>
transaction_hash
string
block_height
string <integer>
sent_address
string
received_address
string

Response samples

Content type
application/json
{
  • "id": "9c9989f1-d9e3-4015-93bf-596396d9543d",
  • "exchange_order_id": "ca20c088-c10d-440a-8b0d-73763170077f",
  • "exchange_trade_id": "cb5f1d08-14f6-42a7-a54b-421941702722",
  • "account_id": "7071983a-3349-4a16-98b5-e4b511aee328",
  • "connection_id": "c549df20-1517-4308-b8cd-71a70df4ff67",
  • "transaction_date": "2014-11-07T22:19:28.578Z",
  • "transaction_completed_date": "2014-11-07T22:19:28.578Z",
  • "instrument_id": "519824c6-b534-49b4-a636-22dfd0ade5cf",
  • "instrument_symbol": "USD",
  • "type": "received",
  • "source": "api",
  • "unitPrice": "1",
  • "quantity": "466.21",
  • "value": "466.21",
  • "transaction_hash": "3c0cb5ac1472571e4b196b1d4a774e41628ae165b1bee6685346ef8bf3a550ac",
  • "block_height": "",
  • "sent_address": "6bf7dfe3f7b3eaffb91165edb7a81e1523e6490e2497067e7d81600dbbe79ba11e592e5c7fd8",
  • "received_address": ""
}

Price kit

The Price kit is a partner kit from CryptoCompare that you can use to compare prices of cryptocurrency, tokens, and fiat.

Get historical prices

Get a list of historical prices in a specified time range.

query Parameters
base
required
string
Example: base=btc

The asset or currency to compare to the quote asset or currency (case insensitive).

quote
required
string
Example: quote=eth

The asset or currency to compare to the base asset or currency (case insensitive).

interval
required
string
Enum: "minute" "hour" "day"
Example: interval=hour

Unit of time.

start
string <date-time>
Example: start=2019-05-02T15:27:35.773Z

Start time for the pricing data range. If not provided, defaults to 1 interval before to the current time.

end
string <date-time>
Example: end=2019-05-02T15:27:35.773Z

End time for the pricing data range. If not provided, defaults to the current time.

Responses

Response Schema: application/json
time
required
string <date-time>
open
required
number <float>
high
required
number <float>
low
required
number <float>
close
required
number <float>
base_volume
required
number <float>
quote_volume
required
number <float>

Response samples

Content type
application/json
{
  • "time": "2014-11-07T22:19:28.578Z",
  • "open": 576.0590066,
  • "high": 576.0590066,
  • "low": 575.8330204,
  • "close": 575.978887,
  • "base_volume": 296.23,
  • "quote_volume": 170627.62385
}

Get spot prices

Get historical spot prices from a specific time.

query Parameters
base
required
string
Example: base=btc

The asset or currency to compare to the quote asset or currency (case insensitive).

quote
required
string
Example: quote=eth

The asset or currency to compare to the base asset or currency (case insensitive).

interval
required
string
Enum: "minute" "hour" "day"
Example: interval=hour

Unit of time.

timestamp
string <date-time>

Responses

Response Schema: application/json
time
required
string <date-time>
open
required
number <float>
high
required
number <float>
low
required
number <float>
close
required
number <float>
base_volume
required
number <float>
quote_volume
required
number <float>

Response samples

Content type
application/json
{
  • "time": "2014-11-07T22:19:28.578Z",
  • "open": 576.0590066,
  • "high": 576.0590066,
  • "low": 575.8330204,
  • "close": 575.978887,
  • "base_volume": 296.23,
  • "quote_volume": 170627.62385
}

Trade REST API

Rate-Limiting

All REST endpoints are rate-limited to 10 requests/second. Once the limit is reached, requests will be rejected with 429 Too Many Requests

The following headers are returned on every request

HeaderDescription
X-Ratelimit-LimitRequest limit per second
X-Ratelimit-RemainingRemaining number of requests allowed in interval
X-Ratelimit-ResetDuration in milliseconds until the total quota resets
The following header is also returned if the response is 429 Too Many Requests
HeaderDescription
Retry-AfterDuration in seconds of how long to wait before making a new request

Get Current User

Get the current user’s public information.

Responses

Response Schema: application/json
id
required
string <uuid>
firstName
required
string
lastName
required
string
email
required
string <email>

Response samples

Content type
application/json
{
  • "id": "a253c86c-1f0f-42cc-bcd0-2dcc5040b204",
  • "firstName": "Uncle",
  • "lastName": "MoneyPenny",
  • "email": "uncle.moneypenny@bitgo.com"
}

List Accounts

Get the list of trading accounts that the current user belongs to.

Responses

Response Schema: application/json
required
Array of objects (Accounts) [ items ]

Response samples

Content type
application/json
{
  • "data": [
    • {
      }
    ]
}

Get Account Balance

Get balance information about a single trading account.

path Parameters
accountId
required
string

The id of the trading account to retrieve

Responses

Response Schema: application/json
required
Array of objects (AccountBalances) [ items ]

Response samples

Content type
application/json
{
  • "data": [
    • {
      }
    ]
}

List Orders

Lists all orders from the given trading account.

path Parameters
accountId
required
string

The id of the trading account to retrieve

query Parameters
offset
integer
limit
integer
clientOrderId
string

The clientOrderId of the order to retrieve

dateGte
string <date-time>

Return client orders with a creationDate that is greater than or equal to the given timestamp

dateLt
string <date-time>

Return client orders with a creationDate that is less than the given timestamp

Responses

Response Schema: application/json
required
Array of objects (Orders) [ items ]

Response samples

Content type
application/json
{
  • "data": [
    • {
      }
    ]
}

Place Order

Places a new order. There are several types of orders available - Market, Limit, and TWAP (with or without a limit). Orders can only be placed if your account has a sufficient balance. When an order is placed, funds will be reserved for the amount of the order.

path Parameters
accountId
required
string

The id of the trading account to retrieve

Request Body schema: application/json
One of
clientOrderId
string
product
required
string

Product name e.g. BTC-USD

type
required
string

Must be set to "market"

side
required
string (Side)
Enum: "buy" "sell"
quantity
required
string <decimal>
quantityCurrency
required
string

The quantity currency must be in quote currency for buy and base currency for sell. e.g. If product is BTC-USD, the base currency will be BTC.

Responses

Response Schema: application/json
id
required
string <uuid>
accountId
required
string
clientOrderId
string
time
required
string <date-time>

DEPRECATED

creationDate
required
string <date-time>
scheduledDate
string <date-time>
lastFillDate
string <date-time>
completionDate
required
string <date-time>
settleDate
string <date-time>
type
required
string
fundingType
required
string
Enum: "margin" "funded"
status
required
string (OrderStatus)
Enum: "pending_open" "open" "completed" "pending_cancel" "canceled" "error"
product
required
string

Product name e.g. BTC-USD

side
required
string (Side)
Enum: "buy" "sell"
quantity
required
string <decimal>

The specified quantity.

quantityCurrency
required
string

The specified quantity currency.

filledQuantity
required
string <decimal>
averagePrice
required
string <decimal>

Request samples

Content type
application/json
Example
{
  • "clientOrderId": "myorder1",
  • "type": "market",
  • "product": "BTC-USD",
  • "side": "buy",
  • "quantity": "10000",
  • "quantityCurrency": "USD"
}

Response samples

Content type
application/json
{
  • "id": "67fd640c-cb6c-4218-80ae-49e79ec15646",
  • "accountId": "60e740e7898f7d00064d43769a73dc48",
  • "clientOrderId": "myorderid1",
  • "time": "2021-08-05T18:05:23.431Z",
  • "creationDate": "2021-08-05T18:05:22.286Z",
  • "scheduledDate": "2021-08-05T18:05:00.000Z",
  • "lastFillDate": "2021-08-05T18:05:23.302Z",
  • "completionDate": "2021-08-05T18:05:23.431Z",
  • "settleDate": "2021-08-05T20:00:00.000Z",
  • "fundingType": "funded",
  • "type": "market",
  • "status": "completed",
  • "product": "BTC-USD",
  • "side": "buy",
  • "quantity": "1000",
  • "quantityCurrency": "USD",
  • "filledQuantity": "0.02457152",
  • "averagePrice": "40697.32"
}

Get Order

Get a single order by order id.

path Parameters
accountId
required
string

The id of the trading account to retrieve

orderId
required
string

The id of the order to retrieve

Responses

Response Schema: application/json
id
required
string <uuid>
accountId
required
string
clientOrderId
string
time
required
string <date-time>

DEPRECATED

creationDate
required
string <date-time>
scheduledDate
string <date-time>
lastFillDate
string <date-time>
completionDate
required
string <date-time>
settleDate
string <date-time>
type
required
string
fundingType
required
string
Enum: "margin" "funded"
status
required
string (OrderStatus)
Enum: "pending_open" "open" "completed" "pending_cancel" "canceled" "error"
product
required
string

Product name e.g. BTC-USD

side
required
string (Side)
Enum: "buy" "sell"
quantity
required
string <decimal>

The specified quantity.

quantityCurrency
required
string

The specified quantity currency.

filledQuantity
required
string <decimal>
averagePrice
required
string <decimal>

Response samples

Content type
application/json
{
  • "id": "67fd640c-cb6c-4218-80ae-49e79ec15646",
  • "accountId": "60e740e7898f7d00064d43769a73dc48",
  • "clientOrderId": "myorderid1",
  • "time": "2021-08-05T18:05:23.431Z",
  • "creationDate": "2021-08-05T18:05:22.286Z",
  • "scheduledDate": "2021-08-05T18:05:00.000Z",
  • "lastFillDate": "2021-08-05T18:05:23.302Z",
  • "completionDate": "2021-08-05T18:05:23.431Z",
  • "settleDate": "2021-08-05T20:00:00.000Z",
  • "fundingType": "funded",
  • "type": "market",
  • "status": "completed",
  • "product": "BTC-USD",
  • "side": "buy",
  • "quantity": "1000",
  • "quantityCurrency": "USD",
  • "filledQuantity": "0.02457152",
  • "averagePrice": "40697.32"
}

Cancel Order

Attempt to cancel an order that was previously placed. The response will return successful if the cancel request is submitted. Use Get Order endpoint or subscribe to the orders websocket to get the order details.

path Parameters
accountId
required
string

The id of the trading account to retrieve

orderId
required
string

The id of the order to retrieve

Responses

Response samples

Content type
application/json
{
  • "error": "invalid permission",
  • "errorName": "backend:common:forbidden",
  • "reqId": "d41d4d21e63d63b293caf55f2a739a79"
}

List Trades

Lists trades from the trading account. This will include trades that have not yet settled.

path Parameters
accountId
required
string

The id of the trading account to retrieve

query Parameters
offset
integer
limit
integer
orderId
string <uuid>

The orderId of the trades to retrieve

dateGte
string <date-time>

Return exchange trades with a trade date that is greater than or equal to the given timestamp

dateLt
string <date-time>

Return exchange trades with a trade date that is less than the given timestamp

Responses

Response Schema: application/json
required
Array of objects (Trades) [ items ]

Response samples

Content type
application/json
{
  • "data": [
    • {
      }
    ]
}

Get Trade

Get the details of a single trade by trade id.

path Parameters
accountId
required
string

The id of the trading account to retrieve

tradeId
required
string

The id of the trade to retrieve

Responses

Response Schema: application/json
id
required
string <uuid>
orderId
required
string <uuid>
time
required
string <date-time>
product
required
string

Product name e.g. BTC-USD

side
required
string (Side)
Enum: "buy" "sell"
price
required
string <decimal>
quantity
required
string <decimal>
settled
required
boolean

Response samples

Content type
application/json
{
  • "id": "7e0c768e-2d16-4c1e-b39d-06fa20009397",
  • "orderId": "d50ec984-77a8-460a-b958-66f114b0de9b",
  • "time": "2014-11-07T22:19:28.578Z",
  • "side": "buy",
  • "product": "BTC-USD",
  • "price": "10000.00",
  • "quantity": "0.01",
  • "settled": true
}

List Currencies

Gets a list of all available currencies.

path Parameters
accountId
required
string

The id of the trading account to retrieve

Responses

Response Schema: application/json
required
Array of objects (Currencies) [ items ]

Response samples

Content type
application/json
{
  • "data": [
    • {
      }
    ]
}

List Products

Gets a list of all available products.

path Parameters
accountId
required
string

The id of the trading account to retrieve

Responses

Response Schema: application/json
required
Array of objects (Products) [ items ]

Response samples

Content type
application/json
{
  • "data": [
    • {
      }
    ]
}

Get Level1 Order Book

Gets a snapshot of the level1 order book for product

path Parameters
accountId
required
string

The id of the trading account to retrieve

product
required
string

The name of the product

Responses

Response Schema: application/json
time
required
string <date-time>
product
required
string

Product name e.g. BTC

bidPrice
required
string <decimal>
bidSize
required
string <decimal>
askPrice
required
string <decimal>
askSize
required
string <decimal>

Response samples

Content type
application/json
{
  • "time": "2020-01-14T00:00:00.123Z",
  • "product": "BTC-USD",
  • "bidPrice": "7090.96",
  • "bidSize": "1.253433",
  • "askPrice": "7090.97",
  • "askSize": "25.23881"
}

Get Level2 Order Book

Gets a snapshot of the order book for product

path Parameters
accountId
required
string

The id of the trading account to retrieve

product
required
string

The name of the product

Responses

Response Schema: application/json
time
required
string <date-time>
product
required
string

Product name e.g. BTC

bids
required
Array of strings <decimal>

An array of levels of [price, size]

asks
required
Array of strings <decimal>

An array of levels of [price, size]

Response samples

Content type
application/json
{
  • "time": "2020-01-14T00:00:00.123Z",
  • "product": "BTC-USD",
  • "bids": [
    • [
      ]
    ],
  • "asks": [
    • [
      ]
    ]
}

Trade Websocket API

The websocket feed provides real-time market data updates for the orderbook, orders, and trades.

Endpoints

Environment Endpoint
Production wss://app.bitgo.com/api/prime/trading/v1/ws
Test wss://app.bitgo-test.com/api/prime/trading/v1/ws

Authentication

Authorization: Bearer <access token>

Timeout

The websocket connection is only valid for 60 seconds if no messages are sent/recieved. To keep the connection alive, the client must respond to PING frames with a PONG.

The Level2 Channel

The level2 Channel will provide a feed of snapshots of the order book.

Subscribe

In order to subscribe, you must indicate the accountId, channel and productId.

{
  "type": "subscribe",
  "accountId": "f230fdebfa084ffebc7e00515f54603f",
  "channel": "level2",
  "productId": "BTC-USD"
}

Messages

{
  "channel": "level2",
  "type": "snapshot",
  "product": "BTC-USD",
  "time": "2020-01-01T09:35:26.465Z",
  "bids": [["7001.10", "1.5084"]],
  "asks": [["7002.55", "2.7524"]],
}
{
  "channel": "level2",
  "type": "error",
  "message": "invalid product BTC-ETH",
  "time": "2020-01-01T09:35:26.465Z",
}

The Orders Channel

The orders channel provides updates to client orders and will let you know if an order is: Created, Completed, Canceled, or if there is an Error. This channel will also provide updates to individual fills within an order.

Subscribe

{
  "type": "subscribe",
  "channel": "orders",
  "accountId": "f230fdebfa084ffebc7e00515f54603f",
}

Messages

Order Creation Update
{
  "channel": "order",
  "time": "2019-04-25T01:02:03.045678Z",
  "accountId": "f230fdebfa084ffebc7e00515f54603f",
  "orderId": "14db12f5-4d3d-4fd8-8ced-062aa81bb4bc",
  "clientOrderId": "my-order-1",
  "product": "BTC-USD",
  "status": "opened",
  "type": "market",
  "side": "buy",
  "quantity": "1.01",
}
Fill Update
{
  "channel": "order",
  "time": "2019-04-25T01:02:04.045678Z",
  "accountId": "f230fdebfa084ffebc7e00515f54603f",
  "orderId": "14db12f5-4d3d-4fd8-8ced-062aa81bb4bc",
  "clientOrderId": "my-order-1",
  "product": "BTC-USD",
  "status": "opened",
  "type": "market",
  "side": "buy",
  "quantity": "1.01",
  "cumulativeQuantity": "0.50",
  "averagePrice": "7090.1",
  "tradeId": "a6a9ab1b-2947-41b7-b44d-4ce61fca8b92",
  "fillQuantity": "0.50",
  "fillPrice": "7090.1",
}
Order Completed
{
  "channel": "order",
  "time": "2019-04-25T01:02:03.045678Z",
  "accountId": "f230fdebfa084ffebc7e00515f54603f",
  "orderId": "14db12f5-4d3d-4fd8-8ced-062aa81bb4bc",
  "clientOrderId": "my-order-1",
  "product": "BTC-USD",
  "status": "completed",
  "type": "market",
  "side": "buy",
  "quantity": "1.01",
  "cumulativeQuantity": "1.01",
  "averagePrice": "7090.1",
}
Order Canceled
{
  "channel": "order",
  "time": "2019-04-25T01:02:03.045678Z",
  "accountId": "f230fdebfa084ffebc7e00515f54603f",
  "orderId": "14db12f5-4d3d-4fd8-8ced-062aa81bb4bc",
  "clientOrderId": "my-order-1",
  "product": "BTC-USD",
  "status": "canceled",
  "type": "market",
  "side": "buy",
  "quantity": "1.01",
  "cumulativeQuantity": "0.50",
  "averagePrice": "7090.1",
}
Order Error
{
  "channel": "order",
  "time": "2019-04-25T01:02:03.045678Z",
  "accountId": "f230fdebfa084ffebc7e00515f54603f",
  "orderId": "14db12f5-4d3d-4fd8-8ced-062aa81bb4bc",
  "clientOrderId": "my-order-1",
  "product": "BTC-USD",
  "status": "error",
  "message": "insufficient fund",
  "type": "market",
  "side": "buy",
  "quantity": "1.01",
  "cumulativeQuantity": "0.50",
  "averagePrice": "7090.1",
}

Address

List addresses

List receive addresses on a wallet

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
query Parameters
labelContains
string

A case-insensitive regular expression which will be used to filter returned addresses based on their address label.

limit
integer [ 1 .. 500 ]
Default: 25

Maximum number of results to return. If the result set is truncated, use the nextBatchPrevId value to get the next batch.

mine
boolean
Default: false

Whether to return only the addresses which the current user has created.

prevId
string (Id) ^[0-9a-f]{32}$
Example: prevId=59cd72485007a239fb00282ed480da1f

Return the next batch of results, based on the nextBatchPrevId value from the previous batch.

segwit
boolean

DEPRECATED. Mutually exclusive with chains. Returns only p2shP2wsh unspents/addresses on true. Returns only p2sh unspents/addresses on false. Equivalent to passing 10 and 11 as the only value in chains on true, 0 and 1 on false.

sort
integer
Default: 1
Enum: -1 1

Sort order of returned addresses. (1 for ascending, -1 for descending).

chain
integer (Chain)
Enum: 0 1 10 11 20 21 30 31
Example: chain=1

Filter by address chain. May be given multiple times.

includeBalances
boolean
Default: false

Whether to include address balances

includeTokens
boolean
Default: true

Whether to include token addresses

includeTotalAddressCount
boolean
Default: false

For large wallets (>100k addresses), include total count of addresses (including addresses pending on-chain) matching the query.

returnBalancesForToken
string

Name of the token that the response should include balances for. (Eth and Celo only)

pendingDeployment
boolean

Filter the addresses based on their deployment status. Return the deployed addresses if this param is passed as false and return undeployed addresses if it is passed as true. (Eth only)

Responses

Response Schema: application/json
coin
string
totalAddressCount
integer

Total number of addresses which match the provided query parameters. Note: for wallets with many addresses (100,000 or more), this property may be omitted for performance reasons. If the total address count is needed for a large wallet, the includeTotalAddressCount query parameter can be used to force an address count to be returned with the initial page of addresses.

pendingAddressCount
integer

Total number of addresses pending on-chain initialization on this wallet Note: for wallets with many addresses (100,000 or more), this property may be omitted for performance reasons. If the pending address count is needed for a large wallet, the includeTotalAddressCount query parameter can be used to force an address count to be returned with the initial page of addresses.

Array of objects (Address) [ items ]
nextBatchPrevId
string <uuid> (NextBatchPrevId)

When a result set is truncated, this field returns the id of the last object in the previous batch. To get the next batch of results, pass this value via the prevId query parameter.

count
integer

Total number of addresses returned in this response

Request samples

wallet.addresses().then(function (addresses) {
  // print addresses
  console.dir(addresses);
});

Response samples

Content type
application/json
{
  • "coin": "string",
  • "totalAddressCount": 0,
  • "pendingAddressCount": 0,
  • "addresses": [
    • {
      }
    ],
  • "nextBatchPrevId": "585951a5df8380e0e3063e9f",
  • "count": 0
}

Create address

This API call is used to create a new receive address for your wallet. You may choose to call this API whenever a deposit is made. The BitGo API supports millions of addresses. Please check the “Coin-Specific Implementation” with regards to fee address management for Ethereum and consolidation transactions for Algorand and Tezos.

Note, in Ethereum, new addresses are not returned immediately. This is because creating a new Ethereum address requires a blockchain transaction, which must be confirmed before the address can be used. You can save the "id" field in the response and use it to query for the address value after a short delay.

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
chain
integer (Chain)
Enum: 0 1 10 11 20 21 30 31
string or null (AddressLabel) <= 250 characters

A human-readable label for the address.

lowPriority
boolean
Default: false

Whether the deployment of the address forwarder contract should use a low priority fee key (ETH only)

number or string

Explicit gas price to use when deploying the forwarder contract (ETH only). If not given, defaults to the current estimated network gas price.

object

(ETH forwarderVersion: 0 wallets only) Specify eip1559 fee parameters in forwarder creation transactions.

forwarderVersion
integer [ 0 .. 2 ]

(ETH only) Specify forwarder version to use in address creation. In an effort to improve the cost of creating ETH forwarders, we have developed a new set of forwarder contracts that take advantage of several improvements. Specifically, forwarders are deployed as a simple proxy to a single implementation (https://eips.ethereum.org/EIPS/eip-1167), and forwarders are deployed using the CREATE2 opcode, enabling them to only be deployed when needed (https://eips.ethereum.org/EIPS/eip-1014). These new forwarders operate identically to current ETH forwarders. This flag is used to specify the forwarder contract version desired when deploying a forwarder contract. Use 0 for the old forwarder (https://github.com/BitGo/eth-multisig-v2), 1 for the new fee-improved forwarder (https://github.com/BitGo/eth-multisig-v4), and 2 for NFT supported forwarders.

onToken
string

Create an address for the given token

format
string

Format to use for the new address, if the coin which supports multiple formats for an address. Currently, Bitcoin Cash is the only coin which has support for multiple address formats. For Bitcoin Cash, BitGo supports both the base58 (legacy) address format, as well as the newer CashAddr format. The default address format is base58. To request a CashAddr formatted address instead, use the value cashaddr as the format.

Responses

Response Schema: application/json
id
string (Id) ^[0-9a-f]{32}$
address
string (AddressString) <= 250 characters
chain
integer (Chain)
Enum: 0 1 10 11 20 21 30 31
index
integer
coin
string
lastNonce
integer
Default: -1
wallet
string (Id) ^[0-9a-f]{32}$
object

Properties which are specific to certain coin types

object (AddressBalance)
string or null (AddressLabel) <= 250 characters

A human-readable label for the address.

addressType
string (AddressType)
Enum: "p2sh" "p2sh-p2wsh" "p2wsh"

Request samples

Content type
application/json
{
  • "chain": 1,
  • "label": "Bob's Hot Wallet Address",
  • "lowPriority": false,
  • "gasPrice": 0,
  • "eip1559": {
    • "maxPriorityFeePerGas": "string",
    • "maxFeePerGas": "string"
    },
  • "forwarderVersion": 2,
  • "onToken": "ofcbtc",
  • "format": "cashaddr"
}

Response samples

Content type
application/json
{
  • "id": "59cd72485007a239fb00282ed480da1f",
  • "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
  • "chain": 1,
  • "index": 0,
  • "coin": "string",
  • "lastNonce": -1,
  • "wallet": "59cd72485007a239fb00282ed480da1f",
  • "coinSpecific": {
    • "xlm": {
      },
    • "txlm": {
      }
    },
  • "balance": {
    • "updated": "2019-08-24T14:15:22Z",
    • "balance": 50000,
    • "balanceString": "50000",
    • "totalReceived": 0,
    • "totalSent": 0,
    • "confirmedBalanceString": "40000",
    • "spendableBalanceString": "40000"
    },
  • "label": "Bob's Hot Wallet Address",
  • "addressType": "p2sh"
}

Deploy address

This API call is to manually deploy an ETH address

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
addressId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
forceDeploy
boolean

Default: false Use forceDeploy: true to deploy the forwarder even if pendingDeployment flag is set as false

gasPrice
number

Explicit gas price to use when deploying the forwarder contract (ETH only). If not given, defaults to the current estimated network gas price.

object

Specify eip1559 fee parameters in forwarder creation transactions.

Responses

Response Schema: application/json
txId
string

Request samples

Content type
application/json
{
  • "forceDeploy": true,
  • "gasPrice": 0,
  • "eip1559": {
    • "maxPriorityFeePerGas": 0,
    • "maxFeePerGas": 0
    }
}

Response samples

Content type
application/json
{
  • "txId": "string"
}

Forward tokens from address

This API call is to manually forward tokens from an ETH or CELO address

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
addressId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
tokenName
string

Name of token that needs to be forwarded from the address

forceFlush
boolean

Default: false Use forceFlush: true to flush the tokens from forwarder irrespective of the balance of the forwarders

gasPrice
number

Explicit gas price to use when forwarding token from the forwarder contract (ETH and Celo only). If not given, defaults to the current estimated network gas price.

object

Specify eip1559 fee parameters in token forwarding transaction.

Responses

Response Schema: application/json
txId
string

Request samples

Content type
application/json
{
  • "tokenName": "string",
  • "forceFlush": true,
  • "gasPrice": 0,
  • "eip1559": {
    • "maxPriorityFeePerGas": 0,
    • "maxFeePerGas": 0
    }
}

Response samples

Content type
application/json
{
  • "txId": "string"
}

Get address

Gets a receive address on a wallet

path Parameters
addressOrId
required
string

Address or Id which will be used for information lookup

coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
query Parameters
dt
string

For XRP addresses

memoId
string

For XLM addresses

Responses

Response Schema: application/json
id
string (Id) ^[0-9a-f]{32}$
address
string (AddressString) <= 250 characters
chain
integer (Chain)
Enum: 0 1 10 11 20 21 30 31
index
integer
coin
string
lastNonce
integer
Default: -1
wallet
string (Id) ^[0-9a-f]{32}$
object

Properties which are specific to certain coin types

object
string or null (AddressLabel) <= 250 characters

A human-readable label for the address.

addressType
string (AddressType)
Enum: "p2sh" "p2sh-p2wsh" "p2wsh"

Request samples

wallet.getAddress({ address: '2NCzBK2Yf7PFAAfKsgc6cfTSG8FxtgMGG9C' }).then(function (address) {
  // print address
  console.dir(address);
});

Response samples

Content type
application/json
{
  • "id": "59cd72485007a239fb00282ed480da1f",
  • "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
  • "chain": 1,
  • "index": 0,
  • "coin": "string",
  • "lastNonce": -1,
  • "wallet": "59cd72485007a239fb00282ed480da1f",
  • "coinSpecific": {
    • "xlm": {
      },
    • "txlm": {
      }
    },
  • "balance": {
    • "updated": "2019-08-24T14:15:22Z",
    • "balance": 0,
    • "balanceString": "50000",
    • "totalReceived": 0,
    • "totalSent": 0,
    • "confirmedBalanceString": "40000",
    • "spendableBalanceString": "40000"
    },
  • "label": "Bob's Hot Wallet Address",
  • "addressType": "p2sh"
}

Update address

Update a receive address on a wallet

path Parameters
addressOrId
required
string

Address or Id which will be used for information lookup

coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
query Parameters
dt
string

For XRP addresses

memoId
string

For XLM addresses

Request Body schema: application/json
string or null (AddressLabel) <= 250 characters

A human-readable label for the address.

Responses

Response Schema: application/json
id
string (Id) ^[0-9a-f]{32}$
address
string (AddressString) <= 250 characters
chain
integer (Chain)
Enum: 0 1 10 11 20 21 30 31
index
integer
coin
string
lastNonce
integer
Default: -1
wallet
string (Id) ^[0-9a-f]{32}$
object

Properties which are specific to certain coin types

object
string or null (AddressLabel) <= 250 characters

A human-readable label for the address.

addressType
string (AddressType)
Enum: "p2sh" "p2sh-p2wsh" "p2wsh"

Request samples

Content type
application/json
{
  • "label": "Bob's Hot Wallet Address"
}

Response samples

Content type
application/json
{
  • "id": "59cd72485007a239fb00282ed480da1f",
  • "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
  • "chain": 1,
  • "index": 0,
  • "coin": "string",
  • "lastNonce": -1,
  • "wallet": "59cd72485007a239fb00282ed480da1f",
  • "coinSpecific": {
    • "xlm": {
      },
    • "txlm": {
      }
    },
  • "balance": {
    • "updated": "2019-08-24T14:15:22Z",
    • "balance": 0,
    • "balanceString": "50000",
    • "totalReceived": 0,
    • "totalSent": 0,
    • "confirmedBalanceString": "40000",
    • "spendableBalanceString": "40000"
    },
  • "label": "Bob's Hot Wallet Address",
  • "addressType": "p2sh"
}

Get proof of address ownership

Gets proof of ownership for an address on a wallet

path Parameters
addressOrId
required
string

Address or Id which will be used for information lookup

coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f

Responses

Response Schema: application/json
address
string

The address

chain
string

The coin name ('BITCOIN' or 'ETHEREUM')

iou
boolean

True if this is an IOU

signature
string

The proof signature

prefix
string

A 64-character random string used to generate the proof

proofType
string

The type of proof

Array of objects[ items ]

Response samples

Content type
application/json
{
  • "address": "string",
  • "chain": "string",
  • "iou": true,
  • "signature": "string",
  • "prefix": "string",
  • "proofType": "string",
  • "auxProofData": [
    • {
      }
    ]
}

Audit log

List audit logs

query Parameters
coin
Array of strings (Coin)
Example: coin=btc

Filter by coin(s). Must include coins to see activity on the wallets of those coins.

Id (string) or string

Filter by enterprise

limit
integer [ 1 .. 500 ]
Default: 25

Maximum number of results to return. If the result set is truncated, use the nextBatchPrevId value to get the next batch.

prevId
string (Id) ^[0-9a-f]{32}$
Example: prevId=59cd72485007a239fb00282ed480da1f

Return the next batch of results, based on the nextBatchPrevId value from the previous batch.

type
Array of strings (AuditLogType)
Items Enum: "addPolicy" "addUser" "addWebhook" "adminRenameEnterprise" "adminUpdateBankAccount" "adminUpdatePasswordReset" "approveEnterpriseUser" "approvePolicy" "approveTransaction" "approveUser" "bitgoSigned" "changePolicy" "createAccessToken" "createBankAccount" "createEnterprise" "createPasswordReset" "createReset2FA" "createSendLabel" "createTransaction" "createWallet" "deleteAccessToken" "deletePasswordReset" "deleteSendLabel" "freezeEnterprise" "freezeWallet" "labelAddress" "oAuthAuthorize" "policyUpdated" "rejectEnterpriseUser" "rejectPolicy" "rejectTransaction" "rejectUser" "removePolicy" "removeUser" "removeWallet" "removeWebhook" "renameWallet" "shareUser" "shareUserAccept" "shareUserCancel" "shareUserDecline" "supportReset2FA" "unlabelAddress" "updateApprovalsRequired" "updateBankAccount" "updateComment" "updateEnterpriseUser" "updateNotificationSettings" "updateSendLabel" "updateTag" "updateWalletCoinSpecific" "user2FAAdd" "user2FARemove" "userFailedLogin" "userLogin" "userPasswordChange" "userPasswordReset" "userSettingsChange" "userSignup" "userSourceVerified" "verifyReset2FA"

Filter by AuditLog type

walletId
string (Id) ^[0-9a-f]{32}$
Example: walletId=59cd72485007a239fb00282ed480da1f

Filter by wallet

Responses

Response Schema: application/json
required
Array of objects (AuditLog) [ items ]
nextBatchPrevId
string <uuid> (NextBatchPrevId)

When a result set is truncated, this field returns the id of the last object in the previous batch. To get the next batch of results, pass this value via the prevId query parameter.

Response samples

Content type
application/json
{
  • "logs": [
    • {
      }
    ],
  • "nextBatchPrevId": "585951a5df8380e0e3063e9f"
}

Enterprise

Get enterprise

path Parameters
enterpriseId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f

Responses

Response Schema: application/json
accountType
string (EnterpriseAccountType)
Enum: "individual" "entity"

Indicates which type of KYC process the enterprise has to complete

object (AdditionalEnterpriseInfo)
object
approvedVideoIdUsers
Array of strings (Id)

IDs of users on the enterprise that are approved for custodial video ID

approvalsRequired
integer

How many Enterprise Admins are required for action to fire

bitgoEthKey
string

The public portion of the ethererum key generated for the enterprise fee address

bitgoOrg
string (BitGoOrg)
Enum: "BitGo Inc" "BitGo Trust" "BitGo New York" "BitGo Germany" "BitGo Switzerland"

BitGo Organization related to this entity

canAccessBorrowing
boolean

whether the enterprise has the licence for BitGo Prime Borrowing

canAccessLending
boolean

whether the enterprise has the licence for BitGo Prime Lending

canAccessSettlement
boolean

whether the enterprise has the licence to utilize settlement functionality

canAccessTrading
boolean

whether the enterprise has the licence to access BitGo Trading

canCreateColdWallet
boolean

whether the enterprise has the license to create cold wallets

canCreateCustodialWallets
boolean

whether the enterprise has the license to create custodial wallets

canCreateHotWallet
boolean

whether the enterprise has the license to create hot wallets

canCreateOffchainWallet
boolean

whether the enterprise has the license to create trading accounts

emergencyPhone
string (EmergencyPhone)

Phone number for emergencies

ethFeeAddress
string

The eth fee address used to pay for network transaction fees of this enterprise

object (Freeze)
id
required
string (Id) ^[0-9a-f]{32}$
kycState
string (EnterpriseKycState)
Enum: "unverified" "approved" "rejected"
latestSAVersionSigned
integer
licenses
string (EnterpriseLicenses)
Enum: "bitgoNetwork" "marginTrading" "mtGox" "portfolioAPI" "portfolioBasic" "portfolioProfessional" "portfolioInstitutional" "tax" "tradeAPI" "staking" "metaMaskInstitutional" "cryptoCompare" "elliptic" "instantFeeHotWallet"
mutablePolicyWindow
integer

Time in seconds after which policies on this Enterprise cannot be updated

name
string
pricingPlan
string

The pricing plan of the enterprise

Array of objects (EnterprisePricingTypes) [ items ]
object (EnterpriseActivePricingType)
Array of objects (EnterpriseKits) [ items ]
Array of objects (EnterpriseActiveKits) [ items ]
primaryContact
string (Id) ^[0-9a-f]{32}$
usersViewAllWallets
boolean (ViewAllWallets)

All users on the enterprise can view all enterprise wallets, even if they are not viewers on the wallet itself

videoIdWaived
boolean (VideoIdWaived)

Whether the customer has waived the need for Video ID on low risk withdrawals.

Array of objects (EnterpriseTag) [ items ]
wallets
Array of strings

Response samples

Content type
application/json
{
  • "accountType": "individual",
  • "additionalEnterpriseInfo": {
    • "regulator": "string",
    • "regulatorId": "string",
    • "contact": {
      }
    },
  • "admin": {
    • "policy": {
      }
    },
  • "approvedVideoIdUsers": [
    • "59cd72485007a239fb00282ed480da1f"
    ],
  • "approvalsRequired": 1,
  • "bitgoEthKey": "string",
  • "bitgoOrg": "BitGo Inc",
  • "canAccessBorrowing": true,
  • "canAccessLending": true,
  • "canAccessSettlement": true,
  • "canAccessTrading": true,
  • "canCreateColdWallet": true,
  • "canCreateCustodialWallets": true,
  • "canCreateHotWallet": true,
  • "canCreateOffchainWallet": true,
  • "emergencyPhone": "+11234567890",
  • "ethFeeAddress": "string",
  • "freeze": {
    • "time": "2019-08-24T14:15:22Z",
    • "expires": "2019-08-24T14:15:22Z"
    },
  • "id": "59cd72485007a239fb00282ed480da1f",
  • "kycState": "unverified",
  • "latestSAVersionSigned": 0,
  • "licenses": "bitgoNetwork",
  • "mutablePolicyWindow": 172800,
  • "name": "Small Company",
  • "pricingPlan": "string",
  • "pricingTypes": [
    • {
      }
    ],
  • "activePricingType": {
    • "id": "string",
    • "startDate": "string",
    • "startReason": "string",
    • "endDate": "string",
    • "endReason": "string",
    • "name": "starter"
    },
  • "kits": [
    • {
      }
    ],
  • "activeKits": [
    • {
      }
    ],
  • "primaryContact": "59cd72485007a239fb00282ed480da1f",
  • "usersViewAllWallets": true,
  • "videoIdWaived": true,
  • "tags": [
    • {
      }
    ],
  • "wallets": [
    • "string"
    ]
}

Update enterprise

path Parameters
enterpriseId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
object (LegalIdentifiers)
object (AdditionalEnterpriseInfo)
approvalsRequired
integer >= 1

How many Enterprise Admins are required for action to fire

usersViewAllWallets
boolean

Allow users to view all wallets

Responses

Response Schema: application/json
accountType
string (EnterpriseAccountType)
Enum: "individual" "entity"

Indicates which type of KYC process the enterprise has to complete

object (AdditionalEnterpriseInfo)
object
approvedVideoIdUsers
Array of strings (Id)

IDs of users on the enterprise that are approved for custodial video ID

approvalsRequired
integer

How many Enterprise Admins are required for action to fire

bitgoEthKey
string

The public portion of the ethererum key generated for the enterprise fee address

bitgoOrg
string (BitGoOrg)
Enum: "BitGo Inc" "BitGo Trust" "BitGo New York" "BitGo Germany" "BitGo Switzerland"

BitGo Organization related to this entity

canAccessBorrowing
boolean

whether the enterprise has the licence for BitGo Prime Borrowing

canAccessLending
boolean

whether the enterprise has the licence for BitGo Prime Lending

canAccessSettlement
boolean

whether the enterprise has the licence to utilize settlement functionality

canAccessTrading
boolean

whether the enterprise has the licence to access BitGo Trading

canCreateColdWallet
boolean

whether the enterprise has the license to create cold wallets

canCreateCustodialWallets
boolean

whether the enterprise has the license to create custodial wallets

canCreateHotWallet
boolean

whether the enterprise has the license to create hot wallets

canCreateOffchainWallet
boolean

whether the enterprise has the license to create trading accounts

emergencyPhone
string (EmergencyPhone)

Phone number for emergencies

ethFeeAddress
string

The eth fee address used to pay for network transaction fees of this enterprise

object (Freeze)
id
required
string (Id) ^[0-9a-f]{32}$
kycState
string (EnterpriseKycState)
Enum: "unverified" "approved" "rejected"
latestSAVersionSigned
integer
licenses
string (EnterpriseLicenses)
Enum: "bitgoNetwork" "marginTrading" "mtGox" "portfolioAPI" "portfolioBasic" "portfolioProfessional" "portfolioInstitutional" "tax" "tradeAPI" "staking" "metaMaskInstitutional" "cryptoCompare" "elliptic" "instantFeeHotWallet"
mutablePolicyWindow
integer

Time in seconds after which policies on this Enterprise cannot be updated

name
string
pricingPlan
string

The pricing plan of the enterprise

Array of objects (EnterprisePricingTypes) [ items ]
object (EnterpriseActivePricingType)
Array of objects (EnterpriseKits) [ items ]
Array of objects (EnterpriseActiveKits) [ items ]
primaryContact
string (Id) ^[0-9a-f]{32}$
usersViewAllWallets
boolean (ViewAllWallets)

All users on the enterprise can view all enterprise wallets, even if they are not viewers on the wallet itself

videoIdWaived
boolean (VideoIdWaived)

Whether the customer has waived the need for Video ID on low risk withdrawals.

Response Schema: application/json
id
string (Id) ^[0-9a-f]{32}$
bitcoinAddress
string
enterprise
string (Id) ^[0-9a-f]{32}$
walletId
string

The base address of the associated wallet

creator
string (Id) ^[0-9a-f]{32}$
createDate
string <date-time>
object
state
string
Enum: "pending" "approved" "rejected"
walletUserIds
Array of strings (Id)

an array of all the Users on the Wallet who need to see this Pending Approval

approvalsRequired
number >= 1

Request samples

Content type
application/json
{
  • "legalIdentifiers": {
    • "legalPersonName": "Pineapple Capital Inc"
    },
  • "additionalEnterpriseInfo": {
    • "regulator": "string",
    • "regulatorId": "string",
    • "contact": {
      }
    },
  • "approvalsRequired": 1,
  • "usersViewAllWallets": true
}

Response samples

Content type
application/json
{
  • "accountType": "individual",
  • "additionalEnterpriseInfo": {
    • "regulator": "string",
    • "regulatorId": "string",
    • "contact": {
      }
    },
  • "admin": {
    • "policy": {
      }
    },
  • "approvedVideoIdUsers": [
    • "59cd72485007a239fb00282ed480da1f"
    ],
  • "approvalsRequired": 1,
  • "bitgoEthKey": "string",
  • "bitgoOrg": "BitGo Inc",
  • "canAccessBorrowing": true,
  • "canAccessLending": true,
  • "canAccessSettlement": true,
  • "canAccessTrading": true,
  • "canCreateColdWallet": true,
  • "canCreateCustodialWallets": true,
  • "canCreateHotWallet": true,
  • "canCreateOffchainWallet": true,
  • "emergencyPhone": "+11234567890",
  • "ethFeeAddress": "string",
  • "freeze": {
    • "time": "2019-08-24T14:15:22Z",
    • "expires": "2019-08-24T14:15:22Z"
    },
  • "id": "59cd72485007a239fb00282ed480da1f",
  • "kycState": "unverified",
  • "latestSAVersionSigned": 0,
  • "licenses": "bitgoNetwork",
  • "mutablePolicyWindow": 172800,
  • "name": "Small Company",
  • "pricingPlan": "string",
  • "pricingTypes": [
    • {
      }
    ],
  • "activePricingType": {
    • "id": "string",
    • "startDate": "string",
    • "startReason": "string",
    • "endDate": "string",
    • "endReason": "string",
    • "name": "starter"
    },
  • "kits": [
    • {
      }
    ],
  • "activeKits": [
    • {
      }
    ],
  • "primaryContact": "59cd72485007a239fb00282ed480da1f",
  • "usersViewAllWallets": true,
  • "videoIdWaived": true
}

Update enterprise pricing types and kits

path Parameters
enterpriseId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
Array of objects (EnterpriseActiveKits) [ items ]
Array of objects[ items ]

The list of pricingTypes to update. A maximum of 2 is expected.

Responses

Response Schema: application/json
Array of objects (EnterprisePricingTypes) [ items ]
Array of objects (EnterpriseKits) [ items ]
object (EnterpriseActivePricingType)
Array of objects (EnterpriseActiveKits) [ items ]

Request samples

Content type
application/json
{
  • "activeKits": [
    • {
      }
    ],
  • "activePricingTypes": [
    • {
      }
    ]
}

Response samples

Content type
application/json
{
  • "pricingTypes": [
    • {
      }
    ],
  • "kits": [
    • {
      }
    ],
  • "activePricingType": {
    • "id": "string",
    • "startDate": "string",
    • "startReason": "string",
    • "endDate": "string",
    • "endReason": "string",
    • "name": "starter"
    },
  • "activeKits": [
    • {
      }
    ]
}

List enterprises

Responses

Response Schema: application/json
Array of objects[ items ]

Response samples

Content type
application/json
{
  • "enterprises": [
    • {
      }
    ]
}

List enterprise users

path Parameters
enterpriseId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
query Parameters
allowInactiveAdmins
boolean

Whether inactive admins should be returned as well

Responses

Response Schema: application/json
Array of objects (EnterpriseUserWithVerified) [ items ]
Array of objects (EnterpriseUserWithVerified) [ items ]
Array of objects (EnterpriseUser) [ items ]
kycState
string (EnterpriseKycState)
Enum: "unverified" "approved" "rejected"
incomplete
boolean

Set to true if the Enterprise has at least 500 v1 or v2 wallets . If there are more than 500 wallets (either v1 or v2) it could mean that some Wallets were not considered for finding all Users in the walletUsers field.

Response samples

Content type
application/json
{
  • "adminUsers": [
    • {
      }
    ],
  • "nonAdminUsers": [
    • {
      }
    ],
  • "walletUsers": [
    • {
      }
    ],
  • "kycState": "unverified",
  • "incomplete": true
}

Add user to enterprise

path Parameters
enterpriseId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
permission
string
Value: "admin"
username
string <email>

The Username of the User that should be added to the Enterprise

usernames
Array of strings <email>

Responses

Response Schema: application/json
object
Response Schema: application/json
One of
id
string (Id) ^[0-9a-f]{32}$
bitcoinAddress
string
enterprise
string (Id) ^[0-9a-f]{32}$
walletId
string

The base address of the associated wallet

creator
string (Id) ^[0-9a-f]{32}$
createDate
string <date-time>
object
state
string
Enum: "pending" "approved" "rejected"
walletUserIds
Array of strings (Id)

an array of all the Users on the Wallet who need to see this Pending Approval

approvalsRequired
number >= 1

Request samples

Content type
application/json
{
  • "permission": "admin",
  • "username": "user@example.com",
  • "usernames": [
    • "user@example.com"
    ]
}

Response samples

Content type
application/json
{ }

Remove user from enterprise

path Parameters
enterpriseId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
username
required
string <email>

Responses

Response Schema: application/json
Array of objects (V1PendingApproval) [ items ]

Request samples

Content type
application/json
{
  • "username": "user@example.com"
}

Response samples

Content type
application/json
{
  • "pendingApprovals": [
    • {
      }
    ]
}

Add user to enterprise

path Parameters
enterpriseId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
permission
string
Value: "admin"
username
string <email>

The Username of the User that should be added to the Enterprise

usernames
Array of strings <email>

Responses

Response Schema: application/json
object
Response Schema: application/json
One of
id
string (Id) ^[0-9a-f]{32}$
coin
string (Coin)

A cryptocurrency or token ticker symbol.

wallet
string (Id) ^[0-9a-f]{32}$
enterprise
string (Id) ^[0-9a-f]{32}$
creator
string (Id) ^[0-9a-f]{32}$
createDate
string <date-time>
PendingApprovalTransactionRequest (object) or PendingApprovalTransactionRequestFull (object) or PendingApprovalUserChangeRequest (object) or PendingApprovalPolicyRuleRequest (object) or PendingApprovalUpdateApprovalsRequiredRequest (object) or PendingApprovalEnterpriseModificationResponse (object)
PendingApprovalStatePending (string) or PendingApprovalStateResolved (string) (PendingApprovalState)
scope
string
Enum: "enterprise" "wallet"

What kind of entity the Pending Approval is tied to

userIds
Array of strings (Id)

All the Users who should see this Pending Approval

approvalsRequired
integer (ApprovalsRequired) >= 1
walletLabel
string

Request samples

Content type
application/json
{
  • "permission": "admin",
  • "username": "user@example.com",
  • "usernames": [
    • "user@example.com"
    ]
}

Response samples

Content type
application/json
{ }

Remove user from enterprise

path Parameters
enterpriseId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
username
required
string <email>

Responses

Response Schema: application/json
Array of objects (PendingApproval) [ items ]

Request samples

Content type
application/json
{
  • "username": "user@example.com"
}

Response samples

Content type
application/json
{
  • "pendingApprovals": [
    • {
      }
    ]
}

Freeze the enterprise

path Parameters
enterpriseId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
duration
integer
Default: 3600

seconds to freeze the enterprise for

Responses

Response Schema: application/json
time
string <date-time>

When the freeze started

expires
string <date-time>

When the freeze will end

Request samples

Content type
application/json
{
  • "duration": 3600
}

Response samples

Content type
application/json
{
  • "time": "2019-08-24T14:15:22Z",
  • "expires": "2019-08-24T14:15:22Z"
}

Get enterprise's wallet limits

path Parameters
enterpriseId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
query Parameters
coin
Array of strings (Coin)
Example: coin=btc

Filter by coin(s)

isCustodial
boolean
Value: true

Whether custodial limits should be returned

Responses

Response Schema: application/json
Array
coin
required
string (Coin)

A cryptocurrency or token ticker symbol.

limit
integer
count
required
integer >= 0
isCustodial
boolean
Value: true

Response samples

Content type
application/json
[
  • {
    • "coin": "btc",
    • "limit": 0,
    • "count": 0,
    • "isCustodial": true
    }
]

Express

Create address

This API call is used to create a new receive address for your wallet. You may choose to call this API whenever a deposit is made. The BitGo API supports millions of addresses. Please check the “Coin-Specific Implementation” with regards to fee address management for Ethereum and consolidation transactions for Algorand and Tezos.

Note, in Ethereum, new addresses are not returned immediately. This is because creating a new Ethereum address requires a blockchain transaction, which must be confirmed before the address can be used. You can save the "id" field in the response and use it to query for the address value after a short delay.

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
chain
integer (Chain)
Enum: 0 1 10 11 20 21 30 31
string or null (AddressLabel) <= 250 characters

A human-readable label for the address.

lowPriority
boolean
Default: false

Whether the deployment of the address forwarder contract should use a low priority fee key (ETH only)

number or string

Explicit gas price to use when deploying the forwarder contract (ETH only). If not given, defaults to the current estimated network gas price.

object

(ETH forwarderVersion: 0 wallets only) Specify eip1559 fee parameters in forwarder creation transactions.

forwarderVersion
integer [ 0 .. 2 ]

(ETH only) Specify forwarder version to use in address creation. In an effort to improve the cost of creating ETH forwarders, we have developed a new set of forwarder contracts that take advantage of several improvements. Specifically, forwarders are deployed as a simple proxy to a single implementation (https://eips.ethereum.org/EIPS/eip-1167), and forwarders are deployed using the CREATE2 opcode, enabling them to only be deployed when needed (https://eips.ethereum.org/EIPS/eip-1014). These new forwarders operate identically to current ETH forwarders. This flag is used to specify the forwarder contract version desired when deploying a forwarder contract. Use 0 for the old forwarder (https://github.com/BitGo/eth-multisig-v2), 1 for the new fee-improved forwarder (https://github.com/BitGo/eth-multisig-v4), and 2 for NFT supported forwarders.

onToken
string

Create an address for the given token

format
string

Format to use for the new address, if the coin which supports multiple formats for an address. Currently, Bitcoin Cash is the only coin which has support for multiple address formats. For Bitcoin Cash, BitGo supports both the base58 (legacy) address format, as well as the newer CashAddr format. The default address format is base58. To request a CashAddr formatted address instead, use the value cashaddr as the format.

Responses

Response Schema: application/json
id
string (Id) ^[0-9a-f]{32}$
address
string (AddressString) <= 250 characters
chain
integer (Chain)
Enum: 0 1 10 11 20 21 30 31
index
integer
coin
string
lastNonce
integer
Default: -1
wallet
string (Id) ^[0-9a-f]{32}$
object

Properties which are specific to certain coin types

object (AddressBalance)
string or null (AddressLabel) <= 250 characters

A human-readable label for the address.

addressType
string (AddressType)
Enum: "p2sh" "p2sh-p2wsh" "p2wsh"

Request samples

Content type
application/json
{
  • "chain": 1,
  • "label": "Bob's Hot Wallet Address",
  • "lowPriority": false,
  • "gasPrice": 0,
  • "eip1559": {
    • "maxPriorityFeePerGas": "string",
    • "maxFeePerGas": "string"
    },
  • "forwarderVersion": 2,
  • "onToken": "ofcbtc",
  • "format": "cashaddr"
}

Response samples

Content type
application/json
{
  • "id": "59cd72485007a239fb00282ed480da1f",
  • "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
  • "chain": 1,
  • "index": 0,
  • "coin": "string",
  • "lastNonce": -1,
  • "wallet": "59cd72485007a239fb00282ed480da1f",
  • "coinSpecific": {
    • "xlm": {
      },
    • "txlm": {
      }
    },
  • "balance": {
    • "updated": "2019-08-24T14:15:22Z",
    • "balance": 50000,
    • "balanceString": "50000",
    • "totalReceived": 0,
    • "totalSent": 0,
    • "confirmedBalanceString": "40000",
    • "spendableBalanceString": "40000"
    },
  • "label": "Bob's Hot Wallet Address",
  • "addressType": "p2sh"
}

Login

Creates a short-lived (1 hour) access token for use with the API. The token must be specified to subsequent API calls via the Authorization HTTP header:

Authorization: Bearer 9b72c68ef394f5146f0f3efc1feafb7a971752cb00e79fafcfd8c1d2db83639c

We don't recommend using this endpoint for scripting. The preferred approach is to create a long-lived token in the web UI (see the Developer Options section in User Settings).

Request Body schema: application/json
email
required
string <email> (Email)
extensible
boolean

true if the session is extensible beyond a one-hour duration

otp
string (Otp)

Second factor authentication token

password
required
string

Responses

Response Schema: application/json
access_token
required
string
expires_at
required
integer

Unix timestamp

scope
required
Array of strings (Scope)
required
object (User)

Request samples

Content type
application/json
{
  • "email": "user@example.com",
  • "extensible": false,
  • "otp": "123456",
  • "password": "secret"
}

Response samples

Content type
application/json
{
  • "access_token": "9b72c68ef394f5146f0f3efc1feafb7a971752cb00e79fafcfd8c1d2db83639c",
  • "expires_at": 1534201288,
  • "scope": [
    • "crypto_compare",
    • "user_manage",
    • "openid",
    • "profile",
    • "wallet_create",
    • "wallet_manage_all",
    • "wallet_approve_all",
    • "wallet_spend_all",
    • "wallet_edit_all",
    • "wallet_view_all"
    ],
  • "user": {
    • "id": "59cd72485007a239fb00282ed480da1f",
    • "isActive": true,
    • "name": {
      },
    • "username": "user@example.com",
    • "email": {
      },
    • "phone": {
      },
    • "country": "USA",
    • "state": "New York"
    }
}

Ping BitGo Express

Ping bitgo express to ensure that it is still running. Unlike /ping, this does not try connecting to bitgo.com.

Responses

Response Schema: application/json
status
string

Response samples

Content type
application/json
{
  • "status": "string"
}

Send transaction

This call allows you to create and send cryptocurrency to a destination address.

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
address
string <= 250 characters

Destination address

string or integer

Amount in base units (e.g. satoshi, wei, drops, stroops). For doge, only string is allowed.

walletPassphrase
string

Passphrase to decrypt the user key on the wallet

prv
string

Optional, private key in string form, if walletPassphrase is not available or encrypted private key is not stored by BitGo.

numBlocks
integer [ 2 .. 1000 ]

(BTC only) Used to estimate the fee rate by targeting confirmation within the given number of blocks. If neither feeRate nor numBlocks is specified, a block target of 2 is used by default. Can be limited with maxFeeRate.

string or integer

Custom minimum fee rate in a coin's base unit per kilobyte (or virtual kilobyte)--for example, satoshis per kvByte or microAlgos per kByte. For xrp, it refers to the open ledger fee in drops (1 XRP = 1000000 drops) and the actual fee used is usually 4.5 times the open ledger fee. If the applied feeRate does not meet a coin's required minimum transaction fee amount, the minimum is still applied (for example, 1000 sat/kvByte , a flat 1000 microAlgos or a flat 10 drops of xrp).

string or integer

Custom upper limit for fee rate in a coin's base unit per kilobyte (or virtual kilobyte)--for example, satoshis per kvByte or microAlgos per kByte. maxFeeRate can be used to limit a fee rate estimate generated with numBlocks.

string or number

Custom multiplier for fee rate. Suggested to be used in conjunction with maxFeeRate for higher priority transactions, or transactions which may not be broadcast for some time after being built. Must be greater than 0.

minConfirms
integer

The unspent selection for the transaction will only consider unspents with at least this many confirmations to be used as inputs. Does not apply to change outputs unless used in combination with enforceMinConfirmsForChange.

enforceMinConfirmsForChange
boolean
Default: false

When set to true, will enforce minConfirms for change outputs. Defaults to false.

string or integer

Custom gas price to be used for sending the transaction. Only for ETH and ERC20 tokens.

object
string or integer

Custom gas limit to be used for sending the transaction. Only for ETH and ERC20 tokens.

targetWalletUnspents
integer
Default: 1000

Specifies the minimum count of good-sized unspents to maintain in the wallet. Change splitting ceases when the wallet has targetWalletUnspents good-sized unspents.

Note: Wallets that continuously send a high count of transactions will automatically split large change amounts into multiple good-sized change outputs while they have fewer than targetWalletUnspents good-sized unspents in their unspent pool. Breaking up large unspents helps to reduce the amount of unconfirmed funds in flight in future transactions, and helps to avoid long chains of unconfirmed transactions. This is especially useful for newly funded wallets or recently refilled send-only wallets.

string or integer

Ignore unspents smaller than this amount of base units (e.g. satoshis). For doge, only string is allowed.

string or integer

Ignore unspents larger than this amount of base units (e.g. satoshis). For doge, only string is allowed.

sequenceId
string

A sequenceId is a unique and arbitrary wallet identifier applied to transfers and transactions at creation. It is optional but highly recommended. With a sequenceId you can easily reference transfers and transactions—for example, to safely retry sending. Because the system only confirms one send request per sequenceId (and fails all subsequent attempts), you can retry sending without the risk of double spending. The sequenceId is only visible to users on the wallet and is not shared publicly.

nonce
string^-?\d+$

(DOT only) A nonce ID is a number used to protect private communications by preventing replay attacks. This is an advanced option where users can manually input a new nonce value in order to correct or fill in a missing nonce ID value.

noSplitChange
boolean
Default: false

Set true to disable automatic change splitting.

Also see: targetWalletUnspents

unspents
Array of strings

Used to explicitly specify the unspents to be used in the input set in the transaction. Each unspent should be in the form prevTxId:nOutput.

changeAddress
string <= 250 characters

Specifies a custom destination address for the transaction's change output(s)

instant
boolean

(DASH only) Specifies whether or not to use Dash's "InstantSend" feature when sending a transaction.

object

Memo for Stellar or EOS. Type is only required for memos in Stellar transactions. The memo contains optional extra information that can also be used to identify payments in Stellar or EOS.

comment
string <= 256 characters

Optional metadata (only persisted in BitGo) to be applied to the transaction. Use this to add transaction-specific information such as the transaction's purpose or another identifier that you want to reference later. The value is shown in the UI in the transfer listing page.

addressType
string

The type of address to create for change. One of p2sh, p2shP2wsh, and p2wsh.

startTime
string

The start of the validity window for the transaction. Only supported by HBAR

consolidateId
string (Id) ^[0-9a-f]{32}$
lastLedgerSequence
integer

(XRP only) Absolute max ledger the transaction should be accepted in, whereafter it will be rejected

ledgerSequenceDelta
integer

(XRP only) Relative ledger height (in relation to the current ledger) that the transaction should be accepted in, whereafter it will be rejected

cpfpTxIds
Array of strings

The list of transactions to bump with a child-pays-for-parent transaction (currently only bumping one tx is supported).

cpfpFeeRate
integer

The desired effective fee rate of the accelerated transaction in base units per kilobyte (e.g. satoshi/kB), the unconfirmed transactions it depends on, and the newly created child-pays-for-parent transaction. Must be higher than the current effective fee rate of the target transaction.

maxFee
integer >= 0

Limits the amount of satoshis that can be used for fees in a child-pays-for-parent (CPFP) transaction. CPFP transactions accelerate the targeted transaction and all of the unconfirmed transactions the targeted transaction depends on. maxFee is required for all CPFP transactions as it allows users to set a safety net that will halt CPFP attempts that exceed the expected cost.

strategy
string <= 20 characters

Optional unspent selection strategy to use. One of RANDOM, FIFO or BNB.

validFromBlock
integer

Optional block this transaction is valid from

validToBlock
integer

Optional block this transaction is valid until

type
string

transaction type (e.g., trustline for Stellar trustline transactions, accountSet for XRP account set transactions, stakingLock and stakingUnlock for Stacks delegation).

Array of objects (Trustline) [ items ]

List of trustlines to manage on the account. Available for Stellar.

CSPRStakingOptions (object) or STXStakingOptions (object)

Required object for staking. Only for CSPR and STX.

object

Options needed to unstake EOS assets

object

Options needed to refund unstaked EOS assets if automatic refund fails

messageKey
string

Optional parameter that takes a hexadecimal value to set messagekey for an XRP accountSet transaction. Recipients field should be empty when messageKey is set.

object

Optional parameter for UTXO coins to automatically reserve the unspents that are used in the build. Useful for Cold wallets. If using, must set expireTime.

data
string

(ETH only) Optional data to pass to the transaction

hop
boolean

(ETH and AVAXC only) Set to true if funds to destination need to come from single sig address

Responses

Response Schema: application/json
object

New transfer

txid
string

Unique transaction identifier

tx
string

Encoded transaction hex (or base64 for XLM)

status
string
Enum: "signed" "signed (suppressed)" "pendingApproval"

Transfer status

Response Schema: application/json
object

New transfer

txid
string

Unique transaction identifier

tx
string

Encoded transaction hex (or base64 for XLM)

status
string
Enum: "signed" "signed (suppressed)" "pendingApproval"

Transfer status

Request samples

Content type
application/json
{
  • "address": "string",
  • "amount": "string",
  • "walletPassphrase": "string",
  • "prv": "string",
  • "numBlocks": 2,
  • "feeRate": 10000,
  • "maxFeeRate": 20000,
  • "feeMultiplier": 1.5,
  • "minConfirms": 0,
  • "enforceMinConfirmsForChange": false,
  • "gasPrice": "string",
  • "eip1559": {
    • "maxPriorityFeePerGas": "string",
    • "maxFeePerGas": "string"
    },
  • "gasLimit": "string",
  • "targetWalletUnspents": 1000,
  • "minValue": "string",
  • "maxValue": "string",
  • "sequenceId": "string",
  • "nonce": "string",
  • "noSplitChange": false,
  • "unspents": [
    • "12b147dd8b4f73c01f72bdbf5b589eea614f3de609ffdbdac84852d6505cf8a3:1"
    ],
  • "changeAddress": "string",
  • "instant": true,
  • "memo": {
    • "type": "string",
    • "value": "string"
    },
  • "comment": "string",
  • "addressType": "string",
  • "startTime": "string",
  • "consolidateId": "59cd72485007a239fb00282ed480da1f",
  • "lastLedgerSequence": 0,
  • "ledgerSequenceDelta": 0,
  • "cpfpTxIds": [
    • "string"
    ],
  • "cpfpFeeRate": 0,
  • "maxFee": 0,
  • "strategy": "string",
  • "validFromBlock": 0,
  • "validToBlock": 0,
  • "type": "string",
  • "trustlines": [
    • {
      }
    ],
  • "stakingOptions": {
    • "amount": "string",
    • "validator": "string"
    },
  • "unstakingOptions": {
    • "from": "string",
    • "receiver": "string",
    • "unstakeCpuQuantity": "string",
    • "unstakeNetQuantity": "string"
    },
  • "refundOptions": {
    • "address": "string"
    },
  • "messageKey": "string",
  • "reservation": {
    • "expireTime": "2019-08-24T14:15:22Z"
    },
  • "data": "string",
  • "hop": true
}

Response samples

Content type
application/json
{
  • "transfer": {
    • "coin": "btc",
    • "id": "59cd72485007a239fb00282ed480da1f",
    • "wallet": "59cd72485007a239fb00282ed480da1f",
    • "enterprise": "59cd72485007a239fb00282ed480da1f",
    • "txid": "b8a828b98dbf32d9fd1875cbace9640ceb8c82626716b4a64203fdc79bb46d26",
    • "height": 0,
    • "heightId": "string",
    • "date": "2019-08-24T14:15:22Z",
    • "type": "send",
    • "value": 0,
    • "valueString": "string",
    • "baseValue": 0,
    • "baseValueString": "string",
    • "feeString": "string",
    • "payGoFee": 0,
    • "payGoFeeString": "string",
    • "usd": 0,
    • "usdRate": 0,
    • "state": "confirmed",
    • "tags": [
      ],
    • "history": [
      ],
    • "comment": "string",
    • "vSize": 0,
    • "nSegwitInputs": 0,
    • "coinSpecific": { },
    • "sequenceId": "string",
    • "entries": [
      ],
    • "usersNotified": true
    },
  • "txid": "string",
  • "tx": "string",
  • "status": "signed"
}

Send to many

Send coins to multiple recipients. Currently supported by UTXO coins and ETH coin.

This may be useful if you schedule outgoing transactions in bulk, as you will be able to process multiple recipients and lower the aggregate amount of blockchain fees paid.

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
Array of objects[ items ]

A list of recipient addresses and amounts. Must be present but empty for CPFP transactions.

otp
string

Two factor auth code to enable sending the transaction. Not necessary if using a long lived access token within the spending limit.

walletPassphrase
string

Passphrase to decrypt the user key on the wallet

prv
string

Optional, private key in string form, if walletPassphrase is not available or encrypted private key is not stored by BitGo.

numBlocks
integer [ 2 .. 1000 ]

(BTC only) Used to estimate the fee rate by targeting confirmation within the given number of blocks. If neither feeRate nor numBlocks is specified, a block target of 2 is used by default. Can be limited with maxFeeRate.

string or integer

Custom minimum fee rate in a coin's base unit per kilobyte (or virtual kilobyte)--for example, satoshis per kvByte or microAlgos per kByte. For xrp, it refers to the open ledger fee in drops (1 XRP = 1000000 drops) and the actual fee used is usually 4.5 times the open ledger fee. If the applied feeRate does not meet a coin's required minimum transaction fee amount, the minimum is still applied (for example, 1000 sat/kvByte , a flat 1000 microAlgos or a flat 10 drops of xrp).

string or integer

Custom upper limit for fee rate in a coin's base unit per kilobyte (or virtual kilobyte)--for example, satoshis per kvByte or microAlgos per kByte. maxFeeRate can be used to limit a fee rate estimate generated with numBlocks.

string or number

Custom multiplier for fee rate. Suggested to be used in conjunction with maxFeeRate for higher priority transactions, or transactions which may not be broadcast for some time after being built. Must be greater than 0.

minConfirms
integer

The unspent selection for the transaction will only consider unspents with at least this many confirmations to be used as inputs. Does not apply to change outputs unless used in combination with enforceMinConfirmsForChange.

enforceMinConfirmsForChange
boolean
Default: false

When set to true, will enforce minConfirms for change outputs. Defaults to false.

string or integer

Custom gas price to be used for sending the transaction. Only for ETH and ERC20 tokens.

object
string or integer

Custom gas limit to be used for sending the transaction. Only for ETH and ERC20 tokens.

targetWalletUnspents
integer
Default: 1000

Specifies the minimum count of good-sized unspents to maintain in the wallet. Change splitting ceases when the wallet has targetWalletUnspents good-sized unspents.

Note: Wallets that continuously send a high count of transactions will automatically split large change amounts into multiple good-sized change outputs while they have fewer than targetWalletUnspents good-sized unspents in their unspent pool. Breaking up large unspents helps to reduce the amount of unconfirmed funds in flight in future transactions, and helps to avoid long chains of unconfirmed transactions. This is especially useful for newly funded wallets or recently refilled send-only wallets.

string or integer

Ignore unspents smaller than this amount of base units (e.g. satoshis). For doge, only string is allowed.

string or integer

Ignore unspents larger than this amount of base units (e.g. satoshis). For doge, only string is allowed.

sequenceId
string

A sequenceId is a unique and arbitrary wallet identifier applied to transfers and transactions at creation. It is optional but highly recommended. With a sequenceId you can easily reference transfers and transactions—for example, to safely retry sending. Because the system only confirms one send request per sequenceId (and fails all subsequent attempts), you can retry sending without the risk of double spending. The sequenceId is only visible to users on the wallet and is not shared publicly.

nonce
string^-?\d+$

(DOT only) A nonce ID is a number used to protect private communications by preventing replay attacks. This is an advanced option where users can manually input a new nonce value in order to correct or fill in a missing nonce ID value.

noSplitChange
boolean
Default: false

Set true to disable automatic change splitting.

Also see: targetWalletUnspents

unspents
Array of strings

Used to explicitly specify the unspents to be used in the input set in the transaction. Each unspent should be in the form prevTxId:nOutput.

changeAddress
string <= 250 characters

Specifies a custom destination address for the transaction's change output(s)

instant
boolean

(DASH only) Specifies whether or not to use Dash's "InstantSend" feature when sending a transaction.

object

Memo for Stellar or EOS. Type is only required for memos in Stellar transactions. The memo contains optional extra information that can also be used to identify payments in Stellar or EOS.

comment
string <= 256 characters

Optional metadata (only persisted in BitGo) to be applied to the transaction. Use this to add transaction-specific information such as the transaction's purpose or another identifier that you want to reference later. The value is shown in the UI in the transfer listing page.

addressType
string

The type of address to create for change. One of p2sh, p2shP2wsh, and p2wsh.

startTime
string

The start of the validity window for the transaction. Only supported by HBAR

consolidateId
string (Id) ^[0-9a-f]{32}$
lastLedgerSequence
integer

(XRP only) Absolute max ledger the transaction should be accepted in, whereafter it will be rejected

ledgerSequenceDelta
integer

(XRP only) Relative ledger height (in relation to the current ledger) that the transaction should be accepted in, whereafter it will be rejected

cpfpTxIds
Array of strings

The list of transactions to bump with a child-pays-for-parent transaction (currently only bumping one tx is supported).

cpfpFeeRate
integer

The desired effective fee rate of the accelerated transaction in base units per kilobyte (e.g. satoshi/kB), the unconfirmed transactions it depends on, and the newly created child-pays-for-parent transaction. Must be higher than the current effective fee rate of the target transaction.

maxFee
integer >= 0

Limits the amount of satoshis that can be used for fees in a child-pays-for-parent (CPFP) transaction. CPFP transactions accelerate the targeted transaction and all of the unconfirmed transactions the targeted transaction depends on. maxFee is required for all CPFP transactions as it allows users to set a safety net that will halt CPFP attempts that exceed the expected cost.

strategy
string <= 20 characters

Optional unspent selection strategy to use. One of RANDOM, FIFO or BNB.

validFromBlock
integer

Optional block this transaction is valid from

validToBlock
integer

Optional block this transaction is valid until

type
string

transaction type (e.g., trustline for Stellar trustline transactions, accountSet for XRP account set transactions, stakingLock and stakingUnlock for Stacks delegation).

Array of objects (Trustline) [ items ]

List of trustlines to manage on the account. Available for Stellar.

CSPRStakingOptions (object) or STXStakingOptions (object)

Required object for staking. Only for CSPR and STX.

object

Options needed to unstake EOS assets

object

Options needed to refund unstaked EOS assets if automatic refund fails

messageKey
string

Optional parameter that takes a hexadecimal value to set messagekey for an XRP accountSet transaction. Recipients field should be empty when messageKey is set.

object

Optional parameter for UTXO coins to automatically reserve the unspents that are used in the build. Useful for Cold wallets. If using, must set expireTime.

data
string

(ETH only) Optional data to pass to the transaction

Responses

Response Schema: application/json
object

New transfer

txid
string

Unique transaction identifier

tx
string

Encoded transaction hex (or base64 for XLM)

status
string
Enum: "signed" "signed (suppressed)" "pendingApproval"

Transfer status

Response Schema: application/json
object

New transfer

txid
string

Unique transaction identifier

tx
string

Encoded transaction hex (or base64 for XLM)

status
string
Enum: "signed" "signed (suppressed)" "pendingApproval"

Transfer status

Request samples

Content type
application/json
{
  • "recipients": [
    • {
      }
    ],
  • "otp": "string",
  • "walletPassphrase": "string",
  • "prv": "string",
  • "numBlocks": 2,
  • "feeRate": 10000,
  • "maxFeeRate": 20000,
  • "feeMultiplier": 1.5,
  • "minConfirms": 0,
  • "enforceMinConfirmsForChange": false,
  • "gasPrice": "string",
  • "eip1559": {
    • "maxPriorityFeePerGas": "string",
    • "maxFeePerGas": "string"
    },
  • "gasLimit": "string",
  • "targetWalletUnspents": 1000,
  • "minValue": "string",
  • "maxValue": "string",
  • "sequenceId": "string",
  • "nonce": "string",
  • "noSplitChange": false,
  • "unspents": [
    • "12b147dd8b4f73c01f72bdbf5b589eea614f3de609ffdbdac84852d6505cf8a3:1"
    ],
  • "changeAddress": "string",
  • "instant": true,
  • "memo": {
    • "type": "string",
    • "value": "string"
    },
  • "comment": "string",
  • "addressType": "string",
  • "startTime": "string",
  • "consolidateId": "59cd72485007a239fb00282ed480da1f",
  • "lastLedgerSequence": 0,
  • "ledgerSequenceDelta": 0,
  • "cpfpTxIds": [
    • "string"
    ],
  • "cpfpFeeRate": 0,
  • "maxFee": 0,
  • "strategy": "string",
  • "validFromBlock": 0,
  • "validToBlock": 0,
  • "type": "string",
  • "trustlines": [
    • {
      }
    ],
  • "stakingOptions": {
    • "amount": "string",
    • "validator": "string"
    },
  • "unstakingOptions": {
    • "from": "string",
    • "receiver": "string",
    • "unstakeCpuQuantity": "string",
    • "unstakeNetQuantity": "string"
    },
  • "refundOptions": {
    • "address": "string"
    },
  • "messageKey": "string",
  • "reservation": {
    • "expireTime": "2019-08-24T14:15:22Z"
    },
  • "data": "string"
}

Response samples

Content type
application/json
{
  • "transfer": {
    • "coin": "btc",
    • "id": "59cd72485007a239fb00282ed480da1f",
    • "wallet": "59cd72485007a239fb00282ed480da1f",
    • "enterprise": "59cd72485007a239fb00282ed480da1f",
    • "txid": "b8a828b98dbf32d9fd1875cbace9640ceb8c82626716b4a64203fdc79bb46d26",
    • "height": 0,
    • "heightId": "string",
    • "date": "2019-08-24T14:15:22Z",
    • "type": "send",
    • "value": 0,
    • "valueString": "string",
    • "baseValue": 0,
    • "baseValueString": "string",
    • "feeString": "string",
    • "payGoFee": 0,
    • "payGoFeeString": "string",
    • "usd": 0,
    • "usdRate": 0,
    • "state": "confirmed",
    • "tags": [
      ],
    • "history": [
      ],
    • "comment": "string",
    • "vSize": 0,
    • "nSegwitInputs": 0,
    • "coinSpecific": { },
    • "sequenceId": "string",
    • "entries": [
      ],
    • "usersNotified": true
    },
  • "txid": "string",
  • "tx": "string",
  • "status": "signed"
}

Encrypt messages

Symmetrically encrypt an arbitrary message with provided password

Request Body schema: application/json
input
string

Plaintext message which should be encrypted

password
string

Password which should be used to encrypt message

Responses

Response Schema: application/json
encrypted
string

Request samples

Content type
application/json
{
  • "input": "string",
  • "password": "string"
}

Response samples

Content type
application/json
{
  • "encrypted": "string"
}

Decrypt messages

Decrypt a ciphertext generated by encrypt route with provided password

Request Body schema: application/json
input
string

Ciphertext to decrypt

password
string

Key which is used for decryption

Responses

Response Schema: application/json
decrypted
string

Request samples

Content type
application/json
{
  • "input": "string",
  • "password": "string"
}

Response samples

Content type
application/json
{
  • "decrypted": "string"
}

Calculate mining fee Deprecated

Calculate the fee and estimated size in bytes for a Bitcoin transaction

Request Body schema: application/json
string or integer

Custom minimum fee rate in a coin's base unit per kilobyte (or virtual kilobyte)--for example, satoshis per kvByte or microAlgos per kByte. If the applied feeRate does not meet a coin's required minimum transaction fee amount, the minimum is still applied (for example, 1000 sat/kvByte or a flat 1000 microAlgos).

nP2shInputs
integer

Number of P2SH (multi-signature) inputs

nP2pkhInputs
integer

Number of P2PKH (single-signature) inputs

nP2shP2wshInputs
integer

Number of P2SH_P2WSH (wrapped segwit multi-signature) inputs

nOutputs
required
integer

Number of outputs

Responses

Response Schema: application/json
size
integer

Estimated size of the transaction in bytes

fee
integer

Estimated fee in base units for the transaction

feeRate
integer

The fee rate in base units per kB used to estimate the fee for the transaction

Request samples

Content type
application/json
{
  • "feeRate": 10000,
  • "nP2shInputs": 2,
  • "nP2pkhInputs": 0,
  • "nP2shP2wshInputs": 1,
  • "nOutputs": 2
}

Response samples

Content type
application/json
{
  • "size": 776,
  • "fee": 38800,
  • "feeRate": 50000
}

Create key

Local client-side function to create a new keychain.

Creating your keychains is a critical step for safely securing your Bitcoin. When generating new keychains, this API uses a random number generator that adheres to industry standards. If you provide your own seed, you must take extreme caution when creating it. Returns an object containing the xprv and xpub for the new chain. The created keychain is not known to the BitGo service. To use it with the BitGo service, use the ‘Store Keychain’ API call.

For security reasons, it is highly recommended that you encrypt and destroy the original xprv immediately to prevent theft.

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

Responses

Response Schema: application/json
prv
string

Private key

pub
string (Pub)

public part of a key pair

Request samples

let key = bitgo.coin('tbtc').keychains().create();

Response samples

Content type
application/json
{
  • "prv": "xprv9s21ZrQH143K2Y4th5Bn8sCRCMNjVr3sm9TLj9yw9SRKxYbJdB18bpc7cZFHKKWKuWZUBATfbDVE26u7w2iUhmWD8Gsp8UkaemhLEfopC35",
  • "pub": "xpub661MyMwAqRbcGMVhmc7wqQRYMtcX9LAvSj1pjB213y5TsrkV2uuzJjWnjBrT1FUeNWGPjaVm5p7o6jdNcQJrV1cy3a1R8NQ9m7LuYKA8RpH"
}

Generate wallet

This API call creates a new wallet. Under the hood, the SDK (or BitGo Express) does the following:

  1. Creates the user keychain locally on the machine, and encrypts it with the provided passphrase (skipped if userKey is provided).
  2. Creates the backup keychain locally on the machine.
  3. Uploads the encrypted user keychain and public backup keychain.
  4. Creates the BitGo key (and the backup key if backupXpubProvider is set) on the service.
  5. Creates the wallet on BitGo with the 3 public keys above.

ⓘ Ethereum wallets can only be created under an enterprise. Pass in the id of the enterprise to associate the wallet with. Your enterprise id can be seen by clicking on the “Manage Organization” link on the enterprise dropdown. Each enterprise has a fee address which will be used to pay for transaction fees on all Ethereum wallets in that enterprise. The fee address is displayed in the dashboard of the website, please fund it before creating a wallet.

ⓘ You cannot generate a wallet by passing in a subtoken as the coin. Subtokens share wallets with their parent coin and it is not possible to create a wallet specific to one token. Please see Coin-Specific Implementation for details.

ⓘ This endpoint should be called through BitGo Express if used without the SDK, such as when using cURL.

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

query Parameters
includeKeychains
boolean
Default: false

Include user, backup and bitgo keychains along with generated wallet

Request Body schema: application/json
label
required
string (WalletLabel)
passphrase
string

Passphrase to be used to encrypt the user key on the wallet

userKey
string

User provided public key

backupXpub
string (Pub)

public part of a key pair

backupXpubProvider
string
Value: "keyternal"

Optional key recovery service to provide and store the backup key

enterprise
string (Id) ^[0-9a-f]{32}$
disableTransactionNotifications
boolean

Flag for disabling wallet transaction notifications

passcodeEncryptionCode
string

The passphrase used for decrypting the encrypted user private key during wallet recovery

coldDerivationSeed
string

Seed used to derive an extended user key for a cold wallet

gasPrice
integer

Gas price to use when deploying an Ethereum wallet

disableKRSEmail
boolean

Flag for preventing KRS from sending email after creating backup key

walletVersion
integer [ 0 .. 1 ]
Default: 1

(ETH only) Specify the wallet creation contract version used when creating a wallet contract. Use 0 for the old wallet creation, 1 for the new wallet creation, where it is only deployed upon receiving funds.

Responses

Response Schema: application/json
One of
id
string (Id) ^[0-9a-f]{32}$
Array of objects[ items ]

Ids of users with access to the wallet

coin
string

Name of the blockchain the wallet is on

label
string

Name the user assigned to the wallet

m
integer

Number of signatures required for the wallet to send

n
integer

Number of signers on the wallet

keys
Array of strings (Id)

Ids of wallet keys

object

Signatures for the backup and BitGo public keys signed by the user key

tags
Array of strings (Id)

Tags set on the wallet

object (Address)
balance
integer

Wallet balance as number

balanceString
string

Wallet balance as string

confirmedBalance
integer

Confirmed wallet balance as number

confirmedBalanceString
string

Confirmed wallet balance as string

spendableBalance
integer

Spendable wallet balance as number

spendableBalanceString
string

Spendable wallet balance as string

deleted
boolean

Flag which indicates the wallet has been deleted

isCold
boolean

Flag for identifying cold wallets

object

Freeze state (used to stop the wallet from spending)

disableTransactionNotifications
boolean

Flag for disabling wallet transaction notifications

admin
object

Admin data (wallet policies)

approvalsRequired
integer

Number of admin approvals required for an action to fire

Array of objects (PendingApproval) [ items ]

Pending approvals on the wallet

allowBackupKeySigning
boolean

Flag for allowing signing with backup key

coinSpecific
object

Coin-specific data

clientFlags
Array of strings
recoverable
boolean

Flag indicating whether this wallet's user key is recoverable with the passphrase held by the user.

startDate
string <date-time>

Time when this wallet was created

hasLargeNumberOfAddresses
boolean

Flag indicating that this wallet is large (more than 100,000 addresses). If this is set, some APIs may omit properties which are expensive to calculate for wallets with many addresses (for example, the total address counts returned by the List Addresses API).

config
object

Custom configuration options for this wallet

Request samples

Content type
application/json
{
  • "label": "My Wallet",
  • "passphrase": "string",
  • "userKey": "string",
  • "backupXpub": "xpub661MyMwAqRbcGMVhmc7wqQRYMtcX9LAvSj1pjB213y5TsrkV2uuzJjWnjBrT1FUeNWGPjaVm5p7o6jdNcQJrV1cy3a1R8NQ9m7LuYKA8RpH",
  • "backupXpubProvider": "keyternal",
  • "enterprise": "59cd72485007a239fb00282ed480da1f",
  • "disableTransactionNotifications": true,
  • "passcodeEncryptionCode": "string",
  • "coldDerivationSeed": "string",
  • "gasPrice": 0,
  • "disableKRSEmail": true,
  • "walletVersion": 1
}

Response samples

Content type
application/json
Example
{
  • "id": "59cd72485007a239fb00282ed480da1f",
  • "users": [
    • {
      }
    ],
  • "coin": "tbtc",
  • "label": "My TBTC Wallet",
  • "m": 2,
  • "n": 3,
  • "keys": [
    • "59cd72485007a239fb00282ed480da1f"
    ],
  • "keySignatures": {
    • "backupPub": "1fe81d0c91457d89993b01475bfb9e5809067ae046926faeab6e63beea009d8dd460387e0c3843034570798a9c2bcc1dbbea2988ee5a36979e0bbe6e02f7840af2",
    • "bitgoPub": "209d0e9a6d4352b66fae0a35ce62c1059bcc4db9e2883abc4f1b3d20481c5cebb7299c581efd9e0151abaf2496da7c6d75d276de36ed3de37c94e9cc5a2ea77e59"
    },
  • "tags": [
    • "59cd72485007a239fb00282ed480da1f"
    ],
  • "receiveAddress": {
    • "id": "59cd72485007a239fb00282ed480da1f",
    • "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
    • "chain": 1,
    • "index": 0,
    • "coin": "string",
    • "lastNonce": -1,
    • "wallet": "59cd72485007a239fb00282ed480da1f",
    • "coinSpecific": {
      },
    • "balance": {
      },
    • "label": "Bob's Hot Wallet Address",
    • "addressType": "p2sh"
    },
  • "balance": 0,
  • "balanceString": "0",
  • "confirmedBalance": 0,
  • "confirmedBalanceString": "0",
  • "spendableBalance": 0,
  • "spendableBalanceString": "0",
  • "deleted": false,
  • "isCold": false,
  • "freeze": { },
  • "disableTransactionNotifications": false,
  • "admin": { },
  • "approvalsRequired": 1,
  • "pendingApprovals": [ ],
  • "allowBackupKeySigning": false,
  • "coinSpecific": { },
  • "clientFlags": [
    • "string"
    ],
  • "recoverable": true,
  • "startDate": "2019-08-24T14:15:22Z",
  • "hasLargeNumberOfAddresses": true,
  • "config": { }
}

Share wallet

Share wallet with an existing BitGo user

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
email
required
string

Email address of the user being invited

permissions
required
string
Enum: "admin" "view" "spend"

Comma-separated list of permissions which are granted by this share

walletPassphrase
string

Wallet passphrase of the user sharing the wallet

message
string

User readable message to display to the share recipient

reshare
boolean

Flag for reinviting a user to the wallet
This is required if the invitee has already been invited to the wallet, but has changed their password and needs a new invite

skipKeychain
boolean

Skips using a shared key (for when the wallet is shared without spend permission)

disableEmail
boolean

Flag for disabling invite notification email

Responses

Response Schema: application/json
id
string^[0-9a-f]{32}$

Wallet share id

coin
string

A cryptocurrency or token ticker symbol.

wallet
string^[0-9a-f]{32}$

Wallet id

walletLabel
string (WalletLabel)
fromUser
string^[0-9a-f]{32}$

Id of the user sharing the wallet

toUser
string^[0-9a-f]{32}$

Id of the user receiving the share

permissions
string
Enum: "admin" "view" "spend"

Comma-separated list of permissions which are granted by this share

message
string

Message for the user receiving the share

state
string
Enum: "pendingapproval" "active" "accepted" "canceled" "rejected"

State of the share

enterprise
string^[0-9a-f]{32}$

If the wallet belongs to an enterprise, the id of that enterprise

pendingApprovalId
string^[0-9a-f]{32}$

If the share generated a pending approval, the id of that pending approval

object (WalletShareKeychain)

Key passed to the receiving user, included if the wallet was shared with spend permission

Request samples

Content type
application/json
{
  • "email": "foo@bar.com",
  • "permissions": "spend,view",
  • "walletPassphrase": "string",
  • "message": "string",
  • "reshare": true,
  • "skipKeychain": true,
  • "disableEmail": true
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "coin": "string",
  • "wallet": "string",
  • "walletLabel": "My Wallet",
  • "fromUser": "string",
  • "toUser": "string",
  • "permissions": "spend,view",
  • "message": "string",
  • "state": "active",
  • "enterprise": "string",
  • "pendingApprovalId": "string",
  • "keychain": {
    • "pub": "string",
    • "encryptedPrv": "string",
    • "fromPubKey": "string",
    • "toPubKey": "string",
    • "path": "m/1234/1/1"
    }
}

Accept wallet share

Accept a wallet share, adding the wallet to the user's list

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
userPassword
string

User's password to decrypt the shared wallet (required if the wallet was shared with spend permission)

newWalletPassphrase
string

New wallet passphrase for saving the shared wallet private key If not provided and the wallet was shared with spend permission, then the userPassword is used

overrideEncryptedPrv
string

Encrypted private key received out-of-band

Responses

Response Schema: application/json
state
string
Enum: "pendingapproval" "active" "accepted" "canceled" "rejected"

State of the share

changed
boolean

Indicates if the share changed

Request samples

Content type
application/json
{
  • "userPassword": "string",
  • "newWalletPassphrase": "string",
  • "overrideEncryptedPrv": "string"
}

Response samples

Content type
application/json
{
  • "state": "active",
  • "changed": true
}

Sign transaction

This route is for users who would like to maintain their own keys, or otherwise would not like BitGo to decrypt their key, and instead provide it in the clear themselves

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

Request Body schema: application/json
prv
string

user private key

object
isLastSignature
boolean

Should be set to true if you are signing the second time, attaching the final signature. Default to false.

pubs
Array of strings

Public Keys (user, backup, bitgo) for the wallet (UTXO coins only)

Responses

Response Schema: application/json
object or object

Request samples

Content type
application/json
{
  • "prv": "xprv9s21ZrQH143K3xQwj4yx3fHjDieEdqFDweBvFxn28qGvfQGvweUWuUuDRpepDu6opq3jiWHU9h3yYTKk5vvu4ykRuGA4i4Kz1vmFMPLTsoC",
  • "txPrebuild": {
    • "wallet": "59cd72485007a239fb00282ed480da1f",
    • "txHex": "string",
    • "txBase64": "string",
    • "txInfo": {
      },
    • "feeInfo": {
      }
    },
  • "isLastSignature": true,
  • "pubs": [
    • "string",
    • "string",
    • "string"
    ]
}

Response samples

Content type
application/json
{
  • "txInfo": {
    • "txHex": "01000000000101d58f82d996dd872012675adadf4606734906b25a413f6e2ee535c0c10aef96020000000000ffffffff028de888000000000017a914c91aa24f65827eecec775037d886f2952b73cbe48740420f000000000017a9149304d18497b9bfe9532778a0f06d9fff3b3befaf870500473044022023d7210ba6d8bbd7a28b8af226f40f7235caab79156f93f9c9969fc459ea7f73022050fbdca788fba3de686b66b3501853695ff9d6f375867470207d233b099576e001000069522103d4788cda52f91c1f6c82eb91491ca76108c9c5f0839bc4f02eccc55fedb3311c210391bcef9dcc89570a79ba3c7514e65cd48e766a8868eca2769fa9242fdcc796662102ef3c5ebac4b54df70dea1bb2655126368be10ca0462382fcb730e55cddd2dd6a53aec8b11400"
    }
}

Sign wallet transaction

Sign transactions for multisignature wallets using external-signing mode. You must maintain your keys, in the clear, on a separate Express server. BitGo doesn't decrypt your private keys.

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
object

The user's keychain object with an encryptedPrv property. The walletPassphrase parameter is required when using keychain. Any request must include either keychain or prv.

prv
string

User private key

Note: The request must include either prv or keychain

object

The transaction description object as created by 'Build Transaction'

coldDerivationSeed
string

A seed used to create a deterministic BIP-32 path which is then used to derive a private key. This is useful when one wants to create multiple BitGo cold wallets but only protect a single master private key. Using the seed one can create a child key for a specific wallet, for instance an Ethereum wallet could use the "eth" seed while an XRP wallet could use "xrp" as a seed. Both of these child keys would be derived from a single master key and so only the master key needs to be stored and protected.

walletPassphrase
string

Passphrase to decrypt the user keychain. walletPassphrase is a required parameter when the parameter keychain is provided.

recipients
Array of objects[ items ]

Array of objects describing the recipients. See buildTransaction for more detail. Required on ETH.

Responses

Response Schema: application/json
object or object

Request samples

Content type
application/json
{
  • "keychain": {
    • "encryptedPrv": "string"
    },
  • "prv": "xprv9s21ZrQH143K3xQwj4yx3fHjDieEdqFDweBvFxn28qGvfQGvweUWuUuDRpepDu6opq3jiWHU9h3yYTKk5vvu4ykRuGA4i4Kz1vmFMPLTsoC",
  • "txPrebuild": {
    • "wallet": "59cd72485007a239fb00282ed480da1f",
    • "txHex": "string",
    • "txBase64": "string",
    • "txInfo": {
      },
    • "feeInfo": {
      }
    },
  • "coldDerivationSeed": "string",
  • "walletPassphrase": "string",
  • "recipients": [
    • { }
    ]
}

Response samples

Content type
application/json
{
  • "txInfo": {
    • "txHex": "01000000000101d58f82d996dd872012675adadf4606734906b25a413f6e2ee535c0c10aef96020000000000ffffffff028de888000000000017a914c91aa24f65827eecec775037d886f2952b73cbe48740420f000000000017a9149304d18497b9bfe9532778a0f06d9fff3b3befaf870500473044022023d7210ba6d8bbd7a28b8af226f40f7235caab79156f93f9c9969fc459ea7f73022050fbdca788fba3de686b66b3501853695ff9d6f375867470207d233b099576e001000069522103d4788cda52f91c1f6c82eb91491ca76108c9c5f0839bc4f02eccc55fedb3311c210391bcef9dcc89570a79ba3c7514e65cd48e766a8868eca2769fa9242fdcc796662102ef3c5ebac4b54df70dea1bb2655126368be10ca0462382fcb730e55cddd2dd6a53aec8b11400"
    }
}

Sign TSS transaction

Sign transactions for TSS wallets using external-signing mode. You must maintain your keys, in the clear, on a separate Express server. BitGo doesn't decrypt your private TSS key shares.

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
Any of
txRequestId
required
string

A unique ID for the TxRequest document across all wallets. The combination of the txRequestId and version will always be unique.

version
required
number

The version of the document. Data changes are done only with inserts and incrementing the version.

latest
required
boolean

A boolean flag that indicates whether the document is the latest version of the TxRequest.

walletId
required
string

The id of the Wallet the TxRequest is for.

walletType
string (WalletTypePublic)
Enum: "cold" "custodial" "custodialPaired" "hot" "trading"

The type describes who owns the keys to the wallet and how they are stored. cold wallets are wallets where the private key of the user key is stored exclusively outside of BitGo's system. custodial means that this wallet is a cold wallet where BitGo owns the keys. Only customers of the BitGo Trust can create this kind of wallet. custodialPaired means that this is a hot wallet that is owned by the customer but it will be linked to a cold (custodial) wallet where BitGo owns the keys. This option is only available to customers of BitGo Inc. BitGo stores an encrypted private key for the user key of hot wallets. trading wallets are trading accounts where the coin is ofc.

enterpriseId
string

If the wallet that owns the TxRequest is owned by an enterprise then this is the Id of said enterprise.

state
required
string (TransactionRequestState)
Enum: "initialized" "pendingApproval" "pendingUserSignature" "pendingDelivery" "signed" "delivered" "canceled" "rejected"
date
required
string <date-time> (DateTime)
userId
required
string

The Id of the User that produced this version of the TxRequest document. Could have created a new document or updated an existing document.

required
SOLClaimIntent (object) or SOLCreateAssociatedTokenAccountIntent (object) or SOLPaymentIntent (object) or SOLStakeIntent (object) or SOLUnstakeIntent (object) or DOTPaymentIntent (object) or NearStakeIntent (object) or NearUnstakeIntent (object) or NearWithdrawIntent (object) or ETHPaymentIntent (object) or ETHAccelerationIntent (object) or ETHStakingIntent (object) or ETHFillNonceIntent (object) or AdaStakeIntent (object) or UnstakeIntent (object) or ETHSignMessageIntent (object) or WithdrawIntent (object) or WalletRecoveryIntent (object) or TransferTokenIntent (object) (TransactionRequestIntent)
Array of SOLClaimIntent (object) or SOLCreateAssociatedTokenAccountIntent (object) or SOLPaymentIntent (object) or SOLStakeIntent (object) or SOLUnstakeIntent (object) or DOTPaymentIntent (object) or NearStakeIntent (object) or NearUnstakeIntent (object) or NearWithdrawIntent (object) or ETHPaymentIntent (object) or ETHAccelerationIntent (object) or ETHStakingIntent (object) or ETHFillNonceIntent (object) or AdaStakeIntent (object) or UnstakeIntent (object) or ETHSignMessageIntent (object) or WithdrawIntent (object) or WalletRecoveryIntent (object) or TransferTokenIntent (object) (TransactionRequestIntent) [ items ]
pendingApprovalId
string

The id of the Pending Approval that was created for the TxRequest if one was required.

Array of objects (TransactionRequestUnsignedTransaction) [ items ]
Array of objects (SignatureShare) [ items ]
txHashes
Array of strings

Responses

Response Schema: application/json
Any of
txRequestId
required
string

A unique ID for the TxRequest document across all wallets. The combination of the txRequestId and version will always be unique.

version
required
number

The version of the document. Data changes are done only with inserts and incrementing the version.

latest
required
boolean

A boolean flag that indicates whether the document is the latest version of the TxRequest.

walletId
required
string

The id of the Wallet the TxRequest is for.

walletType
string (WalletTypePublic)
Enum: "cold" "custodial" "custodialPaired" "hot" "trading"

The type describes who owns the keys to the wallet and how they are stored. cold wallets are wallets where the private key of the user key is stored exclusively outside of BitGo's system. custodial means that this wallet is a cold wallet where BitGo owns the keys. Only customers of the BitGo Trust can create this kind of wallet. custodialPaired means that this is a hot wallet that is owned by the customer but it will be linked to a cold (custodial) wallet where BitGo owns the keys. This option is only available to customers of BitGo Inc. BitGo stores an encrypted private key for the user key of hot wallets. trading wallets are trading accounts where the coin is ofc.

enterpriseId
string

If the wallet that owns the TxRequest is owned by an enterprise then this is the Id of said enterprise.

state
required
string (TransactionRequestState)
Enum: "initialized" "pendingApproval" "pendingUserSignature" "pendingDelivery" "signed" "delivered" "canceled" "rejected"
date
required
string <date-time> (DateTime)
userId
required
string

The Id of the User that produced this version of the TxRequest document. Could have created a new document or updated an existing document.

required
SOLClaimIntent (object) or SOLCreateAssociatedTokenAccountIntent (object) or SOLPaymentIntent (object) or SOLStakeIntent (object) or SOLUnstakeIntent (object) or DOTPaymentIntent (object) or NearStakeIntent (object) or NearUnstakeIntent (object) or NearWithdrawIntent (object) or ETHPaymentIntent (object) or ETHAccelerationIntent (object) or ETHStakingIntent (object) or ETHFillNonceIntent (object) or AdaStakeIntent (object) or UnstakeIntent (object) or ETHSignMessageIntent (object) or WithdrawIntent (object) or WalletRecoveryIntent (object) or TransferTokenIntent (object) (TransactionRequestIntent)
Array of SOLClaimIntent (object) or SOLCreateAssociatedTokenAccountIntent (object) or SOLPaymentIntent (object) or SOLStakeIntent (object) or SOLUnstakeIntent (object) or DOTPaymentIntent (object) or NearStakeIntent (object) or NearUnstakeIntent (object) or NearWithdrawIntent (object) or ETHPaymentIntent (object) or ETHAccelerationIntent (object) or ETHStakingIntent (object) or ETHFillNonceIntent (object) or AdaStakeIntent (object) or UnstakeIntent (object) or ETHSignMessageIntent (object) or WithdrawIntent (object) or WalletRecoveryIntent (object) or TransferTokenIntent (object) (TransactionRequestIntent) [ items ]
pendingApprovalId
string

The id of the Pending Approval that was created for the TxRequest if one was required.

Array of objects (TransactionRequestUnsignedTransaction) [ items ]
Array of objects (SignatureShare) [ items ]
txHashes
Array of strings

Request samples

Content type
application/json
Example
{
  • "txRequestId": "string",
  • "version": 0,
  • "latest": true,
  • "walletId": "string",
  • "walletType": "cold",
  • "enterpriseId": "string",
  • "state": "initialized",
  • "date": "2018-05-05T19:46:22.019Z",
  • "userId": "string",
  • "intent": {
    • "nonce": "string",
    • "memo": "string",
    • "intentType": "claim",
    • "sequenceId": "abc123",
    • "comment": "string",
    • "stakingRequestId": "string",
    • "stakingAddress": "string",
    • "amount": {
      }
    },
  • "intents": [
    • {
      }
    ],
  • "pendingApprovalId": "string",
  • "unsignedTxs": [
    • {
      }
    ],
  • "signatureShares": [
    • {
      }
    ],
  • "txHashes": [
    • "string"
    ]
}

Response samples

Content type
application/json
Example
{
  • "txRequestId": "string",
  • "version": 0,
  • "latest": true,
  • "walletId": "string",
  • "walletType": "cold",
  • "enterpriseId": "string",
  • "state": "initialized",
  • "date": "2018-05-05T19:46:22.019Z",
  • "userId": "string",
  • "intent": {
    • "nonce": "string",
    • "memo": "string",
    • "intentType": "claim",
    • "sequenceId": "abc123",
    • "comment": "string",
    • "stakingRequestId": "string",
    • "stakingAddress": "string",
    • "amount": {
      }
    },
  • "intents": [
    • {
      }
    ],
  • "pendingApprovalId": "string",
  • "unsignedTxs": [
    • {
      }
    ],
  • "signatureShares": [
    • {
      }
    ],
  • "txHashes": [
    • "string"
    ]
}

Recover ETH token

Recover an unsupported Ethereum token from a BitGo multisig wallet

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
tokenContractAddress
string

Contract address of the unsupported token

recipient
string

Destination address recovered tokens should be sent to

walletPassphrase
string

Wallet passphrase

prv
string

User private key

Responses

Response Schema: application/json
object

Request samples

Content type
application/json
{
  • "tokenContractAddress": "string",
  • "recipient": "string",
  • "walletPassphrase": "string",
  • "prv": "string"
}

Response samples

Content type
application/json
{
  • "halfSigned": {
    • "contractSequenceId": 1101,
    • "expireTime": 1550088020,
    • "gasLimit": 500000,
    • "gasPrice": 20000000000,
    • "operationHash": 9.44792020725999e+76,
    • "recipient": {
      },
    • "signature": 1.9519588812712557e+156,
    • "tokenContractAddress": 3.8941146273864216e+46,
    • "walletId": "59cd72485007a239fb00282ed480da1f"
    }
}

Consolidate account

Consolidates the receive address balances in the main address of a wallet. Algorand is an account-based coin. For some account-based coins, creation of receive addresses results in additional accounts, associated with the main wallet account. Funds can only be sent from the main address account. Therefore, funds must be consolidated before sending. Supported by Algorand, Tezos.

path Parameters
coin
required
string (ConsolidationCoins)
Enum: "algo" "talgo" "xtz" "txtz"

This route is only available for Algorand and Tezos.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
consolidateAddresses
Array of strings <= 500

Optional: restrict the consolidation to the specified receive addresses. If not provided, will consolidate the funds from all receive addresses.

Responses

Response Schema: application/json
keyDerivationPath
string

Request samples

Content type
application/json
{
  • "consolidateAddresses": [
    • "string"
    ]
}

Response samples

Content type
application/json
{
  • "keyDerivationPath": "string"
}

Consolidate unspents

Consolidate unspents on a wallet

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
walletPassphrase
string

Passphrase to decrypt the user key on the wallet

xprv
string

Private key in string form, if walletPassphrase is not available

string or integer

Custom minimum fee rate in a coin's base unit per kilobyte (or virtual kilobyte)--for example, satoshis per kvByte or microAlgos per kByte. If the applied feeRate does not meet a coin's required minimum transaction fee amount, the minimum is still applied (for example, 1000 sat/kvByte or a flat 1000 microAlgos).

string or integer

Custom upper limit for fee rate in a coin's base unit per kilobyte (or virtual kilobyte)--for example, satoshis per kvByte or microAlgos per kByte. maxFeeRate can be used to limit a fee rate estimate generated with numBlocks.

maxFeePercentage
integer

Maximum relative portion that can be spent towards fees

feeTxConfirmTarget
integer

Block target for fee estimation

string or integer

Minimum value of unspents to use in base units (e.g. satoshis). Can be used to skip very small unspents when consolidating at higher fee rates. For doge, only string is allowed.

string or integer

Maximum value of unspents to use in base units (e.g. satoshis). Should be used to prevent larger unspents from being consolidated needlessly, and that some funds remain available for spending while the consolidation transactions are in flight. For doge, only string is allowed.

minHeight
integer

Minimum height of unspents on the block chain to use

minConfirms
integer

Minimum confirmation threshold for external inputs

enforceMinConfirmsForChange
boolean

Flag for enforcing minConfirms for change inputs

limit
integer

Maximum number of unspents to use in the transaction

numUnspentsToMake
integer

Number of new unspents to make

targetAddress
string

address to use for generated outputs. Must be wallet address.

Responses

Response Schema: application/json
object

New transfer

txid
string

Unique transaction identifier

tx
string

Encoded transaction hex (or base64 for XLM)

status
string
Enum: "signed" "signed (suppressed)" "pendingApproval"

Transfer status

Request samples

Content type
application/json
{
  • "walletPassphrase": "string",
  • "xprv": "string",
  • "feeRate": 10000,
  • "maxFeeRate": 20000,
  • "maxFeePercentage": 0,
  • "feeTxConfirmTarget": 0,
  • "minValue": "string",
  • "maxValue": "string",
  • "minHeight": 0,
  • "minConfirms": 0,
  • "enforceMinConfirmsForChange": true,
  • "limit": 0,
  • "numUnspentsToMake": 0,
  • "targetAddress": "string"
}

Response samples

Content type
application/json
{
  • "transfer": {
    • "coin": "btc",
    • "id": "59cd72485007a239fb00282ed480da1f",
    • "wallet": "59cd72485007a239fb00282ed480da1f",
    • "enterprise": "59cd72485007a239fb00282ed480da1f",
    • "txid": "b8a828b98dbf32d9fd1875cbace9640ceb8c82626716b4a64203fdc79bb46d26",
    • "height": 0,
    • "heightId": "string",
    • "date": "2019-08-24T14:15:22Z",
    • "type": "send",
    • "value": 0,
    • "valueString": "string",
    • "baseValue": 0,
    • "baseValueString": "string",
    • "feeString": "string",
    • "payGoFee": 0,
    • "payGoFeeString": "string",
    • "usd": 0,
    • "usdRate": 0,
    • "state": "confirmed",
    • "tags": [
      ],
    • "history": [
      ],
    • "comment": "string",
    • "vSize": 0,
    • "nSegwitInputs": 0,
    • "coinSpecific": { },
    • "sequenceId": "string",
    • "entries": [
      ],
    • "usersNotified": true
    },
  • "txid": "string",
  • "tx": "string",
  • "status": "signed"
}

Fan out unspents

Fan out unspents on a wallet

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
walletPassphrase
string

Passphrase to decrypt the user key on the wallet

xprv
string

Private key in string form, if walletPassphrase is not available

string or integer

Custom minimum fee rate in a coin's base unit per kilobyte (or virtual kilobyte)--for example, satoshis per kvByte or microAlgos per kByte. If the applied feeRate does not meet a coin's required minimum transaction fee amount, the minimum is still applied (for example, 1000 sat/kvByte or a flat 1000 microAlgos).

string or integer

Custom upper limit for fee rate in a coin's base unit per kilobyte (or virtual kilobyte)--for example, satoshis per kvByte or microAlgos per kByte. maxFeeRate can be used to limit a fee rate estimate generated with numBlocks.

maxFeePercentage
integer

Maximum relative portion that can be spent towards fees

feeTxConfirmTarget
integer

Block target for fee estimation

string or integer

Minimum value of unspents to use in base units (e.g. satoshis). For doge, only string is allowed.

string or integer

Maximum value of unspents to use in base units (e.g. satoshis). For doge, only string is allowed.

minHeight
integer

Minimum height of unspents on the block chain to use

minConfirms
integer

Minimum confirmation threshold for external inputs

enforceMinConfirmsForChange
boolean

Flag for enforcing minConfirms for change inputs

maxNumInputsToUse
integer

Maximum number of unspents to use in the transaction

numUnspentsToMake
integer

Number of new unspents to make

targetAddress
string

address to use for generated outputs. Must be wallet address.

Responses

Response Schema: application/json
object

New transfer

txid
string

Unique transaction identifier

tx
string

Encoded transaction hex (or base64 for XLM)

status
string
Enum: "signed" "signed (suppressed)" "pendingApproval"

Transfer status

Request samples

Content type
application/json
{
  • "walletPassphrase": "string",
  • "xprv": "string",
  • "feeRate": 10000,
  • "maxFeeRate": 20000,
  • "maxFeePercentage": 0,
  • "feeTxConfirmTarget": 0,
  • "minValue": "string",
  • "maxValue": "string",
  • "minHeight": 0,
  • "minConfirms": 0,
  • "enforceMinConfirmsForChange": true,
  • "maxNumInputsToUse": 0,
  • "numUnspentsToMake": 0,
  • "targetAddress": "string"
}

Response samples

Content type
application/json
{
  • "transfer": {
    • "coin": "btc",
    • "id": "59cd72485007a239fb00282ed480da1f",
    • "wallet": "59cd72485007a239fb00282ed480da1f",
    • "enterprise": "59cd72485007a239fb00282ed480da1f",
    • "txid": "b8a828b98dbf32d9fd1875cbace9640ceb8c82626716b4a64203fdc79bb46d26",
    • "height": 0,
    • "heightId": "string",
    • "date": "2019-08-24T14:15:22Z",
    • "type": "send",
    • "value": 0,
    • "valueString": "string",
    • "baseValue": 0,
    • "baseValueString": "string",
    • "feeString": "string",
    • "payGoFee": 0,
    • "payGoFeeString": "string",
    • "usd": 0,
    • "usdRate": 0,
    • "state": "confirmed",
    • "tags": [
      ],
    • "history": [
      ],
    • "comment": "string",
    • "vSize": 0,
    • "nSegwitInputs": 0,
    • "coinSpecific": { },
    • "sequenceId": "string",
    • "entries": [
      ],
    • "usersNotified": true
    },
  • "txid": "string",
  • "tx": "string",
  • "status": "signed"
}

Sweep funds

The sweep call spends the full balance of the wallet to the provided address. On UTXO coins, the sweep call will fail if the wallet has any unconfirmed funds, or if there are more unspents than can be sent with a single transaction.

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
address
string

The destination address for the sweep transaction

walletPassphrase
string

Passphrase to decrypt the user key on the wallet

xprv
string

Private key in string form, if walletPassphrase is not available

otp
string

Two factor auth code to enable sending the transaction

feeTxConfirmTarget
string

Number of blocks to wait to confirm the transaction

string or integer

Custom minimum fee rate in a coin's base unit per kilobyte (or virtual kilobyte)--for example, satoshis per kvByte or microAlgos per kByte. If the applied feeRate does not meet a coin's required minimum transaction fee amount, the minimum is still applied (for example, 1000 sat/kvByte or a flat 1000 microAlgos).

string or integer

Custom upper limit for fee rate in a coin's base unit per kilobyte (or virtual kilobyte)--for example, satoshis per kvByte or microAlgos per kByte. maxFeeRate can be used to limit a fee rate estimate generated with numBlocks.

allowPartialSweep
boolean
Default: false

Use allowPartialSweep: true to sweep part of a wallet when there are too many unspents to empty the wallet in a single transaction. While the expected outcome of a single sweep call would usually be an empty wallet, using the allowPartialSweep option may leave some funds in the wallet. Making repeated calls with the allowPartialSweep option allows emptying wallets with many unspents without consolidating first.

Responses

Response Schema: application/json
object

New transfer

txid
string

Unique transaction identifier

tx
string

Encoded transaction hex (or base64 for XLM)

status
string
Enum: "signed" "signed (suppressed)" "pendingApproval"

Transfer status

Request samples

Content type
application/json
{
  • "address": "string",
  • "walletPassphrase": "string",
  • "xprv": "string",
  • "otp": "string",
  • "feeTxConfirmTarget": "string",
  • "feeRate": 10000,
  • "maxFeeRate": 20000,
  • "allowPartialSweep": false
}

Response samples

Content type
application/json
{
  • "transfer": {
    • "coin": "btc",
    • "id": "59cd72485007a239fb00282ed480da1f",
    • "wallet": "59cd72485007a239fb00282ed480da1f",
    • "enterprise": "59cd72485007a239fb00282ed480da1f",
    • "txid": "b8a828b98dbf32d9fd1875cbace9640ceb8c82626716b4a64203fdc79bb46d26",
    • "height": 0,
    • "heightId": "string",
    • "date": "2019-08-24T14:15:22Z",
    • "type": "send",
    • "value": 0,
    • "valueString": "string",
    • "baseValue": 0,
    • "baseValueString": "string",
    • "feeString": "string",
    • "payGoFee": 0,
    • "payGoFeeString": "string",
    • "usd": 0,
    • "usdRate": 0,
    • "state": "confirmed",
    • "tags": [
      ],
    • "history": [
      ],
    • "comment": "string",
    • "vSize": 0,
    • "nSegwitInputs": 0,
    • "coinSpecific": { },
    • "sequenceId": "string",
    • "entries": [
      ],
    • "usersNotified": true
    },
  • "txid": "string",
  • "tx": "string",
  • "status": "signed"
}

Accelerate Transaction

Send a child-pays-for-parent (CPFP) transaction to accelerate the target unconfirmed transactions.

Background: In Bitcoin, a transaction can only be included in a block when all its inputs are confirmed. This requirement can be used to increase the effective fee rate of a stuck low-fee transaction. One of the stuck transaction's outputs is spent in a child transaction with a much higher fee. Miners include the transactions with the highest fees first to maximize their revenue, but the high-fee child transaction can only be included once the parent transaction is confirmed. The miners are therefore incentivized to include both the parent and the child transaction together in a block. A child-pays-for-parent transaction can be created by a recipient of the transaction or by the sender if the target transaction has a change output.

Notes:

  1. As other coins do not have a blockspace market, this route is only available for Bitcoin at this time.
  2. If a target transaction depends on other unconfirmed transactions, this route adds sufficient fees to elevate the entire transaction ancestry's effective fee rate to the cpfpFeeRate.
path Parameters
coin
required
string (Bitcoin)
Enum: "btc" "tbtc"

This route is only available for Bitcoin.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
cpfpTxIds
Array of strings (TxId)

txids of the transactions to bump

Notes: Each target unconfirmed transaction must be sending funds to the calling wallet. Accepts only a single txid at this stage.

cpfpFeeRate
integer

Desired effective feerate of the bumped transactions and the CPFP transaction in satoshi per kilobyte

maxFee
integer

Maximum allowed fee for the CPFP transaction in satoshi

Note: A CPFP transaction accelerates the target transactions and all of the unconfirmed transactions the target transactions depends on. As it can be difficult to discern the complete transaction ancestry at times, we recommend limiting the total fee for each CPFP attempt as a safety net to prevent CPFP transactions that exceed your cost expectations.

Responses

Response Schema: application/json
object

New transfer

txid
string

Unique transaction identifier

tx
string

Encoded transaction hex (or base64 for XLM)

status
string
Enum: "signed" "signed (suppressed)" "pendingApproval"

Transfer status

Request samples

Content type
application/json
{
  • "cpfpTxIds": [
    • "b8a828b98dbf32d9fd1875cbace9640ceb8c82626716b4a64203fdc79bb46d26"
    ],
  • "cpfpFeeRate": 0,
  • "maxFee": 0
}

Response samples

Content type
application/json
{
  • "transfer": {
    • "coin": "btc",
    • "id": "59cd72485007a239fb00282ed480da1f",
    • "wallet": "59cd72485007a239fb00282ed480da1f",
    • "enterprise": "59cd72485007a239fb00282ed480da1f",
    • "txid": "b8a828b98dbf32d9fd1875cbace9640ceb8c82626716b4a64203fdc79bb46d26",
    • "height": 0,
    • "heightId": "string",
    • "date": "2019-08-24T14:15:22Z",
    • "type": "send",
    • "value": 0,
    • "valueString": "string",
    • "baseValue": 0,
    • "baseValueString": "string",
    • "feeString": "string",
    • "payGoFee": 0,
    • "payGoFeeString": "string",
    • "usd": 0,
    • "usdRate": 0,
    • "state": "confirmed",
    • "tags": [
      ],
    • "history": [
      ],
    • "comment": "string",
    • "vSize": 0,
    • "nSegwitInputs": 0,
    • "coinSpecific": { },
    • "sequenceId": "string",
    • "entries": [
      ],
    • "usersNotified": true
    },
  • "txid": "string",
  • "tx": "string",
  • "status": "signed"
}

Canonicalize address

Canonicalize an LTC or BCH address.

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

Request Body schema: application/json
address
string

Address to canonicalize

string or integer

Responses

Response Schema: application/json
string (AddressString) <= 250 characters

Request samples

Content type
application/json
{
  • "address": "string",
  • "version": "base58"
}

Response samples

Content type
application/json
"2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS"

Verify address

Verify address for a given coin

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

Request Body schema: application/json
address
string <= 250 characters

Address which should be verified for correct format

Responses

Response Schema: application/json
isValid
boolean

Request samples

Content type
application/json
{
  • "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS"
}

Response samples

Content type
application/json
{
  • "isValid": true
}

Resolve pending approval

Accept or reject a pending approval

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

approvalId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
state
string
Enum: "approved" "rejected"

New state for the pending approval

walletPassphrase
string

Passphrase to decrypt the user key on the wallet

xprv
string

Private key in string form, if walletPassphrase is not available

otp
string (Otp)

Second factor authentication token

Responses

Response Schema: application/json
id
string (Id) ^[0-9a-f]{32}$
coin
string (Coin)

A cryptocurrency or token ticker symbol.

wallet
string (Id) ^[0-9a-f]{32}$
enterprise
string (Id) ^[0-9a-f]{32}$
creator
string (Id) ^[0-9a-f]{32}$
createDate
string <date-time>
PendingApprovalTransactionRequest (object) or PendingApprovalTransactionRequestFull (object) or PendingApprovalUserChangeRequest (object) or PendingApprovalPolicyRuleRequest (object) or PendingApprovalUpdateApprovalsRequiredRequest (object) or PendingApprovalEnterpriseModificationResponse (object)
PendingApprovalStatePending (string) or PendingApprovalStateResolved (string) (PendingApprovalState)
scope
string
Enum: "enterprise" "wallet"

What kind of entity the Pending Approval is tied to

userIds
Array of strings (Id)

All the Users who should see this Pending Approval

approvalsRequired
integer (ApprovalsRequired) >= 1
walletLabel
string

Request samples

Content type
application/json
{
  • "state": "approved",
  • "walletPassphrase": "string",
  • "xprv": "string",
  • "otp": "123456"
}

Response samples

Content type
application/json
{
  • "id": "59cd72485007a239fb00282ed480da1f",
  • "coin": "btc",
  • "wallet": "59cd72485007a239fb00282ed480da1f",
  • "enterprise": "59cd72485007a239fb00282ed480da1f",
  • "creator": "59cd72485007a239fb00282ed480da1f",
  • "createDate": "2019-08-24T14:15:22Z",
  • "info": {
    • "transactionRequest": {
      },
    • "type": "transactionRequest"
    },
  • "state": "pending",
  • "scope": "enterprise",
  • "userIds": [
    • "59cd72485007a239fb00282ed480da1f"
    ],
  • "approvalsRequired": 1,
  • "walletLabel": "string"
}

Federation

Implementation of the Stellar Federation protocol.

The Stellar Federation protocol maps Stellar addresses to more information about a given user. It’s a way for Stellar client software to resolve email-like addresses such as test*bitgo.com into account IDs like: GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM.

Look up user accounts by their Stellar address or id

Types of searches available:

  1. By name: Resolve a Stellar address into an account
  2. By id: Resolve an account id into an account
query Parameters
q
required
string
Example: q=test*bitgo.com
type
required
string
Enum: "name" "id"
Example: type=name

Responses

Response Schema: application/json
account_id
string
stellar_address
string
memo_type
string
memo
string

Response samples

Content type
application/json
{
  • "account_id": "string",
  • "stellar_address": "string",
  • "memo_type": "string",
  • "memo": "string"
}

Key

Get key

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

id
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f

Responses

Response Schema: application/json
One of
encryptedPrv
string

The encrypted private key

id
required
string (Id) ^[0-9a-f]{32}$
isBitGo
boolean

true if this key is owned by BitGo

source
string (KeySource)
Enum: "backup" "bitgo" "cold" "user"
type
required
string (KeyType)
Default: "independent"
Enum: "tss" "independent" "blsdkg"

A value from a string enum denoting what kind of key this is. Defaults to “independent” indicating an on-chain key is requested. If set to “tss” this tells us that a “tss” key is requested.

ethAddress
string

Ethereum address associated with this key

pub
string (Pub)

public part of a key pair

Request samples

let keyId = '58c1f8a0781a5df8380e0e304b228c68';

bitgo
  .coin('tbtc')
  .keychains()
  .get({ id: keyId })
  .then(function (keychain) {
    // print the keychain
    console.dir(keychain);
  });

Response samples

Content type
application/json
Example
{
  • "encryptedPrv": "string",
  • "id": "59cd72485007a239fb00282ed480da1f",
  • "isBitGo": false,
  • "source": "user",
  • "type": "tss",
  • "ethAddress": "string",
  • "pub": "xpub661MyMwAqRbcGMVhmc7wqQRYMtcX9LAvSj1pjB213y5TsrkV2uuzJjWnjBrT1FUeNWGPjaVm5p7o6jdNcQJrV1cy3a1R8NQ9m7LuYKA8RpH"
}

List keys

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

Responses

Response Schema: application/json
required
Array of Key (object) or KeyTSS (object)[ items ]

Request samples

bitgo
  .coin('tbtc')
  .keychains()
  .list()
  .then(function (keychain) {
    // print the keychains
    console.dir(keychains);
  });

Response samples

Content type
application/json
{
  • "keys": [
    • {
      }
    ]
}

Create key

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

Request Body schema: application/json
encryptedPrv
string

Private part of this key pair, encrypted with a passphrase that only the client knows. Required for all sources except bitgo.

provider
string

name of the KRS provider. Only needed for backup keys.

source
string (KeySource)
Enum: "backup" "bitgo" "cold" "user"
derivedFromParentWithSeed
string <= 250 characters
disableKRSEmail
boolean
krsSpecific
object

Optional extra information to pass through to the specific KRS provider

enterprise
string (Id) ^[0-9a-f]{32}$
identifier
string
newFeeAddress
boolean

Create a new keychain instead of fetching enterprise key (only for Ethereum)

originalPasscodeEncryptionCode
string

Passphrase that is used to decrypt box D on the wallet keycard

pub
string

public part of a key pair

commonPub
string

The commonPub for the key. This value is necessary for BLS keys when the source is either “user” or “backup”. Setting this indicates to BitGo that the owner of the key has received all key shares they needed for generating their key.

commonKeychain
string

The commonKeychain for the key if this is a TSS key. This value is required to be set when the type is set to “tss” and when the source is either “user” or “backup”. Setting this indicates to BitGo that the owner of the key has received all key shares they needed for generating their key. This value is the common pub concatenated with the common chaincode.

Array of objects (KeyShare) [ items ]

Only required for BitGo TSS keys. Those will be the shares from the user and the backup provider that BitGo will end up generating the BitGo key (share) from.

type
string (BackupKeyType)

Coin name used to choose correct KRS public key for the given provider. Possible valid values are "btc", "eth", "bitcoin"

keyType
string (KeyType)
Default: "independent"
Enum: "tss" "independent" "blsdkg"

A value from a string enum denoting what kind of key this is. Defaults to “independent” indicating an on-chain key is requested. If set to “tss” this tells us that a “tss” key is requested.

userGPGPublicKey
string

User's public key in ASCII armored format. Only required for BitGo TSS keys.

backupGPGPublicKey
string

Backup public key in ASCII armored format (may be managed by user or KRS). Only required for BitGo TSS keys.

Responses

Response Schema: application/json
One of
encryptedPrv
string

The encrypted private key

id
required
string (Id) ^[0-9a-f]{32}$
isBitGo
boolean

true if this key is owned by BitGo

source
string (KeySource)
Enum: "backup" "bitgo" "cold" "user"
type
required
string (KeyType)
Default: "independent"
Enum: "tss" "independent" "blsdkg"

A value from a string enum denoting what kind of key this is. Defaults to “independent” indicating an on-chain key is requested. If set to “tss” this tells us that a “tss” key is requested.

ethAddress
string

Ethereum address associated with this key

pub
string (Pub)

public part of a key pair

Request samples

Content type
application/json
{
  • "encryptedPrv": "string",
  • "provider": "string",
  • "source": "user",
  • "derivedFromParentWithSeed": "string",
  • "disableKRSEmail": true,
  • "krsSpecific": { },
  • "enterprise": "59cd72485007a239fb00282ed480da1f",
  • "identifier": "string",
  • "newFeeAddress": true,
  • "originalPasscodeEncryptionCode": "string",
  • "pub": "string",
  • "commonPub": "string",
  • "commonKeychain": "string",
  • "keyShares": [
    • {
      }
    ],
  • "type": "eth",
  • "keyType": "tss",
  • "userGPGPublicKey": "string",
  • "backupGPGPublicKey": "string"
}

Response samples

Content type
application/json
Example
{
  • "encryptedPrv": "string",
  • "id": "59cd72485007a239fb00282ed480da1f",
  • "isBitGo": false,
  • "source": "user",
  • "type": "tss",
  • "ethAddress": "string",
  • "pub": "xpub661MyMwAqRbcGMVhmc7wqQRYMtcX9LAvSj1pjB213y5TsrkV2uuzJjWnjBrT1FUeNWGPjaVm5p7o6jdNcQJrV1cy3a1R8NQ9m7LuYKA8RpH"
}

Pending approval

List pending approvals

query Parameters
prevId
string (Id) ^[0-9a-f]{32}$
Example: prevId=59cd72485007a239fb00282ed480da1f

Return the next batch of results, based on the nextBatchPrevId value from the previous batch.

limit
integer [ 1 .. 500 ]
Default: 25

Maximum number of results to return. If the result set is truncated, use the nextBatchPrevId value to get the next batch.

coin
Array of strings (Coin)
Example: coin=btc

Filter by coin

enterpriseId
string (Id) ^[0-9a-f]{32}$
Example: enterpriseId=59cd72485007a239fb00282ed480da1f

Filter by enterprise

state
Array of strings (PendingApprovalStatePending)
Items Enum: "pending" "awaitingSignature" "pendingFinalApproval" "pendingCustodianApproval" "pendingVideoApproval" "pendingIdVerification"

Filter by state. The default behavior is to return objects where state is awaitingSignature, pending, or pendingFinalApproval

walletId
string (Id) ^[0-9a-f]{32}$
Example: walletId=59cd72485007a239fb00282ed480da1f

Filter by wallet

Responses

Response Schema: application/json
Array of objects (PendingApproval) [ items ]

Request samples

let walletId = '590bb3598005caaf07b5bffbe35f3c11';

pendingapproval()
  .list(walletId)
  .then(function (list) {
    // Print approval list
    console.dir(list);
  });

Response samples

Content type
application/json
{
  • "pendingApprovals": [
    • {
      }
    ]
}

Get pending approval

path Parameters
id
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f

Responses

Response Schema: application/json
id
string (Id) ^[0-9a-f]{32}$
coin
string (Coin)

A cryptocurrency or token ticker symbol.

wallet
string (Id) ^[0-9a-f]{32}$
enterprise
string (Id) ^[0-9a-f]{32}$
creator
string (Id) ^[0-9a-f]{32}$
createDate
string <date-time>
PendingApprovalTransactionRequest (object) or PendingApprovalTransactionRequestFull (object) or PendingApprovalUserChangeRequest (object) or PendingApprovalPolicyRuleRequest (object) or PendingApprovalUpdateApprovalsRequiredRequest (object) or PendingApprovalEnterpriseModificationResponse (object)
PendingApprovalStatePending (string) or PendingApprovalStateResolved (string) (PendingApprovalState)
scope
string
Enum: "enterprise" "wallet"

What kind of entity the Pending Approval is tied to

userIds
Array of strings (Id)

All the Users who should see this Pending Approval

approvalsRequired
integer (ApprovalsRequired) >= 1
walletLabel
string

Response samples

Content type
application/json
{
  • "id": "59cd72485007a239fb00282ed480da1f",
  • "coin": "btc",
  • "wallet": "59cd72485007a239fb00282ed480da1f",
  • "enterprise": "59cd72485007a239fb00282ed480da1f",
  • "creator": "59cd72485007a239fb00282ed480da1f",
  • "createDate": "2019-08-24T14:15:22Z",
  • "info": {
    • "transactionRequest": {
      },
    • "type": "transactionRequest"
    },
  • "state": "pending",
  • "scope": "enterprise",
  • "userIds": [
    • "59cd72485007a239fb00282ed480da1f"
    ],
  • "approvalsRequired": 1,
  • "walletLabel": "string"
}

Update pending approval

Updates the state of a pending approval to approved or rejected. You can manage pending approvals programmatically by API or with the BigGo web UI. Ensure your authentication token has the proper scope. When creating an access token in the web UI, check the permission, "Update Pending Approvals" (under "Account Settings" > "Developer Options" > "Access Tokens").

BitGo recommends that you create a webhook policy so that you can automate approving and rejecting transactions.

path Parameters
id
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
otp
string
state
string

Responses

Response Schema: application/json
id
string (Id) ^[0-9a-f]{32}$
coin
string (Coin)

A cryptocurrency or token ticker symbol.

wallet
string (Id) ^[0-9a-f]{32}$
enterprise
string (Id) ^[0-9a-f]{32}$
creator
string (Id) ^[0-9a-f]{32}$
createDate
string <date-time>
PendingApprovalTransactionRequest (object) or PendingApprovalTransactionRequestFull (object) or PendingApprovalUserChangeRequest (object) or PendingApprovalPolicyRuleRequest (object) or PendingApprovalUpdateApprovalsRequiredRequest (object) or PendingApprovalEnterpriseModificationResponse (object)
PendingApprovalStatePending (string) or PendingApprovalStateResolved (string) (PendingApprovalState)
scope
string
Enum: "enterprise" "wallet"

What kind of entity the Pending Approval is tied to

userIds
Array of strings (Id)

All the Users who should see this Pending Approval

approvalsRequired
integer (ApprovalsRequired) >= 1
walletLabel
string
Response Schema: application/json
id
string (Id) ^[0-9a-f]{32}$
coin
string (Coin)

A cryptocurrency or token ticker symbol.

wallet
string (Id) ^[0-9a-f]{32}$
enterprise
string (Id) ^[0-9a-f]{32}$
creator
string (Id) ^[0-9a-f]{32}$
createDate
string <date-time>
PendingApprovalTransactionRequest (object) or PendingApprovalTransactionRequestFull (object) or PendingApprovalUserChangeRequest (object) or PendingApprovalPolicyRuleRequest (object) or PendingApprovalUpdateApprovalsRequiredRequest (object) or PendingApprovalEnterpriseModificationResponse (object)
PendingApprovalStatePending (string) or PendingApprovalStateResolved (string) (PendingApprovalState)
scope
string
Enum: "enterprise" "wallet"

What kind of entity the Pending Approval is tied to

userIds
Array of strings (Id)

All the Users who should see this Pending Approval

approvalsRequired
integer (ApprovalsRequired) >= 1
walletLabel
string

Request samples

Content type
application/json
{
  • "otp": "string",
  • "state": "string"
}

Response samples

Content type
application/json
{
  • "id": "59cd72485007a239fb00282ed480da1f",
  • "coin": "btc",
  • "wallet": "59cd72485007a239fb00282ed480da1f",
  • "enterprise": "59cd72485007a239fb00282ed480da1f",
  • "creator": "59cd72485007a239fb00282ed480da1f",
  • "createDate": "2019-08-24T14:15:22Z",
  • "info": {
    • "transactionRequest": {
      },
    • "type": "transactionRequest"
    },
  • "state": "pending",
  • "scope": "enterprise",
  • "userIds": [
    • "59cd72485007a239fb00282ed480da1f"
    ],
  • "approvalsRequired": 1,
  • "walletLabel": "string"
}

Policy

Add policy rule

Adds a rule to a wallet’s policy. A wallet policy’s rules control the conditions under which BitGo will use its single key to sign a transaction. An email notification will be sent to all wallet users when a policy is updated. This email is NOT sent for the first time policy is added.

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
coin
string

If set, the rule will only apply to the given coin or ERC20 token in an Ethereum wallet. It is generally recommended to not set a coin for policy rules of the following types: advancedWhitelist, allTx, coinAddressWhitelist, coinAddressBlacklist, webhook.

id
required
string

The id of the rule, must be unique among rules in the policy

type
required
string (CreatePolicyRuleTriggers)
Enum: "advancedWhitelist" "allTx" "allTxNoFiat" "coinAddressWhitelist" "coinAddressBlacklist" "velocityLimit" "webhook"

What causes this rule to trigger

object or object or object or object or object or object (PolicyRuleUpdateConditions)

Parameters for the type

required
object (PolicyRuleActions)

What happens when this rule is triggered

Responses

Response Schema: application/json
object
allowBackupKeySigning
boolean
approvalsRequired
required
integer (ApprovalsRequired) >= 1
balanceString
string^-?\d+$

Total balance in base units (e.g. Satoshis)

object (WalletBuildDefaults)
coin
required
string (Coin)

A cryptocurrency or token ticker symbol.

object (WalletCoinSpecific)
custodialWallet
object

The associated custodial wallet object

custodialWalletId
string (Id) ^[0-9a-f]{32}$
deleted
required
boolean
disableTransactionNotifications
required
boolean
enterprise
string (Id) ^[0-9a-f]{32}$
object
id
required
string (Id) ^[0-9a-f]{32}$
isCold
boolean
keys
Array of strings (Keys)
label
required
string (WalletLabel)
m
integer (NumSignatures)

Number of signatures required. This value must be 2 for hot wallets, 1 for ofc wallets, and not specified for custodial wallets.

n
integer (NumKeychains)

Number of keys provided. This value must be 3 for hot wallets, 1 for ofc wallets, and not specified for custodial wallets.

nodeId
string (Id) ^[0-9a-f]{32}$
object (Address)
recoverable
boolean
tags
Array of strings (Id)
spendableBalanceString
string^-?\d+$

Spendable balance in base units (e.g. Satoshis)

startDate
string <date-time>

Wallet creation time

type
string (WalletTypePublic)
Enum: "cold" "custodial" "custodialPaired" "hot" "trading"

The type describes who owns the keys to the wallet and how they are stored. cold wallets are wallets where the private key of the user key is stored exclusively outside of BitGo's system. custodial means that this wallet is a cold wallet where BitGo owns the keys. Only customers of the BitGo Trust can create this kind of wallet. custodialPaired means that this is a hot wallet that is owned by the customer but it will be linked to a cold (custodial) wallet where BitGo owns the keys. This option is only available to customers of BitGo Inc. BitGo stores an encrypted private key for the user key of hot wallets. trading wallets are trading accounts where the coin is ofc.

Array of objects (WalletUser) [ items ]
object (CustomChangeKeySignatures)

Signatures for the keys which will be used to derive custom change addresses.

Note: These signatures may only be set once for each wallet and are not modifiable after being set.

multisigType
string (WalletMultisigType)
Enum: "onchain" "tss" "blsdkg"
Response Schema: application/json
id
string (Id) ^[0-9a-f]{32}$
coin
string (Coin)

A cryptocurrency or token ticker symbol.

wallet
string (Id) ^[0-9a-f]{32}$
enterprise
string (Id) ^[0-9a-f]{32}$
creator
string (Id) ^[0-9a-f]{32}$
createDate
string <date-time>
PendingApprovalTransactionRequest (object) or PendingApprovalTransactionRequestFull (object) or PendingApprovalUserChangeRequest (object) or PendingApprovalPolicyRuleRequest (object) or PendingApprovalUpdateApprovalsRequiredRequest (object) or PendingApprovalEnterpriseModificationResponse (object)
PendingApprovalStatePending (string) or PendingApprovalStateResolved (string) (PendingApprovalState)
scope
string
Enum: "enterprise" "wallet"

What kind of entity the Pending Approval is tied to

userIds
Array of strings (Id)

All the Users who should see this Pending Approval

approvalsRequired
integer (ApprovalsRequired) >= 1
walletLabel
string

Request samples

Content type
application/json
Example
{
  • "id": "my-rule-id",
  • "type": "advancedWhitelist",
  • "condition": {
    • "add": {
      }
    },
  • "action": {
    • "type": "getApproval",
    • "userIds": [ ]
    }
}

Response samples

Content type
application/json
{
  • "admin": {
    • "policy": {
      }
    },
  • "allowBackupKeySigning": true,
  • "approvalsRequired": 1,
  • "balanceString": "string",
  • "buildDefaults": {
    • "minFeeRate": 12000
    },
  • "coin": "btc",
  • "coinSpecific": {
    • "creationFailure": [
      ],
    • "pendingChainInitialization": true,
    • "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM",
    • "stellarUsername": "foo_bar@baz.com",
    • "homeDomain": "bitgo.com",
    • "stellarAddress": "foo_bar@baz.com*bitgo.com"
    },
  • "custodialWallet": { },
  • "custodialWalletId": "59cd72485007a239fb00282ed480da1f",
  • "deleted": true,
  • "disableTransactionNotifications": true,
  • "enterprise": "59cd72485007a239fb00282ed480da1f",
  • "freeze": {
    • "time": "string",
    • "expires": "string"
    },
  • "id": "59cd72485007a239fb00282ed480da1f",
  • "isCold": true,
  • "keys": [
    • "585951a5df8380e0e304a553",
    • "585951a5df8380e0e30d645c",
    • "585951a5df8380e0e30b6147"
    ],
  • "label": "My Wallet",
  • "m": 2,
  • "n": 3,
  • "nodeId": "59cd72485007a239fb00282ed480da1f",
  • "receiveAddress": {
    • "id": "59cd72485007a239fb00282ed480da1f",
    • "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
    • "chain": 1,
    • "index": 0,
    • "coin": "string",
    • "lastNonce": -1,
    • "wallet": "59cd72485007a239fb00282ed480da1f",
    • "coinSpecific": {
      },
    • "balance": {
      },
    • "label": "Bob's Hot Wallet Address",
    • "addressType": "p2sh"
    },
  • "recoverable": true,
  • "tags": [
    • "59cd72485007a239fb00282ed480da1f"
    ],
  • "spendableBalanceString": "string",
  • "startDate": "string",
  • "type": "cold",
  • "users": [
    • {
      }
    ],
  • "customChangeKeySignatures": {
    • "user": "string",
    • "backup": "string",
    • "bitgo": "string"
    },
  • "multisigType": "onchain"
}

Update policy rule

Updates a rule on the policy attached to a wallet

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
coin
string

A cryptocurrency or token ticker symbol.

id
required
string

The id of the rule. The combination of id and coin must be unique among rules in the policy.

type
required
string (PolicyRuleTriggers)
Enum: "advancedWhitelist" "allTx" "coinAddressWhitelist" "coinAddressBlacklist" "velocityLimit" "webhook"

What causes this rule to trigger

object or object or object or object or object or object (PolicyRuleUpdateConditions)

Parameters for the type

required
object (PolicyRuleActions)

What happens when this rule is triggered

Responses

Response Schema: application/json
object
allowBackupKeySigning
boolean
approvalsRequired
required
integer (ApprovalsRequired) >= 1
balanceString
string^-?\d+$

Total balance in base units (e.g. Satoshis)

object (WalletBuildDefaults)
coin
required
string (Coin)

A cryptocurrency or token ticker symbol.

object (WalletCoinSpecific)
custodialWallet
object

The associated custodial wallet object

custodialWalletId
string (Id) ^[0-9a-f]{32}$
deleted
required
boolean
disableTransactionNotifications
required
boolean
enterprise
string (Id) ^[0-9a-f]{32}$
object
id
required
string (Id) ^[0-9a-f]{32}$
isCold
boolean
keys
Array of strings (Keys)
label
required
string (WalletLabel)
m
integer (NumSignatures)

Number of signatures required. This value must be 2 for hot wallets, 1 for ofc wallets, and not specified for custodial wallets.

n
integer (NumKeychains)

Number of keys provided. This value must be 3 for hot wallets, 1 for ofc wallets, and not specified for custodial wallets.

nodeId
string (Id) ^[0-9a-f]{32}$
object (Address)
recoverable
boolean
tags
Array of strings (Id)
spendableBalanceString
string^-?\d+$

Spendable balance in base units (e.g. Satoshis)

startDate
string <date-time>

Wallet creation time

type
string (WalletTypePublic)
Enum: "cold" "custodial" "custodialPaired" "hot" "trading"

The type describes who owns the keys to the wallet and how they are stored. cold wallets are wallets where the private key of the user key is stored exclusively outside of BitGo's system. custodial means that this wallet is a cold wallet where BitGo owns the keys. Only customers of the BitGo Trust can create this kind of wallet. custodialPaired means that this is a hot wallet that is owned by the customer but it will be linked to a cold (custodial) wallet where BitGo owns the keys. This option is only available to customers of BitGo Inc. BitGo stores an encrypted private key for the user key of hot wallets. trading wallets are trading accounts where the coin is ofc.

Array of objects (WalletUser) [ items ]
object (CustomChangeKeySignatures)

Signatures for the keys which will be used to derive custom change addresses.

Note: These signatures may only be set once for each wallet and are not modifiable after being set.

multisigType
string (WalletMultisigType)
Enum: "onchain" "tss" "blsdkg"
Response Schema: application/json
id
string (Id) ^[0-9a-f]{32}$
coin
string (Coin)

A cryptocurrency or token ticker symbol.

wallet
string (Id) ^[0-9a-f]{32}$
enterprise
string (Id) ^[0-9a-f]{32}$
creator
string (Id) ^[0-9a-f]{32}$
createDate
string <date-time>
PendingApprovalTransactionRequest (object) or PendingApprovalTransactionRequestFull (object) or PendingApprovalUserChangeRequest (object) or PendingApprovalPolicyRuleRequest (object) or PendingApprovalUpdateApprovalsRequiredRequest (object) or PendingApprovalEnterpriseModificationResponse (object)
PendingApprovalStatePending (string) or PendingApprovalStateResolved (string) (PendingApprovalState)
scope
string
Enum: "enterprise" "wallet"

What kind of entity the Pending Approval is tied to

userIds
Array of strings (Id)

All the Users who should see this Pending Approval

approvalsRequired
integer (ApprovalsRequired) >= 1
walletLabel
string

Request samples

Content type
application/json
{
  • "coin": "string",
  • "id": "string",
  • "type": "advancedWhitelist",
  • "condition": {
    • "amountString": "2000000",
    • "timeWindow": 2678400,
    • "groupTags": [
      ],
    • "excludeTags": [
      ],
    • "startDateReset": true
    },
  • "action": {
    • "type": "deny",
    • "approvalsRequired": 1,
    • "userIds": [
      ]
    }
}

Response samples

Content type
application/json
{
  • "admin": {
    • "policy": {
      }
    },
  • "allowBackupKeySigning": true,
  • "approvalsRequired": 1,
  • "balanceString": "string",
  • "buildDefaults": {
    • "minFeeRate": 12000
    },
  • "coin": "btc",
  • "coinSpecific": {
    • "creationFailure": [
      ],
    • "pendingChainInitialization": true,
    • "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM",
    • "stellarUsername": "foo_bar@baz.com",
    • "homeDomain": "bitgo.com",
    • "stellarAddress": "foo_bar@baz.com*bitgo.com"
    },
  • "custodialWallet": { },
  • "custodialWalletId": "59cd72485007a239fb00282ed480da1f",
  • "deleted": true,
  • "disableTransactionNotifications": true,
  • "enterprise": "59cd72485007a239fb00282ed480da1f",
  • "freeze": {
    • "time": "string",
    • "expires": "string"
    },
  • "id": "59cd72485007a239fb00282ed480da1f",
  • "isCold": true,
  • "keys": [
    • "585951a5df8380e0e304a553",
    • "585951a5df8380e0e30d645c",
    • "585951a5df8380e0e30b6147"
    ],
  • "label": "My Wallet",
  • "m": 2,
  • "n": 3,
  • "nodeId": "59cd72485007a239fb00282ed480da1f",
  • "receiveAddress": {
    • "id": "59cd72485007a239fb00282ed480da1f",
    • "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
    • "chain": 1,
    • "index": 0,
    • "coin": "string",
    • "lastNonce": -1,
    • "wallet": "59cd72485007a239fb00282ed480da1f",
    • "coinSpecific": {
      },
    • "balance": {
      },
    • "label": "Bob's Hot Wallet Address",
    • "addressType": "p2sh"
    },
  • "recoverable": true,
  • "tags": [
    • "59cd72485007a239fb00282ed480da1f"
    ],
  • "spendableBalanceString": "string",
  • "startDate": "string",
  • "type": "cold",
  • "users": [
    • {
      }
    ],
  • "customChangeKeySignatures": {
    • "user": "string",
    • "backup": "string",
    • "bitgo": "string"
    },
  • "multisigType": "onchain"
}

Delete policy rule

Deletes a rule from the policy attached to a wallet

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
coin
string

A cryptocurrency or token ticker symbol.

id
required
string

The id of the rule. The combination of id and coin must be unique among rules in the policy.

type
required
string (PolicyRuleTriggers)
Enum: "advancedWhitelist" "allTx" "coinAddressWhitelist" "coinAddressBlacklist" "velocityLimit" "webhook"

What causes this rule to trigger

object or object or object or object or object or object (PolicyRuleUpdateConditions)

Parameters for the type

required
object (PolicyRuleActions)

What happens when this rule is triggered

Responses

Response Schema: application/json
object
allowBackupKeySigning
boolean
approvalsRequired
required
integer (ApprovalsRequired) >= 1
balanceString
string^-?\d+$

Total balance in base units (e.g. Satoshis)

object (WalletBuildDefaults)
coin
required
string (Coin)

A cryptocurrency or token ticker symbol.

object (WalletCoinSpecific)
custodialWallet
object

The associated custodial wallet object

custodialWalletId
string (Id) ^[0-9a-f]{32}$
deleted
required
boolean
disableTransactionNotifications
required
boolean
enterprise
string (Id) ^[0-9a-f]{32}$
object
id
required
string (Id) ^[0-9a-f]{32}$
isCold
boolean
keys
Array of strings (Keys)
label
required
string (WalletLabel)
m
integer (NumSignatures)

Number of signatures required. This value must be 2 for hot wallets, 1 for ofc wallets, and not specified for custodial wallets.

n
integer (NumKeychains)

Number of keys provided. This value must be 3 for hot wallets, 1 for ofc wallets, and not specified for custodial wallets.

nodeId
string (Id) ^[0-9a-f]{32}$
object (Address)
recoverable
boolean
tags
Array of strings (Id)
spendableBalanceString
string^-?\d+$

Spendable balance in base units (e.g. Satoshis)

startDate
string <date-time>

Wallet creation time

type
string (WalletTypePublic)
Enum: "cold" "custodial" "custodialPaired" "hot" "trading"

The type describes who owns the keys to the wallet and how they are stored. cold wallets are wallets where the private key of the user key is stored exclusively outside of BitGo's system. custodial means that this wallet is a cold wallet where BitGo owns the keys. Only customers of the BitGo Trust can create this kind of wallet. custodialPaired means that this is a hot wallet that is owned by the customer but it will be linked to a cold (custodial) wallet where BitGo owns the keys. This option is only available to customers of BitGo Inc. BitGo stores an encrypted private key for the user key of hot wallets. trading wallets are trading accounts where the coin is ofc.

Array of objects (WalletUser) [ items ]
object (CustomChangeKeySignatures)

Signatures for the keys which will be used to derive custom change addresses.

Note: These signatures may only be set once for each wallet and are not modifiable after being set.

multisigType
string (WalletMultisigType)
Enum: "onchain" "tss" "blsdkg"
Response Schema: application/json
id
string (Id) ^[0-9a-f]{32}$
coin
string (Coin)

A cryptocurrency or token ticker symbol.

wallet
string (Id) ^[0-9a-f]{32}$
enterprise
string (Id) ^[0-9a-f]{32}$
creator
string (Id) ^[0-9a-f]{32}$
createDate
string <date-time>
PendingApprovalTransactionRequest (object) or PendingApprovalTransactionRequestFull (object) or PendingApprovalUserChangeRequest (object) or PendingApprovalPolicyRuleRequest (object) or PendingApprovalUpdateApprovalsRequiredRequest (object) or PendingApprovalEnterpriseModificationResponse (object)
PendingApprovalStatePending (string) or PendingApprovalStateResolved (string) (PendingApprovalState)
scope
string
Enum: "enterprise" "wallet"

What kind of entity the Pending Approval is tied to

userIds
Array of strings (Id)

All the Users who should see this Pending Approval

approvalsRequired
integer (ApprovalsRequired) >= 1
walletLabel
string

Request samples

Content type
application/json
{
  • "coin": "string",
  • "id": "string",
  • "type": "advancedWhitelist",
  • "condition": {
    • "amountString": "2000000",
    • "timeWindow": 2678400,
    • "groupTags": [
      ],
    • "excludeTags": [
      ],
    • "startDateReset": true
    },
  • "action": {
    • "type": "deny",
    • "approvalsRequired": 1,
    • "userIds": [
      ]
    }
}

Response samples

Content type
application/json
{
  • "admin": {
    • "policy": {
      }
    },
  • "allowBackupKeySigning": true,
  • "approvalsRequired": 1,
  • "balanceString": "string",
  • "buildDefaults": {
    • "minFeeRate": 12000
    },
  • "coin": "btc",
  • "coinSpecific": {
    • "creationFailure": [
      ],
    • "pendingChainInitialization": true,
    • "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM",
    • "stellarUsername": "foo_bar@baz.com",
    • "homeDomain": "bitgo.com",
    • "stellarAddress": "foo_bar@baz.com*bitgo.com"
    },
  • "custodialWallet": { },
  • "custodialWalletId": "59cd72485007a239fb00282ed480da1f",
  • "deleted": true,
  • "disableTransactionNotifications": true,
  • "enterprise": "59cd72485007a239fb00282ed480da1f",
  • "freeze": {
    • "time": "string",
    • "expires": "string"
    },
  • "id": "59cd72485007a239fb00282ed480da1f",
  • "isCold": true,
  • "keys": [
    • "585951a5df8380e0e304a553",
    • "585951a5df8380e0e30d645c",
    • "585951a5df8380e0e30b6147"
    ],
  • "label": "My Wallet",
  • "m": 2,
  • "n": 3,
  • "nodeId": "59cd72485007a239fb00282ed480da1f",
  • "receiveAddress": {
    • "id": "59cd72485007a239fb00282ed480da1f",
    • "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
    • "chain": 1,
    • "index": 0,
    • "coin": "string",
    • "lastNonce": -1,
    • "wallet": "59cd72485007a239fb00282ed480da1f",
    • "coinSpecific": {
      },
    • "balance": {
      },
    • "label": "Bob's Hot Wallet Address",
    • "addressType": "p2sh"
    },
  • "recoverable": true,
  • "tags": [
    • "59cd72485007a239fb00282ed480da1f"
    ],
  • "spendableBalanceString": "string",
  • "startDate": "string",
  • "type": "cold",
  • "users": [
    • {
      }
    ],
  • "customChangeKeySignatures": {
    • "user": "string",
    • "backup": "string",
    • "bitgo": "string"
    },
  • "multisigType": "onchain"
}

Send label

List send labels

List all send labels for the enterprise. Address and coin parameters optional.

query Parameters
coin
string (Coin)
Example: coin=btc

Filter by coin

address
string (AddressString) <= 250 characters
Example: address=2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS

Filter by address string

enterpriseId
string (Id) ^[0-9a-f]{32}$
Example: enterpriseId=59cd72485007a239fb00282ed480da1f

Filter by enterprise

Responses

Response Schema: application/json
Array
id
required
string (Id) ^[0-9a-f]{32}$
coin
required
string (Coin)

A cryptocurrency or token ticker symbol.

address
required
string (AddressString) <= 250 characters
enterpriseId
required
string (Id) ^[0-9a-f]{32}$
label
required
string <= 250 characters

Response samples

Content type
application/json
[
  • {
    • "id": "59cd72485007a239fb00282ed480da1f",
    • "coin": "btc",
    • "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
    • "enterpriseId": "59cd72485007a239fb00282ed480da1f",
    • "label": "string"
    }
]

Create send label

Create an address send label for an id

Request Body schema: application/json
coin
required
string (Coin)

A cryptocurrency or token ticker symbol.

address
required
string (AddressString) <= 250 characters
enterpriseId
required
string (Id) ^[0-9a-f]{32}$
label
required
string <= 250 characters

Responses

Response Schema: application/json
id
required
string (Id) ^[0-9a-f]{32}$
coin
required
string (Coin)

A cryptocurrency or token ticker symbol.

address
required
string (AddressString) <= 250 characters
enterpriseId
required
string (Id) ^[0-9a-f]{32}$
label
required
string <= 250 characters

Request samples

Content type
application/json
{
  • "coin": "btc",
  • "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
  • "enterpriseId": "59cd72485007a239fb00282ed480da1f",
  • "label": "string"
}

Response samples

Content type
application/json
{
  • "id": "59cd72485007a239fb00282ed480da1f",
  • "coin": "btc",
  • "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
  • "enterpriseId": "59cd72485007a239fb00282ed480da1f",
  • "label": "string"
}

Get send label by id

Gets an address send label by the specified id

path Parameters
id
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f

Responses

Response Schema: application/json
id
required
string (Id) ^[0-9a-f]{32}$
coin
required
string (Coin)

A cryptocurrency or token ticker symbol.

address
required
string (AddressString) <= 250 characters
enterpriseId
required
string (Id) ^[0-9a-f]{32}$
label
required
string <= 250 characters

Response samples

Content type
application/json
{
  • "id": "59cd72485007a239fb00282ed480da1f",
  • "coin": "btc",
  • "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
  • "enterpriseId": "59cd72485007a239fb00282ed480da1f",
  • "label": "string"
}

Update send label

Updates an address send label by the specified id

path Parameters
id
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
label
required
string <= 250 characters

A human-readable mapping to an address

Responses

Response Schema: application/json
id
required
string (Id) ^[0-9a-f]{32}$
coin
required
string (Coin)

A cryptocurrency or token ticker symbol.

address
required
string (AddressString) <= 250 characters
enterpriseId
required
string (Id) ^[0-9a-f]{32}$
label
required
string <= 250 characters

Request samples

Content type
application/json
{
  • "label": "string"
}

Response samples

Content type
application/json
{
  • "id": "59cd72485007a239fb00282ed480da1f",
  • "coin": "btc",
  • "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
  • "enterpriseId": "59cd72485007a239fb00282ed480da1f",
  • "label": "string"
}

Delete send label

path Parameters
id
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f

Responses

Response Schema: application/json
id
required
string (Id) ^[0-9a-f]{32}$
coin
required
string (Coin)

A cryptocurrency or token ticker symbol.

address
required
string (AddressString) <= 250 characters
enterpriseId
required
string (Id) ^[0-9a-f]{32}$
label
required
string <= 250 characters

Response samples

Content type
application/json
{
  • "id": "59cd72485007a239fb00282ed480da1f",
  • "coin": "btc",
  • "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
  • "enterpriseId": "59cd72485007a239fb00282ed480da1f",
  • "label": "string"
}

Transfer

List all transfers on all wallets in an enterprise

Returns all the transfers without blockchain information (inputs, outputs, confirms). Use the coin specific route to annotate blockchain information.

path Parameters
enterpriseId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
query Parameters
dateGte
string <date-time>

Return transfers with a date that is greater than or equal to the given timestamp

dateLt
string <date-time>

Return transfers with a date that is less than the given timestamp

limit
integer [ 1 .. 500 ]
Default: 25

Maximum number of results to return. If the result set is truncated, use the nextBatchPrevId value to get the next batch.

prevId
string (Id) ^[0-9a-f]{32}$
Example: prevId=59cd72485007a239fb00282ed480da1f

Return the next batch of results, based on the nextBatchPrevId value from the previous batch.

state
string (TransferState)
Enum: "signed" "unconfirmed" "confirmed" "pendingApproval" "removed" "failed" "rejected"
Example: state=confirmed

The status of this Transfer

type
string
Enum: "send" "receive"

Filter on sending or receiving Transfers

Responses

Response Schema: application/json
required
Array of objects (Transfer) [ items ]
nextBatchPrevId
string <uuid> (NextBatchPrevId)

When a result set is truncated, this field returns the id of the last object in the previous batch. To get the next batch of results, pass this value via the prevId query parameter.

Response samples

Content type
application/json
{
  • "transfers": [
    • {
      }
    ],
  • "nextBatchPrevId": "585951a5df8380e0e3063e9f"
}

List transfers on all wallets in an enterprise for a given coin and block height

Returns all the transfers. Currently requires an enterpriseId and block height.

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

query Parameters
enterpriseId
required
string (Id) ^[0-9a-f]{32}$
Example: enterpriseId=59cd72485007a239fb00282ed480da1f

The enterprise ID

height
required
string (IntegerString) ^-?\d+$
Example: height=2000000

The block or ledger height to query

Responses

Response Schema: application/json
required
Array of objects (AnnotatedTransferWithInputsOutputs) [ items ]
coin
required
string (Coin)

A cryptocurrency or token ticker symbol.

nextBatchPrevId
string <uuid> (NextBatchPrevId)

When a result set is truncated, this field returns the id of the last object in the previous batch. To get the next batch of results, pass this value via the prevId query parameter.

Response samples

Content type
application/json
{
  • "transfers": [
    • {
      }
    ],
  • "coin": "btc",
  • "nextBatchPrevId": "585951a5df8380e0e3063e9f"
}

Get fee estimate

Returns the estimated fee for a transaction. UTXO coins will return a fee per kB, while Account-based coins will return a flat fee estimate

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

query Parameters
numBlocks
integer

target number of blocks

recipient
string

Recipient of the tx to estimate for (only for ETH)

data
string

ETH data of the tx to estimate for (only for ETH)

amount
string

Amount in base units being sent to estimate for (only for ETH)

hop
boolean

True if we are estimating for a hop tx, false or unspecified for a wallet tx (only ETH and AVAXC)

Responses

Response Schema: application/json
One of
feePerKb
required
integer

Fee per kilobyte for a transaction to be confirmed across two or more blocks. Defaults to 2 if numBlocks is not provided in the request query.

cpfpFeePerKb
integer

Child pays for parent (CPFP) fee per kilobyte where the fee includes the fees for all unconfirmed transactions dependent on this transaction.

numBlocks
required
integer

The target block confirmation.

confidence
integer [ 0 .. 100 ]

(BTC only) Confidence, as a percentage, in the accuracy of the fee estimate.

multiplier
number

(BTC only) Three decimal value used to estimate fees when the mempool is congested; otherwise defaults to 1.

feeByBlockTarget
object

(BTC only) Fee estimates are stored as a key-value pair where the key is the block target (between 1 and 1000) and the value is the corresponding fee estimate (in baseunits per kilobyte).

Response samples

Content type
application/json
Example
{
  • "feePerKb": 15902,
  • "cpfpFeePerKb": 0,
  • "numBlocks": 2,
  • "confidence": 80,
  • "multiplier": 0,
  • "feeByBlockTarget": {
    • "1": 50536,
    • "2": 15902,
    • "3": 1579
    }
}

List transfers

Returns deposits and withdrawals for a wallet. Transfers are sorted in descending order by height, then id. Transfers with rejected and pendingApproval states are excluded by default.

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
query Parameters
allTokens
boolean
Example: allTokens=true

Include data for all subtokens (i.e. ERC20 Tokens, Stellar Tokens)

dateGte
string <date-time>

Return transfers with a date that is greater than or equal to the given timestamp

dateLt
string <date-time>

Return transfers with a date that is less than the given timestamp

height
string (IntegerString) ^-?\d+$
Example: height=2000000

The block or ledger height

limit
integer [ 1 .. 500 ]
Default: 25

Maximum number of results to return. If the result set is truncated, use the nextBatchPrevId value to get the next batch.

prevId
string (Id) ^[0-9a-f]{32}$
Example: prevId=59cd72485007a239fb00282ed480da1f

Return the next batch of results, based on the nextBatchPrevId value from the previous batch.

state
string (TransferState)
Enum: "signed" "unconfirmed" "confirmed" "pendingApproval" "removed" "failed" "rejected"
Example: state=confirmed

The status of this Transfer

type
string
Enum: "send" "receive"

Filter on sending or receiving Transfers

valueGte
integer

Return transfers with a value that is greater than or equal to the given number

valueLt
integer

Return transfers with a value that is less than the given number

id
string (Id) ^[0-9a-f]{32}$
Example: id=59cd72485007a239fb00282ed480da1f

Filter for a transfer by one or more transfer ids

pendingApprovalId
string (Id) ^[0-9a-f]{32}$
Example: pendingApprovalId=59cd72485007a239fb00282ed480da1f

Filter for a transfer with a matching pendingApprovalId

address
Array of strings (AddressString) [ items <= 250 characters ]
Example: address=2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS

Return transfers with elements in entries that have an address field set to this value

includeHex
boolean

Include the raw hex data of the transaction in the response (this may be a large amount of data)

memoId
Array of strings (IntegerString)
Example: memoId=2000000

Return transfers with any of the payment identifiers in this array. Available for Stellar and EOS.

Responses

Response Schema: application/json
required
Array of objects (AnnotatedTransferWithInputsOutputs) [ items ]
coin
required
string (Coin)

A cryptocurrency or token ticker symbol.

nextBatchPrevId
string <uuid> (NextBatchPrevId)

When a result set is truncated, this field returns the id of the last object in the previous batch. To get the next batch of results, pass this value via the prevId query parameter.

Request samples

wallet.transfers().then(function (transfers) {
  // print transfers
  console.dir(transfers);
});

Response samples

Content type
application/json
{
  • "transfers": [
    • {
      }
    ],
  • "coin": "btc",
  • "nextBatchPrevId": "585951a5df8380e0e3063e9f"
}

Get transfer

A transfer is a wallet specific object. Each transfer will only output the respective wallet id which the transfer is associated with.

If there is a transaction between two BitGo wallets, then two transfers will be created, one for wallet A, and one for wallet B. Transfer A will only annotate the walletId on entries where the address belongs to wallet A. Transfer B will only annotate the walletId on entries where the address belongs to wallet B.

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
required
Id (string) or TxId (string)
Example: f5d8ee39a430901c91a5917b9f2dc19d6d1a0e9cea205b009ca73dd04470b9a5 or 585951a5df8380e0e3063e9f12345678

a transfer or transaction id

Responses

Response Schema: application/json
coin
required
string (Coin)

A cryptocurrency or token ticker symbol.

id
required
string (Id) ^[0-9a-f]{32}$
wallet
required
string (Id) ^[0-9a-f]{32}$
enterprise
string (Id) ^[0-9a-f]{32}$
txid
required
string (TxId)

The on-chain transaction id

height
required
integer

The height of the block this Transfer was confirmed in (999999999 if unconfirmed)

heightId
string

The unique height id of the block

date
required
string <date-time>

The date this Transfer was last updated

type
required
string
Enum: "send" "receive"

Defines whether or not this Transfer was sent or received by the user

value
integer

The total value (in base units) sent by this Transfer (may be approximate for ETH and other coins where amounts in base units can exceed 2^53 - 1)

valueString
required
string^-?\d+$

The total value (in base units) sent by this Transfer represented as a String

baseValue
integer

The value (in base units) sent by this Transfer without network fees, represented

baseValueString
string^-?\d+$

The value (in base units) sent by this Transfer without network fees, represented as a String

feeString
string

The Transfer's fee (in base units) represented as a String

payGoFee
integer

The Transfer's BitGo fee (in base units)

payGoFeeString
string

The Transfer's BitGo fee (in base units) represented as a String

usd
required
number

The amount of USD of this Transfer (will be negative if it's a send)

usdRate
required
number

The USD price at the time this Transfer was created

state
required
string (TransferState)
Enum: "signed" "unconfirmed" "confirmed" "pendingApproval" "removed" "failed" "rejected"

The status of this Transfer

tags
required
Array of strings (Id)

The tags to be used on this Transfer (used in Policies)

required
Array of objects[ items ]

An audit log of events that have happened to the Transfer during its lifecycle

comment
required
string

A comment from the user

vSize
integer

The size of the transaction

nSegwitInputs
integer

DEPRECATED. Number of segwit inputs on the transfer.

coinSpecific
required
object

Transfer fields specific to each coin type

sequenceId
string

A sequenceId is a unique and arbitrary wallet identifier applied to transfers and transactions at creation. It is optional but highly recommended. With a sequenceId you can easily reference transfers and transactions—for example, to safely retry sending. Because the system only confirms one send request per sequenceId (and fails all subsequent attempts), you can retry sending without the risk of double spending. The sequenceId is only visible to users on the wallet and is not shared publicly.

Array of objects[ items ]

An array of objects describing the change in address balances made as a result of this Transfer

usersNotified
boolean

Whether BitGo already sent notifications to the users of the transfer wallet

confirmations
required
integer

The number of blocks that have been confirmed since this Transfer's block was confirmed

Array of objects (Unspent) [ items ]

If this is a Transfer on a UTXO coin, the array of inputs

Array of objects (Unspent) [ items ]

If this is a Transfer on a UTXO coin, the array of outputs

Request samples

let transferId = '591623989c043ab2079857ee53d812f0';
wallet.getTransfer({ id: transferId }).then(function (transfer) {
  // print the transfer object
  console.dir(transfer);
});

// we can also pass a on-chain txid (BTC)
let txId = 'f5d8ee39a430901c91a5917b9f2dc19d6d1a0e9cea205b009ca73dd04470b9a5';
wallet.getTransfer({ id: txId }).then(function (transfer) {
  console.dir(transfer);
});

Response samples

Content type
application/json
{
  • "coin": "btc",
  • "id": "59cd72485007a239fb00282ed480da1f",
  • "wallet": "59cd72485007a239fb00282ed480da1f",
  • "enterprise": "59cd72485007a239fb00282ed480da1f",
  • "txid": "b8a828b98dbf32d9fd1875cbace9640ceb8c82626716b4a64203fdc79bb46d26",
  • "height": 0,
  • "heightId": "string",
  • "date": "2019-08-24T14:15:22Z",
  • "type": "send",
  • "value": 0,
  • "valueString": "string",
  • "baseValue": 0,
  • "baseValueString": "string",
  • "feeString": "string",
  • "payGoFee": 0,
  • "payGoFeeString": "string",
  • "usd": 0,
  • "usdRate": 0,
  • "state": "confirmed",
  • "tags": [
    • "59cd72485007a239fb00282ed480da1f"
    ],
  • "history": [
    • {
      }
    ],
  • "comment": "string",
  • "vSize": 0,
  • "nSegwitInputs": 0,
  • "coinSpecific": { },
  • "sequenceId": "string",
  • "entries": [
    • {
      }
    ],
  • "usersNotified": true,
  • "confirmations": 0,
  • "inputs": [
    • {
      }
    ],
  • "outputs": [
    • {
      }
    ]
}

Get transfer by sequence id

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
sequenceId
required
string

A sequenceId is a unique and arbitrary wallet identifier applied to transfers and transactions at creation. It is optional but highly recommended. With a sequenceId you can easily reference transfers and transactions—for example, to safely retry sending. Because the system only confirms one send request per sequenceId (and fails all subsequent attempts), you can retry sending without the risk of double spending. The sequenceId is only visible to users on the wallet and is not shared publicly.

Responses

Response Schema: application/json
coin
required
string (Coin)

A cryptocurrency or token ticker symbol.

id
required
string (Id) ^[0-9a-f]{32}$
wallet
required
string (Id) ^[0-9a-f]{32}$
enterprise
string (Id) ^[0-9a-f]{32}$
txid
required
string (TxId)

The on-chain transaction id

height
required
integer

The height of the block this Transfer was confirmed in (999999999 if unconfirmed)

heightId
string

The unique height id of the block

date
required
string <date-time>

The date this Transfer was last updated

type
required
string
Enum: "send" "receive"

Defines whether or not this Transfer was sent or received by the user

value
integer

The total value (in base units) sent by this Transfer (may be approximate for ETH and other coins where amounts in base units can exceed 2^53 - 1)

valueString
required
string^-?\d+$

The total value (in base units) sent by this Transfer represented as a String

baseValue
integer

The value (in base units) sent by this Transfer without network fees, represented

baseValueString
string^-?\d+$

The value (in base units) sent by this Transfer without network fees, represented as a String

feeString
string

The Transfer's fee (in base units) represented as a String

payGoFee
integer

The Transfer's BitGo fee (in base units)

payGoFeeString
string

The Transfer's BitGo fee (in base units) represented as a String

usd
required
number

The amount of USD of this Transfer (will be negative if it's a send)

usdRate
required
number

The USD price at the time this Transfer was created

state
required
string (TransferState)
Enum: "signed" "unconfirmed" "confirmed" "pendingApproval" "removed" "failed" "rejected"

The status of this Transfer

tags
required
Array of strings (Id)

The tags to be used on this Transfer (used in Policies)

required
Array of objects[ items ]

An audit log of events that have happened to the Transfer during its lifecycle

comment
required
string

A comment from the user

vSize
integer

The size of the transaction

nSegwitInputs
integer

DEPRECATED. Number of segwit inputs on the transfer.

coinSpecific
required
object

Transfer fields specific to each coin type

sequenceId
string

A sequenceId is a unique and arbitrary wallet identifier applied to transfers and transactions at creation. It is optional but highly recommended. With a sequenceId you can easily reference transfers and transactions—for example, to safely retry sending. Because the system only confirms one send request per sequenceId (and fails all subsequent attempts), you can retry sending without the risk of double spending. The sequenceId is only visible to users on the wallet and is not shared publicly.

Array of objects[ items ]

An array of objects describing the change in address balances made as a result of this Transfer

usersNotified
boolean

Whether BitGo already sent notifications to the users of the transfer wallet

confirmations
required
integer

The number of blocks that have been confirmed since this Transfer's block was confirmed

Array of objects (Unspent) [ items ]

If this is a Transfer on a UTXO coin, the array of inputs

Array of objects (Unspent) [ items ]

If this is a Transfer on a UTXO coin, the array of outputs

Response samples

Content type
application/json
{
  • "coin": "btc",
  • "id": "59cd72485007a239fb00282ed480da1f",
  • "wallet": "59cd72485007a239fb00282ed480da1f",
  • "enterprise": "59cd72485007a239fb00282ed480da1f",
  • "txid": "b8a828b98dbf32d9fd1875cbace9640ceb8c82626716b4a64203fdc79bb46d26",
  • "height": 0,
  • "heightId": "string",
  • "date": "2019-08-24T14:15:22Z",
  • "type": "send",
  • "value": 0,
  • "valueString": "string",
  • "baseValue": 0,
  • "baseValueString": "string",
  • "feeString": "string",
  • "payGoFee": 0,
  • "payGoFeeString": "string",
  • "usd": 0,
  • "usdRate": 0,
  • "state": "confirmed",
  • "tags": [
    • "59cd72485007a239fb00282ed480da1f"
    ],
  • "history": [
    • {
      }
    ],
  • "comment": "string",
  • "vSize": 0,
  • "nSegwitInputs": 0,
  • "coinSpecific": { },
  • "sequenceId": "string",
  • "entries": [
    • {
      }
    ],
  • "usersNotified": true,
  • "confirmations": 0,
  • "inputs": [
    • {
      }
    ],
  • "outputs": [
    • {
      }
    ]
}

Update comment

Update the comment of a transfer Requirements:

  • Transaction must be generated from a BitGo wallet
path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
required
Id (string) or TxId (string)
Example: f5d8ee39a430901c91a5917b9f2dc19d6d1a0e9cea205b009ca73dd04470b9a5 or 585951a5df8380e0e3063e9f12345678

a transfer or transaction id

Request Body schema: application/json
comment
string

The new comment for the transfer.

Responses

Response Schema: application/json
coin
required
string (Coin)

A cryptocurrency or token ticker symbol.

id
required
string (Id) ^[0-9a-f]{32}$
wallet
required
string (Id) ^[0-9a-f]{32}$
enterprise
string (Id) ^[0-9a-f]{32}$
txid
required
string (TxId)

The on-chain transaction id

height
required
integer

The height of the block this Transfer was confirmed in (999999999 if unconfirmed)

heightId
string

The unique height id of the block

date
required
string <date-time>

The date this Transfer was last updated

type
required
string
Enum: "send" "receive"

Defines whether or not this Transfer was sent or received by the user

value
integer

The total value (in base units) sent by this Transfer (may be approximate for ETH and other coins where amounts in base units can exceed 2^53 - 1)

valueString
required
string^-?\d+$

The total value (in base units) sent by this Transfer represented as a String

baseValue
integer

The value (in base units) sent by this Transfer without network fees, represented

baseValueString
string^-?\d+$

The value (in base units) sent by this Transfer without network fees, represented as a String

feeString
string

The Transfer's fee (in base units) represented as a String

payGoFee
integer

The Transfer's BitGo fee (in base units)

payGoFeeString
string

The Transfer's BitGo fee (in base units) represented as a String

usd
required
number

The amount of USD of this Transfer (will be negative if it's a send)

usdRate
required
number

The USD price at the time this Transfer was created

state
required
string (TransferState)
Enum: "signed" "unconfirmed" "confirmed" "pendingApproval" "removed" "failed" "rejected"

The status of this Transfer

tags
required
Array of strings (Id)

The tags to be used on this Transfer (used in Policies)

required
Array of objects[ items ]

An audit log of events that have happened to the Transfer during its lifecycle

comment
required
string

A comment from the user

vSize
integer

The size of the transaction

nSegwitInputs
integer

DEPRECATED. Number of segwit inputs on the transfer.

coinSpecific
required
object

Transfer fields specific to each coin type

sequenceId
string

A sequenceId is a unique and arbitrary wallet identifier applied to transfers and transactions at creation. It is optional but highly recommended. With a sequenceId you can easily reference transfers and transactions—for example, to safely retry sending. Because the system only confirms one send request per sequenceId (and fails all subsequent attempts), you can retry sending without the risk of double spending. The sequenceId is only visible to users on the wallet and is not shared publicly.

Array of objects[ items ]

An array of objects describing the change in address balances made as a result of this Transfer

usersNotified
boolean

Whether BitGo already sent notifications to the users of the transfer wallet

Request samples

Content type
application/json
{
  • "comment": "string"
}

Response samples

Content type
application/json
{
  • "coin": "btc",
  • "id": "59cd72485007a239fb00282ed480da1f",
  • "wallet": "59cd72485007a239fb00282ed480da1f",
  • "enterprise": "59cd72485007a239fb00282ed480da1f",
  • "txid": "b8a828b98dbf32d9fd1875cbace9640ceb8c82626716b4a64203fdc79bb46d26",
  • "height": 0,
  • "heightId": "string",
  • "date": "2019-08-24T14:15:22Z",
  • "type": "send",
  • "value": 0,
  • "valueString": "string",
  • "baseValue": 0,
  • "baseValueString": "string",
  • "feeString": "string",
  • "payGoFee": 0,
  • "payGoFeeString": "string",
  • "usd": 0,
  • "usdRate": 0,
  • "state": "confirmed",
  • "tags": [
    • "59cd72485007a239fb00282ed480da1f"
    ],
  • "history": [
    • {
      }
    ],
  • "comment": "string",
  • "vSize": 0,
  • "nSegwitInputs": 0,
  • "coinSpecific": { },
  • "sequenceId": "string",
  • "entries": [
    • {
      }
    ],
  • "usersNotified": true
}

Change Fee

Change the fee rate of a transaction in an attempt to accelerate its confirmation. Supported by: ETH, ERC20 tokens, CELO, RSK, ETC Requirements:

  • Transaction gas price must increase by at least 10 Gwei or 20% higher than the original transaction fee
  • At least 15 minutes must have passed since original send
path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
txid
string (Id) ^[0-9a-f]{32}$
fee
integer

The new fee for the transaction.

object

Responses

Response Schema: application/json
txid
string (Id) ^[0-9a-f]{32}$

Request samples

Content type
application/json
{
  • "txid": "59cd72485007a239fb00282ed480da1f",
  • "fee": 0,
  • "eip1559": {
    • "maxPriorityFeePerGas": "string",
    • "maxFeePerGas": "string"
    }
}

Response samples

Content type
application/json
{
  • "txid": "59cd72485007a239fb00282ed480da1f"
}

Transaction request

Get transaction requests by enterprise

Get a paginated list of transaction requests filtered by enterprise.

path Parameters
enterpriseId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
query Parameters
prevId
string (Id) ^[0-9a-f]{32}$
Example: prevId=59cd72485007a239fb00282ed480da1f

Return the next batch of results, based on the nextBatchPrevId value from the previous batch.

limit
integer [ 1 .. 500 ]
Default: 25

Maximum number of results to return. If the result set is truncated, use the nextBatchPrevId value to get the next batch.

latest
boolean

If provided, only the latest transaction request version will be returned.

states
Array of strings (TransactionRequestState)
Items Enum: "initialized" "pendingApproval" "pendingUserSignature" "pendingDelivery" "signed" "delivered" "canceled" "rejected"

If provided, only transaction requests of the specified state will be returned.

txRequestIds
Array of strings

If provided, only transaction requests specified will be returned.

idempotencyKeys
Array of strings

If provided, only transaction requests with the matching idempotencyKeys will be returned.

walletIds
Array of strings (Id)
Example: walletIds=59cd72485007a239fb00282ed480da1f

Filter by wallets.

Responses

Response Schema: application/json
required
Array of TransactionRequestLite (object) or TransactionRequestFull (object) (TransactionRequest) [ items ]
nextBatchPrevId
string

Response samples

Content type
application/json
{
  • "txRequests": [
    • {
      }
    ],
  • "nextBatchPrevId": "string"
}

Create transaction request

Allows users to create a transaction request given they have spender permissions on the wallet. Use only with TSS wallets. For multisignature wallets, use Build a transaction.

path Parameters
walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
idempotencyKey
string

The combination of the idempotencyKey, version and walletId has to be unique. If no idempotencyKey is specified then it remains undefined for the txRequest. Note, version is an internal field that is auto incremented on every update to a txRequest.

required
SOLClaimIntent (object) or SOLCreateAssociatedTokenAccountIntent (object) or SOLPaymentIntent (object) or SOLStakeIntent (object) or SOLUnstakeIntent (object) or DOTPaymentIntent (object) or NearStakeIntent (object) or NearUnstakeIntent (object) or NearWithdrawIntent (object) or ETHPaymentIntent (object) or ETHAccelerationIntent (object) or ETHStakingIntent (object) or ETHFillNonceIntent (object) or AdaStakeIntent (object) or UnstakeIntent (object) or ETHSignMessageIntent (object) or WithdrawIntent (object) or WalletRecoveryIntent (object) or TransferTokenIntent (object) (TransactionRequestIntent)
videoApprovers
Array of strings (IdArray)
apiVersion
string
Default: "full"
Enum: "lite" "full"

Full or Light to differentiate between the different transaction request flows.

preview
boolean
Default: false

When set to true, the transaction request is returned without being stored in the DB.

Responses

Response Schema: application/json
Any of
txRequestId
required
string

A unique ID for the TxRequest document across all wallets. The combination of the txRequestId and version will always be unique.

version
required
number

The version of the document. Data changes are done only with inserts and incrementing the version.

latest
required
boolean

A boolean flag that indicates whether the document is the latest version of the TxRequest.

walletId
required
string

The id of the Wallet the TxRequest is for.

walletType
string (WalletTypePublic)
Enum: "cold" "custodial" "custodialPaired" "hot" "trading"

The type describes who owns the keys to the wallet and how they are stored. cold wallets are wallets where the private key of the user key is stored exclusively outside of BitGo's system. custodial means that this wallet is a cold wallet where BitGo owns the keys. Only customers of the BitGo Trust can create this kind of wallet. custodialPaired means that this is a hot wallet that is owned by the customer but it will be linked to a cold (custodial) wallet where BitGo owns the keys. This option is only available to customers of BitGo Inc. BitGo stores an encrypted private key for the user key of hot wallets. trading wallets are trading accounts where the coin is ofc.

enterpriseId
string

If the wallet that owns the TxRequest is owned by an enterprise then this is the Id of said enterprise.

state
required
string (TransactionRequestState)
Enum: "initialized" "pendingApproval" "pendingUserSignature" "pendingDelivery" "signed" "delivered" "canceled" "rejected"
date
required
string <date-time> (DateTime)
userId
required
string

The Id of the User that produced this version of the TxRequest document. Could have created a new document or updated an existing document.

required
SOLClaimIntent (object) or SOLCreateAssociatedTokenAccountIntent (object) or SOLPaymentIntent (object) or SOLStakeIntent (object) or SOLUnstakeIntent (object) or DOTPaymentIntent (object) or NearStakeIntent (object) or NearUnstakeIntent (object) or NearWithdrawIntent (object) or ETHPaymentIntent (object) or ETHAccelerationIntent (object) or ETHStakingIntent (object) or ETHFillNonceIntent (object) or AdaStakeIntent (object) or UnstakeIntent (object) or ETHSignMessageIntent (object) or WithdrawIntent (object) or WalletRecoveryIntent (object) or TransferTokenIntent (object) (TransactionRequestIntent)
Array of SOLClaimIntent (object) or SOLCreateAssociatedTokenAccountIntent (object) or SOLPaymentIntent (object) or SOLStakeIntent (object) or SOLUnstakeIntent (object) or DOTPaymentIntent (object) or NearStakeIntent (object) or NearUnstakeIntent (object) or NearWithdrawIntent (object) or ETHPaymentIntent (object) or ETHAccelerationIntent (object) or ETHStakingIntent (object) or ETHFillNonceIntent (object) or AdaStakeIntent (object) or UnstakeIntent (object) or ETHSignMessageIntent (object) or WithdrawIntent (object) or WalletRecoveryIntent (object) or TransferTokenIntent (object) (TransactionRequestIntent) [ items ]
pendingApprovalId
string

The id of the Pending Approval that was created for the TxRequest if one was required.

Array of objects (TransactionRequestUnsignedTransaction) [ items ]
Array of objects (SignatureShare) [ items ]
txHashes
Array of strings

Request samples

Content type
application/json
{
  • "idempotencyKey": "string",
  • "intent": {
    • "nonce": "string",
    • "memo": "string",
    • "intentType": "claim",
    • "sequenceId": "abc123",
    • "comment": "string",
    • "stakingRequestId": "string",
    • "stakingAddress": "string",
    • "amount": {
      }
    },
  • "videoApprovers": [
    • "585951a5df8380e0e3063e9f",
    • "585951a5df8380e0e304a553"
    ],
  • "apiVersion": "lite",
  • "preview": false
}

Response samples

Content type
application/json
Example
{
  • "txRequestId": "string",
  • "version": 0,
  • "latest": true,
  • "walletId": "string",
  • "walletType": "cold",
  • "enterpriseId": "string",
  • "state": "initialized",
  • "date": "2018-05-05T19:46:22.019Z",
  • "userId": "string",
  • "intent": {
    • "nonce": "string",
    • "memo": "string",
    • "intentType": "claim",
    • "sequenceId": "abc123",
    • "comment": "string",
    • "stakingRequestId": "string",
    • "stakingAddress": "string",
    • "amount": {
      }
    },
  • "intents": [
    • {
      }
    ],
  • "pendingApprovalId": "string",
  • "unsignedTxs": [
    • {
      }
    ],
  • "signatureShares": [
    • {
      }
    ],
  • "txHashes": [
    • "string"
    ]
}

Get transaction requests by wallet

Get a paginated list of transaction requests filtered by wallet. Use only with TSS wallets.

path Parameters
walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
query Parameters
prevId
string (Id) ^[0-9a-f]{32}$
Example: prevId=59cd72485007a239fb00282ed480da1f

Return the next batch of results, based on the nextBatchPrevId value from the previous batch.

limit
integer [ 1 .. 500 ]
Default: 25

Maximum number of results to return. If the result set is truncated, use the nextBatchPrevId value to get the next batch.

latest
boolean

If provided, only the latest transaction request version will be returned.

states
Array of strings (TransactionRequestState)
Items Enum: "initialized" "pendingApproval" "pendingUserSignature" "pendingDelivery" "signed" "delivered" "canceled" "rejected"

If provided, only transaction requests of the specified state will be returned.

txRequestIds
Array of strings

If provided, only transaction requests specified will be returned.

idempotencyKeys
Array of strings

If provided, only transaction requests with the matching idempotencyKeys will be returned.

Responses

Response Schema: application/json
required
Array of TransactionRequestLite (object) or TransactionRequestFull (object) (TransactionRequest) [ items ]
nextBatchPrevId
string

Response samples

Content type
application/json
{
  • "txRequests": [
    • {
      }
    ],
  • "nextBatchPrevId": "string"
}

Update transaction request

Allows users to update an existing transaction request given they have spender permissions on the wallet. Use only with TSS wallets.

path Parameters
walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
id
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
state
required
string
Value: "canceled"
  • canceled - The state can only be updated to canceled if the current state is pendingUserSignature

Responses

Response Schema: application/json
Any of
txRequestId
required
string

A unique ID for the TxRequest document across all wallets. The combination of the txRequestId and version will always be unique.

version
required
number

The version of the document. Data changes are done only with inserts and incrementing the version.

latest
required
boolean

A boolean flag that indicates whether the document is the latest version of the TxRequest.

walletId
required
string

The id of the Wallet the TxRequest is for.

walletType
string (WalletTypePublic)
Enum: "cold" "custodial" "custodialPaired" "hot" "trading"

The type describes who owns the keys to the wallet and how they are stored. cold wallets are wallets where the private key of the user key is stored exclusively outside of BitGo's system. custodial means that this wallet is a cold wallet where BitGo owns the keys. Only customers of the BitGo Trust can create this kind of wallet. custodialPaired means that this is a hot wallet that is owned by the customer but it will be linked to a cold (custodial) wallet where BitGo owns the keys. This option is only available to customers of BitGo Inc. BitGo stores an encrypted private key for the user key of hot wallets. trading wallets are trading accounts where the coin is ofc.

enterpriseId
string

If the wallet that owns the TxRequest is owned by an enterprise then this is the Id of said enterprise.

state
required
string (TransactionRequestState)
Enum: "initialized" "pendingApproval" "pendingUserSignature" "pendingDelivery" "signed" "delivered" "canceled" "rejected"
date
required
string <date-time> (DateTime)
userId
required
string

The Id of the User that produced this version of the TxRequest document. Could have created a new document or updated an existing document.

required
SOLClaimIntent (object) or SOLCreateAssociatedTokenAccountIntent (object) or SOLPaymentIntent (object) or SOLStakeIntent (object) or SOLUnstakeIntent (object) or DOTPaymentIntent (object) or NearStakeIntent (object) or NearUnstakeIntent (object) or NearWithdrawIntent (object) or ETHPaymentIntent (object) or ETHAccelerationIntent (object) or ETHStakingIntent (object) or ETHFillNonceIntent (object) or AdaStakeIntent (object) or UnstakeIntent (object) or ETHSignMessageIntent (object) or WithdrawIntent (object) or WalletRecoveryIntent (object) or TransferTokenIntent (object) (TransactionRequestIntent)
Array of SOLClaimIntent (object) or SOLCreateAssociatedTokenAccountIntent (object) or SOLPaymentIntent (object) or SOLStakeIntent (object) or SOLUnstakeIntent (object) or DOTPaymentIntent (object) or NearStakeIntent (object) or NearUnstakeIntent (object) or NearWithdrawIntent (object) or ETHPaymentIntent (object) or ETHAccelerationIntent (object) or ETHStakingIntent (object) or ETHFillNonceIntent (object) or AdaStakeIntent (object) or UnstakeIntent (object) or ETHSignMessageIntent (object) or WithdrawIntent (object) or WalletRecoveryIntent (object) or TransferTokenIntent (object) (TransactionRequestIntent) [ items ]
pendingApprovalId
string

The id of the Pending Approval that was created for the TxRequest if one was required.

Array of objects (TransactionRequestUnsignedTransaction) [ items ]
Array of objects (SignatureShare) [ items ]
txHashes
Array of strings

Request samples

Content type
application/json
{
  • "state": "canceled"
}

Response samples

Content type
application/json
Example
{
  • "txRequestId": "string",
  • "version": 0,
  • "latest": true,
  • "walletId": "string",
  • "walletType": "cold",
  • "enterpriseId": "string",
  • "state": "initialized",
  • "date": "2018-05-05T19:46:22.019Z",
  • "userId": "string",
  • "intent": {
    • "nonce": "string",
    • "memo": "string",
    • "intentType": "claim",
    • "sequenceId": "abc123",
    • "comment": "string",
    • "stakingRequestId": "string",
    • "stakingAddress": "string",
    • "amount": {
      }
    },
  • "intents": [
    • {
      }
    ],
  • "pendingApprovalId": "string",
  • "unsignedTxs": [
    • {
      }
    ],
  • "signatureShares": [
    • {
      }
    ],
  • "txHashes": [
    • "string"
    ]
}

Create a signature share for the transaction request

Allows users to supply their signature share for signing. Use only with TSS wallets.

path Parameters
walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
id
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
object (SignatureShare)
Array of objects (SignatureShare) [ items ]

User-provided shares to be used in the ECDSA or EDDSA TSS signing flow.

signerShare
string

An openPGP ascii armored message (encrypted to the known HSM public key) containing the previous signer’s offset secret share as a 128 character hex string (64 bytes) consisting of the new offset “u” private component from the user [or backup] new offset Y-share as a 64 character hex string (32 bytes) concatenated with the new offset “chaincode” component of the new offset Y-share as a 64 character hex string (32 bytes). Must be provided when uploading an R share.

Responses

Request samples

Content type
application/json
{
  • "signatureShare": {
    • "from": "user",
    • "to": "user",
    • "share": "string"
    },
  • "signatureShares": [
    • {
      }
    ],
  • "signerShare": "string"
}

Response samples

Content type
application/json
{
  • "from": "user",
  • "to": "user",
  • "share": "string"
}

Delete signature shares on a transaction request.

Allows users to clear the signature shares on a transaction request. This will also set the state to pendingUserSignature. Use only with TSS wallets.

path Parameters
walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
id
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f

Responses

Response Schema: application/json
Array
from
required
string (KeyShareSource)
Enum: "user" "backup" "bitgo"
to
required
string (KeyShareSource)
Enum: "user" "backup" "bitgo"
share
required
string

The signature share.

Response samples

Content type
application/json
[
  • {
    • "from": "user",
    • "to": "user",
    • "share": "string"
    }
]

Create a signature share for a transaction on a transaction request

Allows users to supply their signature share for signing. This route is only valid for transaction request full. Use only with TSS wallets.

path Parameters
walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
id
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
transactionIdx
required
string
Request Body schema: application/json
object (SignatureShare)
Array of objects (SignatureShare) [ items ]

User-provided shares to be used in the ECDSA or EDDSA TSS signing flow.

signerShare
string

An openPGP ascii armored message (encrypted to the known HSM public key) containing the previous signer’s offset secret share as a 128 character hex string (64 bytes) consisting of the new offset “u” private component from the user [or backup] new offset Y-share as a 64 character hex string (32 bytes) concatenated with the new offset “chaincode” component of the new offset Y-share as a 64 character hex string (32 bytes). Must be provided when uploading an R share.

Responses

Request samples

Content type
application/json
{
  • "signatureShare": {
    • "from": "user",
    • "to": "user",
    • "share": "string"
    },
  • "signatureShares": [
    • {
      }
    ],
  • "signerShare": "string"
}

Response samples

Content type
application/json
{
  • "from": "user",
  • "to": "user",
  • "share": "string"
}

Create transfer for transaction request

Create a transfer for a transaction request and return that transfer. Use only with TSS wallets.

path Parameters
walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
id
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f

Responses

Response Schema: application/json
coin
required
string (Coin)

A cryptocurrency or token ticker symbol.

id
required
string (Id) ^[0-9a-f]{32}$
wallet
required
string (Id) ^[0-9a-f]{32}$
enterprise
string (Id) ^[0-9a-f]{32}$
txid
required
string (TxId)

The on-chain transaction id

height
required
integer

The height of the block this Transfer was confirmed in (999999999 if unconfirmed)

heightId
string

The unique height id of the block

date
required
string <date-time>

The date this Transfer was last updated

type
required
string
Enum: "send" "receive"

Defines whether or not this Transfer was sent or received by the user

value
integer

The total value (in base units) sent by this Transfer (may be approximate for ETH and other coins where amounts in base units can exceed 2^53 - 1)

valueString
required
string^-?\d+$

The total value (in base units) sent by this Transfer represented as a String

baseValue
integer

The value (in base units) sent by this Transfer without network fees, represented

baseValueString
string^-?\d+$

The value (in base units) sent by this Transfer without network fees, represented as a String

feeString
string

The Transfer's fee (in base units) represented as a String

payGoFee
integer

The Transfer's BitGo fee (in base units)

payGoFeeString
string

The Transfer's BitGo fee (in base units) represented as a String

usd
required
number

The amount of USD of this Transfer (will be negative if it's a send)

usdRate
required
number

The USD price at the time this Transfer was created

state
required
string (TransferState)
Enum: "signed" "unconfirmed" "confirmed" "pendingApproval" "removed" "failed" "rejected"

The status of this Transfer

tags
required
Array of strings (Id)

The tags to be used on this Transfer (used in Policies)

required
Array of objects[ items ]

An audit log of events that have happened to the Transfer during its lifecycle

comment
required
string

A comment from the user

vSize
integer

The size of the transaction

nSegwitInputs
integer

DEPRECATED. Number of segwit inputs on the transfer.

coinSpecific
required
object

Transfer fields specific to each coin type

sequenceId
string

A sequenceId is a unique and arbitrary wallet identifier applied to transfers and transactions at creation. It is optional but highly recommended. With a sequenceId you can easily reference transfers and transactions—for example, to safely retry sending. Because the system only confirms one send request per sequenceId (and fails all subsequent attempts), you can retry sending without the risk of double spending. The sequenceId is only visible to users on the wallet and is not shared publicly.

Array of objects[ items ]

An array of objects describing the change in address balances made as a result of this Transfer

usersNotified
boolean

Whether BitGo already sent notifications to the users of the transfer wallet

Response samples

Content type
application/json
{
  • "coin": "btc",
  • "id": "59cd72485007a239fb00282ed480da1f",
  • "wallet": "59cd72485007a239fb00282ed480da1f",
  • "enterprise": "59cd72485007a239fb00282ed480da1f",
  • "txid": "b8a828b98dbf32d9fd1875cbace9640ceb8c82626716b4a64203fdc79bb46d26",
  • "height": 0,
  • "heightId": "string",
  • "date": "2019-08-24T14:15:22Z",
  • "type": "send",
  • "value": 0,
  • "valueString": "string",
  • "baseValue": 0,
  • "baseValueString": "string",
  • "feeString": "string",
  • "payGoFee": 0,
  • "payGoFeeString": "string",
  • "usd": 0,
  • "usdRate": 0,
  • "state": "confirmed",
  • "tags": [
    • "59cd72485007a239fb00282ed480da1f"
    ],
  • "history": [
    • {
      }
    ],
  • "comment": "string",
  • "vSize": 0,
  • "nSegwitInputs": 0,
  • "coinSpecific": { },
  • "sequenceId": "string",
  • "entries": [
    • {
      }
    ],
  • "usersNotified": true
}

User

Get user

Returns the associated user

path Parameters
id
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f

The user ID, email address, or me for the currently authenticated user

Responses

Response Schema: application/json
id
string (Id) ^[0-9a-f]{32}$
isActive
boolean
object (Name)
username
string <email> (Email)
object
object
country
string
state
string

Request samples

bitgo.me({}, function callback(err, user) {
  if (err) {
    // handle error
  }
  // etc
});

Response samples

Content type
application/json
{
  • "id": "59cd72485007a239fb00282ed480da1f",
  • "isActive": true,
  • "name": {
    • "first": "Jane",
    • "full": "Jane Doe",
    • "last": "Doe"
    },
  • "username": "user@example.com",
  • "email": {
    • "email": "user@example.com",
    • "verified": true
    },
  • "phone": {
    • "phone": "408-718-6885",
    • "verified": true
    },
  • "country": "USA",
  • "state": "New York"
}

Get another users public key for wallet sharing

Request Body schema: application/json
email
required
string <email> (Email)

Responses

Response Schema: application/json
id
string (Id) ^[0-9a-f]{32}$
isActive
boolean
object (Name)
username
string <email> (Email)
object
object
country
string
state
string

Request samples

Content type
application/json
{
  • "email": "user@example.com"
}

Response samples

Content type
application/json
{
  • "id": "59cd72485007a239fb00282ed480da1f",
  • "isActive": true,
  • "name": {
    • "first": "Jane",
    • "full": "Jane Doe",
    • "last": "Doe"
    },
  • "username": "user@example.com",
  • "email": {
    • "email": "user@example.com",
    • "verified": true
    },
  • "phone": {
    • "phone": "408-718-6885",
    • "verified": true
    },
  • "country": "USA",
  • "state": "New York"
}

Login

Creates a short-lived (1 hour) access token for use with the API. The token must be specified to subsequent API calls via the Authorization HTTP header:

Authorization: Bearer 9b72c68ef394f5146f0f3efc1feafb7a971752cb00e79fafcfd8c1d2db83639c

We don't recommend using this endpoint for scripting. The preferred approach is to create a long-lived token in the web UI (see the Developer Options section in User Settings).

Request Body schema: application/json
email
required
string <email> (Email)
extensible
boolean

true if the session is extensible beyond a one-hour duration

otp
string (Otp)

Second factor authentication token

password
required
string

Responses

Response Schema: application/json
access_token
required
string
expires_at
required
integer

Unix timestamp

scope
required
Array of strings (Scope)
required
object (User)

Request samples

Content type
application/json
{
  • "email": "user@example.com",
  • "extensible": false,
  • "otp": "123456",
  • "password": "secret"
}

Response samples

Content type
application/json
{
  • "access_token": "9b72c68ef394f5146f0f3efc1feafb7a971752cb00e79fafcfd8c1d2db83639c",
  • "expires_at": 1534201288,
  • "scope": [
    • "crypto_compare",
    • "user_manage",
    • "openid",
    • "profile",
    • "wallet_create",
    • "wallet_manage_all",
    • "wallet_approve_all",
    • "wallet_spend_all",
    • "wallet_edit_all",
    • "wallet_view_all"
    ],
  • "user": {
    • "id": "59cd72485007a239fb00282ed480da1f",
    • "isActive": true,
    • "name": {
      },
    • "username": "user@example.com",
    • "email": {
      },
    • "phone": {
      },
    • "country": "USA",
    • "state": "New York"
    }
}

Logout

Disables an access token

Responses

Get session

Returns the session associated with access token passed via the Authorization header.

Responses

Response Schema: application/json
object (Session)

Request samples

bitgo.session({}, function callback(err, session) {
  if (err) {
    // handle error
  }
  console.dir(session);
});

Response samples

Content type
application/json
{
  • "session": {
    • "created": "2019-08-24T14:15:22Z",
    • "expires": "2019-08-24T14:15:22Z",
    • "id": "59cd72485007a239fb00282ed480da1f",
    • "ip": "127.0.0.1",
    • "ipRestrict": [
      ],
    • "origin": "test.bitgo.com",
    • "scope": [
      ],
    • "unlock": {
      },
    • "user": "59cd72485007a239fb00282ed480da1f"
    }
}

Lock session

Locks the current user session. This disallows operations that require an unlocked token, such as sending a transaction.

Responses

Response Schema: application/json
object (LockedSession)

Request samples

bitgo.lock({}).then(function (lockResponse) {
  // …
});

Response samples

Content type
application/json
{
  • "session": {
    • "created": "2019-08-24T14:15:22Z",
    • "expires": "2019-08-24T14:15:22Z",
    • "id": "59cd72485007a239fb00282ed480da1f",
    • "ip": "127.0.0.1",
    • "ipRestrict": [
      ],
    • "origin": "test.bitgo.com",
    • "scope": [
      ],
    • "user": "59cd72485007a239fb00282ed480da1f"
    }
}

Unlock session

Unlocks thes current user session. This allows operations that require an unlocked token, such as sending a transaction. Call this endpoint when an API returns a 401 response with the needsUnlock body parameter set to true.

Request Body schema: application/json
duration
integer [ 1 .. 3600 ]
Default: 600

Number of seconds that the session will stay unlocked

otp
string (Otp)

Second factor authentication token

Responses

Response Schema: application/json
object (Session)

Request samples

Content type
application/json
{
  • "duration": 600,
  • "otp": "123456"
}

Response samples

Content type
application/json
{
  • "session": {
    • "created": "2019-08-24T14:15:22Z",
    • "expires": "2019-08-24T14:15:22Z",
    • "id": "59cd72485007a239fb00282ed480da1f",
    • "ip": "127.0.0.1",
    • "ipRestrict": [
      ],
    • "origin": "test.bitgo.com",
    • "scope": [
      ],
    • "unlock": {
      },
    • "user": "59cd72485007a239fb00282ed480da1f"
    }
}

Wallet

Create address

This API call is used to create a new receive address for your wallet. You may choose to call this API whenever a deposit is made. The BitGo API supports millions of addresses. Please check the “Coin-Specific Implementation” with regards to fee address management for Ethereum and consolidation transactions for Algorand and Tezos.

Note, in Ethereum, new addresses are not returned immediately. This is because creating a new Ethereum address requires a blockchain transaction, which must be confirmed before the address can be used. You can save the "id" field in the response and use it to query for the address value after a short delay.

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
chain
integer (Chain)
Enum: 0 1 10 11 20 21 30 31
string or null (AddressLabel) <= 250 characters

A human-readable label for the address.

lowPriority
boolean
Default: false

Whether the deployment of the address forwarder contract should use a low priority fee key (ETH only)

number or string

Explicit gas price to use when deploying the forwarder contract (ETH only). If not given, defaults to the current estimated network gas price.

object

(ETH forwarderVersion: 0 wallets only) Specify eip1559 fee parameters in forwarder creation transactions.

forwarderVersion
integer [ 0 .. 2 ]

(ETH only) Specify forwarder version to use in address creation. In an effort to improve the cost of creating ETH forwarders, we have developed a new set of forwarder contracts that take advantage of several improvements. Specifically, forwarders are deployed as a simple proxy to a single implementation (https://eips.ethereum.org/EIPS/eip-1167), and forwarders are deployed using the CREATE2 opcode, enabling them to only be deployed when needed (https://eips.ethereum.org/EIPS/eip-1014). These new forwarders operate identically to current ETH forwarders. This flag is used to specify the forwarder contract version desired when deploying a forwarder contract. Use 0 for the old forwarder (https://github.com/BitGo/eth-multisig-v2), 1 for the new fee-improved forwarder (https://github.com/BitGo/eth-multisig-v4), and 2 for NFT supported forwarders.

onToken
string

Create an address for the given token

format
string

Format to use for the new address, if the coin which supports multiple formats for an address. Currently, Bitcoin Cash is the only coin which has support for multiple address formats. For Bitcoin Cash, BitGo supports both the base58 (legacy) address format, as well as the newer CashAddr format. The default address format is base58. To request a CashAddr formatted address instead, use the value cashaddr as the format.

Responses

Response Schema: application/json
id
string (Id) ^[0-9a-f]{32}$
address
string (AddressString) <= 250 characters
chain
integer (Chain)
Enum: 0 1 10 11 20 21 30 31
index
integer
coin
string
lastNonce
integer
Default: -1
wallet
string (Id) ^[0-9a-f]{32}$
object

Properties which are specific to certain coin types

object (AddressBalance)
string or null (AddressLabel) <= 250 characters

A human-readable label for the address.

addressType
string (AddressType)
Enum: "p2sh" "p2sh-p2wsh" "p2wsh"

Request samples

Content type
application/json
{
  • "chain": 1,
  • "label": "Bob's Hot Wallet Address",
  • "lowPriority": false,
  • "gasPrice": 0,
  • "eip1559": {
    • "maxPriorityFeePerGas": "string",
    • "maxFeePerGas": "string"
    },
  • "forwarderVersion": 2,
  • "onToken": "ofcbtc",
  • "format": "cashaddr"
}

Response samples

Content type
application/json
{
  • "id": "59cd72485007a239fb00282ed480da1f",
  • "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
  • "chain": 1,
  • "index": 0,
  • "coin": "string",
  • "lastNonce": -1,
  • "wallet": "59cd72485007a239fb00282ed480da1f",
  • "coinSpecific": {
    • "xlm": {
      },
    • "txlm": {
      }
    },
  • "balance": {
    • "updated": "2019-08-24T14:15:22Z",
    • "balance": 50000,
    • "balanceString": "50000",
    • "totalReceived": 0,
    • "totalSent": 0,
    • "confirmedBalanceString": "40000",
    • "spendableBalanceString": "40000"
    },
  • "label": "Bob's Hot Wallet Address",
  • "addressType": "p2sh"
}

Get list of potentially stuck transactions and their nonces for eth-like coins

Gets a list of potentially problematic transactions, their nonces, the reason they are stuck, and possible solutions for a given wallet

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f

Responses

Response Schema: application/json
Array
nonce
integer

The nonce value of the potentially stuck transaction.

cause
string

The reason this transaction is potentially stuck.

message
string

Possible steps to remediate the stuck transaction.

Response samples

Content type
application/json
[
  • {
    • "nonce": 0,
    • "cause": "string",
    • "message": "string"
    }
]

Get average fee

Returns the average fee for a specific number of blocks. Only for ETH and TETH.

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

query Parameters
numBlocks
integer

target number of blocks

Responses

Response Schema: application/json
averageFee
required
number

Calculated by summing the fees of the blocks over the number of blocks.

Response samples

Content type
application/json
{
  • "averageFee": 16000000
}

List transfers

Returns deposits and withdrawals for a wallet. Transfers are sorted in descending order by height, then id. Transfers with rejected and pendingApproval states are excluded by default.

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
query Parameters
allTokens
boolean
Example: allTokens=true

Include data for all subtokens (i.e. ERC20 Tokens, Stellar Tokens)

dateGte
string <date-time>

Return transfers with a date that is greater than or equal to the given timestamp

dateLt
string <date-time>

Return transfers with a date that is less than the given timestamp

height
string (IntegerString) ^-?\d+$
Example: height=2000000

The block or ledger height

limit
integer [ 1 .. 500 ]
Default: 25

Maximum number of results to return. If the result set is truncated, use the nextBatchPrevId value to get the next batch.

prevId
string (Id) ^[0-9a-f]{32}$
Example: prevId=59cd72485007a239fb00282ed480da1f

Return the next batch of results, based on the nextBatchPrevId value from the previous batch.

state
string (TransferState)
Enum: "signed" "unconfirmed" "confirmed" "pendingApproval" "removed" "failed" "rejected"
Example: state=confirmed

The status of this Transfer

type
string
Enum: "send" "receive"

Filter on sending or receiving Transfers

valueGte
integer

Return transfers with a value that is greater than or equal to the given number

valueLt
integer

Return transfers with a value that is less than the given number

id
string (Id) ^[0-9a-f]{32}$
Example: id=59cd72485007a239fb00282ed480da1f

Filter for a transfer by one or more transfer ids

pendingApprovalId
string (Id) ^[0-9a-f]{32}$
Example: pendingApprovalId=59cd72485007a239fb00282ed480da1f

Filter for a transfer with a matching pendingApprovalId

address
Array of strings (AddressString) [ items <= 250 characters ]
Example: address=2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS

Return transfers with elements in entries that have an address field set to this value

includeHex
boolean

Include the raw hex data of the transaction in the response (this may be a large amount of data)

memoId
Array of strings (IntegerString)
Example: memoId=2000000

Return transfers with any of the payment identifiers in this array. Available for Stellar and EOS.

Responses

Response Schema: application/json
required
Array of objects (AnnotatedTransferWithInputsOutputs) [ items ]
coin
required
string (Coin)

A cryptocurrency or token ticker symbol.

nextBatchPrevId
string <uuid> (NextBatchPrevId)

When a result set is truncated, this field returns the id of the last object in the previous batch. To get the next batch of results, pass this value via the prevId query parameter.

Request samples

wallet.transfers().then(function (transfers) {
  // print transfers
  console.dir(transfers);
});

Response samples

Content type
application/json
{
  • "transfers": [
    • {
      }
    ],
  • "coin": "btc",
  • "nextBatchPrevId": "585951a5df8380e0e3063e9f"
}

Add wallet (advanced only)

Add Wallet is for advanced API users. It lets you manually create and specify keys. The recommended (and simpler) method is Generate Wallet with the SDK or BitGo Express. You can also create wallets in the BitGo UI.

This API creates a new wallet for the user or enterprise. The keys to use with the new wallet (passed in the 'keys' parameter) must be registered with BitGo prior to using this API.

BitGo currently only supports 2-of-3 (e.g., m=2 and n=3) wallets. The third key, and only the third key, must be a BitGo key. The first key is by convention the user key, with its encrypted xprv stored on BitGo.

Ethereum and XRP wallets can only be created under an enterprise. Pass in the id of the enterprise to associate the wallet with. Your enterprise id can be seen by clicking on the "Manage Organization" link in the enterprise dropdown. Using the Add Wallet API, you can create a wallet using either the enterprise fee address (used by default for all wallets in the enterprise), or a unique fee address (created manually with the Keychains API). Pass the desired key as the third key ID in the 'keys' array. In either case, the fee address must be funded before creating the wallet.

You cannot generate a wallet by passing in a subtoken (i.e. ERC20 token) as the coin. Subtokens use the wallet of their parent coin and it is not possible to create a wallet specific to one token. For example, to create a wallet for an ERC20 token, create an Ethereum wallet. It can hold any ERC20 tokens as well as Ether.

BitGo Ethereum wallet is a smart-contract implementing multi-signature scheme. Because contracts itself can not initiate transactions, fee addresses are used for this purpose. Ethereum transactions initiated by a given address, are confirmed by the network in order of creation, so one lower fee transaction can potentially delay all subsequent transactions. To help lower network fee costs, two fee addresses are provided.

feeAddress is a main fee address usable for all operations. lowPriorityFeeAddress is a secondary fee address that can be used to pay lower fee for Create Address operations without risking delaying subsequent higher-priority transactions initiated by main fee address.

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

Request Body schema: application/json
object (WalletCreateCoinSpecific)
enterprise
string (Id) ^[0-9a-f]{32}$
isCold
boolean

Field is deprecated. Use type field instead and pass type = 'cold'

isCustodial
boolean

Field is deprecated. Use type field instead and pass type = 'custodialPaired'

keys
Array of strings (Keys)
object
label
required
string (WalletLabel)
multisigType
string (WalletMultisigType)
Enum: "onchain" "tss" "blsdkg"
address
string (WalletCustomAddress)

A custom address can be provided for EOS wallets. It must be exactly 12 alphanumeric characters.

m
integer (NumSignatures)

Number of signatures required. This value must be 2 for hot wallets, 1 for ofc wallets, and not specified for custodial wallets.

n
integer (NumKeychains)

Number of keys provided. This value must be 3 for hot wallets, 1 for ofc wallets, and not specified for custodial wallets.

tags
Array of strings (Id)
type
string (WalletTypePublic)
Enum: "cold" "custodial" "custodialPaired" "hot" "trading"

The type describes who owns the keys to the wallet and how they are stored. cold wallets are wallets where the private key of the user key is stored exclusively outside of BitGo's system. custodial means that this wallet is a cold wallet where BitGo owns the keys. Only customers of the BitGo Trust can create this kind of wallet. custodialPaired means that this is a hot wallet that is owned by the customer but it will be linked to a cold (custodial) wallet where BitGo owns the keys. This option is only available to customers of BitGo Inc. BitGo stores an encrypted private key for the user key of hot wallets. trading wallets are trading accounts where the coin is ofc.

walletVersion
integer [ 0 .. 3 ]
Default: 1

(ETH only) Specify the wallet creation contract version used when creating a wallet contract. Use 0 for the old wallet creation, 1 for the new wallet creation, where it is only deployed upon receiving funds. 2 for wallets with the same functionality as v1 but with NFT support. 3 for TSS wallets.

object

(ETH walletVersion: 0 wallets only) Specify eip1559 fee parameters in wallet creation transactions.

Responses

Response Schema: application/json
object
allowBackupKeySigning
boolean
approvalsRequired
required
integer (ApprovalsRequired) >= 1
balanceString
string^-?\d+$

Total balance in base units (e.g. Satoshis)

object (WalletBuildDefaults)
coin
required
string (Coin)

A cryptocurrency or token ticker symbol.

object (WalletCoinSpecific)
custodialWallet
object

The associated custodial wallet object

custodialWalletId
string (Id) ^[0-9a-f]{32}$
deleted
required
boolean
disableTransactionNotifications
required
boolean
enterprise
string (Id) ^[0-9a-f]{32}$
object
id
required
string (Id) ^[0-9a-f]{32}$
isCold
boolean
keys
Array of strings (Keys)
label
required
string (WalletLabel)
m
integer (NumSignatures)

Number of signatures required. This value must be 2 for hot wallets, 1 for ofc wallets, and not specified for custodial wallets.

n
integer (NumKeychains)

Number of keys provided. This value must be 3 for hot wallets, 1 for ofc wallets, and not specified for custodial wallets.

nodeId
string (Id) ^[0-9a-f]{32}$
object (Address)
recoverable
boolean
tags
Array of strings (Id)
spendableBalanceString
string^-?\d+$

Spendable balance in base units (e.g. Satoshis)

startDate
string <date-time>

Wallet creation time

type
string (WalletTypePublic)
Enum: "cold" "custodial" "custodialPaired" "hot" "trading"

The type describes who owns the keys to the wallet and how they are stored. cold wallets are wallets where the private key of the user key is stored exclusively outside of BitGo's system. custodial means that this wallet is a cold wallet where BitGo owns the keys. Only customers of the BitGo Trust can create this kind of wallet. custodialPaired means that this is a hot wallet that is owned by the customer but it will be linked to a cold (custodial) wallet where BitGo owns the keys. This option is only available to customers of BitGo Inc. BitGo stores an encrypted private key for the user key of hot wallets. trading wallets are trading accounts where the coin is ofc.

Array of objects (WalletUser) [ items ]
object (CustomChangeKeySignatures)

Signatures for the keys which will be used to derive custom change addresses.

Note: These signatures may only be set once for each wallet and are not modifiable after being set.

multisigType
string (WalletMultisigType)
Enum: "onchain" "tss" "blsdkg"

Request samples

Content type
application/json
{
  • "coinSpecific": {
    • "xlm": {
      },
    • "txlm": {
      }
    },
  • "enterprise": "59cd72485007a239fb00282ed480da1f",
  • "isCold": true,
  • "isCustodial": true,
  • "keys": [
    • "585951a5df8380e0e304a553",
    • "585951a5df8380e0e30d645c",
    • "585951a5df8380e0e30b6147"
    ],
  • "keySignatures": {
    • "backup": "string",
    • "bitgo": "string"
    },
  • "label": "My Wallet",
  • "multisigType": "onchain",
  • "address": "ivxzn3bdn4uo",
  • "m": 2,
  • "n": 3,
  • "tags": [
    • "59cd72485007a239fb00282ed480da1f"
    ],
  • "type": "cold",
  • "walletVersion": 1,
  • "eip1559": {
    • "maxPriorityFeePerGas": "string",
    • "maxFeePerGas": "string"
    }
}

Response samples

Content type
application/json
{
  • "admin": {
    • "policy": {
      }
    },
  • "allowBackupKeySigning": true,
  • "approvalsRequired": 1,
  • "balanceString": "string",
  • "buildDefaults": {
    • "minFeeRate": 12000
    },
  • "coin": "btc",
  • "coinSpecific": {
    • "creationFailure": [
      ],
    • "pendingChainInitialization": true,
    • "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM",
    • "stellarUsername": "foo_bar@baz.com",
    • "homeDomain": "bitgo.com",
    • "stellarAddress": "foo_bar@baz.com*bitgo.com"
    },
  • "custodialWallet": { },
  • "custodialWalletId": "59cd72485007a239fb00282ed480da1f",
  • "deleted": true,
  • "disableTransactionNotifications": true,
  • "enterprise": "59cd72485007a239fb00282ed480da1f",
  • "freeze": {
    • "time": "string",
    • "expires": "string"
    },
  • "id": "59cd72485007a239fb00282ed480da1f",
  • "isCold": true,
  • "keys": [
    • "585951a5df8380e0e304a553",
    • "585951a5df8380e0e30d645c",
    • "585951a5df8380e0e30b6147"
    ],
  • "label": "My Wallet",
  • "m": 2,
  • "n": 3,
  • "nodeId": "59cd72485007a239fb00282ed480da1f",
  • "receiveAddress": {
    • "id": "59cd72485007a239fb00282ed480da1f",
    • "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
    • "chain": 1,
    • "index": 0,
    • "coin": "string",
    • "lastNonce": -1,
    • "wallet": "59cd72485007a239fb00282ed480da1f",
    • "coinSpecific": {
      },
    • "balance": {
      },
    • "label": "Bob's Hot Wallet Address",
    • "addressType": "p2sh"
    },
  • "recoverable": true,
  • "tags": [
    • "59cd72485007a239fb00282ed480da1f"
    ],
  • "spendableBalanceString": "string",
  • "startDate": "string",
  • "type": "cold",
  • "users": [
    • {
      }
    ],
  • "customChangeKeySignatures": {
    • "user": "string",
    • "backup": "string",
    • "bitgo": "string"
    },
  • "multisigType": "onchain"
}

List wallets by coin

Get a list of all wallets per coin, for example, all Bitcoin wallets in your enterprise.

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

query Parameters
prevId
string (Id) ^[0-9a-f]{32}$
Example: prevId=59cd72485007a239fb00282ed480da1f

Return the next batch of results, based on the nextBatchPrevId value from the previous batch.

limit
integer [ 1 .. 500 ]
Default: 25

Maximum number of results to return. If the result set is truncated, use the nextBatchPrevId value to get the next batch.

allTokens
boolean
Example: allTokens=true

Include data for all subtokens (i.e. ERC20 Tokens, Stellar Tokens)

searchLabel
string
Example: searchLabel=My very first wallet

Query for Wallets with a label containing this string

showAllWallets
boolean

Include wallets that have deleted or creationFailed set to true

Responses

Response Schema: application/json
required
Array of objects (Wallet) [ items ]
nextBatchPrevId
string <uuid> (NextBatchPrevId)

When a result set is truncated, this field returns the id of the last object in the previous batch. To get the next batch of results, pass this value via the prevId query parameter.

coin
required
string (Coin)

A cryptocurrency or token ticker symbol.

Request samples

bitgo
  .coin('tbtc')
  .wallets()
  .list({})
  .then(function (wallets) {
    // print the wallets
    console.dir(wallets);
  });

Response samples

Content type
application/json
{
  • "wallets": [
    • {
      }
    ],
  • "nextBatchPrevId": "585951a5df8380e0e3063e9f",
  • "coin": "btc"
}

List wallets

Get a list of all wallets for which you have permission. To narrow your search, use the List wallets parameters below or call List wallets by coin, Get Wallet (by coin and walletId) or Get wallet by address (by coin and address).

Compare the List/Get wallet APIs:

  • List wallets returns 1 or more wallets for 1 or more coins across 1 or more enterprises (within an array).
  • List wallets by coin returns 1 or more wallets for one coin only across 1 or more enterprises (within an array).
  • Get wallet and Get wallet by address return one wallet.
Test the List/Get wallet APIs. With the same parameter values, these calls should return the same wallet (with minor differences in the responses):

API URL
List wallets {{baseUrl}}/api/v2/wallets?coin={coin}&enterprise={enterpriseid}&id={walletId}&expandBalance=true
List wallets by coin {{baseUrl}}/api/v2/{coin}/wallet?enterprise={enterpriseid}&searchLabel={wallet name}
Get wallet {{baseUrl}}/api/v2/{coin}/wallet/{walletId}
Get wallet by address {{baseUrl}}/api/v2/{coin}/wallet/address/{address}
query Parameters
coin
Array of strings (Coin)
Example: coin=btc

Filter by coin

deleted
Array of booleans[ items ]
Default: [false]

Filter by deleted state

enterprise
Array of strings (Id)
Example: enterprise=59cd72485007a239fb00282ed480da1f

Filter by enterprise

enterpriseIsNull
boolean

Filter by whether the enterprise field is null

expandBalance
boolean
Default: false

Add balanceString and spendableBalanceString to each wallet

id
Array of strings (Id)
Example: id=59cd72485007a239fb00282ed480da1f

Filter by id

labelContains
string

Filter by label substring

limit
integer [ 1 .. 500 ]
Default: 25

Maximum number of results to return. If the result set is truncated, use the nextBatchPrevId value to get the next batch.

prevId
string (Id) ^[0-9a-f]{32}$
Example: prevId=59cd72485007a239fb00282ed480da1f

Return the next batch of results, based on the nextBatchPrevId value from the previous batch.

type
Array of strings (WalletTypePublic)
Items Enum: "cold" "custodial" "custodialPaired" "hot" "trading"

Filter by wallet type

expandCustodialWallet
boolean

Whether linked custodial wallets should be expanded inline

Responses

Response Schema: application/json
required
Array of objects (Wallet) [ items ]
nextBatchPrevId
string <uuid> (NextBatchPrevId)

When a result set is truncated, this field returns the id of the last object in the previous batch. To get the next batch of results, pass this value via the prevId query parameter.

Response samples

Content type
application/json
{
  • "wallets": [
    • {
      }
    ],
  • "nextBatchPrevId": "585951a5df8380e0e3063e9f"
}

Get wallet by address

Get one wallet by its coin and receive address. Multiple receive addresses can map to one walletId.

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

address
required
string (AddressString) <= 250 characters
Example: 2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS

Responses

Response Schema: application/json
object
allowBackupKeySigning
boolean
approvalsRequired
required
integer (ApprovalsRequired) >= 1
balanceString
string^-?\d+$

Total balance in base units (e.g. Satoshis)

object (WalletBuildDefaults)
coin
required
string (Coin)

A cryptocurrency or token ticker symbol.

object (WalletCoinSpecific)
custodialWallet
object

The associated custodial wallet object

custodialWalletId
string (Id) ^[0-9a-f]{32}$
deleted
required
boolean
disableTransactionNotifications
required
boolean
enterprise
string (Id) ^[0-9a-f]{32}$
object
id
required
string (Id) ^[0-9a-f]{32}$
isCold
boolean
keys
Array of strings (Keys)
label
required
string (WalletLabel)
m
integer (NumSignatures)

Number of signatures required. This value must be 2 for hot wallets, 1 for ofc wallets, and not specified for custodial wallets.

n
integer (NumKeychains)

Number of keys provided. This value must be 3 for hot wallets, 1 for ofc wallets, and not specified for custodial wallets.

nodeId
string (Id) ^[0-9a-f]{32}$
object (Address)
recoverable
boolean
tags
Array of strings (Id)
spendableBalanceString
string^-?\d+$

Spendable balance in base units (e.g. Satoshis)

startDate
string <date-time>

Wallet creation time

type
string (WalletTypePublic)
Enum: "cold" "custodial" "custodialPaired" "hot" "trading"

The type describes who owns the keys to the wallet and how they are stored. cold wallets are wallets where the private key of the user key is stored exclusively outside of BitGo's system. custodial means that this wallet is a cold wallet where BitGo owns the keys. Only customers of the BitGo Trust can create this kind of wallet. custodialPaired means that this is a hot wallet that is owned by the customer but it will be linked to a cold (custodial) wallet where BitGo owns the keys. This option is only available to customers of BitGo Inc. BitGo stores an encrypted private key for the user key of hot wallets. trading wallets are trading accounts where the coin is ofc.

Array of objects (WalletUser) [ items ]
object (CustomChangeKeySignatures)

Signatures for the keys which will be used to derive custom change addresses.

Note: These signatures may only be set once for each wallet and are not modifiable after being set.

multisigType
string (WalletMultisigType)
Enum: "onchain" "tss" "blsdkg"

Request samples

let address = '2MyzG53Z6nF7UdNt7otEMtGNiEAEe2t2eSY';
bitgo
  .coin('tbtc')
  .wallets()
  .getWalletByAddress({ address: address })
  .then(function (wallet) {
    // print the wallet
    console.dir(wallet._wallet);
  });

Response samples

Content type
application/json
{
  • "admin": {
    • "policy": {
      }
    },
  • "allowBackupKeySigning": true,
  • "approvalsRequired": 1,
  • "balanceString": "string",
  • "buildDefaults": {
    • "minFeeRate": 12000
    },
  • "coin": "btc",
  • "coinSpecific": {
    • "creationFailure": [
      ],
    • "pendingChainInitialization": true,
    • "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM",
    • "stellarUsername": "foo_bar@baz.com",
    • "homeDomain": "bitgo.com",
    • "stellarAddress": "foo_bar@baz.com*bitgo.com"
    },
  • "custodialWallet": { },
  • "custodialWalletId": "59cd72485007a239fb00282ed480da1f",
  • "deleted": true,
  • "disableTransactionNotifications": true,
  • "enterprise": "59cd72485007a239fb00282ed480da1f",
  • "freeze": {
    • "time": "string",
    • "expires": "string"
    },
  • "id": "59cd72485007a239fb00282ed480da1f",
  • "isCold": true,
  • "keys": [
    • "585951a5df8380e0e304a553",
    • "585951a5df8380e0e30d645c",
    • "585951a5df8380e0e30b6147"
    ],
  • "label": "My Wallet",
  • "m": 2,
  • "n": 3,
  • "nodeId": "59cd72485007a239fb00282ed480da1f",
  • "receiveAddress": {
    • "id": "59cd72485007a239fb00282ed480da1f",
    • "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
    • "chain": 1,
    • "index": 0,
    • "coin": "string",
    • "lastNonce": -1,
    • "wallet": "59cd72485007a239fb00282ed480da1f",
    • "coinSpecific": {
      },
    • "balance": {
      },
    • "label": "Bob's Hot Wallet Address",
    • "addressType": "p2sh"
    },
  • "recoverable": true,
  • "tags": [
    • "59cd72485007a239fb00282ed480da1f"
    ],
  • "spendableBalanceString": "string",
  • "startDate": "string",
  • "type": "cold",
  • "users": [
    • {
      }
    ],
  • "customChangeKeySignatures": {
    • "user": "string",
    • "backup": "string",
    • "bitgo": "string"
    },
  • "multisigType": "onchain"
}

Get wallet

Get one wallet by its coin and walletId. One walletId can map to multiple receive addresses.

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
query Parameters
allTokens
boolean
Example: allTokens=true

Include data for all subtokens (i.e. ERC20 Tokens, Stellar Tokens)

Responses

Response Schema: application/json
object
allowBackupKeySigning
boolean
approvalsRequired
required
integer (ApprovalsRequired) >= 1
balanceString
string^-?\d+$

Total balance in base units (e.g. Satoshis)

object (WalletBuildDefaults)
coin
required
string (Coin)

A cryptocurrency or token ticker symbol.

object (WalletCoinSpecific)
custodialWallet
object

The associated custodial wallet object

custodialWalletId
string (Id) ^[0-9a-f]{32}$
deleted
required
boolean
disableTransactionNotifications
required
boolean
enterprise
string (Id) ^[0-9a-f]{32}$
object
id
required
string (Id) ^[0-9a-f]{32}$
isCold
boolean
keys
Array of strings (Keys)
label
required
string (WalletLabel)
m
integer (NumSignatures)

Number of signatures required. This value must be 2 for hot wallets, 1 for ofc wallets, and not specified for custodial wallets.

n
integer (NumKeychains)

Number of keys provided. This value must be 3 for hot wallets, 1 for ofc wallets, and not specified for custodial wallets.

nodeId
string (Id) ^[0-9a-f]{32}$
object (Address)
recoverable
boolean
tags
Array of strings (Id)
spendableBalanceString
string^-?\d+$

Spendable balance in base units (e.g. Satoshis)

startDate
string <date-time>

Wallet creation time

type
string (WalletTypePublic)
Enum: "cold" "custodial" "custodialPaired" "hot" "trading"

The type describes who owns the keys to the wallet and how they are stored. cold wallets are wallets where the private key of the user key is stored exclusively outside of BitGo's system. custodial means that this wallet is a cold wallet where BitGo owns the keys. Only customers of the BitGo Trust can create this kind of wallet. custodialPaired means that this is a hot wallet that is owned by the customer but it will be linked to a cold (custodial) wallet where BitGo owns the keys. This option is only available to customers of BitGo Inc. BitGo stores an encrypted private key for the user key of hot wallets. trading wallets are trading accounts where the coin is ofc.

Array of objects (WalletUser) [ items ]
object (CustomChangeKeySignatures)

Signatures for the keys which will be used to derive custom change addresses.

Note: These signatures may only be set once for each wallet and are not modifiable after being set.

multisigType
string (WalletMultisigType)
Enum: "onchain" "tss" "blsdkg"
balance
integer

The total balance of all wallets containing the given coin type. May lose precision for large values.

confirmedBalance
integer or null

The total balance of confirmed transactions for all wallets containing the given coin type. May lose precision for large values.

confirmedBalanceString
string

String representation of confirmedBalance. Guaranteed to not lose precision.

spendableBalance
integer or null

The total balance of all wallets containing the given coin which may be used as inputs for creating new transactions. May lose precision for large values.

stakedBalance
integer or null

The total balance of all wallets containing the given coin which has been staked. May lose precision for large values.

stakedBalanceString
string

String representation of stakedBalance. Guaranteed to not lose precision.

object

Object of key value pairs where the keys are the token symbols (e.g. omg) and the values are the balance data for that token symbol.

object

Object of key value pairs where the keys are the unsupported token contracts (e.g. 0x9928e4046d7c6513326ccea028cd3e7a91c7590a) and the values are the balance data for that token contract. UnsupportedTokens will only be returned for wallets that supports Metamask Institutional and has enableMMI flag turned on

Request samples

let walletId = '585c51a5df8380e0e3082e46';
bitgo
  .coin('tbtc')
  .wallets()
  .get({ id: walletId })
  .then(function (wallet) {
    // print the wallet
    console.dir(wallet._wallet);
  });

Response samples

Content type
application/json
{
  • "admin": {
    • "policy": {
      }
    },
  • "allowBackupKeySigning": true,
  • "approvalsRequired": 1,
  • "balanceString": "50000",
  • "buildDefaults": {
    • "minFeeRate": 12000
    },
  • "coin": "btc",
  • "coinSpecific": {
    • "creationFailure": [
      ],
    • "pendingChainInitialization": true,
    • "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM",
    • "stellarUsername": "foo_bar@baz.com",
    • "homeDomain": "bitgo.com",
    • "stellarAddress": "foo_bar@baz.com*bitgo.com"
    },
  • "custodialWallet": { },
  • "custodialWalletId": "59cd72485007a239fb00282ed480da1f",
  • "deleted": true,
  • "disableTransactionNotifications": true,
  • "enterprise": "59cd72485007a239fb00282ed480da1f",
  • "freeze": {
    • "time": "string",
    • "expires": "string"
    },
  • "id": "59cd72485007a239fb00282ed480da1f",
  • "isCold": true,
  • "keys": [
    • "585951a5df8380e0e304a553",
    • "585951a5df8380e0e30d645c",
    • "585951a5df8380e0e30b6147"
    ],
  • "label": "My Wallet",
  • "m": 2,
  • "n": 3,
  • "nodeId": "59cd72485007a239fb00282ed480da1f",
  • "receiveAddress": {
    • "id": "59cd72485007a239fb00282ed480da1f",
    • "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
    • "chain": 1,
    • "index": 0,
    • "coin": "string",
    • "lastNonce": -1,
    • "wallet": "59cd72485007a239fb00282ed480da1f",
    • "coinSpecific": {
      },
    • "balance": {
      },
    • "label": "Bob's Hot Wallet Address",
    • "addressType": "p2sh"
    },
  • "recoverable": true,
  • "tags": [
    • "59cd72485007a239fb00282ed480da1f"
    ],
  • "spendableBalanceString": "40000",
  • "startDate": "string",
  • "type": "cold",
  • "users": [
    • {
      }
    ],
  • "customChangeKeySignatures": {
    • "user": "string",
    • "backup": "string",
    • "bitgo": "string"
    },
  • "multisigType": "onchain",
  • "balance": 50000,
  • "confirmedBalance": 40000,
  • "confirmedBalanceString": "40000",
  • "spendableBalance": 40000,
  • "stakedBalance": 40000,
  • "stakedBalanceString": "40000",
  • "tokens": {
    • "property1": {
      },
    • "property2": {
      }
    },
  • "unsupportedTokens": {
    • "property1": {
      },
    • "property2": {
      }
    }
}

Update wallet

Update a wallet by its coin and walletId.

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
approvalsRequired
integer (ApprovalsRequired) >= 1
object (WalletBuildDefaults)
disableTransactionNotifications
boolean
label
string (WalletLabel)
object (CustomChangeKeySignatures)

Signatures for the keys which will be used to derive custom change addresses.

Note: These signatures may only be set once for each wallet and are not modifiable after being set.

object (WalletUpdateCoinSpecific)

Responses

Response Schema: application/json
object
allowBackupKeySigning
boolean
approvalsRequired
required
integer (ApprovalsRequired) >= 1
balanceString
string^-?\d+$

Total balance in base units (e.g. Satoshis)

object (WalletBuildDefaults)
coin
required
string (Coin)

A cryptocurrency or token ticker symbol.

object (WalletCoinSpecific)
custodialWallet
object

The associated custodial wallet object

custodialWalletId
string (Id) ^[0-9a-f]{32}$
deleted
required
boolean
disableTransactionNotifications
required
boolean
enterprise
string (Id) ^[0-9a-f]{32}$
object
id
required
string (Id) ^[0-9a-f]{32}$
isCold
boolean
keys
Array of strings (Keys)
label
required
string (WalletLabel)
m
integer (NumSignatures)

Number of signatures required. This value must be 2 for hot wallets, 1 for ofc wallets, and not specified for custodial wallets.

n
integer (NumKeychains)

Number of keys provided. This value must be 3 for hot wallets, 1 for ofc wallets, and not specified for custodial wallets.

nodeId
string (Id) ^[0-9a-f]{32}$
object (Address)
recoverable
boolean
tags
Array of strings (Id)
spendableBalanceString
string^-?\d+$

Spendable balance in base units (e.g. Satoshis)

startDate
string <date-time>

Wallet creation time

type
string (WalletTypePublic)
Enum: "cold" "custodial" "custodialPaired" "hot" "trading"

The type describes who owns the keys to the wallet and how they are stored. cold wallets are wallets where the private key of the user key is stored exclusively outside of BitGo's system. custodial means that this wallet is a cold wallet where BitGo owns the keys. Only customers of the BitGo Trust can create this kind of wallet. custodialPaired means that this is a hot wallet that is owned by the customer but it will be linked to a cold (custodial) wallet where BitGo owns the keys. This option is only available to customers of BitGo Inc. BitGo stores an encrypted private key for the user key of hot wallets. trading wallets are trading accounts where the coin is ofc.

Array of objects (WalletUser) [ items ]
object (CustomChangeKeySignatures)

Signatures for the keys which will be used to derive custom change addresses.

Note: These signatures may only be set once for each wallet and are not modifiable after being set.

multisigType
string (WalletMultisigType)
Enum: "onchain" "tss" "blsdkg"

Request samples

Content type
application/json
{
  • "approvalsRequired": 1,
  • "buildDefaults": {
    • "minFeeRate": 12000
    },
  • "disableTransactionNotifications": true,
  • "label": "My Wallet",
  • "customChangeKeySignatures": {
    • "user": "string",
    • "backup": "string",
    • "bitgo": "string"
    },
  • "coinSpecific": {
    • "eth": {
      },
    • "teth": {
      }
    }
}

Response samples

Content type
application/json
{
  • "admin": {
    • "policy": {
      }
    },
  • "allowBackupKeySigning": true,
  • "approvalsRequired": 1,
  • "balanceString": "string",
  • "buildDefaults": {
    • "minFeeRate": 12000
    },
  • "coin": "btc",
  • "coinSpecific": {
    • "creationFailure": [
      ],
    • "pendingChainInitialization": true,
    • "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM",
    • "stellarUsername": "foo_bar@baz.com",
    • "homeDomain": "bitgo.com",
    • "stellarAddress": "foo_bar@baz.com*bitgo.com"
    },
  • "custodialWallet": { },
  • "custodialWalletId": "59cd72485007a239fb00282ed480da1f",
  • "deleted": true,
  • "disableTransactionNotifications": true,
  • "enterprise": "59cd72485007a239fb00282ed480da1f",
  • "freeze": {
    • "time": "string",
    • "expires": "string"
    },
  • "id": "59cd72485007a239fb00282ed480da1f",
  • "isCold": true,
  • "keys": [
    • "585951a5df8380e0e304a553",
    • "585951a5df8380e0e30d645c",
    • "585951a5df8380e0e30b6147"
    ],
  • "label": "My Wallet",
  • "m": 2,
  • "n": 3,
  • "nodeId": "59cd72485007a239fb00282ed480da1f",
  • "receiveAddress": {
    • "id": "59cd72485007a239fb00282ed480da1f",
    • "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
    • "chain": 1,
    • "index": 0,
    • "coin": "string",
    • "lastNonce": -1,
    • "wallet": "59cd72485007a239fb00282ed480da1f",
    • "coinSpecific": {
      },
    • "balance": {
      },
    • "label": "Bob's Hot Wallet Address",
    • "addressType": "p2sh"
    },
  • "recoverable": true,
  • "tags": [
    • "59cd72485007a239fb00282ed480da1f"
    ],
  • "spendableBalanceString": "string",
  • "startDate": "string",
  • "type": "cold",
  • "users": [
    • {
      }
    ],
  • "customChangeKeySignatures": {
    • "user": "string",
    • "backup": "string",
    • "bitgo": "string"
    },
  • "multisigType": "onchain"
}

Delete wallet

Delete one wallet by its coin and walletId. Once removed, you can no longer view or access this wallet, but it does remain accessible to other wallet users. If you are the only user on this wallet, you can only delete it if it has a 0 balance.

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f

Responses

Response Schema: application/json
object
allowBackupKeySigning
boolean
approvalsRequired
required
integer (ApprovalsRequired) >= 1
balanceString
string^-?\d+$

Total balance in base units (e.g. Satoshis)

object (WalletBuildDefaults)
coin
required
string (Coin)

A cryptocurrency or token ticker symbol.

object (WalletCoinSpecific)
custodialWallet
object

The associated custodial wallet object

custodialWalletId
string (Id) ^[0-9a-f]{32}$
deleted
required
boolean
disableTransactionNotifications
required
boolean
enterprise
string (Id) ^[0-9a-f]{32}$
object
id
required
string (Id) ^[0-9a-f]{32}$
isCold
boolean
keys
Array of strings (Keys)
label
required
string (WalletLabel)
m
integer (NumSignatures)

Number of signatures required. This value must be 2 for hot wallets, 1 for ofc wallets, and not specified for custodial wallets.

n
integer (NumKeychains)

Number of keys provided. This value must be 3 for hot wallets, 1 for ofc wallets, and not specified for custodial wallets.

nodeId
string (Id) ^[0-9a-f]{32}$
object (Address)
recoverable
boolean
tags
Array of strings (Id)
spendableBalanceString
string^-?\d+$

Spendable balance in base units (e.g. Satoshis)

startDate
string <date-time>

Wallet creation time

type
string (WalletTypePublic)
Enum: "cold" "custodial" "custodialPaired" "hot" "trading"

The type describes who owns the keys to the wallet and how they are stored. cold wallets are wallets where the private key of the user key is stored exclusively outside of BitGo's system. custodial means that this wallet is a cold wallet where BitGo owns the keys. Only customers of the BitGo Trust can create this kind of wallet. custodialPaired means that this is a hot wallet that is owned by the customer but it will be linked to a cold (custodial) wallet where BitGo owns the keys. This option is only available to customers of BitGo Inc. BitGo stores an encrypted private key for the user key of hot wallets. trading wallets are trading accounts where the coin is ofc.

Array of objects (WalletUser) [ items ]
object (CustomChangeKeySignatures)

Signatures for the keys which will be used to derive custom change addresses.

Note: These signatures may only be set once for each wallet and are not modifiable after being set.

multisigType
string (WalletMultisigType)
Enum: "onchain" "tss" "blsdkg"

Response samples

Content type
application/json
{
  • "admin": {
    • "policy": {
      }
    },
  • "allowBackupKeySigning": true,
  • "approvalsRequired": 1,
  • "balanceString": "string",
  • "buildDefaults": {
    • "minFeeRate": 12000
    },
  • "coin": "btc",
  • "coinSpecific": {
    • "creationFailure": [
      ],
    • "pendingChainInitialization": true,
    • "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM",
    • "stellarUsername": "foo_bar@baz.com",
    • "homeDomain": "bitgo.com",
    • "stellarAddress": "foo_bar@baz.com*bitgo.com"
    },
  • "custodialWallet": { },
  • "custodialWalletId": "59cd72485007a239fb00282ed480da1f",
  • "deleted": true,
  • "disableTransactionNotifications": true,
  • "enterprise": "59cd72485007a239fb00282ed480da1f",
  • "freeze": {
    • "time": "string",
    • "expires": "string"
    },
  • "id": "59cd72485007a239fb00282ed480da1f",
  • "isCold": true,
  • "keys": [
    • "585951a5df8380e0e304a553",
    • "585951a5df8380e0e30d645c",
    • "585951a5df8380e0e30b6147"
    ],
  • "label": "My Wallet",
  • "m": 2,
  • "n": 3,
  • "nodeId": "59cd72485007a239fb00282ed480da1f",
  • "receiveAddress": {
    • "id": "59cd72485007a239fb00282ed480da1f",
    • "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
    • "chain": 1,
    • "index": 0,
    • "coin": "string",
    • "lastNonce": -1,
    • "wallet": "59cd72485007a239fb00282ed480da1f",
    • "coinSpecific": {
      },
    • "balance": {
      },
    • "label": "Bob's Hot Wallet Address",
    • "addressType": "p2sh"
    },
  • "recoverable": true,
  • "tags": [
    • "59cd72485007a239fb00282ed480da1f"
    ],
  • "spendableBalanceString": "string",
  • "startDate": "string",
  • "type": "cold",
  • "users": [
    • {
      }
    ],
  • "customChangeKeySignatures": {
    • "user": "string",
    • "backup": "string",
    • "bitgo": "string"
    },
  • "multisigType": "onchain"
}

Remove user from wallet

After a user has accepted a wallet share, they become a party on a wallet and the wallet share is considered “complete”. In order to revoke the share after they have accepted, you can remove the user from the wallet.

This operation requires approval by another wallet administrator if there is more than a single administrator on a wallet.

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
userId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f

Responses

Response Schema: application/json
object
allowBackupKeySigning
boolean
approvalsRequired
required
integer (ApprovalsRequired) >= 1
balanceString
string^-?\d+$

Total balance in base units (e.g. Satoshis)

object (WalletBuildDefaults)
coin
required
string (Coin)

A cryptocurrency or token ticker symbol.

object (WalletCoinSpecific)
custodialWallet
object

The associated custodial wallet object

custodialWalletId
string (Id) ^[0-9a-f]{32}$
deleted
required
boolean
disableTransactionNotifications
required
boolean
enterprise
string (Id) ^[0-9a-f]{32}$
object
id
required
string (Id) ^[0-9a-f]{32}$
isCold
boolean
keys
Array of strings (Keys)
label
required
string (WalletLabel)
m
integer (NumSignatures)

Number of signatures required. This value must be 2 for hot wallets, 1 for ofc wallets, and not specified for custodial wallets.

n
integer (NumKeychains)

Number of keys provided. This value must be 3 for hot wallets, 1 for ofc wallets, and not specified for custodial wallets.

nodeId
string (Id) ^[0-9a-f]{32}$
object (Address)
recoverable
boolean
tags
Array of strings (Id)
spendableBalanceString
string^-?\d+$

Spendable balance in base units (e.g. Satoshis)

startDate
string <date-time>

Wallet creation time

type
string (WalletTypePublic)
Enum: "cold" "custodial" "custodialPaired" "hot" "trading"

The type describes who owns the keys to the wallet and how they are stored. cold wallets are wallets where the private key of the user key is stored exclusively outside of BitGo's system. custodial means that this wallet is a cold wallet where BitGo owns the keys. Only customers of the BitGo Trust can create this kind of wallet. custodialPaired means that this is a hot wallet that is owned by the customer but it will be linked to a cold (custodial) wallet where BitGo owns the keys. This option is only available to customers of BitGo Inc. BitGo stores an encrypted private key for the user key of hot wallets. trading wallets are trading accounts where the coin is ofc.

Array of objects (WalletUser) [ items ]
object (CustomChangeKeySignatures)

Signatures for the keys which will be used to derive custom change addresses.

Note: These signatures may only be set once for each wallet and are not modifiable after being set.

multisigType
string (WalletMultisigType)
Enum: "onchain" "tss" "blsdkg"

Request samples

bitgo
  .coin('tbtc')
  .wallets()
  .get({ id: walletId })
  .then(function (wallet) {
    wallet.removeUser({ user: userId }).then(function (wallet) {
      console.dir(wallet);
    });
  });

Response samples

Content type
application/json
{
  • "admin": {
    • "policy": {
      }
    },
  • "allowBackupKeySigning": true,
  • "approvalsRequired": 1,
  • "balanceString": "string",
  • "buildDefaults": {
    • "minFeeRate": 12000
    },
  • "coin": "btc",
  • "coinSpecific": {
    • "creationFailure": [
      ],
    • "pendingChainInitialization": true,
    • "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM",
    • "stellarUsername": "foo_bar@baz.com",
    • "homeDomain": "bitgo.com",
    • "stellarAddress": "foo_bar@baz.com*bitgo.com"
    },
  • "custodialWallet": { },
  • "custodialWalletId": "59cd72485007a239fb00282ed480da1f",
  • "deleted": true,
  • "disableTransactionNotifications": true,
  • "enterprise": "59cd72485007a239fb00282ed480da1f",
  • "freeze": {
    • "time": "string",
    • "expires": "string"
    },
  • "id": "59cd72485007a239fb00282ed480da1f",
  • "isCold": true,
  • "keys": [
    • "585951a5df8380e0e304a553",
    • "585951a5df8380e0e30d645c",
    • "585951a5df8380e0e30b6147"
    ],
  • "label": "My Wallet",
  • "m": 2,
  • "n": 3,
  • "nodeId": "59cd72485007a239fb00282ed480da1f",
  • "receiveAddress": {
    • "id": "59cd72485007a239fb00282ed480da1f",
    • "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
    • "chain": 1,
    • "index": 0,
    • "coin": "string",
    • "lastNonce": -1,
    • "wallet": "59cd72485007a239fb00282ed480da1f",
    • "coinSpecific": {
      },
    • "balance": {
      },
    • "label": "Bob's Hot Wallet Address",
    • "addressType": "p2sh"
    },
  • "recoverable": true,
  • "tags": [
    • "59cd72485007a239fb00282ed480da1f"
    ],
  • "spendableBalanceString": "string",
  • "startDate": "string",
  • "type": "cold",
  • "users": [
    • {
      }
    ],
  • "customChangeKeySignatures": {
    • "user": "string",
    • "backup": "string",
    • "bitgo": "string"
    },
  • "multisigType": "onchain"
}

Freeze wallet

Lock the wallet, preventing any outgoing transactions for a specified number of seconds

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
duration
number

time in seconds

Responses

Response Schema: application/json
time
string <date-time>

When the freeze started

expires
string <date-time>

When the freeze will end

Request samples

Content type
application/json
{
  • "duration": 0
}

Response samples

Content type
application/json
{
  • "time": "2019-08-24T14:15:22Z",
  • "expires": "2019-08-24T14:15:22Z"
}

Get unspents

Returns unspent transaction outputs for a wallet

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
query Parameters
limit
integer [ 1 .. 500 ]
Default: 25

Maximum number of results to return. If the result set is truncated, use the nextBatchPrevId value to get the next batch.

string or integer (IntegerOrIntegerString)

Maximum value of each unspent in base units (e.g. satoshis). For doge, only string is allowed.

minConfirms
integer >= 0

Minimum number of confirmations for the collected inputs. Only applies to external unspents. Use enforceMinConfirmsForChange to filter change as well.

enforceMinConfirmsForChange
boolean

Enforces minConfirms on change inputs

minHeight
number >= 0

Minimum block height of the unspents

string or integer (IntegerOrIntegerString)

Minimum value of each unspent in base units (e.g. satoshis). For doge, only string is allowed.

prevId
string (Id) ^[0-9a-f]{32}$
Example: prevId=59cd72485007a239fb00282ed480da1f

Return the next batch of results, based on the nextBatchPrevId value from the previous batch.

segwit
boolean

DEPRECATED. Mutually exclusive with chains. Returns only p2shP2wsh unspents/addresses on true. Returns only p2sh unspents/addresses on false. Equivalent to passing 10 and 11 as the only value in chains on true, 0 and 1 on false.

Responses

Response Schema: application/json
coin
string (Coin)

A cryptocurrency or token ticker symbol.

Array of objects (Unspent) [ items ]

Request samples

wallet.unspents().then(function (unspents) {
  // print unspents
  console.dir(unspents);
});

Response samples

Content type
application/json
{
  • "coin": "btc",
  • "unspents": [
    • {
      }
    ]
}

Get maximum spendable

Returns the maximum amount that can be spent with a single transaction on the wallet.

The maximum spendable amount can differ from a wallet’s total balance. A transaction can only use up to 200 unspents. Wallets that have more than 200 unspents cannot spend the full balance in one transaction. Additionally, the value returned for the maximum spendable amount accounts for the current fee level by deducting the estimated fees. The amount will only be calculated based on the unspents that fit the parameters passed.

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
query Parameters
allTokens
boolean
Example: allTokens=true

Include data for all subtokens (i.e. ERC20 Tokens, Stellar Tokens)

enforceMinConfirmsForChange
boolean

Enforces minConfirms on change inputs

feeRate
integer >= 0
limit
integer [ 1 .. 500 ]
Default: 25

Maximum number of results to return. If the result set is truncated, use the nextBatchPrevId value to get the next batch.

maxFeeRate
integer >= 0
string or integer (IntegerOrIntegerString)

Maximum value of each unspent in base units (e.g. satoshis). For doge, only string is allowed.

minConfirms
integer >= 0

Minimum number of confirmations for the collected inputs. Only applies to external unspents. Use enforceMinConfirmsForChange to filter change as well.

minHeight
number >= 0

Minimum block height of the unspents

string or integer (IntegerOrIntegerString)

Minimum value of each unspent in base units (e.g. satoshis). For doge, only string is allowed.

numBlocks
integer [ 1 .. 1000 ]
Default: 2

Sets the target estimated number of blocks for a confirmation

Responses

Response Schema: application/json
coin
string (Coin)

A cryptocurrency or token ticker symbol.

maximumSpendable
string

Request samples

wallet.maximumSpendable(params).then(function (amount) {
  // print maximum spendable amount
  console.dir(amount);
});

Response samples

Content type
application/json
{
  • "coin": "btc",
  • "maximumSpendable": "19948310"
}

Get spending limits and current amount spent

Returns the wallet's currently configured spending limits and the current amount spent during the periods defined by the spending limits.

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f

Responses

Response Schema: application/json
Array of objects[ items ]

Response samples

Content type
application/json
{
  • "velocityLimitSpending": [
    • {
      }
    ]
}

Make unspent reservation

Mark the unspents as reserved and cannot be used in transactions until the given expire time.

path Parameters
walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
unspentIds
required
Array of strings (UnspentId) non-empty
expireTime
required
string <date-time>

Responses

Response Schema: application/json
Array of objects (ReservedUnspent) [ items ]

Request samples

Content type
application/json
{
  • "unspentIds": [
    • "003f688cc349f1fca8ac5ffa21671ca911b6ef351085c60733ed8c2ebf162cb8:2"
    ],
  • "expireTime": "2019-08-24T14:15:22Z"
}

Response samples

Content type
application/json
{
  • "unspents": [
    • {
      }
    ]
}

Release unspent reservation

Release unspents from reservation to be accessible for transactions.

path Parameters
walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
query Parameters
id
required
Array of strings (UnspentId)
Example: id=003f688cc349f1fca8ac5ffa21671ca911b6ef351085c60733ed8c2ebf162cb8:2

Responses

Response Schema: application/json
Array of objects (ReservedUnspent) [ items ]

Response samples

Content type
application/json
{
  • "unspents": [
    • {
      }
    ]
}

List unspent reservation

Query reserved unspents in the wallet.

path Parameters
walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
query Parameters
prevId
string
limit
integer [ 1 .. 500 ]
Default: 25

Maximum number of results to return. If the result set is truncated, use the nextBatchPrevId value to get the next batch.

expireTimeGt
string <date-time>
expireTimeLte
string <date-time>

Responses

Response Schema: application/json
Array of objects (ReservedUnspent) [ items ]
nextBatchPrevId
string

Response samples

Content type
application/json
{
  • "unspents": [
    • {
      }
    ],
  • "nextBatchPrevId": "string"
}

Modifying unspent reservation

Modify expire time of reserved unspents.

path Parameters
walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
unspentIds
required
Array of strings (UnspentId) non-empty
required
object

Responses

Response Schema: application/json
Array of objects (ReservedUnspent) [ items ]

Request samples

Content type
application/json
{
  • "unspentIds": [
    • "003f688cc349f1fca8ac5ffa21671ca911b6ef351085c60733ed8c2ebf162cb8:2"
    ],
  • "changes": {
    • "expireTime": "2019-08-24T14:15:22Z"
    }
}

Response samples

Content type
application/json
{
  • "unspents": [
    • {
      }
    ]
}

List total balances

Selects wallets based on the given filter parameters. Gets all balances for the selected wallets and sums up the balances by coin.

query Parameters
coin
Array of strings (Coin)
Example: coin=btc

Filter by coin

deleted
Array of booleans[ items ]
Default: [false]

Filter by deleted state

enterprise
Array of strings (Id)
Example: enterprise=59cd72485007a239fb00282ed480da1f

Filter by enterprise

id
Array of strings (Id)
Example: id=59cd72485007a239fb00282ed480da1f

Filter by id

labelContains
string

Filter by label substring

type
Array of strings (WalletTypePublic)
Items Enum: "cold" "custodial" "custodialPaired" "hot" "trading"

Filter by wallet type

expandCustodialWallet
boolean

Whether balances of linked custodial wallets should be included

Responses

Response Schema: application/json
Array of objects[ items ]

Response samples

Content type
application/json
{
  • "balances": [
    • {
      }
    ]
}

Build a transaction

Build a transaction from the wallet using provided options. Use only with multisignature wallets. For TSS wallets, use Create transaction request. If you want to build, sign, and send all in one call, use Send transaction.

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
One of
numBlocks
integer [ 2 .. 1000 ]

(BTC only) Used to estimate the fee rate by targeting confirmation within the given number of blocks. If neither feeRate nor numBlocks is specified, a block target of 2 is used by default. Can be limited with maxFeeRate.

string or integer

Custom minimum fee rate in a coin's base unit per kilobyte (or virtual kilobyte)--for example, satoshis per kvByte or microAlgos per kByte. For xrp, it refers to the open ledger fee in drops (1 XRP = 1000000 drops) and the actual fee used is usually 4.5 times the open ledger fee. If the applied feeRate does not meet a coin's required minimum transaction fee amount, the minimum is still applied (for example, 1000 sat/kvByte , a flat 1000 microAlgos or a flat 10 drops of xrp).

string or integer

Custom upper limit for fee rate in a coin's base unit per kilobyte (or virtual kilobyte)--for example, satoshis per kvByte or microAlgos per kByte. maxFeeRate can be used to limit a fee rate estimate generated with numBlocks.

string or number

Custom multiplier for fee rate. Suggested to be used in conjunction with maxFeeRate for higher priority transactions, or transactions which may not be broadcast for some time after being built. Must be greater than 0.

minConfirms
integer

The unspent selection for the transaction will only consider unspents with at least this many confirmations to be used as inputs. Does not apply to change outputs unless used in combination with enforceMinConfirmsForChange.

enforceMinConfirmsForChange
boolean
Default: false

When set to true, will enforce minConfirms for change outputs. Defaults to false.

string or integer

Custom gas price to be used for sending the transaction. Only for ETH and ERC20 tokens.

object
string or integer

Custom gas limit to be used for sending the transaction. Only for ETH and ERC20 tokens.

targetWalletUnspents
integer
Default: 1000

Specifies the minimum count of good-sized unspents to maintain in the wallet. Change splitting ceases when the wallet has targetWalletUnspents good-sized unspents.

Note: Wallets that continuously send a high count of transactions will automatically split large change amounts into multiple good-sized change outputs while they have fewer than targetWalletUnspents good-sized unspents in their unspent pool. Breaking up large unspents helps to reduce the amount of unconfirmed funds in flight in future transactions, and helps to avoid long chains of unconfirmed transactions. This is especially useful for newly funded wallets or recently refilled send-only wallets.

string or integer

Ignore unspents smaller than this amount of base units (e.g. satoshis). For doge, only string is allowed.

string or integer

Ignore unspents larger than this amount of base units (e.g. satoshis). For doge, only string is allowed.

sequenceId
string

A sequenceId is a unique and arbitrary wallet identifier applied to transfers and transactions at creation. It is optional but highly recommended. With a sequenceId you can easily reference transfers and transactions—for example, to safely retry sending. Because the system only confirms one send request per sequenceId (and fails all subsequent attempts), you can retry sending without the risk of double spending. The sequenceId is only visible to users on the wallet and is not shared publicly.

nonce
string^-?\d+$

(DOT only) A nonce ID is a number used to protect private communications by preventing replay attacks. This is an advanced option where users can manually input a new nonce value in order to correct or fill in a missing nonce ID value.

noSplitChange
boolean
Default: false

Set true to disable automatic change splitting.

Also see: targetWalletUnspents

unspents
Array of strings

Used to explicitly specify the unspents to be used in the input set in the transaction. Each unspent should be in the form prevTxId:nOutput.

changeAddress
string <= 250 characters

Specifies a custom destination address for the transaction's change output(s)

instant
boolean

(DASH only) Specifies whether or not to use Dash's "InstantSend" feature when sending a transaction.

object

Memo for Stellar or EOS. Type is only required for memos in Stellar transactions. The memo contains optional extra information that can also be used to identify payments in Stellar or EOS.

comment
string <= 256 characters

Optional metadata (only persisted in BitGo) to be applied to the transaction. Use this to add transaction-specific information such as the transaction's purpose or another identifier that you want to reference later. The value is shown in the UI in the transfer listing page.

addressType
string

The type of address to create for change. One of p2sh, p2shP2wsh, and p2wsh.

startTime
string

The start of the validity window for the transaction. Only supported by HBAR

consolidateId
string (Id) ^[0-9a-f]{32}$
lastLedgerSequence
integer

(XRP only) Absolute max ledger the transaction should be accepted in, whereafter it will be rejected

ledgerSequenceDelta
integer

(XRP only) Relative ledger height (in relation to the current ledger) that the transaction should be accepted in, whereafter it will be rejected

cpfpTxIds
Array of strings

The list of transactions to bump with a child-pays-for-parent transaction (currently only bumping one tx is supported).

cpfpFeeRate
integer

The desired effective fee rate of the accelerated transaction in base units per kilobyte (e.g. satoshi/kB), the unconfirmed transactions it depends on, and the newly created child-pays-for-parent transaction. Must be higher than the current effective fee rate of the target transaction.

maxFee
integer >= 0

Limits the amount of satoshis that can be used for fees in a child-pays-for-parent (CPFP) transaction. CPFP transactions accelerate the targeted transaction and all of the unconfirmed transactions the targeted transaction depends on. maxFee is required for all CPFP transactions as it allows users to set a safety net that will halt CPFP attempts that exceed the expected cost.

strategy
string <= 20 characters

Optional unspent selection strategy to use. One of RANDOM, FIFO or BNB.

validFromBlock
integer

Optional block this transaction is valid from

validToBlock
integer

Optional block this transaction is valid until

type
string

transaction type (e.g., trustline for Stellar trustline transactions, accountSet for XRP account set transactions, stakingLock and stakingUnlock for Stacks delegation).

Array of objects (Trustline) [ items ]

List of trustlines to manage on the account. Available for Stellar.

CSPRStakingOptions (object) or STXStakingOptions (object)

Required object for staking. Only for CSPR and STX.

object

Options needed to unstake EOS assets

object

Options needed to refund unstaked EOS assets if automatic refund fails

messageKey
string

Optional parameter that takes a hexadecimal value to set messagekey for an XRP accountSet transaction. Recipients field should be empty when messageKey is set.

object

Optional parameter for UTXO coins to automatically reserve the unspents that are used in the build. Useful for Cold wallets. If using, must set expireTime.

required
Array of objects[ items ]

A list of recipient addresses and amounts. Must be present but empty for child-pays-for-parent transactions.

Responses

Response Schema: application/json
keyDerivationPath
string

Request samples

Content type
application/json
Example
{
  • "numBlocks": 2,
  • "feeRate": 10000,
  • "maxFeeRate": 20000,
  • "feeMultiplier": 1.5,
  • "minConfirms": 0,
  • "enforceMinConfirmsForChange": false,
  • "gasPrice": "string",
  • "eip1559": {
    • "maxPriorityFeePerGas": "string",
    • "maxFeePerGas": "string"
    },
  • "gasLimit": "string",
  • "targetWalletUnspents": 1000,
  • "minValue": "string",
  • "maxValue": "string",
  • "sequenceId": "string",
  • "nonce": "string",
  • "noSplitChange": false,
  • "unspents": [
    • "12b147dd8b4f73c01f72bdbf5b589eea614f3de609ffdbdac84852d6505cf8a3:1"
    ],
  • "changeAddress": "string",
  • "instant": true,
  • "memo": {
    • "type": "string",
    • "value": "string"
    },
  • "comment": "string",
  • "addressType": "string",
  • "startTime": "string",
  • "consolidateId": "59cd72485007a239fb00282ed480da1f",
  • "lastLedgerSequence": 0,
  • "ledgerSequenceDelta": 0,
  • "cpfpTxIds": [
    • "string"
    ],
  • "cpfpFeeRate": 0,
  • "maxFee": 0,
  • "strategy": "string",
  • "validFromBlock": 0,
  • "validToBlock": 0,
  • "type": "string",
  • "trustlines": [
    • {
      }
    ],
  • "stakingOptions": {
    • "amount": "string",
    • "validator": "string"
    },
  • "unstakingOptions": {
    • "from": "string",
    • "receiver": "string",
    • "unstakeCpuQuantity": "string",
    • "unstakeNetQuantity": "string"
    },
  • "refundOptions": {
    • "address": "string"
    },
  • "messageKey": "string",
  • "reservation": {
    • "expireTime": "2019-08-24T14:15:22Z"
    },
  • "recipients": [
    • {
      }
    ]
}

Response samples

Content type
application/json
{
  • "keyDerivationPath": "string"
}

Initiate a transaction

Initiate an unsigned transaction to create a pending approval. This is useful to request funds to be sent from custodial wallets. Use only with custodial wallets.

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
numBlocks
integer [ 2 .. 1000 ]

(BTC only) Used to estimate the fee rate by targeting confirmation within the given number of blocks. If neither feeRate nor numBlocks is specified, a block target of 2 is used by default. Can be limited with maxFeeRate.

string or integer

Custom minimum fee rate in a coin's base unit per kilobyte (or virtual kilobyte)--for example, satoshis per kvByte or microAlgos per kByte. For xrp, it refers to the open ledger fee in drops (1 XRP = 1000000 drops) and the actual fee used is usually 4.5 times the open ledger fee. If the applied feeRate does not meet a coin's required minimum transaction fee amount, the minimum is still applied (for example, 1000 sat/kvByte , a flat 1000 microAlgos or a flat 10 drops of xrp).

string or integer

Custom upper limit for fee rate in a coin's base unit per kilobyte (or virtual kilobyte)--for example, satoshis per kvByte or microAlgos per kByte. maxFeeRate can be used to limit a fee rate estimate generated with numBlocks.

string or number

Custom multiplier for fee rate. Suggested to be used in conjunction with maxFeeRate for higher priority transactions, or transactions which may not be broadcast for some time after being built. Must be greater than 0.

minConfirms
integer

The unspent selection for the transaction will only consider unspents with at least this many confirmations to be used as inputs. Does not apply to change outputs unless used in combination with enforceMinConfirmsForChange.

enforceMinConfirmsForChange
boolean
Default: false

When set to true, will enforce minConfirms for change outputs. Defaults to false.

string or integer

Custom gas price to be used for sending the transaction. Only for ETH and ERC20 tokens.

object
string or integer

Custom gas limit to be used for sending the transaction. Only for ETH and ERC20 tokens.

targetWalletUnspents
integer
Default: 1000

Specifies the minimum count of good-sized unspents to maintain in the wallet. Change splitting ceases when the wallet has targetWalletUnspents good-sized unspents.

Note: Wallets that continuously send a high count of transactions will automatically split large change amounts into multiple good-sized change outputs while they have fewer than targetWalletUnspents good-sized unspents in their unspent pool. Breaking up large unspents helps to reduce the amount of unconfirmed funds in flight in future transactions, and helps to avoid long chains of unconfirmed transactions. This is especially useful for newly funded wallets or recently refilled send-only wallets.

string or integer

Ignore unspents smaller than this amount of base units (e.g. satoshis). For doge, only string is allowed.

string or integer

Ignore unspents larger than this amount of base units (e.g. satoshis). For doge, only string is allowed.

sequenceId
string

A sequenceId is a unique and arbitrary wallet identifier applied to transfers and transactions at creation. It is optional but highly recommended. With a sequenceId you can easily reference transfers and transactions—for example, to safely retry sending. Because the system only confirms one send request per sequenceId (and fails all subsequent attempts), you can retry sending without the risk of double spending. The sequenceId is only visible to users on the wallet and is not shared publicly.

nonce
string^-?\d+$

(DOT only) A nonce ID is a number used to protect private communications by preventing replay attacks. This is an advanced option where users can manually input a new nonce value in order to correct or fill in a missing nonce ID value.

noSplitChange
boolean
Default: false

Set true to disable automatic change splitting.

Also see: targetWalletUnspents

unspents
Array of strings

Used to explicitly specify the unspents to be used in the input set in the transaction. Each unspent should be in the form prevTxId:nOutput.

changeAddress
string <= 250 characters

Specifies a custom destination address for the transaction's change output(s)

instant
boolean

(DASH only) Specifies whether or not to use Dash's "InstantSend" feature when sending a transaction.

object

Memo for Stellar or EOS. Type is only required for memos in Stellar transactions. The memo contains optional extra information that can also be used to identify payments in Stellar or EOS.

comment
string <= 256 characters

Optional metadata (only persisted in BitGo) to be applied to the transaction. Use this to add transaction-specific information such as the transaction's purpose or another identifier that you want to reference later. The value is shown in the UI in the transfer listing page.

addressType
string

The type of address to create for change. One of p2sh, p2shP2wsh, and p2wsh.

startTime
string

The start of the validity window for the transaction. Only supported by HBAR

consolidateId
string (Id) ^[0-9a-f]{32}$
lastLedgerSequence
integer

(XRP only) Absolute max ledger the transaction should be accepted in, whereafter it will be rejected

ledgerSequenceDelta
integer

(XRP only) Relative ledger height (in relation to the current ledger) that the transaction should be accepted in, whereafter it will be rejected

cpfpTxIds
Array of strings

The list of transactions to bump with a child-pays-for-parent transaction (currently only bumping one tx is supported).

cpfpFeeRate
integer

The desired effective fee rate of the accelerated transaction in base units per kilobyte (e.g. satoshi/kB), the unconfirmed transactions it depends on, and the newly created child-pays-for-parent transaction. Must be higher than the current effective fee rate of the target transaction.

maxFee
integer >= 0

Limits the amount of satoshis that can be used for fees in a child-pays-for-parent (CPFP) transaction. CPFP transactions accelerate the targeted transaction and all of the unconfirmed transactions the targeted transaction depends on. maxFee is required for all CPFP transactions as it allows users to set a safety net that will halt CPFP attempts that exceed the expected cost.

strategy
string <= 20 characters

Optional unspent selection strategy to use. One of RANDOM, FIFO or BNB.

validFromBlock
integer

Optional block this transaction is valid from

validToBlock
integer

Optional block this transaction is valid until

type
string

transaction type (e.g., trustline for Stellar trustline transactions, accountSet for XRP account set transactions, stakingLock and stakingUnlock for Stacks delegation).

Array of objects (Trustline) [ items ]

List of trustlines to manage on the account. Available for Stellar.

CSPRStakingOptions (object) or STXStakingOptions (object)

Required object for staking. Only for CSPR and STX.

object

Options needed to unstake EOS assets

object

Options needed to refund unstaked EOS assets if automatic refund fails

messageKey
string

Optional parameter that takes a hexadecimal value to set messagekey for an XRP accountSet transaction. Recipients field should be empty when messageKey is set.

object

Optional parameter for UTXO coins to automatically reserve the unspents that are used in the build. Useful for Cold wallets. If using, must set expireTime.

Array of objects[ items ]

A list of recipient addresses and amounts. Must be present but empty for child-pays-for-parent transactions.

videoApprovers
Array of strings (VideoApprovers) non-empty

A list of public ids of users that should do the video id verification for the transaction that is being sent or initiated.

Responses

Response Schema: application/json
id
string (Id) ^[0-9a-f]{32}$
coin
string (Coin)

A cryptocurrency or token ticker symbol.

wallet
string (Id) ^[0-9a-f]{32}$
enterprise
string (Id) ^[0-9a-f]{32}$
creator
string (Id) ^[0-9a-f]{32}$
createDate
string <date-time>
PendingApprovalTransactionRequest (object) or PendingApprovalTransactionRequestFull (object) or PendingApprovalUserChangeRequest (object) or PendingApprovalPolicyRuleRequest (object) or PendingApprovalUpdateApprovalsRequiredRequest (object) or PendingApprovalEnterpriseModificationResponse (object)
PendingApprovalStatePending (string) or PendingApprovalStateResolved (string) (PendingApprovalState)
scope
string
Enum: "enterprise" "wallet"

What kind of entity the Pending Approval is tied to

userIds
Array of strings (Id)

All the Users who should see this Pending Approval

approvalsRequired
integer (ApprovalsRequired) >= 1
walletLabel
string

Request samples

Content type
application/json
{
  • "numBlocks": 2,
  • "feeRate": 10000,
  • "maxFeeRate": 20000,
  • "feeMultiplier": 1.5,
  • "minConfirms": 0,
  • "enforceMinConfirmsForChange": false,
  • "gasPrice": "string",
  • "eip1559": {
    • "maxPriorityFeePerGas": "string",
    • "maxFeePerGas": "string"
    },
  • "gasLimit": "string",
  • "targetWalletUnspents": 1000,
  • "minValue": "string",
  • "maxValue": "string",
  • "sequenceId": "string",
  • "nonce": "string",
  • "noSplitChange": false,
  • "unspents": [
    • "12b147dd8b4f73c01f72bdbf5b589eea614f3de609ffdbdac84852d6505cf8a3:1"
    ],
  • "changeAddress": "string",
  • "instant": true,
  • "memo": {
    • "type": "string",
    • "value": "string"
    },
  • "comment": "string",
  • "addressType": "string",
  • "startTime": "string",
  • "consolidateId": "59cd72485007a239fb00282ed480da1f",
  • "lastLedgerSequence": 0,
  • "ledgerSequenceDelta": 0,
  • "cpfpTxIds": [
    • "string"
    ],
  • "cpfpFeeRate": 0,
  • "maxFee": 0,
  • "strategy": "string",
  • "validFromBlock": 0,
  • "validToBlock": 0,
  • "type": "string",
  • "trustlines": [
    • {
      }
    ],
  • "stakingOptions": {
    • "amount": "string",
    • "validator": "string"
    },
  • "unstakingOptions": {
    • "from": "string",
    • "receiver": "string",
    • "unstakeCpuQuantity": "string",
    • "unstakeNetQuantity": "string"
    },
  • "refundOptions": {
    • "address": "string"
    },
  • "messageKey": "string",
  • "reservation": {
    • "expireTime": "2019-08-24T14:15:22Z"
    },
  • "recipients": [
    • {
      }
    ],
  • "videoApprovers": [
    • "59cd72485007a239fb00282ed480da1f"
    ]
}

Response samples

Content type
application/json
{
  • "id": "59cd72485007a239fb00282ed480da1f",
  • "coin": "btc",
  • "wallet": "59cd72485007a239fb00282ed480da1f",
  • "enterprise": "59cd72485007a239fb00282ed480da1f",
  • "creator": "59cd72485007a239fb00282ed480da1f",
  • "createDate": "2019-08-24T14:15:22Z",
  • "info": {
    • "transactionRequest": {
      },
    • "type": "transactionRequest"
    },
  • "state": "pending",
  • "scope": "enterprise",
  • "userIds": [
    • "59cd72485007a239fb00282ed480da1f"
    ],
  • "approvalsRequired": 1,
  • "walletLabel": "string"
}

Send a half-signed transaction

Send a half-signed transaction from the specified wallet. Instead of this endpoint, you likely want to use send transaction in the SDK.

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
comment
string <= 256 characters

An optional memo for the transaction.

object

The half-signed transaction. The request must include this or a txHex.

txHex
string

The half-signed, serialized transaction hex. Alternative to sending halfSigned.

txRequestId
string

The transaction request id.

sequenceId
string

Your own unique ID

suppressBroadcast
boolean

Do Not Use

videoApprovers
Array of strings (VideoApprovers) non-empty

A list of public ids of users that should do the video id verification for the transaction that is being sent or initiated.

numBlocks
integer [ 2 .. 1000 ]

(BTC only) Used to estimate the fee rate by targeting confirmation within the given number of blocks. If neither feeRate nor numBlocks is specified, a block target of 2 is used by default. Can be limited with maxFeeRate.

string or integer

Custom minimum fee rate in a coin's base unit per kilobyte (or virtual kilobyte)--for example, satoshis per kvByte or microAlgos per kByte. For xrp, it refers to the open ledger fee in drops (1 XRP = 1000000 drops) and the actual fee used is usually 4.5 times the open ledger fee. If the applied feeRate does not meet a coin's required minimum transaction fee amount, the minimum is still applied (for example, 1000 sat/kvByte , a flat 1000 microAlgos or a flat 10 drops of xrp).

string or integer

Custom upper limit for fee rate in a coin's base unit per kilobyte (or virtual kilobyte)--for example, satoshis per kvByte or microAlgos per kByte. maxFeeRate can be used to limit a fee rate estimate generated with numBlocks.

string or number

Custom multiplier for fee rate. Suggested to be used in conjunction with maxFeeRate for higher priority transactions, or transactions which may not be broadcast for some time after being built. Must be greater than 0.

minConfirms
integer

The unspent selection for the transaction will only consider unspents with at least this many confirmations to be used as inputs. Does not apply to change outputs unless used in combination with enforceMinConfirmsForChange.

enforceMinConfirmsForChange
boolean
Default: false

When set to true, will enforce minConfirms for change outputs. Defaults to false.

string or integer

Custom gas price to be used for sending the transaction. Only for ETH and ERC20 tokens.

object
string or integer

Custom gas limit to be used for sending the transaction. Only for ETH and ERC20 tokens.

targetWalletUnspents
integer
Default: 1000

Specifies the minimum count of good-sized unspents to maintain in the wallet. Change splitting ceases when the wallet has targetWalletUnspents good-sized unspents.

Note: Wallets that continuously send a high count of transactions will automatically split large change amounts into multiple good-sized change outputs while they have fewer than targetWalletUnspents good-sized unspents in their unspent pool. Breaking up large unspents helps to reduce the amount of unconfirmed funds in flight in future transactions, and helps to avoid long chains of unconfirmed transactions. This is especially useful for newly funded wallets or recently refilled send-only wallets.

string or integer

Ignore unspents smaller than this amount of base units (e.g. satoshis). For doge, only string is allowed.

string or integer

Ignore unspents larger than this amount of base units (e.g. satoshis). For doge, only string is allowed.

nonce
string^-?\d+$

(DOT only) A nonce ID is a number used to protect private communications by preventing replay attacks. This is an advanced option where users can manually input a new nonce value in order to correct or fill in a missing nonce ID value.

noSplitChange
boolean
Default: false

Set true to disable automatic change splitting.

Also see: targetWalletUnspents

unspents
Array of strings

Used to explicitly specify the unspents to be used in the input set in the transaction. Each unspent should be in the form prevTxId:nOutput.

changeAddress
string <= 250 characters

Specifies a custom destination address for the transaction's change output(s)

instant
boolean

(DASH only) Specifies whether or not to use Dash's "InstantSend" feature when sending a transaction.

object

Memo for Stellar or EOS. Type is only required for memos in Stellar transactions. The memo contains optional extra information that can also be used to identify payments in Stellar or EOS.

addressType
string

The type of address to create for change. One of p2sh, p2shP2wsh, and p2wsh.

startTime
string

The start of the validity window for the transaction. Only supported by HBAR

consolidateId
string (Id) ^[0-9a-f]{32}$
lastLedgerSequence
integer

(XRP only) Absolute max ledger the transaction should be accepted in, whereafter it will be rejected

ledgerSequenceDelta
integer

(XRP only) Relative ledger height (in relation to the current ledger) that the transaction should be accepted in, whereafter it will be rejected

cpfpTxIds
Array of strings

The list of transactions to bump with a child-pays-for-parent transaction (currently only bumping one tx is supported).

cpfpFeeRate
integer

The desired effective fee rate of the accelerated transaction in base units per kilobyte (e.g. satoshi/kB), the unconfirmed transactions it depends on, and the newly created child-pays-for-parent transaction. Must be higher than the current effective fee rate of the target transaction.

maxFee
integer >= 0

Limits the amount of satoshis that can be used for fees in a child-pays-for-parent (CPFP) transaction. CPFP transactions accelerate the targeted transaction and all of the unconfirmed transactions the targeted transaction depends on. maxFee is required for all CPFP transactions as it allows users to set a safety net that will halt CPFP attempts that exceed the expected cost.

strategy
string <= 20 characters

Optional unspent selection strategy to use. One of RANDOM, FIFO or BNB.

validFromBlock
integer

Optional block this transaction is valid from

validToBlock
integer

Optional block this transaction is valid until

type
string

transaction type (e.g., trustline for Stellar trustline transactions, accountSet for XRP account set transactions, stakingLock and stakingUnlock for Stacks delegation).

Array of objects (Trustline) [ items ]

List of trustlines to manage on the account. Available for Stellar.

CSPRStakingOptions (object) or STXStakingOptions (object)

Required object for staking. Only for CSPR and STX.

object

Options needed to unstake EOS assets

object

Options needed to refund unstaked EOS assets if automatic refund fails

messageKey
string

Optional parameter that takes a hexadecimal value to set messagekey for an XRP accountSet transaction. Recipients field should be empty when messageKey is set.

object

Optional parameter for UTXO coins to automatically reserve the unspents that are used in the build. Useful for Cold wallets. If using, must set expireTime.

Responses

Response Schema: application/json
object (Transfer)
txid
string

The transaction's unique identifier

tx
string

The encoded transaction, either base64 for XLM or hex for other coins

status
string (TransferState)
Enum: "signed" "unconfirmed" "confirmed" "pendingApproval" "removed" "failed" "rejected"

The status of this Transfer

Response Schema: application/json
id
string (Id) ^[0-9a-f]{32}$
coin
string (Coin)

A cryptocurrency or token ticker symbol.

wallet
string (Id) ^[0-9a-f]{32}$
enterprise
string (Id) ^[0-9a-f]{32}$
creator
string (Id) ^[0-9a-f]{32}$
createDate
string <date-time>
PendingApprovalTransactionRequest (object) or PendingApprovalTransactionRequestFull (object) or PendingApprovalUserChangeRequest (object) or PendingApprovalPolicyRuleRequest (object) or PendingApprovalUpdateApprovalsRequiredRequest (object) or PendingApprovalEnterpriseModificationResponse (object)
PendingApprovalStatePending (string) or PendingApprovalStateResolved (string) (PendingApprovalState)
scope
string
Enum: "enterprise" "wallet"

What kind of entity the Pending Approval is tied to

userIds
Array of strings (Id)

All the Users who should see this Pending Approval

approvalsRequired
integer (ApprovalsRequired) >= 1
walletLabel
string

Request samples

Content type
application/json
{
  • "comment": "string",
  • "halfSigned": {
    • "txHex": "string"
    },
  • "txHex": "string",
  • "txRequestId": "string",
  • "sequenceId": "string",
  • "suppressBroadcast": true,
  • "videoApprovers": [
    • "59cd72485007a239fb00282ed480da1f"
    ],
  • "numBlocks": 2,
  • "feeRate": 10000,
  • "maxFeeRate": 20000,
  • "feeMultiplier": 1.5,
  • "minConfirms": 0,
  • "enforceMinConfirmsForChange": false,
  • "gasPrice": "string",
  • "eip1559": {
    • "maxPriorityFeePerGas": "string",
    • "maxFeePerGas": "string"
    },
  • "gasLimit": "string",
  • "targetWalletUnspents": 1000,
  • "minValue": "string",
  • "maxValue": "string",
  • "nonce": "string",
  • "noSplitChange": false,
  • "unspents": [
    • "12b147dd8b4f73c01f72bdbf5b589eea614f3de609ffdbdac84852d6505cf8a3:1"
    ],
  • "changeAddress": "string",
  • "instant": true,
  • "memo": {
    • "type": "string",
    • "value": "string"
    },
  • "addressType": "string",
  • "startTime": "string",
  • "consolidateId": "59cd72485007a239fb00282ed480da1f",
  • "lastLedgerSequence": 0,
  • "ledgerSequenceDelta": 0,
  • "cpfpTxIds": [
    • "string"
    ],
  • "cpfpFeeRate": 0,
  • "maxFee": 0,
  • "strategy": "string",
  • "validFromBlock": 0,
  • "validToBlock": 0,
  • "type": "string",
  • "trustlines": [
    • {
      }
    ],
  • "stakingOptions": {
    • "amount": "string",
    • "validator": "string"
    },
  • "unstakingOptions": {
    • "from": "string",
    • "receiver": "string",
    • "unstakeCpuQuantity": "string",
    • "unstakeNetQuantity": "string"
    },
  • "refundOptions": {
    • "address": "string"
    },
  • "messageKey": "string",
  • "reservation": {
    • "expireTime": "2019-08-24T14:15:22Z"
    }
}

Response samples

Content type
application/json
{
  • "transfer": {
    • "coin": "btc",
    • "id": "59cd72485007a239fb00282ed480da1f",
    • "wallet": "59cd72485007a239fb00282ed480da1f",
    • "enterprise": "59cd72485007a239fb00282ed480da1f",
    • "txid": "b8a828b98dbf32d9fd1875cbace9640ceb8c82626716b4a64203fdc79bb46d26",
    • "height": 0,
    • "heightId": "string",
    • "date": "2019-08-24T14:15:22Z",
    • "type": "send",
    • "value": 0,
    • "valueString": "string",
    • "baseValue": 0,
    • "baseValueString": "string",
    • "feeString": "string",
    • "payGoFee": 0,
    • "payGoFeeString": "string",
    • "usd": 0,
    • "usdRate": 0,
    • "state": "confirmed",
    • "tags": [
      ],
    • "history": [
      ],
    • "comment": "string",
    • "vSize": 0,
    • "nSegwitInputs": 0,
    • "coinSpecific": { },
    • "sequenceId": "string",
    • "entries": [
      ],
    • "usersNotified": true
    },
  • "txid": "string",
  • "tx": "string",
  • "status": "confirmed"
}

Initiate a trustline transaction

Initiate an unsigned trustline transaction to create a pending approval. Trustline transactions manage trusted tokens on the account. Available for Stellar. Use only with custodial wallets.

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
object

The memo contains optional extra information that can also be used to identify payments in Stellar.

comment
string <= 256 characters

Optional metadata (only persisted in BitGo) to be applied to the transaction. Use this to add transaction-specific information such as the transaction's purpose or another identifier that you want to reference later. The value is shown in the UI in the transfer listing page.

required
Array of objects (Trustline) [ items ]

List of trustlines to manage on the account.

Responses

Response Schema: application/json
id
string (Id) ^[0-9a-f]{32}$
coin
string (Coin)

A cryptocurrency or token ticker symbol.

wallet
string (Id) ^[0-9a-f]{32}$
enterprise
string (Id) ^[0-9a-f]{32}$
creator
string (Id) ^[0-9a-f]{32}$
createDate
string <date-time>
PendingApprovalTransactionRequest (object) or PendingApprovalTransactionRequestFull (object) or PendingApprovalUserChangeRequest (object) or PendingApprovalPolicyRuleRequest (object) or PendingApprovalUpdateApprovalsRequiredRequest (object) or PendingApprovalEnterpriseModificationResponse (object)
PendingApprovalStatePending (string) or PendingApprovalStateResolved (string) (PendingApprovalState)
scope
string
Enum: "enterprise" "wallet"

What kind of entity the Pending Approval is tied to

userIds
Array of strings (Id)

All the Users who should see this Pending Approval

approvalsRequired
integer (ApprovalsRequired) >= 1
walletLabel
string

Request samples

Content type
application/json
{
  • "memo": {
    • "type": "string",
    • "value": "string"
    },
  • "comment": "string",
  • "trustlines": [
    • {
      }
    ]
}

Response samples

Content type
application/json
{
  • "id": "59cd72485007a239fb00282ed480da1f",
  • "coin": "btc",
  • "wallet": "59cd72485007a239fb00282ed480da1f",
  • "enterprise": "59cd72485007a239fb00282ed480da1f",
  • "creator": "59cd72485007a239fb00282ed480da1f",
  • "createDate": "2019-08-24T14:15:22Z",
  • "info": {
    • "transactionRequest": {
      },
    • "type": "transactionRequest"
    },
  • "state": "pending",
  • "scope": "enterprise",
  • "userIds": [
    • "59cd72485007a239fb00282ed480da1f"
    ],
  • "approvalsRequired": 1,
  • "walletLabel": "string"
}

Get balance reserve data

Returns information about reserve requirements for an account. Currently only available for Stellar.

path Parameters
coin
required
string
Enum: "txlm" "xlm" "tcspr" "cspr"

Responses

Response Schema: application/json
baseFee
string

base fee used in transaction fees

baseReserve
string

base reserve used in minimum account balances

reserve
string

minimum account balance, calculated using base reserve

minimumFunding
string

minimum funding balance, calculated using reserve and base fee

height
integer

the height of the block that provides the base values

Response samples

Content type
application/json
{
  • "baseFee": "100",
  • "baseReserve": "5000000",
  • "reserve": "25000000",
  • "minimumFunding": "25000500",
  • "height": 11228504
}

Get staked balance data

Returns staking information about validator and staked amount for the current wallet. Currently only available for Casper and Stacks.

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f

Responses

Response Schema: application/json
Array
address
string (AddressString) <= 250 characters
Array of objects[ items ]

Response samples

Content type
application/json
[
  • {
    • "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
    • "balances": [
      ]
    }
]

Get total rewards data

Returns staking information receiving address and the total rewards received for the current wallet. Currently only available for Stacks.

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f

Responses

Response Schema: application/json
Array
address
string (AddressString) <= 250 characters
Array of objects[ items ]

Response samples

Content type
application/json
[
  • {
    • "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
    • "rewards": [
      ]
    }
]

Wallet share

Sharing a wallet involves giving another user permission to use the wallet.

In order for the receiver to use the wallet, we also need to share the private key with them. Each user on BitGo creates a public-private keypair for this purpose during their signup process.

The BitGo SDK does the following client-side to create a new wallet share:

  • Get the receiving user’s sharing key (a derived path of the receiver’s public key)
  • Decrypt the wallet to be shared locally
  • Re-encrypt the wallet against the public key above, so that only the receiver may decrypt it
  • Upload the encrypted keys to the BitGo service, which informs the receiver they have a pending share

Request wallet reshare

Indicates that the calling user has lost access to the user key and would like to it to be reshared with them.

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f

Responses

Response samples

Content type
application/json
{
  • "error": "string",
  • "requestId": "string",
  • "context": { },
  • "name": "string"
}

Create a wallet share

Share wallet with an existing BitGo user

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
permissions
string

Comma-separated list of permissions (view, spend, admin) which are granted by this share. Required if reshare is false.

message
string

User readable message to display to the share recipient

reshare
boolean

Flag for reinviting a user to the wallet
This is required if the invitee has already been invited to the wallet, but has changed their password and needs a new invite

skipKeychain
boolean

Skips using a shared key (for when the wallet is shared without spend permission)

disableEmail
boolean

Flag for disabling invite notification email

user
required
string (Id) ^[0-9a-f]{32}$
object (WalletShareKeychain)

Key passed to the receiving user, included if the wallet was shared with spend permission

Responses

Response Schema: application/json
id
string^[0-9a-f]{32}$

Wallet share id

coin
string

A cryptocurrency or token ticker symbol.

wallet
string^[0-9a-f]{32}$

Wallet id

walletLabel
string (WalletLabel)
fromUser
string^[0-9a-f]{32}$

Id of the user sharing the wallet

toUser
string^[0-9a-f]{32}$

Id of the user receiving the share

permissions
string
Enum: "admin" "view" "spend"

Comma-separated list of permissions which are granted by this share

message
string

Message for the user receiving the share

state
string
Enum: "pendingapproval" "active" "accepted" "canceled" "rejected"

State of the share

enterprise
string^[0-9a-f]{32}$

If the wallet belongs to an enterprise, the id of that enterprise

pendingApprovalId
string^[0-9a-f]{32}$

If the share generated a pending approval, the id of that pending approval

object (WalletShareKeychain)

Key passed to the receiving user, included if the wallet was shared with spend permission

Request samples

Content type
application/json
{
  • "permissions": "spend,view",
  • "message": "string",
  • "reshare": true,
  • "skipKeychain": true,
  • "disableEmail": true,
  • "user": "59cd72485007a239fb00282ed480da1f",
  • "keychain": {
    • "pub": "string",
    • "encryptedPrv": "string",
    • "fromPubKey": "string",
    • "toPubKey": "string",
    • "path": "m/1234/1/1"
    }
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "coin": "string",
  • "wallet": "string",
  • "walletLabel": "My Wallet",
  • "fromUser": "string",
  • "toUser": "string",
  • "permissions": "spend,view",
  • "message": "string",
  • "state": "active",
  • "enterprise": "string",
  • "pendingApprovalId": "string",
  • "keychain": {
    • "pub": "string",
    • "encryptedPrv": "string",
    • "fromPubKey": "string",
    • "toPubKey": "string",
    • "path": "m/1234/1/1"
    }
}

Reject a wallet reshare request

If a user requested a reshare, another admin on the wallet can use this endpoint to reject their reshare request.

path Parameters
walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
userId
required
string (Id) ^[0-9a-f]{32}$

Responses

Request samples

Content type
application/json
{
  • "userId": "59cd72485007a239fb00282ed480da1f"
}

Response samples

Content type
application/json
{
  • "error": "string",
  • "requestId": "string",
  • "context": { },
  • "name": "string"
}

List wallet shares

List shares of all wallets with other BitGo users. Returns only wallets on which the current user has spend permission.

Responses

Response Schema: application/json
Array of objects (WalletShare) [ items ]
Array of objects (WalletShare) [ items ]

Request samples

bitgo
  .coin('tbtc')
  .wallets()
  .listShares({})
  .then(function (shares) {
    console.dir(shares);
  });

Response samples

Content type
application/json
{
  • "incoming": [
    • {
      }
    ],
  • "outgoing": [
    • {
      }
    ]
}

Get a wallet share

Get a wallet share, including the encrypted shared keychain. Token unlock is required if the wallet share includes a keychain.

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

shareId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f

Responses

Response Schema: application/json
id
required
string (Id) ^[0-9a-f]{32}$
coin
required
string (Coin)

A cryptocurrency or token ticker symbol.

wallet
required
string (Id) ^[0-9a-f]{32}$
walletLabel
required
string (WalletLabel)
fromUser
required
string (Id) ^[0-9a-f]{32}$
toUser
required
string (Coin)

A cryptocurrency or token ticker symbol.

permissions
required
string

Comma-separated list of permissions which are granted by this share.

message
required
string

User readable message to display to the share recipient

state
required
string (WalletShareState)
Enum: "pendingapproval" "active" "accepted" "canceled" "rejected"
enterprise
required
string (Id) ^[0-9a-f]{32}$
pendingApprovalId
string (Id) ^[0-9a-f]{32}$
object

Only set if this wallet share has an associated keychain

Request samples

bitgo
  .coin('tbtc')
  .wallets()
  .getShare({ walletShareId: shareId })
  .then(function (share) {
    console.dir(share);
  });

Response samples

Content type
application/json
{
  • "id": "59cd72485007a239fb00282ed480da1f",
  • "coin": "btc",
  • "wallet": "59cd72485007a239fb00282ed480da1f",
  • "walletLabel": "My Wallet",
  • "fromUser": "59cd72485007a239fb00282ed480da1f",
  • "toUser": "btc",
  • "permissions": "spend,view",
  • "message": "string",
  • "state": "active",
  • "enterprise": "59cd72485007a239fb00282ed480da1f",
  • "pendingApprovalId": "59cd72485007a239fb00282ed480da1f",
  • "keychain": {
    • "pub": "string",
    • "encryptedPrv": "string",
    • "fromPubKey": "string",
    • "toPubKey": "string",
    • "path": "m/1234/1/1"
    }
}

Update a wallet share

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

shareId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
state
string (WalletShareState)
Enum: "pendingapproval" "active" "accepted" "canceled" "rejected"

Responses

Response Schema: application/json
state
string (WalletShareState)
Enum: "pendingapproval" "active" "accepted" "canceled" "rejected"
changed
boolean

Request samples

Content type
application/json
{
  • "state": "active"
}

Response samples

Content type
application/json
{
  • "state": "active",
  • "changed": true
}

Cancel a wallet share

Cancels a pending outgoing wallet share, or rejects an incoming share. The share must not have been accepted yet.

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

shareId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f

Responses

Response Schema: application/json
state
string (WalletShareState)
Enum: "pendingapproval" "active" "accepted" "canceled" "rejected"
changed
boolean

Request samples

bitgo
  .coin('tbtc')
  .wallets()
  .cancelShare({
    walletShareId: shareId,
  })
  .then(function (result) {
    console.dir(result);
  });

Response samples

Content type
application/json
{
  • "state": "active",
  • "changed": true
}

Resend a wallet share invitation email

Resends the wallet share invitation to the share recipient. The wallet share must not have been accepted yet.

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

shareId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f

Responses

Response Schema: application/json
resent
boolean

Request samples

bitgo
  .coin('tbtc')
  .wallets()
  .resendShareInvite({ walletShareId: shareId })
  .then(function (share) {
    console.dir(share);
  });

Response samples

Content type
application/json
{
  • "resent": true
}

Webhook

Webhooks may be setup to programmatically receive callbacks from BitGo. These may be attached to wallets (in the case of transfers), or to a block (for block notifications). Webhook notifications are triggered when the specified event occurs, such as an incoming transaction.

BitGo servers will make a POST http request to the URL defined with a JSON payload, and expect a HTTP 200 OK. If a successful response is not received, BitGo will attempt to retry the webhook with an increasing delay between each retry.

Since anyone on the Internet can send HTTP requests to the Webhook URL, the request body payload should not be trusted. Please verify any information sent in the webhook by fetching the transfer/block data from BitGo before processing the notification.

Developers should take care to ensure that their application succeeds even in the cases of transient network error, or if receive the same webhook twice due to an improper acknowledgement.

Add wallet webhook

Add a webhook that will result in an HTTP callback at the specified URL from BitGo when events are triggered. There is a limit of 10 webhooks of each type per wallet.

Types of wallet webhooks available:

  1. Transfer webhooks will fire on any transfer on the wallet.
  2. Pending approval webhooks will fire when an event triggers policy on the wallet (e.g send transaction, user change, policy change, pending approval updated).
  3. (Ripple, ETH only) Address confirmation webhooks will fire when an address has been initialized on the wallet.

Note that an unconfirmed webhook notification won't be triggered if a transaction is confirmed on chain immediately after it is sent, or if is an RBF transaction. API users are not supposed to expect 'unconfirmed' notifications in these cases.

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
type
required
string (WebhookTypeWallet)
Enum: "transfer" "transaction" "pendingapproval" "address_confirmation" "lowFee"

Type of event to listen to (can be transfer or pendingapproval).

allToken
boolean
Default: false

Triggers on coin transfers and token transfers for ETH and Stellar.

url
required
string <uri>

URL to fire the webhook to.

label
string

Label of the new webhook.

numConfirmations
integer >= 0

Number of confirmations before triggering the webhook. If 0 or unspecified, requests will be sent to the callback endpoint when the transfer is first seen and when it is confirmed.

listenToFailureStates
boolean

Whether or not to listen to failed transactions on chain.

Responses

Response Schema: application/json
allToken
boolean
id
string (Id) ^[0-9a-f]{32}$
label
string
created
string <date-time> (DateTime)
coin
string (Coin)

A cryptocurrency or token ticker symbol.

type
string (WebhookTypeWallet)
Enum: "transfer" "transaction" "pendingapproval" "address_confirmation" "lowFee"

Type of event to listen to (can be transfer or pendingapproval).

url
required
string <uri>
version
integer

2 for coins running on API v2.

numConfirmations
integer
state
string
Enum: "active" "suspended"
lastAttempt
string <date-time> (DateTime)
failingSince
string <date-time> (DateTime)
successiveFailedAttempts
integer

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{
  • "allToken": false,
  • "id": "59cd72485007a239fb00282ed480da1f",
  • "label": "Test Webhook",
  • "created": "2018-05-05T19:46:22.019Z",
  • "coin": "btc",
  • "type": "transfer",
  • "version": 2,
  • "numConfirmations": 6,
  • "state": "active",
  • "lastAttempt": "2018-05-05T19:46:22.019Z",
  • "failingSince": "2018-05-05T19:46:22.019Z",
  • "successiveFailedAttempts": 0
}

List wallet webhooks

List webhooks set up on the wallet. Currently, the types of webhooks that can be attached to a wallet are transfer, pendingapproval, and address_confirmation notifications.

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f

Responses

Response Schema: application/json
Array of objects[ items ]

Request samples

var walletId = '58d99…39604';

bitgo
  .coin('tbtc')
  .wallets()
  .get({ id: walletId })
  .then(function (wallet) {
    return wallet.listWebhooks();
  })
  .then(function (webhooks) {
    console.dir(webhooks);
  });

Response samples

Content type
application/json
{
  • "webhooks": [
    • {
      }
    ]
}

Remove wallet webhook

Removing a webhook will cause new events of the specified type to no longer trigger HTTP callbacks to your URLs

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
type
string (WebhookTypeWallet)
Enum: "transfer" "transaction" "pendingapproval" "address_confirmation" "lowFee"

Type of event to listen to (can be transfer or pendingapproval).

url
string <uri>
id
string (Id) ^[0-9a-f]{32}$

Responses

Response Schema: application/json
removed
integer

Number of wallet webhooks removed.

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{
  • "removed": 1
}

Simulate wallet webhook

Simulates and tests a webhook so you can view its response. A transferId or pendingApprovalId is required.

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
webhookId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
transferId
string (Id) ^[0-9a-f]{32}$
pendingApprovalId
string (Id) ^[0-9a-f]{32}$

Responses

Response Schema: application/json
Array of objects[ items ]

Request samples

Content type
application/json
{
  • "transferId": "59cd72485007a239fb00282ed480da1f",
  • "pendingApprovalId": "59cd72485007a239fb00282ed480da1f"
}

Response samples

Content type
application/json
{
  • "webhookNotifications": [
    • {
      }
    ]
}

Add block webhook

Adds a webhook that will result in an HTTP callback at the specified URL from BitGo when events are triggered.

Types of block webhooks:

  1. Block webhooks will fire when a new block is seen on the coin network.
  2. Wallet confirmation webhooks will fire when a wallet has been initialized.
path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

Request Body schema: application/json
type
required
string (WebhookTypeBlock)
Enum: "block" "wallet_confirmation"
url
required
string <uri>

URL to fire the webhook to.

label
string

Label of the new webhook.

numConfirmations
integer >= 0

Number of confirmations before triggering the webhook. If 0 or unspecified, requests will be sent to the callback endpoint when the transfer is first seen and when it is confirmed.

Responses

Response Schema: application/json
type
string
Enum: "block" "wallet_confirmation"

Type of event to listen to (can be transfer or pendingapproval).

userId
string (Id) ^[0-9a-f]{32}$
id
string (Id) ^[0-9a-f]{32}$
label
string
created
string <date-time> (DateTime)
coin
string (Coin)

A cryptocurrency or token ticker symbol.

url
required
string <uri>
version
integer

2 for coins running on API v2.

numConfirmations
integer
state
string
Enum: "active" "suspended"
lastAttempt
string <date-time> (DateTime)
failingSince
string <date-time> (DateTime)
successiveFailedAttempts
integer

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{
  • "type": "transfer",
  • "userId": "59cd72485007a239fb00282ed480da1f",
  • "id": "59cd72485007a239fb00282ed480da1f",
  • "label": "Test Webhook",
  • "created": "2018-05-05T19:46:22.019Z",
  • "coin": "btc",
  • "version": 2,
  • "numConfirmations": 6,
  • "state": "active",
  • "lastAttempt": "2018-05-05T19:46:22.019Z",
  • "failingSince": "2018-05-05T19:46:22.019Z",
  • "successiveFailedAttempts": 0
}

List block webhooks

Returns block webhooks. The types of webhooks are block and wallet_confirmation notifications.

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

Responses

Response Schema: application/json
Array of objects[ items ]

Request samples

var baseCoin = bitgo.coin('tbtc');
var webhooks = baseCoin.webhooks();

webhooks.list().then(function (result) {
  console.dir(result);
});

Response samples

Content type
application/json
{
  • "webhooks": [
    • {
      }
    ]
}

Remove block webhook

Removing a webhook will cause new events of the specified type to no longer trigger HTTP callbacks to your URLs.

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

Request Body schema: application/json
type
required
string (WebhookTypeBlock)
Enum: "block" "wallet_confirmation"
url
required
string <uri>
id
string (Id) ^[0-9a-f]{32}$

Responses

Response Schema: application/json
removed
integer

Number of block webhooks removed.

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{
  • "removed": 1
}

Simulate block webhook

Simulates and tests a block webhook so you can view its response.

path Parameters
coin
required
string (Coin)
Example: btc

A cryptocurrency or token ticker symbol.

webhookId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
blockId
string (BlockHash)

Responses

Response Schema: application/json
Array of objects[ items ]

Request samples

Content type
application/json
{
  • "blockId": "0000000000000296ed56abee6cb78e40b00c47a03d92e71dd92c4862ca636b95"
}

Response samples

Content type
application/json
{
  • "webhookNotifications": [
    • {
      }
    ]
}

Staking Request

API to create, retrieve staking requests, and retrieve staking request transactions. A staking request can be of type STAKE or UNSTAKE

Staking Request Creation

Create a Staking Request of type STAKE or UNSTAKE.

path Parameters
coin
required
string

The coin to be staked (ETH, NEAR, SOL).

walletId
required
string

The wallet id

Request Body schema: application/json
One of
gasPrice
integer

User overridden gas price to apply for the generated transactions for this request. GasPrice is in “base units”.

clientId
string

Optional user generated identifier to detect duplicated requests.

amount
required
integer

Amount to stake in “base units” (i.e. Wei for ETH) For Ethereum the amounts need to be a multiple of 32 Eth (32000000000000000000 Wei). For Testnet the 32 Eth multiple restriction does not apply.

type
required
string

Staking Request type = 'STAKE'

Responses

Response Schema: application/json
One of
gasPrice
integer

User overridden gas price to apply for the generated transactions for this request. GasPrice is in “base units”.

Array of objects (EthStakingDelegation) [ 1 .. 500 ] items [ items ]
Array of objects (EthStakingTransaction) [ 1 .. 500 ] items [ items ]
amount
integer

Amount to stake in “base units” (i.e. Wei for ETH) For Ethereum the amounts need to be a multiple of 32 Eth (32000000000000000000 Wei). For Testnet the 32 Eth multiple restriction does not apply.

id
string

Staking Request Id.

clientId
string

Optional clientId if passed into the request.

requestUserId
string

The id of the user that created the staking request

enterpriseId
string

The id of the enterprise where the the staking request was created from

walletId
string

The id of the wallet where the staking request was created from

withdrawalAddress
string

Withdrawal Address

walletType
string

The type of wallet the staking request was created from (cold, custodial, hot)

type
string

The type of staking request. The types are STAKE and UNSTAKE

coin
string

The coin to be staked (ETH, NEAR, SOL)

createdDate
string

The date the staking request was created

status
string

The status of the staking request (NEW, READY, INITIATED, PARTIAL CONFIRM, CONFIRM, REJECTED). For Eth the status will change from NEW to READY when a validator has been assigned to a the wallet's address.

statusModifiedDate
string

The last modified date the status changed

Request samples

Content type
application/json
Example
{
  • "clientId": "e055adbc-66a3-4ccd-9a9d-726a05bca0cf",
  • "amount": 64000000000000000000,
  • "gasPrice": 1000000000000000,
  • "type": "STAKE"
}

Response samples

Content type
application/json
Example
{
  • "id": "e055adbc-66a3-4ccd-9a9d-726a05bca0cf",
  • "clientId": "f054adbc-26a3-4acd-8a9d-726a05bca0dr",
  • "requestUserId": "6092e75c451052000636831deb797bd1",
  • "enterpriseId": "1032e75c451052000436831deb797af1",
  • "walletId": "2032e75g451052000636831abd797bd3",
  • "walletType": "custodial",
  • "type": "STAKE",
  • "coin": "eth",
  • "createdDate": "2022-01-10T14:32:28Z",
  • "statusModifiedDate": "2022-01-10T14:32:28Z",
  • "status": "NEW",
  • "withdrawalAddress": "0x5a6406c9710f588ca733360bfa8033d0ef9ecd7c",
  • "amount": 6400000000000000000,
  • "gasPrice": 1000000000000000
}

Retrieve Staking Requests for a User's Wallet

Retrieve Staking Requests for a User's Wallet.

path Parameters
coin
required
string

The coin to be staked (ETH, NEAR, SOL).

walletId
required
string

The wallet id

Responses

Response Schema: application/json
Array ([ 1 .. 500 ] items)
One of
gasPrice
integer

User overridden gas price to apply for the generated transactions for this request. GasPrice is in “base units”.

Array of objects (EthStakingDelegation) [ 1 .. 500 ] items [ items ]
Array of objects (EthStakingTransaction) [ 1 .. 500 ] items [ items ]
amount
integer

Amount to stake in “base units” (i.e. Wei for ETH) For Ethereum the amounts need to be a multiple of 32 Eth (32000000000000000000 Wei). For Testnet the 32 Eth multiple restriction does not apply.

id
string

Staking Request Id.

clientId
string

Optional clientId if passed into the request.

requestUserId
string

The id of the user that created the staking request

enterpriseId
string

The id of the enterprise where the the staking request was created from

walletId
string

The id of the wallet where the staking request was created from

withdrawalAddress
string

Withdrawal Address

walletType
string

The type of wallet the staking request was created from (cold, custodial, hot)

type
string

The type of staking request. The types are STAKE and UNSTAKE

coin
string

The coin to be staked (ETH, NEAR, SOL)

createdDate
string

The date the staking request was created

status
string

The status of the staking request (NEW, READY, INITIATED, PARTIAL CONFIRM, CONFIRM, REJECTED). For Eth the status will change from NEW to READY when a validator has been assigned to a the wallet's address.

statusModifiedDate
string

The last modified date the status changed

Response samples

Content type
application/json
Example
{
  • "id": "e055adbc-66a3-4ccd-9a9d-726a05bca0cf",
  • "clientId": "f054adbc-26a3-4acd-8a9d-726a05bca0dr",
  • "requestUserId": "6092e75c451052000636831deb797bd1",
  • "enterpriseId": "1032e75c451052000436831deb797af1",
  • "walletId": "2032e75g451052000636831abd797bd3",
  • "walletType": "custodial",
  • "type": "STAKE",
  • "coin": "eth",
  • "createdDate": "2022-01-10T14:32:28Z",
  • "statusModifiedDate": "2022-01-10T14:32:28Z",
  • "status": "NEW",
  • "withdrawalAddress": "0x5a6406c9710f588ca733360bfa8033d0ef9ecd7c",
  • "delegations": [
    • {
      },
    • {
      }
    ],
  • "transactions": [
    • {
      },
    • {
      }
    ],
  • "amount": 6400000000000000000,
  • "gasPrice": 1000000000000000
}

Retrieve Staking Request for a staking request id

Retrieve A Specific Staking Request.

path Parameters
stakingRequestId
required
string

The id for the staking request

Responses

Response Schema: application/json
One of
gasPrice
integer

User overridden gas price to apply for the generated transactions for this request. GasPrice is in “base units”.

Array of objects (EthStakingDelegation) [ 1 .. 500 ] items [ items ]
Array of objects (EthStakingTransaction) [ 1 .. 500 ] items [ items ]
amount
integer

Amount to stake in “base units” (i.e. Wei for ETH) For Ethereum the amounts need to be a multiple of 32 Eth (32000000000000000000 Wei). For Testnet the 32 Eth multiple restriction does not apply.

id
string

Staking Request Id.

clientId
string

Optional clientId if passed into the request.

requestUserId
string

The id of the user that created the staking request

enterpriseId
string

The id of the enterprise where the the staking request was created from

walletId
string

The id of the wallet where the staking request was created from

withdrawalAddress
string

Withdrawal Address

walletType
string

The type of wallet the staking request was created from (cold, custodial, hot)

type
string

The type of staking request. The types are STAKE and UNSTAKE

coin
string

The coin to be staked (ETH, NEAR, SOL)

createdDate
string

The date the staking request was created

status
string

The status of the staking request (NEW, READY, INITIATED, PARTIAL CONFIRM, CONFIRM, REJECTED). For Eth the status will change from NEW to READY when a validator has been assigned to a the wallet's address.

statusModifiedDate
string

The last modified date the status changed

Response samples

Content type
application/json
Example
{
  • "id": "e055adbc-66a3-4ccd-9a9d-726a05bca0cf",
  • "clientId": "f054adbc-26a3-4acd-8a9d-726a05bca0dr",
  • "requestUserId": "6092e75c451052000636831deb797bd1",
  • "enterpriseId": "1032e75c451052000436831deb797af1",
  • "walletId": "2032e75g451052000636831abd797bd3",
  • "walletType": "custodial",
  • "type": "STAKE",
  • "coin": "eth",
  • "createdDate": "2022-01-10T14:32:28Z",
  • "statusModifiedDate": "2022-01-10T14:32:28Z",
  • "status": "NEW",
  • "withdrawalAddress": "0x5a6406c9710f588ca733360bfa8033d0ef9ecd7c",
  • "delegations": [
    • {
      },
    • {
      }
    ],
  • "transactions": [
    • {
      },
    • {
      }
    ],
  • "amount": 6400000000000000000,
  • "gasPrice": 1000000000000000
}

Retrieve staking requests and staking transactions for a given enterprise and query params

Retrieve staking requests and staking transactions for a given enterprise and query params.

path Parameters
enterpriseId
required
string

The enterprise id

query Parameters
coin
string

Filter by coin (this is important to support L2 level coins within one wallet)

walletType
string

Filter by Wallet Type (e.g. custodial, hot)

walletIds
Array of strings

Wallet Ids

requestStatus
string

Filter by Staking Request status

expandBuildParams
boolean

Flag to include staking build params

page
integer

Page number for pagination (default 1)

pageSize
integer

Page size for pagination (default 20)

sortBy
string

Sort By field (default created date desc)

Responses

Response Schema: application/json
Array of EthStakingRequestWithTransactions (object) or NearStakingRequestWithTransactions (object) or SolStakingRequestWithTransactions (object) [ 1 .. 500 ] items [ items ]
page
integer

Page number for paging purposes

totalPages
integer

Total number of pages for paging purposes

totalElements
integer

Number of elements per page used for paging purposes

Response samples

Content type
application/json
{
  • "page": 1,
  • "totalPages": 1,
  • "totalElements": 1,
  • "requests": [
    • {
      }
    ]
}

Act On A Transaction like sending a transaction

Use to act on a transaction like sending a transaction

path Parameters
coin
required
string

The coin to be staked (ETH, NEAR, SOL).

walletId
required
string

The wallet id

stakingRequestId
required
string

The id for the staking request

stakingTransactionId
required
string

The id for the staking request transaction

Request Body schema: application/json
One of
object

Half signed transaction object

comment
string

Responses

Response Schema: application/json
Array ([ 1 .. 500 ] items)
One of
object (TransactionBuildParams)
id
string

Staking Transaction Id

stakingRequestId
required
string

Staking Request Id.

transactionType
required
string

Transaction type (delegate)

createdDate
required
string

The date the transaction was created

status
required
string

The status of the transaction (NEW, READY, INITIATED, CONFIRMED, REJECTED).

statusModifiedDate
required
string

The last modified date the status changed

amount
required
integer

Transaction Amount in “base units” (i.e. Wei for ETH)

delegationId
required
string

The staking delegation the transaction is acting on

pendingApprovalId
string

Pending Approval Id

transferId
string

Transfer Id

txRequestId
string

Transaction Request Id for the new Transaction Request API

Request samples

Content type
application/json
{
  • "halfSigned": {
    • "contractSequenceId": 0,
    • "eip1559": {
      },
    • "operationHash": "string",
    • "expireTime": 0,
    • "signature": "string"
    },
  • "comment": "string"
}

Response samples

Content type
application/json
[
  • {
    • "staingRequestId": "e055adbc-66a3-4ccd-9a9d-726a05bca0cf",
    • "createdDate": "2022-01-10T14:32:28Z",
    • "statusModifiedDate": "2022-01-10T14:32:28Z",
    • "status": "NEW",
    • "amount": 3200000000000000000,
    • "transactionType": "delegate",
    • "buildParams": {
      }
    }
]

Staking State Information

API to retrieve staking state information like balances and attributes

Retrieve Staking Wallet Information For A Wallet

Retrieve staking wallet information like staking delegated balance, rewards accrued, and rewards accrual annual percentage rate.

path Parameters
coin
required
string

The coin to be staked (ETH, NEAR, SOL).

walletId
required
string

The wallet id

Responses

Response Schema: application/json
enterpriseId
string

The id of the enterprise where the the staking request was created from

walletId
string

The id of the wallet where the staking request was created from

walletType
string

The type of wallet the staking request was created from (cold, custodial, hot)

coin
string

The coin to be staked (ETH, NEAR, SOL)

delegated
integer

Delegated staked amount in “base units”

pendingUnstake
integer

Amount that is actively being unstaked

rewards
integer

Rewards received ammount in “base units”

apy
number

Reward accrual annual percentage rate. Estimated yearly based on the last 7 days. Same methodology as leading beacon chain validator aggregators (e.g. https://beaconcha.in/validators)

createdDate
string

The date the staking request was created.

modifiedDate
string

The last date staking wallet was modified

Response samples

Content type
application/json
{
  • "enterpriseId": "1032e75c451052000436831deb797af1",
  • "walletId": "2032e75g451052000636831abd797bd3",
  • "walletType": "custodial",
  • "coin": "eth",
  • "delegated": 6400000000000000000,
  • "pendingUnstake": 0,
  • "rewards": 1000000000000000,
  • "apy": 8.2,
  • "createdDate": "2022-01-10T14:32:28Z",
  • "modifiedDate": "2022-01-10T14:32:28Z"
}

Retrieve Staking Wallet Delegations

Retrieve staking wallet delegation information.

path Parameters
coin
required
string

The coin to be staked (ETH, NEAR, SOL).

walletId
required
string

The wallet id

query Parameters
delegationIds
string

Delegation ids

delegationStatus
string

Delegation status

page
integer

Page number for pagination (default 1)

pageSize
integer

Page size for pagination (default 20)

sortBy
string

Sort By field (default created date desc)

Responses

Response Schema: application/json
Array of EthStakingDelegation (object) or NearStakingDelegation (object) or SolStakingDelegation (object) [ 1 .. 500 ] items [ items ]
page
integer

Page number for paging purposes

totalPages
integer

Total number of pages for paging purposes

totalElements
integer

Number of elements per page used for paging purposes

Response samples

Content type
application/json
{
  • "page": 1,
  • "totalPages": 1,
  • "totalElements": 2,
  • "delegations": [
    • {
      },
    • {
      }
    ]
}

Retrieve Staking Enterprise Information

Retrieve staking staking information like staking delegated balance, rewards accrued, and rewards accrual annual percentage rate.

path Parameters
coin
required
string

The coin to be staked (ETH, NEAR, SOL).

enterpriseId
required
string

The enterprise id representing the enterprise a user staked from

Responses

Response Schema: application/json
enterpriseId
string

The id of the enterprise where the the staking request was created from

coin
string

The coin to be staked (ETH, NEAR, SOL)

delegated
integer

Delegated staked amount in “base units”

rewards
integer

Reward accrual ammount in “base units”

apy
number

Reward accrual annual percentage rate. Estimated yearly based on the last 7 days. Same methodology as leading beacon chain validator aggregators (e.g. https://beaconcha.in/validators)

Response samples

Content type
application/json
{
  • "enterpriseId": "1032e75c451052000436831deb797af1",
  • "coin": "eth",
  • "delegated": 6400000000000000000,
  • "rewards": 1000000000000000,
  • "apy": 8.2
}

Retrieve Staking Wallet State Attribute Information

Retrieve Staking Wallet State Attribute Information.

path Parameters
coin
required
string

The staked coin. It can be a top level coin like ETH or a L2 Level coin token like MATIC

walletId
required
string

The wallet id representing the wallet a user staked from.

Responses

Response Schema: application/json
object (WalletStakingSpendableAttributes)
object (WalletStakingPermissionAttributes)
object (WalletStakingDisclaimerAttributes)

Response samples

Content type
application/json
{
  • "spendableAttributes": {
    • "stakingSpendableAttributes": {
      },
    • "unstakingSpendableAttributes": {
      }
    },
  • "permissionAttributes": {
    • "walletPermissionAttributes": {
      },
    • "stakingPermissionAttributes": {
      },
    • "unstakingPermissionAttributes": {
      }
    },
  • "disclaimerAttributes": {
    • "stakingDisclaimerAttributes": {
      },
    • "unstakingDisclaimerAttributes": {
      }
    }
}

Staking History

API to retrieve staking and reward history

Retrieve Staking Reward History

Retrieve staking staking reward history.

path Parameters
coin
required
string

The coin to be staked (ETH, NEAR, SOL).

query Parameters
enterpriseId
string

The enterprise id representing the enterprise a user staked from

walletId
string

The wallet id representing the wallet a user staked from. Either the enterpriseId or walletId need to be passed in.

range
string

The time range for the data either hourly or daily

startDate
string <date-time>

The start date to search from

endDate
string <date-time>

The end date to search from

pageSize
integer

Page size for pagination (default 20)

page
integer

Page number for pagination (default 1)

sortBy
string

Sort By field (default date desc)

Responses

Response Schema: application/json
Array of objects (StakingReward) [ items ]

An array of rewards

page
integer

Page number for paging purposes

totalPages
integer

Total number of pages for paging purposes

totalElements
integer

Number of elements per page used for paging purposes

Response samples

Content type
application/json
{
  • "rewards": [
    • {
      }
    ],
  • "nextBatchPrevDate": "2022-01-11T14:32:28Z"
}

Retrieve Staking Delegation Accrual History

Retrieve staking delegation accrual history.

path Parameters
coin
required
string

The coin to be staked (ETH, NEAR, SOL).

walletId
required
string

The wallet id representing the wallet a user staked from. Either the enterpriseId or walletId need to be passed in.

query Parameters
delegationIds
string

Delegation ids

range
string

The time range for the data either hourly or daily

startDate
string <date-time>

The start date to search from

endDate
string <date-time>

The end date to search from

pageSize
integer

Page size for pagination (default 20)

page
integer

Page number for pagination (default 1)

sortBy
string

Sort By field (default date desc)

Responses

Response Schema: application/json
Array of objects (DelegationAccrual) [ items ]

An array of delegation accruals

page
integer

Page number for paging purposes

totalPages
integer

Total number of pages for paging purposes

totalElements
integer

Number of elements per page used for paging purposes

Response samples

Content type
application/json
{
  • "accruals": [
    • {
      }
    ],
  • "page": 0,
  • "totalPages": 0,
  • "totalElements": 0
}

Lightning

(Experimental) Lightning network related endpoints.

Withdraw from lightning balance

This API call is used to request a withdrawal of on-chain funds from the custodial lightning balance. Withdrawals are deducted from the wallet's lightning balance.

path Parameters
walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
value
required
number

The amount to withdraw denominated in satoshis

destination
required
string

An address that will receive the on-chain funds. This address must belong to the BitGo wallet for which the withdrawal request is being made.

sequenceId
required
string

Your own unique ID for this withdrawal. This acts as a unique identifier for the withdrawal. Requests with the same values as a previous request will be rejected to prevent duplicate withdrawals.

Responses

Response Schema: application/json
object (Transfer)
status
string (TransferState)
Enum: "signed" "unconfirmed" "confirmed" "pendingApproval" "removed" "failed" "rejected"

The status of this Transfer

Request samples

Content type
application/json
{
  • "value": 50000000,
  • "destination": "bc1q2la002q4rylgx9luzlv7dyr5ykeh0n46xnf02w",
  • "sequenceId": "string"
}

Response samples

Content type
application/json
{
  • "transfer": {
    • "coin": "btc",
    • "id": "59cd72485007a239fb00282ed480da1f",
    • "wallet": "59cd72485007a239fb00282ed480da1f",
    • "enterprise": "59cd72485007a239fb00282ed480da1f",
    • "txid": "b8a828b98dbf32d9fd1875cbace9640ceb8c82626716b4a64203fdc79bb46d26",
    • "height": 0,
    • "heightId": "string",
    • "date": "2019-08-24T14:15:22Z",
    • "type": "send",
    • "value": 0,
    • "valueString": "string",
    • "baseValue": 0,
    • "baseValueString": "string",
    • "feeString": "string",
    • "payGoFee": 0,
    • "payGoFeeString": "string",
    • "usd": 0,
    • "usdRate": 0,
    • "state": "confirmed",
    • "tags": [
      ],
    • "history": [
      ],
    • "comment": "string",
    • "vSize": 0,
    • "nSegwitInputs": 0,
    • "coinSpecific": { },
    • "sequenceId": "string",
    • "entries": [
      ],
    • "usersNotified": true
    },
  • "status": "confirmed"
}

Create address for lightning deposits

This API call is used to create a new address to deposit funds to the wallet's custodial lightning balance. Funds sent to this address will be credited to the wallet's lightning balance.

path Parameters
walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f

Responses

Response Schema: application/json
address
string (AddressString) <= 250 characters

Response samples

Content type
application/json
{
  • "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS"
}

Fetch lightning invoices

This API call is used to fetch previously created lightning invoices associated with a given walletId.

path Parameters
walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
query Parameters
status
string

The status of lightning invoices to search for

limit
number [ 1 .. 500 ]

Limit the number of search results. Default 25

Responses

Response Schema: application/json
Array of objects[ items ]

Response samples

Content type
application/json
{
  • "invoices": [
    • {
      }
    ]
}

Create a lightning invoice

This API call is used to create a new lightning invoice which can be used for requesting and receiving payments over the lightning network.

path Parameters
walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
value
required
number

The value of the invoice in satoshis

memo
string

A memo or description to include in the invoice

expiry
number
Default: 3600

The number of seconds before the invoice expires

Responses

Response Schema: application/json
invoice
string

The BOLT #11 encoded invoice

paymentHash
string

The payment hash of the invoice

value
number

The value of the invoice in satoshis

memo
string

A memo or description for the invoice

expiresAt
string

ISO-8601 string representing when the invoice will expire

status
string
Enum: "open" "settled" "canceled"

The status of the invoice

walletId
string (Id) ^[0-9a-f]{32}$

Request samples

Content type
application/json
{
  • "value": 50000,
  • "memo": "Latte macchiato",
  • "expiry": 3600
}

Response samples

Content type
application/json
{
  • "invoice": "lnbc500n1p3zv5vkpp5x0thcaz8wep54clc2xt5895azjdzmthyskzzh9yslggy74qtvl6sdpdg3hkuct5d9hkugrxdaezqjn0dphk2fmnypkk2mtsdahkccqzpgxqyz5vqsp5v80q4vq4pwakq2l0hcqgtelgajsymv4ud4jdcrqtnzhvet55qlus9qyyssquqh2wl2m866qs5n72c5vg6wmqx9vzwhs5ypualq4mcu76h2tdkcq3jtjwtggfff7xwtdqxlnwqk8cxpzryjghrmmq3syraswp9vjr7cqry9l96",
  • "paymentHash": "63d9ce82e09d16761a85116ed8b65407db4fb22f85d03573de09c480f2c6d175",
  • "value": 50000,
  • "memo": "Latte macchiato",
  • "expiresAt": "2022-04-01T18:46:24.677Z",
  • "status": "open",
  • "walletId": "59cd72485007a239fb00282ed480da1f"
}

Get lightning balance

Get the custodial lightning balance for the wallet.

path Parameters
walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f

Responses

Response Schema: application/json
balance
number

The lightning balance for the wallet in satoshis

availableBalance
number

The available lightning balance in satoshis minus holds for pending payments or withdrawals.

Response samples

Content type
application/json
{
  • "balance": 25000000,
  • "availableBalance": 24000000
}

Send a lightning payment

Send a lightning payment that pays a provided payment request using the wallet's custodial lightning balance.

path Parameters
walletId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
One of
comment
string <= 256 characters

An optional memo for the transaction.

sequenceId
string

Your own unique ID

feeLimitRatio
number

The maximum fee in proportion to the payment amount that may be paid as a fee for the payment. This number is multiplied by the value of the invoice to determine the fee limit. Only one of feeLimit or feeLimitRatio should be specified, if neither is specified then the greater of 25 satoshis or 5% of the invoice amount is used for the fee limit.

feeLimit
number

The maximum number of satoshis that may be paid as a fee for the payment. Only one of feeLimit or feeLimitRatio should be specified, if neither is specified then the greater of 25 satoshis or 5% of the invoice amount is used for the fee limit.

invoice
required
string

The BOLT #11 encoded invoice to pay

amount
number

A specific amount of satoshis to pay for this request. This is used to pay more than the amount requested by the invoice, such as for zero value invoices that will accept any size payment. Must be greater than or equal to any amount specified by the invoice.

Responses

Response Schema: application/json
object (Transfer)
status
string (TransferState)
Enum: "signed" "unconfirmed" "confirmed" "pendingApproval" "removed" "failed" "rejected"

The status of this Transfer

paymentHash
string

The unique payment hash used for this payment..

Request samples

Content type
application/json
Example
{
  • "comment": "string",
  • "sequenceId": "string",
  • "feeLimitRatio": 0.03,
  • "feeLimit": 200,
  • "invoice": "lnbc500n1p3zv5vkpp5x0thcaz8wep54clc2xt5895azjdzmthyskzzh9yslggy74qtvl6sdpdg3hkuct5d9hkugrxdaezqjn0dphk2fmnypkk2mtsdahkccqzpgxqyz5vqsp5v80q4vq4pwakq2l0hcqgtelgajsymv4ud4jdcrqtnzhvet55qlus9qyyssquqh2wl2m866qs5n72c5vg6wmqx9vzwhs5ypualq4mcu76h2tdkcq3jtjwtggfff7xwtdqxlnwqk8cxpzryjghrmmq3syraswp9vjr7cqry9l96",
  • "amount": 0
}

Response samples

Content type
application/json
{
  • "transfer": {
    • "coin": "btc",
    • "id": "59cd72485007a239fb00282ed480da1f",
    • "wallet": "59cd72485007a239fb00282ed480da1f",
    • "enterprise": "59cd72485007a239fb00282ed480da1f",
    • "txid": "b8a828b98dbf32d9fd1875cbace9640ceb8c82626716b4a64203fdc79bb46d26",
    • "height": 0,
    • "heightId": "string",
    • "date": "2019-08-24T14:15:22Z",
    • "type": "send",
    • "value": 0,
    • "valueString": "string",
    • "baseValue": 0,
    • "baseValueString": "string",
    • "feeString": "string",
    • "payGoFee": 0,
    • "payGoFeeString": "string",
    • "usd": 0,
    • "usdRate": 0,
    • "state": "confirmed",
    • "tags": [
      ],
    • "history": [
      ],
    • "comment": "string",
    • "vSize": 0,
    • "nSegwitInputs": 0,
    • "coinSpecific": { },
    • "sequenceId": "string",
    • "entries": [
      ],
    • "usersNotified": true
    },
  • "status": "confirmed",
  • "paymentHash": "63d9ce82e09d16761a85116ed8b65407db4fb22f85d03573de09c480f2c6d175"
}

Bank account

Manage links to external bank accounts

Create a bank account

Request Body schema: application/json
accountNumber
required
string [ 1 .. 34 ] characters

Bank account number or IBAN

address1
required
string
address2
string
address3
string
enterpriseId
required
string (Id) ^[0-9a-f]{32}$
id
string (Id) ^[0-9a-f]{32}$
idHash
string (BankAccountIdHash)

Unique identifier for this account, derived from accountNumber, routingNumber, and swiftCode

name
required
string
required
object

Bank account owner

routingNumber
string 9 characters ^[0-9]+$

US bank routing number

shortCountryCode
required
string (ShortCountryCode) 2 characters
Enum: "AD" "AE" "AF" "AG" "AI" "AL" "AM" "AO" "AQ" "AR" "AS" "AT" "AU" "AW" "AX" "AZ" "BA" "BB" "BD" "BE" "BF" "BG" "BH" "BI" "BJ" "BL" "BM" "BN" "BO" "BQ" "BR" "BS" "BT" "BV" "BW" "BY" "BZ" "CA" "CC" "CD" "CF" "CG" "CH" "CI" "CK" "CL" "CM" "CN" "CO" "CR" "CU" "CV" "CW" "CX" "CY" "CZ" "DE" "DJ" "DK" "DM" "DO" "DZ" "EC" "EE" "EG" "EH" "ER" "ES" "ET" "FI" "FJ" "FK" "FM" "FO" "FR" "GA" "GB" "GD" "GE" "GF" "GG" "GH" "GI" "GL" "GM" "GN" "GP" "GQ" "GR" "GS" "GT" "GU" "GW" "GY" "HK" "HM" "HN" "HR" "HT" "HU" "ID" "IE" "IL" "IM" "IN" "IO" "IQ" "IR" "IS" "IT" "JE" "JM" "JO" "JP" "KE" "KG" "KH" "KI" "KM" "KN" "KP" "KR" "KW" "KY" "KZ" "LA" "LB" "LC" "LI" "LK" "LR" "LS" "LT" "LU" "LV" "LY" "MA" "MC" "MD" "ME" "MF" "MG" "MH" "MK" "ML" "MM" "MN" "MO" "MP" "MQ" "MR" "MS" "MT" "MU" "MV" "MW" "MX" "MY" "MZ" "NA" "NC" "NE" "NF" "NG" "NI" "NL" "NO" "NP" "NR" "NU" "NZ" "OM" "PA" "PE" "PF" "PG" "PH" "PK" "PL" "PM" "PN" "PR" "PS" "PT" "PW" "PY" "QA" "RE" "RO" "RS" "RU" "RW" "SA" "SB" "SC" "SD" "SE" "SG" "SH" "SI" "SJ" "SK" "SL" "SM" "SN" "SO" "SR" "SS" "ST" "SV" "SX" "SY" "SZ" "TC" "TD" "TF" "TG" "TH" "TJ" "TK" "TL" "TM" "TN" "TO" "TR" "TT" "TV" "TW" "TZ" "UA" "UG" "UM" "US" "UY" "UZ" "VA" "VC" "VE" "VG" "VI" "VN" "VU" "WF" "WS" "YE" "YT" "ZA" "ZM" "ZW"

Two-letter country code, as specified by ISO 3166-1 alpha-2

swiftCode
string [ 8 .. 11 ] characters ^[A-Z]{6}[0-9A-Z]{2}([0-9A-Z]{3})?$

Bank identifier code, as specified by ISO 9362. Used by banks outside the US.

string or null (BankAccountType)
Enum: "sen" "signet" null

The type of bank account. Generally optional because value is null for normal accounts. Note: sen is special silvergate accounts that support instant and fee-free sending.

verificationState
string (BankAccountVerificationState)
Enum: "pending" "approved" "rejected"

Responses

Response Schema: application/json
accountNumber
required
string [ 1 .. 34 ] characters

Bank account number or IBAN

address1
required
string
address2
string
address3
string
enterpriseId
string (Id) ^[0-9a-f]{32}$
id
string (Id) ^[0-9a-f]{32}$
idHash
string (BankAccountIdHash)

Unique identifier for this account, derived from accountNumber, routingNumber, and swiftCode

name
required
string
required
object

Bank account owner

routingNumber
string 9 characters ^[0-9]+$

US bank routing number

shortCountryCode
required
string (ShortCountryCode) 2 characters
Enum: "AD" "AE" "AF" "AG" "AI" "AL" "AM" "AO" "AQ" "AR" "AS" "AT" "AU" "AW" "AX" "AZ" "BA" "BB" "BD" "BE" "BF" "BG" "BH" "BI" "BJ" "BL" "BM" "BN" "BO" "BQ" "BR" "BS" "BT" "BV" "BW" "BY" "BZ" "CA" "CC" "CD" "CF" "CG" "CH" "CI" "CK" "CL" "CM" "CN" "CO" "CR" "CU" "CV" "CW" "CX" "CY" "CZ" "DE" "DJ" "DK" "DM" "DO" "DZ" "EC" "EE" "EG" "EH" "ER" "ES" "ET" "FI" "FJ" "FK" "FM" "FO" "FR" "GA" "GB" "GD" "GE" "GF" "GG" "GH" "GI" "GL" "GM" "GN" "GP" "GQ" "GR" "GS" "GT" "GU" "GW" "GY" "HK" "HM" "HN" "HR" "HT" "HU" "ID" "IE" "IL" "IM" "IN" "IO" "IQ" "IR" "IS" "IT" "JE" "JM" "JO" "JP" "KE" "KG" "KH" "KI" "KM" "KN" "KP" "KR" "KW" "KY" "KZ" "LA" "LB" "LC" "LI" "LK" "LR" "LS" "LT" "LU" "LV" "LY" "MA" "MC" "MD" "ME" "MF" "MG" "MH" "MK" "ML" "MM" "MN" "MO" "MP" "MQ" "MR" "MS" "MT" "MU" "MV" "MW" "MX" "MY" "MZ" "NA" "NC" "NE" "NF" "NG" "NI" "NL" "NO" "NP" "NR" "NU" "NZ" "OM" "PA" "PE" "PF" "PG" "PH" "PK" "PL" "PM" "PN" "PR" "PS" "PT" "PW" "PY" "QA" "RE" "RO" "RS" "RU" "RW" "SA" "SB" "SC" "SD" "SE" "SG" "SH" "SI" "SJ" "SK" "SL" "SM" "SN" "SO" "SR" "SS" "ST" "SV" "SX" "SY" "SZ" "TC" "TD" "TF" "TG" "TH" "TJ" "TK" "TL" "TM" "TN" "TO" "TR" "TT" "TV" "TW" "TZ" "UA" "UG" "UM" "US" "UY" "UZ" "VA" "VC" "VE" "VG" "VI" "VN" "VU" "WF" "WS" "YE" "YT" "ZA" "ZM" "ZW"

Two-letter country code, as specified by ISO 3166-1 alpha-2

swiftCode
string [ 8 .. 11 ] characters ^[A-Z]{6}[0-9A-Z]{2}([0-9A-Z]{3})?$

Bank identifier code, as specified by ISO 9362. Used by banks outside the US.

string or null (BankAccountType)
Enum: "sen" "signet" null

The type of bank account. Generally optional because value is null for normal accounts. Note: sen is special silvergate accounts that support instant and fee-free sending.

verificationState
string (BankAccountVerificationState)
Enum: "pending" "approved" "rejected"

Request samples

Content type
application/json
{
  • "accountNumber": "0114584906",
  • "address1": "2390 El Camino Real",
  • "address2": "Palo Alto, CA 94306",
  • "address3": "",
  • "enterpriseId": "59cd72485007a239fb00282ed480da1f",
  • "id": "59cd72485007a239fb00282ed480da1f",
  • "idHash": "5c645791cf8eb19304292a8e3365fee3",
  • "name": "America California Bank",
  • "owner": {
    • "name": "Donald E. Knuth",
    • "address1": "Computer Science Department",
    • "address2": "Stanford University",
    • "address3": "Stanford, CA 94305-9045"
    },
  • "routingNumber": "129131673",
  • "shortCountryCode": "US",
  • "swiftCode": "DEUTDEFF500",
  • "type": "sen",
  • "verificationState": "pending"
}

Response samples

Content type
application/json
{
  • "accountNumber": "0114584906",
  • "address1": "2390 El Camino Real",
  • "address2": "Palo Alto, CA 94306",
  • "address3": "",
  • "enterpriseId": "59cd72485007a239fb00282ed480da1f",
  • "id": "59cd72485007a239fb00282ed480da1f",
  • "idHash": "5c645791cf8eb19304292a8e3365fee3",
  • "name": "America California Bank",
  • "owner": {
    • "name": "Donald E. Knuth",
    • "address1": "Computer Science Department",
    • "address2": "Stanford University",
    • "address3": "Stanford, CA 94305-9045"
    },
  • "routingNumber": "129131673",
  • "shortCountryCode": "US",
  • "swiftCode": "DEUTDEFF500",
  • "type": "sen",
  • "verificationState": "pending"
}

List bank accounts

This route is potentially useful for finding the idHash of the desired account to use for fiat withdrawals. The idHash field is used as the recipient address along with an optional hyphen separator and memo (example: 5812dcaa9a285aa6-memohere).

query Parameters
enterpriseId
Array of strings (Id)
Example: enterpriseId=59cd72485007a239fb00282ed480da1f

Filter by enterprise

verificationState
string (BankAccountVerificationState)
Enum: "pending" "approved" "rejected"

Responses

Response Schema: application/json
Array of objects (BankAccount) [ items ]

Response samples

Content type
application/json
{
  • "bankAccounts": [
    • {
      }
    ]
}

Get bank account

This route is potentially useful for finding the idHash of the desired account to use for fiat withdrawals. The idHash field is used as the recipient address along with an optional hyphen separator and memo (example: 5812dcaa9a285aa6-memohere).

path Parameters
bankAccountId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f

Responses

Response Schema: application/json
accountNumber
required
string [ 1 .. 34 ] characters

Bank account number or IBAN

address1
required
string
address2
string
address3
string
enterpriseId
string (Id) ^[0-9a-f]{32}$
id
string (Id) ^[0-9a-f]{32}$
idHash
string (BankAccountIdHash)

Unique identifier for this account, derived from accountNumber, routingNumber, and swiftCode

name
required
string
required
object

Bank account owner

routingNumber
string 9 characters ^[0-9]+$

US bank routing number

shortCountryCode
required
string (ShortCountryCode) 2 characters
Enum: "AD" "AE" "AF" "AG" "AI" "AL" "AM" "AO" "AQ" "AR" "AS" "AT" "AU" "AW" "AX" "AZ" "BA" "BB" "BD" "BE" "BF" "BG" "BH" "BI" "BJ" "BL" "BM" "BN" "BO" "BQ" "BR" "BS" "BT" "BV" "BW" "BY" "BZ" "CA" "CC" "CD" "CF" "CG" "CH" "CI" "CK" "CL" "CM" "CN" "CO" "CR" "CU" "CV" "CW" "CX" "CY" "CZ" "DE" "DJ" "DK" "DM" "DO" "DZ" "EC" "EE" "EG" "EH" "ER" "ES" "ET" "FI" "FJ" "FK" "FM" "FO" "FR" "GA" "GB" "GD" "GE" "GF" "GG" "GH" "GI" "GL" "GM" "GN" "GP" "GQ" "GR" "GS" "GT" "GU" "GW" "GY" "HK" "HM" "HN" "HR" "HT" "HU" "ID" "IE" "IL" "IM" "IN" "IO" "IQ" "IR" "IS" "IT" "JE" "JM" "JO" "JP" "KE" "KG" "KH" "KI" "KM" "KN" "KP" "KR" "KW" "KY" "KZ" "LA" "LB" "LC" "LI" "LK" "LR" "LS" "LT" "LU" "LV" "LY" "MA" "MC" "MD" "ME" "MF" "MG" "MH" "MK" "ML" "MM" "MN" "MO" "MP" "MQ" "MR" "MS" "MT" "MU" "MV" "MW" "MX" "MY" "MZ" "NA" "NC" "NE" "NF" "NG" "NI" "NL" "NO" "NP" "NR" "NU" "NZ" "OM" "PA" "PE" "PF" "PG" "PH" "PK" "PL" "PM" "PN" "PR" "PS" "PT" "PW" "PY" "QA" "RE" "RO" "RS" "RU" "RW" "SA" "SB" "SC" "SD" "SE" "SG" "SH" "SI" "SJ" "SK" "SL" "SM" "SN" "SO" "SR" "SS" "ST" "SV" "SX" "SY" "SZ" "TC" "TD" "TF" "TG" "TH" "TJ" "TK" "TL" "TM" "TN" "TO" "TR" "TT" "TV" "TW" "TZ" "UA" "UG" "UM" "US" "UY" "UZ" "VA" "VC" "VE" "VG" "VI" "VN" "VU" "WF" "WS" "YE" "YT" "ZA" "ZM" "ZW"

Two-letter country code, as specified by ISO 3166-1 alpha-2

swiftCode
string [ 8 .. 11 ] characters ^[A-Z]{6}[0-9A-Z]{2}([0-9A-Z]{3})?$

Bank identifier code, as specified by ISO 9362. Used by banks outside the US.

string or null (BankAccountType)
Enum: "sen" "signet" null

The type of bank account. Generally optional because value is null for normal accounts. Note: sen is special silvergate accounts that support instant and fee-free sending.

verificationState
string (BankAccountVerificationState)
Enum: "pending" "approved" "rejected"

Response samples

Content type
application/json
{
  • "accountNumber": "0114584906",
  • "address1": "2390 El Camino Real",
  • "address2": "Palo Alto, CA 94306",
  • "address3": "",
  • "enterpriseId": "59cd72485007a239fb00282ed480da1f",
  • "id": "59cd72485007a239fb00282ed480da1f",
  • "idHash": "5c645791cf8eb19304292a8e3365fee3",
  • "name": "America California Bank",
  • "owner": {
    • "name": "Donald E. Knuth",
    • "address1": "Computer Science Department",
    • "address2": "Stanford University",
    • "address3": "Stanford, CA 94305-9045"
    },
  • "routingNumber": "129131673",
  • "shortCountryCode": "US",
  • "swiftCode": "DEUTDEFF500",
  • "type": "sen",
  • "verificationState": "pending"
}

Update bank account

path Parameters
bankAccountId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f
Request Body schema: application/json
address1
string
address2
string
address3
string
name
string
object

Bank account owner

shortCountryCode
string (ShortCountryCode) 2 characters
Enum: "AD" "AE" "AF" "AG" "AI" "AL" "AM" "AO" "AQ" "AR" "AS" "AT" "AU" "AW" "AX" "AZ" "BA" "BB" "BD" "BE" "BF" "BG" "BH" "BI" "BJ" "BL" "BM" "BN" "BO" "BQ" "BR" "BS" "BT" "BV" "BW" "BY" "BZ" "CA" "CC" "CD" "CF" "CG" "CH" "CI" "CK" "CL" "CM" "CN" "CO" "CR" "CU" "CV" "CW" "CX" "CY" "CZ" "DE" "DJ" "DK" "DM" "DO" "DZ" "EC" "EE" "EG" "EH" "ER" "ES" "ET" "FI" "FJ" "FK" "FM" "FO" "FR" "GA" "GB" "GD" "GE" "GF" "GG" "GH" "GI" "GL" "GM" "GN" "GP" "GQ" "GR" "GS" "GT" "GU" "GW" "GY" "HK" "HM" "HN" "HR" "HT" "HU" "ID" "IE" "IL" "IM" "IN" "IO" "IQ" "IR" "IS" "IT" "JE" "JM" "JO" "JP" "KE" "KG" "KH" "KI" "KM" "KN" "KP" "KR" "KW" "KY" "KZ" "LA" "LB" "LC" "LI" "LK" "LR" "LS" "LT" "LU" "LV" "LY" "MA" "MC" "MD" "ME" "MF" "MG" "MH" "MK" "ML" "MM" "MN" "MO" "MP" "MQ" "MR" "MS" "MT" "MU" "MV" "MW" "MX" "MY" "MZ" "NA" "NC" "NE" "NF" "NG" "NI" "NL" "NO" "NP" "NR" "NU" "NZ" "OM" "PA" "PE" "PF" "PG" "PH" "PK" "PL" "PM" "PN" "PR" "PS" "PT" "PW" "PY" "QA" "RE" "RO" "RS" "RU" "RW" "SA" "SB" "SC" "SD" "SE" "SG" "SH" "SI" "SJ" "SK" "SL" "SM" "SN" "SO" "SR" "SS" "ST" "SV" "SX" "SY" "SZ" "TC" "TD" "TF" "TG" "TH" "TJ" "TK" "TL" "TM" "TN" "TO" "TR" "TT" "TV" "TW" "TZ" "UA" "UG" "UM" "US" "UY" "UZ" "VA" "VC" "VE" "VG" "VI" "VN" "VU" "WF" "WS" "YE" "YT" "ZA" "ZM" "ZW"

Two-letter country code, as specified by ISO 3166-1 alpha-2

verificationState
required
string
Value: "pending"

Has to be set to pending for a the server to process the changes. Any changes will require a new review from an operator.

Responses

Response Schema: application/json
accountNumber
required
string [ 1 .. 34 ] characters

Bank account number or IBAN

address1
required
string
address2
string
address3
string
enterpriseId
string (Id) ^[0-9a-f]{32}$
id
string (Id) ^[0-9a-f]{32}$
idHash
string (BankAccountIdHash)

Unique identifier for this account, derived from accountNumber, routingNumber, and swiftCode

name
required
string
required
object

Bank account owner

routingNumber
string 9 characters ^[0-9]+$

US bank routing number

shortCountryCode
required
string (ShortCountryCode) 2 characters
Enum: "AD" "AE" "AF" "AG" "AI" "AL" "AM" "AO" "AQ" "AR" "AS" "AT" "AU" "AW" "AX" "AZ" "BA" "BB" "BD" "BE" "BF" "BG" "BH" "BI" "BJ" "BL" "BM" "BN" "BO" "BQ" "BR" "BS" "BT" "BV" "BW" "BY" "BZ" "CA" "CC" "CD" "CF" "CG" "CH" "CI" "CK" "CL" "CM" "CN" "CO" "CR" "CU" "CV" "CW" "CX" "CY" "CZ" "DE" "DJ" "DK" "DM" "DO" "DZ" "EC" "EE" "EG" "EH" "ER" "ES" "ET" "FI" "FJ" "FK" "FM" "FO" "FR" "GA" "GB" "GD" "GE" "GF" "GG" "GH" "GI" "GL" "GM" "GN" "GP" "GQ" "GR" "GS" "GT" "GU" "GW" "GY" "HK" "HM" "HN" "HR" "HT" "HU" "ID" "IE" "IL" "IM" "IN" "IO" "IQ" "IR" "IS" "IT" "JE" "JM" "JO" "JP" "KE" "KG" "KH" "KI" "KM" "KN" "KP" "KR" "KW" "KY" "KZ" "LA" "LB" "LC" "LI" "LK" "LR" "LS" "LT" "LU" "LV" "LY" "MA" "MC" "MD" "ME" "MF" "MG" "MH" "MK" "ML" "MM" "MN" "MO" "MP" "MQ" "MR" "MS" "MT" "MU" "MV" "MW" "MX" "MY" "MZ" "NA" "NC" "NE" "NF" "NG" "NI" "NL" "NO" "NP" "NR" "NU" "NZ" "OM" "PA" "PE" "PF" "PG" "PH" "PK" "PL" "PM" "PN" "PR" "PS" "PT" "PW" "PY" "QA" "RE" "RO" "RS" "RU" "RW" "SA" "SB" "SC" "SD" "SE" "SG" "SH" "SI" "SJ" "SK" "SL" "SM" "SN" "SO" "SR" "SS" "ST" "SV" "SX" "SY" "SZ" "TC" "TD" "TF" "TG" "TH" "TJ" "TK" "TL" "TM" "TN" "TO" "TR" "TT" "TV" "TW" "TZ" "UA" "UG" "UM" "US" "UY" "UZ" "VA" "VC" "VE" "VG" "VI" "VN" "VU" "WF" "WS" "YE" "YT" "ZA" "ZM" "ZW"

Two-letter country code, as specified by ISO 3166-1 alpha-2

swiftCode
string [ 8 .. 11 ] characters ^[A-Z]{6}[0-9A-Z]{2}([0-9A-Z]{3})?$

Bank identifier code, as specified by ISO 9362. Used by banks outside the US.

string or null (BankAccountType)
Enum: "sen" "signet" null

The type of bank account. Generally optional because value is null for normal accounts. Note: sen is special silvergate accounts that support instant and fee-free sending.

verificationState
string (BankAccountVerificationState)
Enum: "pending" "approved" "rejected"

Request samples

Content type
application/json
{
  • "address1": "2390 El Camino Real",
  • "address2": "Palo Alto, CA 94306",
  • "address3": "",
  • "name": "America California Bank",
  • "owner": {
    • "name": "Donald E. Knuth",
    • "address1": "Computer Science Department",
    • "address2": "Stanford University",
    • "address3": "Stanford, CA 94305-9045"
    },
  • "shortCountryCode": "US",
  • "verificationState": "pending"
}

Response samples

Content type
application/json
{
  • "accountNumber": "0114584906",
  • "address1": "2390 El Camino Real",
  • "address2": "Palo Alto, CA 94306",
  • "address3": "",
  • "enterpriseId": "59cd72485007a239fb00282ed480da1f",
  • "id": "59cd72485007a239fb00282ed480da1f",
  • "idHash": "5c645791cf8eb19304292a8e3365fee3",
  • "name": "America California Bank",
  • "owner": {
    • "name": "Donald E. Knuth",
    • "address1": "Computer Science Department",
    • "address2": "Stanford University",
    • "address3": "Stanford, CA 94305-9045"
    },
  • "routingNumber": "129131673",
  • "shortCountryCode": "US",
  • "swiftCode": "DEUTDEFF500",
  • "type": "sen",
  • "verificationState": "pending"
}

Delete bank account

Removes a bank account if not already verified

path Parameters
bankAccountId
required
string (Id) ^[0-9a-f]{32}$
Example: 59cd72485007a239fb00282ed480da1f

Responses

Response Schema: application/json
accountNumber
required
string [ 1 .. 34 ] characters

Bank account number or IBAN

address1
required
string
address2
string
address3
string
enterpriseId
string (Id) ^[0-9a-f]{32}$
id
string (Id) ^[0-9a-f]{32}$
idHash
string (BankAccountIdHash)

Unique identifier for this account, derived from accountNumber, routingNumber, and swiftCode

name
required
string
required
object

Bank account owner

routingNumber
string 9 characters ^[0-9]+$

US bank routing number

shortCountryCode
required
string (ShortCountryCode) 2 characters
Enum: "AD" "AE" "AF" "AG" "AI" "AL" "AM" "AO" "AQ" "AR" "AS" "AT" "AU" "AW" "AX" "AZ" "BA" "BB" "BD" "BE" "BF" "BG" "BH" "BI" "BJ" "BL" "BM" "BN" "BO" "BQ" "BR" "BS" "BT" "BV" "BW" "BY" "BZ" "CA" "CC" "CD" "CF" "CG" "CH" "CI" "CK" "CL" "CM" "CN" "CO" "CR" "CU" "CV" "CW" "CX" "CY" "CZ" "DE" "DJ" "DK" "DM" "DO" "DZ" "EC" "EE" "EG" "EH" "ER" "ES" "ET" "FI" "FJ" "FK" "FM" "FO" "FR" "GA" "GB" "GD" "GE" "GF" "GG" "GH" "GI" "GL" "GM" "GN" "GP" "GQ" "GR" "GS" "GT" "GU" "GW" "GY" "HK" "HM" "HN" "HR" "HT" "HU" "ID" "IE" "IL" "IM" "IN" "IO" "IQ" "IR" "IS" "IT" "JE" "JM" "JO" "JP" "KE" "KG" "KH" "KI" "KM" "KN" "KP" "KR" "KW" "KY" "KZ" "LA" "LB" "LC" "LI" "LK" "LR" "LS" "LT" "LU" "LV" "LY" "MA" "MC" "MD" "ME" "MF" "MG" "MH" "MK" "ML" "MM" "MN" "MO" "MP" "MQ" "MR" "MS" "MT" "MU" "MV" "MW" "MX" "MY" "MZ" "NA" "NC" "NE" "NF" "NG" "NI" "NL" "NO" "NP" "NR" "NU" "NZ" "OM" "PA" "PE" "PF" "PG" "PH" "PK" "PL" "PM" "PN" "PR" "PS" "PT" "PW" "PY" "QA" "RE" "RO" "RS" "RU" "RW" "SA" "SB" "SC" "SD" "SE" "SG" "SH" "SI" "SJ" "SK" "SL" "SM" "SN" "SO" "SR" "SS" "ST" "SV" "SX" "SY" "SZ" "TC" "TD" "TF" "TG" "TH" "TJ" "TK" "TL" "TM" "TN" "TO" "TR" "TT" "TV" "TW" "TZ" "UA" "UG" "UM" "US" "UY" "UZ" "VA" "VC" "VE" "VG" "VI" "VN" "VU" "WF" "WS" "YE" "YT" "ZA" "ZM" "ZW"

Two-letter country code, as specified by ISO 3166-1 alpha-2

swiftCode
string [ 8 .. 11 ] characters ^[A-Z]{6}[0-9A-Z]{2}([0-9A-Z]{3})?$

Bank identifier code, as specified by ISO 9362. Used by banks outside the US.

string or null (BankAccountType)
Enum: "sen" "signet" null

The type of bank account. Generally optional because value is null for normal accounts. Note: sen is special silvergate accounts that support instant and fee-free sending.

verificationState
string (BankAccountVerificationState)
Enum: "pending" "approved" "rejected"

Response samples

Content type
application/json
{
  • "accountNumber": "0114584906",
  • "address1": "2390 El Camino Real",
  • "address2": "Palo Alto, CA 94306",
  • "address3": "",
  • "enterpriseId": "59cd72485007a239fb00282ed480da1f",
  • "id": "59cd72485007a239fb00282ed480da1f",
  • "idHash": "5c645791cf8eb19304292a8e3365fee3",
  • "name": "America California Bank",
  • "owner": {
    • "name": "Donald E. Knuth",
    • "address1": "Computer Science Department",
    • "address2": "Stanford University",
    • "address3": "Stanford, CA 94305-9045"
    },
  • "routingNumber": "129131673",
  • "shortCountryCode": "US",
  • "swiftCode": "DEUTDEFF500",
  • "type": "sen",
  • "verificationState": "pending"
}

Coin-specific implementation

BitGo provides a unified API platform that lets customers manage a growing list of digital currencies in security-first, multi-signature wallets. The API operates at a wallet level above the blockchain and the SDK handles the different transactional implementations without getting in the user's way.

Some operations (such as wallet creation) are handled differently between blockchains; for example, in Bitcoin, a multisig address can be crafted with just the 3 keys, whereas in Ethereum, a multisig contract must be deployed.

This section explains BitGo wallet operations. The SDK handles the intricacies of each digital currency, creating a common interface across all coins.

For a summarized list of all supported digital currencies, see Coins in Production.

Address Derivation (BIP-32)

Creating addresses

BitGo uses a hierarchical deterministic (HD) wallet scheme for:

  • Manually generated addresses (for deposits)
  • Change addresses.

This HD scheme supports the BIP-32 standard with the path /0/0/{chain_code}/n where {chain_code} is a variable that represents an address type:

Chain Code Address Type Deposit or Change
0 Pay to Script Hash (P2SH) Deposit
1 Pay to Script Hash (P2SH) Change
10 Wrapped Segwit (P2SH-P2WSH) Deposit
11 Wrapped Segwit (P2SH-P2WSH) Change
20 Bech32/Native Segwit/Pay to Witness Script Hash (P2WSH) Deposit
21 Bech32/Native Segwit/Pay to Witness Script Hash (P2WSH) Change
30 Bech32m Taproot (P2TR) Deposit
31 Bech32m Taproot (P2TR) Change

Algorand

Algorand can be accessed with the following coin types:

Environment Coin Type Faucet
Algorand Production algo
Algorand Testnet talgo https://bank.testnet.algorand.network/

Generating wallets

To create an Algo wallet using BitGoJS:

bitgo
  .coin('talgo')
  .wallets()
  .generateWallet({
    label: 'My Test Wallet',
    passphrase: 'secretpassphrase1a5df8380e0e30',
  })
  .then(function (wallet) {
    // print the new wallet
    console.dir(wallet);
  });

To create an Algo wallet using the platform API:

LABEL="My Test Wallet"
PASSPHRASE="secretpassphrase1a5df8380e0e30"

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d "{ \"label\": \"$LABEL\", \"passphrase\": \"$PASSPHRASE\" }" \
http://$BITGO_EXPRESS_HOST:3080/api/v2/talgo/wallet/generate

Algorand accounts must maintain a minimum balance of 100,000 microAlgos (0.1 Algos). Account operations (send, receive, etc) that trigger a balance lower than the minimium are not permitted.

In addition every enabled token will increase the minimum balance in 100,000 microAlgos. In example :

  • given a wallet without tokens enabled minumum balance is 100,000 microalgos.
  • given a wallet with one token enabled minimum balance is 200,000 microAlgos
  • given a wallet with two token enabled minimum balance is 300,000 microAlgos
  • and so ...

Creating addresses

bitgo
  .coin('talgo')
  .wallets()
  .getWallet({ id: '585c51a5df8380e0e3082e46' })
  .then(function (wallet) {
    return wallet.createAddress();
  })
  .then(function (newAddress) {
    // print new address details
    console.dir(newAddress);
  });
WALLET=585c51a5df8380e0e3082e46

curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/talgo/wallet/$WALLET/address

Algorand is an account-based coin. The creation of receive addresses results in additional accounts. When a user receives funds on a receive address, those funds need to be consolidated in the base address of the wallet first in order to be spent. See Consolidate account.

Sending

Funds can only be sent out from the wallet's base address. If your wallet has sufficient funds but you are unable to send, you may first need to sweep the funds from the receive addresses into the base address by calling Consolidate account.

Note: sendMany is not supported as Algo transactions only support one input and one output.

Balances

Algo (ALGO) is the native asset of the Algorand blockchain. The base unit of Algo is microAlgo:

  • 1 microAlgo is (10-6) or 0.000001 Algo.
  • 1 Algo is (106) or 1000000 microAlgos (1 million).

Note: The minimum earning unit (MEU) of Algorand is 1 Algo.

Balances are supported in string and number format but string is recommended to ensure values do not exceed the programmable number limit: balanceString, confirmedBalanceString, and spendableBalanceString.

Tokens

Algorand supports tokens transactions. This means you can now make transactions with other tokens apart from native algo coin.

Enable token

In order to make token transactions you first need to enable the token in your wallet address(es). Once enabled, you will be able to receive and send that respective token. This process will take some fees from your account (1,000 microAlgos is the minimum and most common fee for enabling tokens).

bitgo
  .coin('talgo:tokenID')
  .wallets()
  .get({ id: walletId })
  .then(function (wallet) {
    return wallet.sendMany({
      type: 'enabletoken',
      recipients: [
        {
          amount: '0',
          address: yourWalletAddress,
        },
      ],
      feeRate: 1,
      yourWalletPassphrase,
    })
  });

Disable token

In order to reduce minimum balance needed into account, or just for stop receiving transactions from some tokens, you can disable each previous enabled from your wallet address(es).

bitgo
  .coin('talgo:tokenID')
  .wallets()
  .get({ id: walletId })
  .then(function (wallet) {
    return wallet.sendMany({
      type: 'disabletoken',
      recipients: [
        {
          amount: '0',
          address: yourWalletAddress,
        },
      ],
      feeRate: 1,
      yourWalletPassphrase,
      closeRemainderTo,
    })
  });

Note: closeRemainderTo is the address you want to send all remaining token balance when disable it.

Send tokens

Just as for your native token (ALGOs) you would be able to send tokens (from token enabled addresses) to other wallets. Here is an example of it:

bitgo
  .coin('talgo:tokenID')
  .wallets()
  .get({ id: walletId })
  .then(function (wallet) {
    return wallet.sendMany({
      type: 'transfer',
      recipients: [
        {
          amount,
          receiverAddress,
        },
      ],
      walletPassphrase: yourWalletPassphrase,
    })
  });

Recieve tokens

Once you have enabled the token you desire, and the token enable transaction has been confirmed, you will be able to receive tokens from other wallets.

Rewards

Accounts holding at least 1 MEU (1 Algo or more) are eligible to earn rewards. Rewards are accrued in the Algorand network and claimed by a specific account when a transaction involving that account is confirmed.

BitGo does not keep track of pending rewards. Balances only account for rewards received in confirmed pay transactions.

Reward calculation is complex and the amounts change every 500,000 blocks (the Rewards Period). To learn more, see Algorand Rewards - A Technical Overview.

Fee rate

Algorand's minimum transaction fee is 1000 microAlgos. For example, if you set feeRate to "1" microAlgo/kByte and the fee size is 247 kBytes, then the fee amount=247 microAlgos. But because this is less than the required minimum, the default of 1000 microAlgos is applied.

Binance Smart Chain

Binance Smart Chain can be accessed with the following coin types:

Environment Coin Type Faucet
BSC Production bsc
BSC Testnet tbsc https://testnet.binance.org/faucet-smart

Generating wallets

bitgo
  .coin('tbsc')
  .wallets()
  .generateWallet({
    label: 'My Test Wallet',
    passphrase: 'secretpassphrase1a5df8380e0e30',
    enterprise: '5612c2beeecf83610b621b90964448cd',
    multisigType: 'tss',
    walletVersion: 3,
  })
  .then(function (wallet) {
    // print the new wallet
    console.dir(wallet);
  });

Balances

BNB is the native asset of the Binance Smart Chain blockchain. The base unit of BNB is jager:

  • 1 jager is (10-8) or 0.00000001 BNB.
  • 1 BNB is (108) or 100000000 jager (100 million).

Bitcoin

Bitcoin can be accessed with the following coin types:

Environment Coin Type Faucet
Bitcoin Production btc
Bitcoin Testnet tbtc https://coinfaucet.eu/en/btc-testnet/

Note: The Bitcoin wallets in Platform V2 should not be confused with the wallets created via V1 routes.

Generating wallets

bitgo
  .coin('tbtc')
  .wallets()
  .generateWallet({
    label: 'My Test Wallet',
    passphrase: 'secretpassphrase1a5df8380e0e30',
  })
  .then(function (wallet) {
    // print the new wallet
    console.dir(wallet);
  });
LABEL="My Test Wallet"
PASSPHRASE="secretpassphrase1a5df8380e0e30"

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d "{ \"label\": \"$LABEL\", \"passphrase\": \"$PASSPHRASE\" }" \
http://$BITGO_EXPRESS_HOST:3080/api/v2/tbtc/wallet/generate

For Bitcoin, BitGo uses a 2-of-3 multisig P2SH scheme, with the keys in the order of User, Backup, and BitGo respectively.

You can create wallets with a single line of code using the BitGo SDK.

Creating addresses

bitgo
  .coin('tbtc')
  .wallets()
  .getWallet({ id: '585c51a5df8380e0e3082e46' })
  .then(function (wallet) {
    return wallet.createAddress();
  })
  .then(function (newAddress) {
    // print new address details
    console.dir(newAddress);
  });
WALLET=585c51a5df8380e0e3082e46

curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/tbtc/wallet/$WALLET/address

Note: See the table of address types under Address Derivation (BIP-32) above. Bitcoin defaults to chain 10.

Balances

Bitcoin (BTC) is the native asset of the Bitcoin blockchain. The base unit of Bitcoin is satoshi (or "sat"):

  • 1 satoshi is (10-8) or 0.00000001 Bitcoin.
  • 1 Bitcoin is (108) or 100000000 satoshis (100 million).

Balances are supported in string and number format but string is recommended to ensure values do not exceed the programmable number limit: balanceString, confirmedBalanceString, and spendableBalanceString.

Fee rate

Bitcoin's minimum transaction fee is 1000 satoshis. When sending a transaction, the default feeRate is 1000 satoshis/kvByte or 1 sat/vByte (which is 0.00000001 BTC/vByte). Use Get Fee Estimate to calculate a fee rate (feePerKb) that increases the probability that your transaction is confirmed.

Bitcoin Cash

Bitcoin Cash can be accessed with the following coin types:

Environment Coin Type Faucet
Bitcoin Cash Production bch
Bitcoin Cash Testnet tbch https://coinfaucet.eu/en/bch-testnet/

New wallets created within Bitcoin Cash are not able to receive normal Bitcoin.

Fork notes

Bitcoin Cash (BCH) forked from the Bitcoin mainnet on August 1st, 2017. Bitcoin addresses that had balances on this date kept the same balance within Bitcoin Cash. After this date, blocks and transactions on the BCH fork no longer overlap with Bitcoin.

The Bitcoin Cash fork is replay-safe both ways, meaning that transactions made after August 1st, 2017 on one chain do not occur on the other.

Migrated Wallets

All BitGo customers using our Bitcoin wallets on August 1st, 2017 had their wallets and keys automatically migrated to the V2 BCH coin type.

Users can find migrated wallets by using the List Wallets API. On the wallet object, there is a migratedFrom property that corresponds to the Bitcoin Wallet ID.

To protect against confusion (users sending BCH to BTC addresses or vice versa), migrated wallets may not create new addresses by default. Users should create a new wallet with new keys to ensure all new BCH addresses do not collide with BTC addresses.

Generating wallets

bitgo
  .coin('bch')
  .wallets()
  .generateWallet({
    label: 'My Test Wallet',
    passphrase: 'secretpassphrase1a5df8380e0e30',
  })
  .then(function (wallet) {
    // print the new wallet
    console.dir(wallet);
  });
LABEL="My Test Wallet"
PASSPHRASE="secretpassphrase1a5df8380e0e30"

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d "{ \"label\": \"$LABEL\", \"passphrase\": \"$PASSPHRASE\" }" \
http://$BITGO_EXPRESS_HOST:3080/api/v2/bch/wallet/generate

For Bitcoin, BitGo uses a 2-of-3 multisig P2SH scheme, with the keys in the order of User, Backup and BitGo respectively.

Wallet creation can be done in a single line with the help of our SDK.

Creating addresses

bitgo
  .coin('bch')
  .wallets()
  .getWallet({ id: '585c51a5df8380e0e3082e46' })
  .then(function (wallet) {
    return wallet.createAddress();
  })
  .then(function (newAddress) {
    // print new address details
    console.dir(newAddress);
  });
WALLET=585c51a5df8380e0e3082e46

curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/bch/wallet/$WALLET/address

Note: See the table of address types under Address Derivation (BIP-32) above. Bitcoin Cash defaults to chain 0 (and does not support segwit).

Bitcoin Gold

Bitcoin Gold can be accessed with the following coin types:

Environment Coin Type Faucet
Bitcoin Gold Production btg

Fork notes

Bitcoin Gold (BTG) forked from the Bitcoin mainnet on October 24th, 2017. Bitcoin addresses that had balances on this date kept the same balance within Bitcoin Gold. After this date, blocks and transactions on the BTG fork no longer overlap with Bitcoin.

Bitcoin Gold uses a different address format from Bitcoin which protects users from accidentally sending coins to the wrong chain. Bitcoin Gold addresses start with either a G or an A. As BitGo wallets use multisig addresses, all addresses for BitGo wallets start with an A.

The Bitcoin Gold fork is replay-safe both ways, meaning that new transaction made on one chain will not occur on the other.

Migrated Wallets

All BitGo customers using our Bitcoin wallets on October 24th, 2017 had their wallets and keys automatically migrated to the V2 BTG coin type.

Users can find migrated wallets by using the List Wallets API. On the wallet object, there is a migratedFrom property that corresponds to the Bitcoin Wallet ID.

Creating addresses

Note: See section Address Derivation (BIP-32) for a table of address types. Bitcoin Gold defaults to chain 10.

Casper

Casper can be accessed with the following coin types:

Environment Coin Type Faucet
Casper Production cspr
Casper Testnet tcspr https://testnet.cspr.live/tools/faucet

Generating wallets

bitgo
  .coin('tcspr')
  .wallets()
  .generateWallet({
    label: 'My Test Wallet',
    passphrase: 'secretpassphrase1a5df8380e0e30',
  })
  .then(function (wallet) {
    // print the new wallet
    console.dir(wallet);
  });
LABEL="My Test Wallet"
PASSPHRASE="secretpassphrase1a5df8380e0e30"

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d "{ \"label\": \"$LABEL\", \"passphrase\": \"$PASSPHRASE\" }" \
http://$BITGO_EXPRESS_HOST:3080/api/v2/tcspr/wallet/generate

Before you can use a Casper wallet, it must be initialized on the Casper blockchain. A funding transaction must first be sent to the wallet's address. When BitGo detects this funding transaction, it automatically sends another initialization transaction to set up the signers and the home domain of the account.

Until the initialization transaction is confirmed, the wallet is not ready for use, and the receive address is not exposed in the API. This is to protect users from losing funds by sending to a wallet that does not exist on the network.

Warning: Do not use a Casper wallet while it is being initialized or you may lose funds.

Casper accounts must maintain a minimum balance. See Casper Balances.

Required reserve

curl -X GET \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/tcspr/requiredReserve

Fetch information about reserve requirements for an account. See Casper Balances.

HTTP Request

GET /api/v2/:coin/requiredReserve

Response

Field Description
baseFee Base fee used in transaction fees.
baseReserve Base reserve used in minimum account balances.
reserve Minimum account balance, calculated using base reserve.
minimumFunding Minimum funding balance, calculated using reserve and base fee.
height Height of the block that provides the base values.

Creating addresses

bitgo
  .coin('tcspr')
  .wallets()
  .getWallet({ id: '585c51a5df8380e0e3082e46' })
  .then(function (wallet) {
    return wallet.createAddress();
  })
  .then(function (newAddress) {
    // print new address details
    console.dir(newAddress);
  });
WALLET=585c51a5df8380e0e3082e46

curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/tcspr/wallet/$WALLET/address

Casper wallet addresses differ by a sequentially incremented transferId (because they cannot leverage the BIP-32 standard). The transferId type used by BitGo is TRANSFER_ID: a 64-bit unsigned numeric string.

When a new address is created, the incremented transferId and the rootAddress are returned in the coinSpecific property.

Balances

Casper (CSPR) the native asset of the Casper blockchain. The base unit of Casper is the mote:

  • 1 mote is 10-9 or 0.000000001 Casper.
  • 1 Casper is 109 or 1000000000 motes (1 billion).

Balances are supported in string format: balanceString, confirmedBalanceString, and spendableBalanceString.

Casper accounts must maintain a minimum balance which is calculated by adding a base reserve and a base fee. Currently, the base reserve is 2.5 CSPR and the base fee is 1 CSPR so the minimum balance required is 3.5 CSPR.

Transactions

Casper uses an account-based model like XLM and XRP. But instead of using XLM's memo or XRP's destination tag, Casper uses transferId.

Currently, the fixed fee is 10,000 motes (0.0001 CSPR). And the minimum amount for a transaction is 2.5 CSPR.

Staking

Casper provides staking service via smart contracts. Staking and unstaking requests require an active validator and an amount greater or equal to 2.5 CSPR to be provided.

Currently, the fees for staking and unstaking are 5 CSPR for both.

Celo

Celo can be accessed with the following coin types:

Environment Coin Type Faucet
Celo Production celo
Celo Testnet tcelo https://celo.org/developers/faucet

Enterprise fee address

ENTERPRISEID=585c51a5df8380e0e3082e46

curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/tcelo/enterprise/$ENTERPRISEID/feeAddressBalance

Celo uses the same fee address structure as Ethereum. Each enterprise has a fee address that is used to pay for transaction fees on all Celo wallets in that enterprise. The fee address is displayed in the dashboard of the BitGo website, and you must fund it before creating a wallet, address, or sending a transaction.

If the enterprise's fee address runs out of funds, you cannot create new wallets or addresses, and cannot send transactions until you fund the fee address. If the balance of your fee address gets too low, you will not be able to fund it with one of your own Celo wallets (because you will not be able to send transactions from your Celo wallet). BitGo recommneds that you create and fund a non-BitGo Celo account, so you can use it to fund your BitGo enterprise fee address. Any open source Celo wallet can be used to create an account.

Note: A best practice is to create and fund a non-BitGo Celo account to fund your BitGo enterprise fee address.

Note that the fee address is a single-signature account, and the private key is created and owned by BitGo. You cannot send funds out of the fee address once you have sent them in. There is a feeAddress field under the CoinSpecific key for Celo wallets. Use this address to pay the fees for creating transactions and addresses.

Generating wallets

bitgo
  .coin('tcelo')
  .wallets()
  .generateWallet({
    label: 'My Test Wallet',
    passphrase: 'secretpassphrase1a5df8380e0e30',
    enterprise: '5612c2beeecf83610b621b90964448cd',
  })
  .then(function (wallet) {
    // print the new wallet
    console.dir(wallet);
  });
LABEL="My Test Wallet"
PASSPHRASE="secretpassphrase1a5df8380e0e30"

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d "{ \"label\": \"$LABEL\", \"passphrase\": \"$PASSPHRASE\" }" \
http://$BITGO_EXPRESS_HOST:3080/api/v2/tcelo/wallet/generate

Before you can use a Celo wallet, it must be initialized on the Celo blockchain. A funding transaction must first be sent to the wallet's address. When BitGo detects this funding transaction, it automatically sends another initialization transaction to set up the signers and the home domain of the account.

Until the initialization transaction is confirmed, the wallet is not ready for use, and the receive address is not exposed in the API. This is to protect users from losing funds by sending to a wallet that does not exist on the network.

Warning: Do not use a Celo wallet while it is being initialized or you may lose funds.

Creating addresses

bitgo
  .coin('tcelo')
  .wallets()
  .getWallet({ id: '585c51a5df8380e0e3082e46' })
  .then(function (wallet) {
    return wallet.createAddress();
  })
  .then(function (newAddress) {
    // print new address details
    console.dir(newAddress);
  });
WALLET=585c51a5df8380e0e3082e46

curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/tcelo/wallet/$WALLET/address

As with Celo wallets, Celo address must be initialized on the Celo blockchain before they can be used.

To deploy a receive address contract, BitGo sends a transaction on the Celo network. Remember that you must fund the fee address. Like wallet creation process, a Celo address is not immediately usable and so the caller of this function must wait for the initialization transaction to be confirmed before attempting to fetch, or send to, the address.

Warning: Do not use a Celo address while it is being initialized or you may lose funds.

Balances

CELO (CELO) is the native asset of the Celo blockchain. The base unit of CELO is wei:

  • 1 wei is (10-18) or 0.000000000000000001 CELO.
  • 1 CELO is (1018) or 1000000000000000000 wei (1 quintillion).

Balances are supported in string format: balanceString, confirmedBalanceString, and spendableBalanceString.

Transactions

BitGo's Celo multisig contract currently only supports one sender and one recipient so the sendMany is not supported.

Celo - ERC20 Tokens

Celo ERC20 tokens can be accessed with the following coin types:

Environment Coin Type Contract Details
Celo Alfajores Testnet Testnet tcusd https://alfajores-blockscout.celo-testnet.org/tokens/0x874069fa1eb16d44d622f2e0ca25eea172369bc1/token_transfers
Celo Mainnet cusd https://explorer.celo.org/tokens/0x765de816845861e75a25fca122bb6898b8b1282a/token_transfers

Dash

Dash can be accessed with the following coin types:

Environment Coin Type Faucet
Dash Production dash
Dash Testnet tdash http://test.faucet.masternode.io/

Generating wallets

bitgo
  .coin('tdash')
  .wallets()
  .generateWallet({
    label: 'My Test Wallet',
    passphrase: 'secretpassphrase1a5df8380e0e30',
  })
  .then(function (wallet) {
    // print the new wallet
    console.dir(wallet);
  });
LABEL="My Test Wallet"
PASSPHRASE="secretpassphrase1a5df8380e0e30"

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d "{ \"label\": \"$LABEL\", \"passphrase\": \"$PASSPHRASE\" }" \
http://$BITGO_EXPRESS_HOST:3080/api/v2/tdash/wallet/generate

For Dash, BitGo uses the same 2-of-3 multisig P2SH scheme as for Bitcoin, with the keys in the order of User, Backup and BitGo respectively.

Creating addresses

bitgo
  .coin('tdash')
  .wallets()
  .getWallet({ id: '585c51a5df8380e0e3082e46' })
  .then(function (wallet) {
    return wallet.createAddress();
  })
  .then(function (newAddress) {
    // print new address details
    console.dir(newAddress);
  });
WALLET=585c51a5df8380e0e3082e46

curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/tdash/wallet/$WALLET/address

Note: See the table of address types under Address Derivation (BIP-32) above. Dash defaults to chain 0 (and does not support segwit).

Balances

Dash (DASH) is the native asset of the Dash blockchain. The base unit of Dash is duff:

  • 1 duff is (10-8) or 0.00000001 Dash.
  • 1 Dash is (108) or 100000000 duffs (100 million).

Balances are supported in string and number format but string is recommended to ensure values do not exceed the programmable number limit: balanceString, confirmedBalanceString, and spendableBalanceString.

Dash InstantSend

Dash InstantSend is a extension allowing instant on-chain Dash payments.

Dash masternodes provide near instant certainty (before an on-chain confirmation) that a transaction's inputs cannot be respent, and that the transaction will be included in a following block instead of a conflicting transaction.

Dash InstantSend receiving and sending support is exposed through the instant flag on Transfer objects and sending APIs.

Dash InstantSend transactions require higher than normal fees. When the instant flag is set to true, these fees are automatically calculated when building a tranaction and enforced when sending.

EOS

EOS can be accessed with the following coin types:

Environment Coin Type Faucet
EOS Production eos
EOS Jungle Testnet teos https://monitor.jungletestnet.io/#faucet

Generating wallets

bitgo
  .coin('teos')
  .wallets()
  .generateWallet({
    label: 'My Test Wallet',
    passphrase: 'secretpassphrase1a5df8380e0e30',
  })
  .then(function (wallet) {
    // print the new wallet
    console.dir(wallet);
  });
LABEL="My Test Wallet"
PASSPHRASE="secretpassphrase1a5df8380e0e30"

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d "{ \"label\": \"$LABEL\", \"passphrase\": \"$PASSPHRASE\" }" \
http://$BITGO_EXPRESS_HOST:3080/api/v2/teos/wallet/generate

Before you can use an EOS wallet, it must be initialized on the EOS blockchain. A funding transaction must first be sent to the wallet's address. When BitGo detects this funding transaction, it automatically sends another initialization transaction to set up the signers and the home domain of the account.

Until the initialization transaction is confirmed, the wallet is not ready for use, and the receive address is not exposed in the API. This is to protect users from losing funds by sending to a wallet that does not exist on the network.

Warning: Do not use an EOS wallet while it is being initialized or you may lose funds.

Creating addresses

bitgo
  .coin('teos')
  .wallets()
  .getWallet({ id: '585c51a5df8380e0e3082e46' })
  .then(function (wallet) {
    return wallet.createAddress();
  })
  .then(function (newAddress) {
    // print new address details
    console.dir(newAddress);
  });
WALLET=585c51a5df8380e0e3082e46

curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/teos/wallet/$WALLET/address

EOS transactions only support one input and one output. That means that the sendMany call is not supported.

Like XLM, EOS addresses differ only by sequential and incrementing memo components (and do not use the BIP-32 standard).

Balances

EOS (EOS) is the native asset of the EOS blockchain. The base unit does not have a name and is simply referred to as the base unit of EOS.

  • 1 base unit of EOS is (10-4) or 0.0001 EOS.
  • 1 EOS is (104) or 10000 base units of EOS (10 thousand).

Balances are supported in string format: balanceString, confirmedBalanceString, and spendableBalanceString.

Ethereum

Ethereum can be accessed with the following coin types:

Environment Coin Type Faucet Instructions
Ethereum Production eth
Ethereum Testnet gteth https://goerlifaucet.com

Note: teth (aka Kovan testnet) has been deprecated. Please use gteth (aka Goerli testnet) instead.

Enterprise fee address

ENTERPRISEID=585c51a5df8380e0e3082e46

curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/gteth/enterprise/$ENTERPRISEID/feeAddressBalance

BitGo's Ethereum wallet contract requires separate accounts to send transactions and pay fees (unlike Bitcoin).

Each enterprise has one or more dedicated fee addresses (or "gas tanks") for paying Ethereum transaction fees. There is one fee address per network, for example, Ethereum mainnet, and each testnet.

On the dashboard of the BitGo UI, your "Network Gas Tanks," and their associated fee addresses, are displayed. In an Ethereum wallet response, there is a 'feeAddress' field under the 'CoinSpecific' key. Use this address to pay the fees for creating transactions and addresses.

Your enterprise must keep the relevant fee addresses funded in order to create wallets, create addresses, or send transaction. If you don't, you cannot do those operations, nor can you fund the tank.

Note: BitGo recommends that you create and fund a non-BitGo Ethereum account so you can use it to fund your BitGo enterprise fee addresses. Any open source Ethereum wallet or Ethereum exchange can be used to create an account.

A BitGo fee address is a single-signature account and the private key is created and owned by BitGo, so you cannot send funds from this address once you have sent them in.

Generating wallets

bitgo
  .coin('gteth')
  .wallets()
  .generateWallet({
    label: 'My Test Wallet',
    passphrase: 'secretpassphrase1a5df8380e0e30',
    enterprise: '5612c2beeecf83610b621b90964448cd',
  })
  .then(function (wallet) {
    // print the new wallet
    console.dir(wallet);
  });
LABEL="My Test Wallet"
PASSPHRASE="secretpassphrase1a5df8380e0e30"

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d "{ \"label\": \"$LABEL\", \"passphrase\": \"$PASSPHRASE\" }" \
http://$BITGO_EXPRESS_HOST:3080/api/v2/gteth/wallet/generate

Before you can use an Ethereum wallet, it must be initialized on the Ethereum blockchain. When you create an Ethereum wallet, BitGo sends a transaction on the Ethereum network in order to deploy its multi-signature wallet contract.

Note: Ethereum wallets can only be created under an enterprise. When you create an Ethereum wallet, remember to pass the enterprise Id.

Until the initialization transaction is confirmed, the wallet is not ready for use, and the receive address is not exposed in the API. This is to protect users from losing funds by sending to a wallet that does not exist on the network.

Warning: Do not use an Ethereum wallet while it is being initialized or you may lose funds.

Creating addresses

bitgo
  .coin('gteth')
  .wallets()
  .getWallet({ id: '585c51a5df8380e0e3082e46' })
  .then(function (wallet) {
    return wallet.createAddress();
  })
  .then(function (newAddress) {
    // print new address details
    console.dir(newAddress);
  });
WALLET=585c51a5df8380e0e3082e46

curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/gteth/wallet/$WALLET/address

Unlike Bitcoin, Ethereum address creation requires interactions with the Ethereum blockchain. In order to deploy a receive address contract, BitGo sends a transaction on the Ethereum network. Make sure to fund the fee address mentioned above. Like the wallet creation process, an Ethereum address will not be immediately usable upon creation and so the caller of this function will have to wait for the initialization transaction to be confirmed before attempting to fetch, or send to, the address

Balances

Ether (ETH) is the native asset of the Ethereum blockchain. The base unit is wei (and gas fees are denoted in gwei):

  • 1 wei is (10-18) or 0.000000000000000001 Ether.
  • 1 gwei is (10-9) or 0.000000001 Ether (or 1000000000 wei).
  • 1 Ether is (1018) or 1000000000000000000 wei (1 quintillion).

Balances are supported in string format: balanceString, confirmedBalanceString, and spendableBalanceString.

Transactions

BitGo's Ethereum multisig contract currently only supports one sender and one recipient. That means that the sendMany call only accepts one recipient.

Ethereum - ERC20 Tokens

Coins are native to a blockchain, such as Bitcoin or Ether. Tokens represent as asset on someone else's blockchain. ERC20 tokens are assets on the Ethereum blcokchain that adhere to EIP-20 Token Standard.

BitGo supported ERC20 tokens can be accessed on the Ethereum Mainnet:

Coin Type Token Name Precicison Contract Details
1inch 1inch Token 18 https://etherscan.io/token/0x111111111117dc0aa78b770fa6a738034120c302
1up Uptrennd Token 18 https://etherscan.io/token/0x07597255910a51509ca469568b048f2597e72504
aave Aave 18 https://etherscan.io/token/0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9
abt ArcBlock 18 https://etherscan.io/token/0xb98d4c97425d9908e66e53a6fdf673acca0be986
ace Ace Token 6 https://etherscan.io/token/0xe17e41acd4caa3cec048837bfd1918b3c4141767
acxt Ac Exchange Token 18 https://etherscan.io/token/0x7be00ed6796b21656732e8f739fc1b8f1c53da0d
ach Alchemy Pay 8 https://etherscan.io/token/0xed04915c23f00a313a544955524eb7dbd823143d
ae Aeternity 18 https://etherscan.io/token/0x5ca9a71b1d01849c0a95490cc00559717fcf0d1d
aergo Aergo 18 https://etherscan.io/token/0xae31b85bfe62747d0836b82608b4830361a3d37a
aergo1 Aergo1 18 https://etherscan.io/token/0x91af0fbb28aba7e31403cb457106ce79397fd4e6
agwd AGARWOOD 18 https://etherscan.io/token/0xc3e419177044c9172823f06335d5d82aaf38a5c6
aion AION 8 https://etherscan.io/token/0x4ceda7906a5ed2179785cd3a40a69ee8bc99c466
ali Artificial Liquid Intelligence Token 18 https://etherscan.io/token/0x6b0b3a982b4634ac68dd83a4dbf02311ce324181
alpha Alpha Finance 18 https://etherscan.io/token/0xa1faa113cbe53436df28ff0aee54275c13b40975
amn Amon 18 https://etherscan.io/token/0x737f98ac8ca59f2c68ad658e3c3d8c8963e40a4c
amo AMO Token 18 https://etherscan.io/token/0x38c87aa89b2b8cd9b95b736e1fa7b612ea972169
amon AmonD 18 https://etherscan.io/token/0x00059ae69c1622a7542edc15e8d17b060fe307b6
amp AMP Token 18 https://etherscan.io/token/0xff20817765cb7f73d4bde2e66e067e58d11095c2
ampx Amplify Exchange 18 https://etherscan.io/token/0x735af341f2d9ce3663616cd84ff522dbf62fbc1f
ana ANA 18 https://etherscan.io/token/0xfafd51641ab09dff163cd04d2eb6b7865eb83f53
ape ApeCoin 18 https://etherscan.io/token/0x4d224452801aced8b2f0aebe155379bb5d594381
api3 API3 18 https://etherscan.io/token/0x0b38210ea11411557c13457d4da7dc6ea731b88a
ant Aragon 18 https://etherscan.io/token/0x960b236a07cf122663c4303350609a66a7b288c0
antv2 Antv2 18 https://etherscan.io/token/0xa117000000f279d81a1d3cc75430faa017fa5a2e
aoa Aurora 18 https://etherscan.io/token/0x9ab165d795019b6d8b3e971dda91071421305e5a
appc AppCoins 18 https://etherscan.io/token/0x1a7a8bd9106f2b8d977e08582dc7d24c723ab0db
aqt Alpha Quark Token 18 https://etherscan.io/token/0x2a9bdcff37ab68b95a53435adfd8892e86084f93
arct ArCoin US Treasury 18 https://etherscan.io/token/0xeb0f0df01c400fd21fb8533a68423703d22cfcc5
arcx ARCx Governance Token 18 https://etherscan.io/token/0x1321f1f1aa541a56c31682c57b80ecfccd9bb288
ast AirSwap 4 https://etherscan.io/token/0x27054b13b1b798b345b591a4d22e6562d47ea75a
atri Atari Token 0 https://etherscan.io/token/0xdacd69347de42babfaecd09dc88958378780fb62
audio Audio 18 https://etherscan.io/token/0x18aaa7115705e8be94bffebde57af9bfc265b998
axl Axelar 6 [https://etherscan.io/token/0x3eacbdc6c382ea22b78acc158581a55aaf4ef3cc](ht tps://etherscan.io/token/0x3eacbdc6c382ea22b78acc158581a55aaf4ef3cc)
audx eToro Australian Dollar 18 https://etherscan.io/token/0xdf1e9e1a218cff9888faef311d6fbb472e4175ce
aust Wrapped Anchor UST Token 18 https://etherscan.io/token/0xa8de3e3c934e2a1bb08b010104ccabbd4d6293ab
axpr aXpire 18 https://etherscan.io/token/0xc39e626a04c5971d770e319760d7926502975e47
axs Axie Infinity Shards 18 https://etherscan.io/token/0xf5d669627376ebd411e34b98f19c868c8aba5ada
axsv2 Axie Infinity Shards V2 18 https://etherscan.io/token/0xbb0e17ef65f82ab018d8edd776e8dd940327b28b
badger Badger 18 https://etherscan.io/token/0x3472a5a71965499acd81997a54bba8d852c6e53d
bal Balancer 18 https://etherscan.io/token/0xba100000625a3754423978a60c9317c58a424e3d
band Band Protocol 18 https://etherscan.io/token/0xba11d00c5f74255f56a5e366f4f77f5a186d7f55
basic BASIC Token 18 https://etherscan.io/token/0xf25c91c87e0b1fd9b4064af0f427157aab0193a7
bat Basic Attention Token 18 https://etherscan.io/token/0x0d8775f648430679a709e98d2b0cb6250d2887ef
bax BABB 18 https://etherscan.io/token/0x9a0242b7a33dacbe40edb927834f96eb39f8fbcb
bbx BBX 18 https://etherscan.io/token/0x71529cea068e3785efd4f18aaf59a6cb82b7e5cb
bcap BCAP 0 https://etherscan.io/token/0x1f41e42d0a9e3c0dd3ba15b527342783b43200a9
bcc Basiscoin Cash 18 https://etherscan.io/token/0xae17f4f5ca32f77ea8e3786db7c0b2fe877ac176
bcio Blockchain.io 18 https://etherscan.io/token/0xcdc412f306e0c51e3249b88c65423cd16b322673
bepro BetProtocol 18 https://etherscan.io/token/0x786001c9c5ca6e502deb8a8a72480d2147891f32
bed Bankless BED Index 18 https://etherscan.io/token/0x2af1df3ab0ab157e1e2ad8f88a7d04fbea0c7dc6
bid Blockbid 2 https://etherscan.io/token/0xdd5151da2ab25566e1d2a3c9a3e77396303f8a93
blocks Blocks 18 https://etherscan.io/token/0x8a6d4c8735371ebaf8874fbd518b56edd66024eb
bidl Blockbid Liquidity 2 https://etherscan.io/token/0x5c7ec304a60ed545518085bb4aba156e8a7596f6
bird BirdCoin 18 https://etherscan.io/token/0x026e62dded1a6ad07d93d39f96b9eabd59665e0d
bit BitDAO 18 https://etherscan.io/token/0x1a4b46696b2bb4794eb3d4c26f1c55f9170fa4c5
bnb BNB Token 18 https://etherscan.io/token/0xb8c77482e45f1f44de1745f52c74426c631bdd52
bnk Bankera 8 https://etherscan.io/token/0xc80c5e40220172b36adee2c951f26f2a577810c5
bnl BitNational 18 https://etherscan.io/token/0xa717d0f45652fb430fd84d3d1b6b02e4510102ea
bnt Bancor 18 https://etherscan.io/token/0x1f573d6fb3f13d689ff844b4ce37794d79a7ff1c
bnty Bounty0x 18 https://etherscan.io/token/0xd2d6158683aee4cc838067727209a0aaf4359de3
boba Boba Token 18 https://etherscan.io/token/0x42bbfa2e77757c645eeaad1655e0911a7553efbc
bond BarnBridge 18 https://etherscan.io/token/0x0391d2021f89dc339f60fff84546ea23e337750f
box ContentBox 18 https://etherscan.io/token/0x63f584fa56e60e4d0fe8802b27c7e6e3b33e007f
brd Bread 18 https://etherscan.io/token/0x558ec3152e2eb2174905cd19aea4e34a23de9ad6
brz Brazilian Digital Token 4 https://etherscan.io/token/0x420412e765bfa6d85aaac94b4f7b708c89be2e2b
bsx Bistox Exchange Token 18 https://etherscan.io/token/0x435b67f0dcae34c046720de42fcdc135b8f90e55
btrst Braintrust 18 https://etherscan.io/token/0x799ebfabe77a6e34311eeee9825190b9ece32824
btt Blocktrade 18 https://etherscan.io/token/0xfa456cf55250a839088b27ee32a424d7dacb54ff
btu BTU Protocol 18 https://etherscan.io/token/0xb683d83a532e2cb7dfa5275eed3698436371cc9f
burp Big Town Chef 18 https://etherscan.io/token/0x33f391f4c4fe802b70b77ae37670037a92114a7c
busd Binance USD 18 https://etherscan.io/token/0x4fabb145d64652a948d72533023f6e7a623c7c53
buy buying.com 18 https://etherscan.io/token/0x0d7f0fa3a79bfedbab291da357958596c74e27d7
bxx Baanx 18 https://etherscan.io/token/0x6b1a8f210Ec6b7B6643cea3583Fb0c079f367898
bxxv1 Baanx (deprecated) 18 https://etherscan.io/token/0x54f9b4b4485543a815c51c412a9e20436a06491d
bzz BZZ 16 https://etherscan.io/token/0x19062190b1925b5b6689d7073fdfc8c2976ef8cb
c8p C8 Plus 18 https://etherscan.io/token/0x6930d2299964bcc81b8bcb453a522791e6488be1
cacxt Cacxt 18 https://etherscan.io/token/0xe2b8c4938a3103c1ab5c19a6b93d07ab6f9da2ba
cadx eToro Canadian Dollar 18 https://etherscan.io/token/0x8ed876e408959643479534a21970ec023d0fb51e
cag Change 18 https://etherscan.io/token/0x7d4b8cce0591c9044a22ee543533b72e976e36c3
cbat Compound BAT 8 https://etherscan.io/token/0x6c8c6b02e7b2be14d4fa6022dfd6d75921d90e4e
cbc CashBet Coin 8 https://etherscan.io/token/0x26db5439f651caf491a87d48799da81f191bdb6b
cbrl Crypto BRL 6 https://etherscan.io/token/0xa6fa6531acdf1f9f96eddd66a0f9481e35c2e42a
cct Cyber Credit Token 0 https://etherscan.io/token/0x8469e5158fb3c043cf88ce769c94e4b9fc8d79b5
cdag CannDollar 18 https://etherscan.io/token/0xf43401ea8ac4b86155b929e1a5a5e46626c23842
cdai Compound DAI 8 https://etherscan.io/token/0xf5dce57282a584d2746faf1593d3121fcac444dc
cdt Blox 18 https://etherscan.io/token/0x177d39ac676ed1c67a2b268ad7f1e58826e5b0af
cel Celsius 4 https://etherscan.io/token/0xaaaebe6fe48e54f431b0c390cfaf0b017d09d42d
celr Celer Network 18 https://etherscan.io/token/0x4f9254c83eb525f9fcf346490bbb3ed28a81c667
ceth Compound Ether 8 https://etherscan.io/token/0x4ddc2d193948926d02f9b1fe9e1daa0718270ed5
chfx eToro Swiss Frank 18 https://etherscan.io/token/0xe435502c85a4e7e79cfab4167af566c27a7a0784
chsb SwissBorg 8 https://etherscan.io/token/0xba9d4199fab4f26efe3551d490e3821486f135ba
chz Chiliz 18 https://etherscan.io/token/0x3506424f91fd33084466f402d5d97f05f8e3b4af
cix100 Cryptoindex 100 18 https://etherscan.io/token/0x6393e822874728f8afa7e1c9944e417d37ca5878
cliq DefiCliq 18 https://etherscan.io/token/0x0def8d8adde14c9ef7c2a986df3ea4bd65826767
cln Colu Local Network 18 https://etherscan.io/token/0x4162178b78d6985480a308b2190ee5517460406d
clt CoinLoan Token 8 https://etherscan.io/token/0x2001f2a0cf801ecfda622f6c28fb6e10d803d969
clv Clover Token 18 https://etherscan.io/token/0x80c62fe4487e1351b47ba49809ebd60ed085bf52
cng Changer 18 https://etherscan.io/token/0x5c1d9aa868a30795f92fae903edc9eff269044bf
cnyx eToro Chinese Yuan 18 https://etherscan.io/token/0x319ad3ff82bedddb3bc85fd7943002d25cdb3cb9
comp Compound Token 18 https://etherscan.io/token/0xc00e94cb662c3520282e6f5717214004a7f26888
cover Cover 18 https://etherscan.io/token/0x5d8d9f5b96f4438195be9b99eee6118ed4304286
cpay Cryptopay 0 https://etherscan.io/token/0x0ebb614204e47c09b6c3feb9aaecad8ee060e23e
cplt Coineru Platinum 8 https://etherscan.io/token/0xa3f7871a4b86bcc3b6e97c8fd0745e71c55e1f82
cqt Covalent 18 https://etherscan.io/token/0xd417144312dbf50465b1c641d016962017ef6240
cqx Coinquista Coin 18 https://etherscan.io/token/0x618c29dd2d16475b2ae6244f9e8aaead68f0ca44
cra Crabada 18 https://etherscan.io/token/0xa32608e873f9ddef944b24798db69d80bbb4d1ed
crdt Crypto Daily Token 18 https://etherscan.io/token/0xdaab5e695bb0e8ce8384ee56ba38fa8290618e52
cre CarryToken 18 https://etherscan.io/token/0x115ec79f1de567ec68b7ae7eda501b406626478e
cream Cream 18 https://etherscan.io/token/0x2ba592f78db6436527729929aaf6c908497cb200
crep Compound Augur 8 https://etherscan.io/token/0x158079ee67fce2f58472a96584a73c7ab9ac95c1
cro Crypto.com Chain 8 https://etherscan.io/token/0xa0b73e1ff0b80914ab6fe0444e65848c4c34450b
crpt Crypterium 18 https://etherscan.io/token/0x80a7e048f37a50500351c204cb407766fa3bae7f
crpt1 CRPT Token 18 https://etherscan.io/token/0x08389495d7456e1951ddf7c3a1314a4bfb646d8b
crv Curve DAO Token 18 https://etherscan.io/token/0xd533a949740bb3306d119cc777fa900ba034cd52
cslv Coineru Silver 8 https://etherscan.io/token/0x6dc05497f0b087c7692816e6acaa8bdda73907fc
csp Caspian Token 18 https://etherscan.io/token/0xa6446d655a0c34bc4f05042ee88170d056cbaf45
ctsi Cartesi 18 https://etherscan.io/token/0x491604c0fdf08347dd1fa4ee062a822a5dd06b5d
cusdc Compound USDC 8 https://etherscan.io/token/0x39aa39c021dfbae8fac545936693ac917d5e7563
cvc Civic 8 https://etherscan.io/token/0x41e5560054824ea6b0732e656e3ad64e20e94e45
cvx Convex Finance 18 https://etherscan.io/token/0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b
cwbtc Compound WBTC 8 https://etherscan.io/token/0xc11b1268c1a384e55c48c2391d8d480264a3a7f4
czrx Compound ZRX 8 https://etherscan.io/token/0xb3319f5d18bc0d84dd1b4825dcde5d5f7266d407
coti Coti 18 https://etherscan.io/token/0xddb3422497e61e13543bea06989c0789117555c5
dacxi Dacxi Coin 18 https://etherscan.io/token/0xefab7248d36585e2340e5d25f8a8d243e6e3193f
dai Dai 18 https://etherscan.io/token/0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359
dao DAO Maker 18 https://etherscan.io/token/0x0f51bb10119727a7e5ea3538074fb341f56b09ad
data Streamr DATAcoin 18 https://etherscan.io/token/0x0cf0ee63788a0849fe5297f3407f701e122cc023
datav2 Streamr Data 18 https://etherscan.io/token/0x8f693ca8d21b157107184d29d398a8d082b38b76
dataecon Data Economy Index 18 https://etherscan.io/token/0x33d63ba1e57e54779f7ddaeaa7109349344cf5f1
dec Dark Energy Crystals 3 https://etherscan.io/token/0x9393fdc77090f31c7db989390d43f454b1a6e7f3
dent Dent 8 https://etherscan.io/token/0x3597bfd533a99c9aa083587b074434e61eb0a258
dep Deap Coin 18 https://etherscan.io/token/0x1a3496c18d558bd9c6c8f609e1b129f67ab08163
dexa Dexa Coin 18 https://etherscan.io/token/0x725440512cb7b78bf56b334e50e31707418231cb
dfd DeFiDollar DAO 18 https://etherscan.io/token/0x20c36f062a31865bed8a5b1e512d9a1a20aa333a
dfi DeFiChain 8 https://etherscan.io/token/0x8fc8f8269ebca376d046ce292dc7eac40c8d358a
dgcl Dgcl 18 https://etherscan.io/token/0x63b8b7d4a3efd0735c4bffbd95b332a55e4eb851
dgd Digix DAO 9 https://etherscan.io/token/0xe0b7927c4af23765cb51314a0e0521a9645f0e2a
dgx Digix 9 https://etherscan.io/token/0x4f3afec4e5a3f2a6a1a411def7d7dfe50ee057bf
digg Digg 9 https://etherscan.io/token/0x798d1be841a82a273720ce31c822c61a67a601c3
dmt DMarket 8 https://etherscan.io/token/0x2ccbff3a042c68716ed2a2cb0c544a9f1d1935e1
dodo DODO 18 https://etherscan.io/token/0x43dfc4159d86f3a37a5a4b3d4580b888ad7d4ddd
dpi DeFi Pulse Index 18 https://etherscan.io/token/0x1494ca1f11d487c2bbe4543e90080aeba4ba3c2b
drpu DRP Utility 8 https://etherscan.io/token/0xe30e02f049957e2a5907589e06ba646fb2c321ba
drv Drive 18 https://etherscan.io/token/0x0b9d89a71bdabd231d4d497b7b7b879740d739c4
duc DUING COIN 18 https://etherscan.io/token/0xd3d84d494b24661bb4a477169bb24bc905fb55dd
dx1u Dx1u 8 https://etherscan.io/token/0x2d8b3bb04864754b1540e3c4758ab00764d00751
dxgt Dacxi Gold Token 18 https://etherscan.io/token/0x51be9f12dd5095c5b1acf90e7e0aa4aa8023218b
dxpt Dacxi Platinum Token 18 https://etherscan.io/token/0x155ab266b9226525cfd5b1e7d8a80bab65b6b609
dxst Dacxi Silver Token 18 https://etherscan.io/token/0xd71bbf61079d3ea7ea7890356850d4579be304af
dydx dYdX 18 https://etherscan.io/token/0x92d6c1e31e14520e676a687f0a93788b716beff5
dyn DYN 18 https://etherscan.io/token/0x65167e381388bc803aa2f22cd99d093068e98007
easy Easy 18 https://etherscan.io/token/0x913d8adf7ce6986a8cbfee5a54725d9eea4f0729
ebtcq EmberBTCQuant 18 https://etherscan.io/token/0x430a35baa51ddeaccf89092a5edbda47aaae78e4
echt eChat 0 https://etherscan.io/token/0x1aadead0d2e0b6d888ae1d73b11db65a8447634a
edison Edison 8 https://etherscan.io/token/0xed58569d516a5bd37427ebd592a6619c0c581953
edn Eden 18 https://etherscan.io/token/0x05860d453c7974cbf46508c06cba14e211c629ce
edr Endor Protocol 18 https://etherscan.io/token/0xc528c28fec0a90c083328bc45f587ee215760a0f
efi Efinity 18 https://etherscan.io/token/0x656c00e1bcd96f256f224ad9112ff426ef053733
egl Ethereum Eagle 18 https://etherscan.io/token/0x1e83916ea2ef2d7a6064775662e163b2d4c330a7
egld Elrond Gold 18 https://etherscan.io/token/0xe3fb646fc31ca12657b17070bc31a52e323b8543
egold eGold 4 https://etherscan.io/token/0x8f00458479ea850f584ed82881421f9d9eac6cb1
elf Aelf 18 https://etherscan.io/token/0xbf2179859fc6d5bee9bf9158632dc51678a4100e
erd Elrond 18 https://etherscan.io/token/0xf9986d445ced31882377b5d6a5f58eaea72288c3
emx EMX 18 https://etherscan.io/token/0x75a29c405bd5ab2f3b35144af937ee98d390b5ee
eng Enigma 8 https://etherscan.io/token/0xf0ee6b27b759c9893ce4f094b49ad28fd15a23e4
enj Enjin Coin 18 https://etherscan.io/token/0xf629cbd94d3791c9250152bd8dfbdf380e2a3b9c
ens Ethereum Name Service 18 https://etherscan.io/token/0xc18360217d8f7ab5e7c516566761ea12ce7f9d72
eqo EQUOS Origin 18 https://etherscan.io/token/0x46e9fe43470fafd690100c86037f9e566e24d480
eta ETA Token 18 https://etherscan.io/token/0x1065bd32fc7a6683c97c2c6638ad4022d9c61c05
ethos Ethos 8 https://etherscan.io/token/0x5af2be193a6abca9c8817001f45744777db30756
etv Ecotech Visions 18 https://etherscan.io/token/0x695f5d0692655ebf710c0003ca499323488334c6
eurs Stasis EURS 2 https://etherscan.io/token/0xdb25f211ab05b1c97d595516f45794528a807ad8
eurst Euro Stable Token 18 https://etherscan.io/token/0xb1abd7aba7d99bbefb33d1dfc66b0dd522335350
euroc Euro Coin 6 https://etherscan.io/token/0x1abaea1f7c830bd89acc67ec4af516284b1bc33c
eurt Tether EUR 6 https://etherscan.io/token/0xc581b735a1688071a1746c968e0798d642ede491
eurx eToro Euro 18 https://etherscan.io/token/0x05ac103f68e05da35e78f6165b9082432fe64b58
eux EUR Stable Token 18 https://etherscan.io/token/0x1b9064207e8046ec1d8e83de79380ed31283914f
evx Everex 4 https://etherscan.io/token/0xf3db5fa2c66b7af3eb0c0b782510816cbe4813b8
exe EXE Token 8 https://etherscan.io/token/0x0d9a653f681168f410d14d19b7743c041eafc58a
fdt Fiat DAO 18 https://etherscan.io/token/0xed1480d12be41d92f36f5f7bdd88212e381a3677
fei Fei Protocol 18 https://etherscan.io/token/0x956f47f50a910163d8bf957cf5846d573e7f87ca
fet Fetch 18 https://etherscan.io/token/0x1d287cc25dad7ccaf76a26bc660c5f7c8e2a05bd
fet1 Fet1 18 https://etherscan.io/token/0xaea46a60368a7bd060eec7df8cba43b7ef41ad85
ff1 Two Prime FF1 18 https://etherscan.io/token/0x59af0356cdebd1fa23ae5dadff9170bbfc31278c
fft Fight to Fame Token 18 https://etherscan.io/token/0xdea05e09f5b0e102616bb145a0e4772a9b5ab193
fire Ceramic Token 18 https://etherscan.io/token/0x2033e559cddff6dd36ec204e3014faa75a01052e
front Frontier 18 https://etherscan.io/token/0xf8c3527cc04340b208c854e985240c02f7b7793f
fmf Formosa Financial 18 https://etherscan.io/token/0xb4d0fdfc8497aef97d3c2892ae682ee06064a2bc
ftm Fantom Token 18 https://etherscan.io/token/0x4e15361fd6b4bb609fa63c81a2be19d873717870
ftt FTX Token 18 https://etherscan.io/token/0x50d1c9771902476076ecfc8b2a83ad6b9355a4c9
fun FunFair 8 https://etherscan.io/token/0x419d0d8bdd9af5e606ae2232ed285aff190e711b
fwb Friends With Benefits Pro 18 https://etherscan.io/token/0x35bd01fc9d6d5d81ca9e055db88dc49aa2c699a8
fxrt FXRT 3 https://etherscan.io/token/0x506742a24c54b77c5af4065b2626ab96c641f90e
fxs Frax Share 18 https://etherscan.io/token/0x3432b6a60d23ca0dfca7761b7ab56459d9c964d0
gal Project Galaxy 18 https://etherscan.io/token/0x5faa989af96af85384b8a938c2ede4a7378d9875
gala gala 8 https://etherscan.io/token/0x15d4c048f83bd7e37d49ea4c83a07267ec4203da
gamma Gamma 18 https://etherscan.io/token/0x6bea7cfef803d1e3d5f7c0103f7ded065644e197
gbpx eToro Pound Sterling 18 https://etherscan.io/token/0xf85ef57fcdb36d628d063fa663e61e44d35ae661
gdt GDT 8 https://etherscan.io/token/0xc67b12049c2d0cf6e476bc64c7f82fc6c63cffc5
gec GECoin 18 https://etherscan.io/token/0xe304283c3e60cefaf7ea514007cf4e8fdc3d869d
gen DAOstack 18 https://etherscan.io/token/0x543ff227f64aa17ea132bf9886cab5db55dcaddf
gohm Governance OHM 9 https://etherscan.io/token/0x0ab87046fbb341d058f17cbc4c1133f25a20a52f
ghub Genohub 8 https://etherscan.io/token/0xeb40045347531f06179ffb3c6be33d5b35a52ebd
gigdrop GIG-POOL-DROP 18 https://etherscan.io/token/0xa08399989e77b8ce8dd68374cc7b4345304b3161
gldx eToro Gold 18 https://etherscan.io/token/0x7d2bebd6e41b05384f0a8eb8ff228daac6f39c96
glm Golem 18 https://etherscan.io/token/0x7dd9c5cba05e151c895fde1cf355c9a1d5da6429
gno Gnosis 18 https://etherscan.io/token/0x6810e776880c02933d47db1b9fc05908e5386b96
gnt Golem 18 https://etherscan.io/token/0xa74476443119a942de498590fe1f2454d7d4ac0d
gods Gods Unchained 18 https://etherscan.io/token/0xccc8cb5229b0ac8069c51fd58367fd1e622afd97
gog Guild of Guardians 18 https://etherscan.io/token/0x9AB7bb7FdC60f4357ECFef43986818A2A3569c62
gold XBullion Token 8 https://etherscan.io/token/0x0e573fdd3c5acf3a74f1775b0f9823a1a0e2b86b
got GOExchange 18 https://etherscan.io/token/0xf11f2550769dac4226731b7732dd4e17e72b1b01
grt The Graph 18 https://etherscan.io/token/0xc944e90c64b2c07662a292be6244bdf05cda44a7
gtc Gitcoin 18 https://etherscan.io/token/0xde30da39c46104798bb5aa3fe8b9e0e1f348163f
gto Gifto 5 https://etherscan.io/token/0xc5bbae50781be1669306b9e001eff57a2957b09d
gusd Gemini Dollar 2 https://etherscan.io/token/0x056fd409e1d7a124bd7017459dfea2f387b6d5cd
gxc Game X Coin 18 https://etherscan.io/token/0x953e22945b416730bad05009af05b420e598e412
gyen Gmo JPY 6 https://etherscan.io/token/0xc08512927d12348f6620a698105e1baac6ecd911
hcn Himalaya Coin 18 https://etherscan.io/token/0xb01b22dcd2f4b199a27ec28d8a688dd26f162067
hdo Himalaya Dollar 18 https://etherscan.io/token/0x7c197afcd8d36884309ed731424985e3ed17f018
hedg HedgeTrade 18 https://etherscan.io/token/0xf1290473e210b2108a85237fbcd7b6eb42cc654f
hkdx eToro Hong Kong Dollar 18 https://etherscan.io/token/0x1af20b8d1ede928f437b3a86801796b167840d2b
hlc HalalChain 9 https://etherscan.io/token/0x58c69ed6cd6887c0225d1fccecc055127843c69b
hmt HUMAN Token 18 https://etherscan.io/token/0xd1ba9bac957322d6e8c07a160a3a8da11a0d2867
hold Hold 18 https://etherscan.io/token/0xd6e1401a079922469e9b965cb090ea6ff64c6839
hot Holo 18 https://etherscan.io/token/0x6c6ee5e31d828de241282b9606c8e98ea48526e2
hqt HyperQuant 18 https://etherscan.io/token/0x3e1d5a855ad9d948373ae68e4fe1f094612b1322
hst Decision Token 18 https://etherscan.io/token/0x554c20b7c486beee439277b4540a434566dc4c02
ht Huobi Token 18 https://etherscan.io/token/0x6f259637dcd74c767781e37bc6133cd6a68aa161
hum HumanScape 18 https://etherscan.io/token/0x174afe7a032b5a33a3270a9f6c30746e25708532
husd HUSD 18 https://etherscan.io/token/0xdf574c24545e5ffecb9a659c229253d4111d87e1
hxro Hxro 18 https://etherscan.io/token/0x4bd70556ae3f8a6ec6c4080a0c327b24325438f3
hyb Hybrid Block 18 https://etherscan.io/token/0x6059f55751603ead7dc6d280ad83a7b33d837c90
hydro Hydro 18 https://etherscan.io/token/0xebbdf302c940c6bfd49c6b165f457fdb324649bc
i8 i8 Exchange Token 18 https://etherscan.io/token/0xb61bb66bf9caba531e6bb2fb75dec389a1664dfd
iceth Interest Compounding ETH Index 18 https://etherscan.io/token/0x7c07f7abe10ce8e33dc6c5ad68fe033085256a84
idex IDEX 18 https://etherscan.io/token/0xb705268213d593b8fd88d3fdeff93aff5cbdcfae
idrc Rupiah Coin 18 https://etherscan.io/token/0x569f2241551011d5710c40fc61e0b3906c780b2f
idrt Rupiah Token 2 https://etherscan.io/token/0x998ffe1e43facffb941dc337dd0468d52ba5b48a
imxv2 Immutable X 18 https://etherscan.io/token/0xf57e7e7c23978c3caec3c3548e3d615c346e79ff
incx InternationalCryptoX 18 https://etherscan.io/token/0xa984a92731c088f1ea4d53b71a2565a399f7d8d5
ind Indorse 18 https://etherscan.io/token/0xf8e386eda857484f5a12e4b5daa9984e06e73705
index Index Coop 18 https://etherscan.io/token/0x0954906da0bf32d5479e25f46056d22f08464cab
inf Infinitus Token 18 https://etherscan.io/token/0x00e150d741eda1d49d341189cae4c08a73a49c95
inj Inj 18 https://etherscan.io/token/0x84bffffd702d924c6d9b25f87151bf0fb1a8913e
injv2 Injv2 18 https://etherscan.io/token/0xe28b3b32b6c345a34ff64674606124dd5aceca30
inst Instadapp 18 https://etherscan.io/token/0x6f40d4a6237c257fff2db00fa0510deeecd303eb
inx INX Token 18 https://etherscan.io/token/0xbbc7f7a6aadac103769c66cbc69ab720f7f9eae3
isf Susnova 18 https://etherscan.io/token/0x3f9c0211e9ddfccabd614162ffb768f5a7a8ab38
isr Insureum 18 https://etherscan.io/token/0xd4a293ae8bb9e0be12e99eb19d48239e8c83a136
ivo INVAO Token 18 https://etherscan.io/token/0xe03df9fda489a405f5db8a919adbc9a1b931a19f
ivy Ivy Koin 18 https://etherscan.io/token/0xa4ea687a2a7f29cf2dc66b39c68e4411c0d00c49
jbc Japan Brand Coin 18 https://etherscan.io/token/0x3635e381c67252405c1c0e550973155832d5e490
jfin JFIN Coin 18 https://etherscan.io/token/0x940bdcb99a0ee5fb008a606778ae87ed9789f257
jpyx eToro Japanese Yen 18 https://etherscan.io/token/0x743c79f88dcadc6e7cfd7fa2bd8e2bfc68dae053
keep Keep 18 https://etherscan.io/token/0x85eee30c52b0b379b046fb0f85f4f3dc3009afec
key SelfKey 18 https://etherscan.io/token/0x4cc19356f2d37338b9802aa8e8fc58b0373296e7
kin Kin 18 https://etherscan.io/token/0x818fc6c2ec5986bc6e2cbf00939d90556ab12ce5
kiro Kirobo 18 https://etherscan.io/token/0xb1191f691a355b43542bea9b8847bc73e7abb137
knc Kyber Network 18 https://etherscan.io/token/0xdd974d5c2e2928dea5f71b9825b8b646686bd200
knc2 Kyber Network 18 https://etherscan.io/token/0xdefa4e8a7bcba345f687a2f1456f5edd9ce97202
koin Koin 18 https://etherscan.io/token/0x1fb62df2b6ef8966161e422dbb40860b70941e50
koz KOZJIN Token 18 https://etherscan.io/token/0xd95e7d16000cbeb66acbf70b4a843d4346ff4555
kp3r Kp3r 18 https://etherscan.io/token/0x1ceb5cb57c4d4e2b2433641b95dd330a33185a44
kze Almeela 18 https://etherscan.io/token/0x8de67d55c58540807601dbf1259537bc2dffc84d
layer Unilayer 18 https://etherscan.io/token/0x0ff6ffcfda92c53f615a4a75d982f399c989366b
lba Cred 18 https://etherscan.io/token/0xfe5f141bf94fe84bc28ded0ab966c16b17490657
lend EthLend 18 https://etherscan.io/token/0x80fb784b7ed66730e8b1dbd9820afd29931aab03
leo Bitfinex LEO 18 https://etherscan.io/token/0x2af5d2ad76741191d15dfe7bf6ac92d4bd912ca3
lgo LGO Exchange 8 https://etherscan.io/token/0x0a50c93c762fdd6e56d86215c24aaad43ab629aa
link ChainLink 18 https://etherscan.io/token/0x514910771af9ca656af840dff83e8264ecf986ca
lion CoinLion 18 https://etherscan.io/token/0x2167fb82309cf76513e83b25123f8b0559d6b48f
lnc Linker Coin 18 https://etherscan.io/token/0x6beb418fc6e1958204ac8baddcf109b8e9694966
loom Loom Network 18 https://etherscan.io/token/0xa4e8c3ec456107ea67d3075bf9e3df3a75823db0
loom1 Loom Token 18 https://etherscan.io/token/0x42476f744292107e34519f9c357927074ea3f75d
looks LooksRare 18 https://etherscan.io/token/0xf4d2888d29d722226fafa5d9b24f9164c092421e
lrc loopring 18 https://etherscan.io/token/0xef68e7c694f40c8202821edf525de3782458639f
lrcv2 loopring V2 18 https://etherscan.io/token/0xbbbbca6a901c926f240b89eacb641d8aec7aeafd
lyn Lynchpin 18 https://etherscan.io/token/0xb0b1685f55843d03739c7d9b0a230f1b7dcf03d5
mana Decentraland 18 https://etherscan.io/token/0x0f5d2fb29fb7d3cfee444a200298f468908cc942
maps Maps 6 https://etherscan.io/token/0x2b915b505c017abb1547aa5ab355fbe69865cc6d
matic Matic Token 18 https://etherscan.io/token/0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0
mcdai Dai 18 https://etherscan.io/token/0x6b175474e89094c44da98b954eedeac495271d0f
mco Crypto.com 8 https://etherscan.io/token/0xb63b606ac810a52cca15e44bb630fd42d8d1d83d
mco2 Moss Carbon Credit 18 https://etherscan.io/token/0xfc98e825a2264d890f9a1e68ed50e1526abccacd
mcs MCS Token 18 https://etherscan.io/token/0x2fdf40c484b1bd6f1c214acac737fedc8b03e5a8
mcx MachiX Token 18 https://etherscan.io/token/0xd15ecdcf5ea68e3995b2d0527a0ae0a3258302f8
mdfc MDFC 18 https://etherscan.io/token/0x2810ff4092864f4b9259d05dd6da829d61bdcdab
mdx Mandala 18 https://etherscan.io/token/0x9d03393d297e42c135625d450c814892505f1a84
medx Medibloc 8 https://etherscan.io/token/0xfd1e80508f243e64ce234ea88a5fd2827c71d4b7
meme Meme 8 https://etherscan.io/token/0xd5525d397898e5502075ea5e830d8914f6f0affe
met Metronome 18 https://etherscan.io/token/0xa3d58c4e56fedcae3a7c43a725aee9a71f0ece4e
meta Metadium 18 https://etherscan.io/token/0xde2f7766c8bf14ca67193128535e5c7454f8387c
mfg SyncFab 18 https://etherscan.io/token/0x6710c63432a2de02954fc0f851db07146a6c0312
mfph MFPH Token 18 https://etherscan.io/token/0xbc7e1056ecc72d14228a14a53815c5d3ad86c84e
mft Mainframe 18 https://etherscan.io/token/0xdf2c7238198ad8b389666574f2d8bc411a4b7428
milkv2 Milkv2 18 https://etherscan.io/token/0x80c8c3dcfb854f9542567c8dac3f44d709ebc1de
mir Mirror Protocol 18 https://etherscan.io/token/0x09a3ecafa817268f77be1283176b946c4ff2e608
mith Mithril 18 https://etherscan.io/token/0x3893b9422cd5d70a81edeffe3d5a1c6a978310bb
mix MixMarvel Token 18 https://etherscan.io/token/0x5d285f735998f36631f678ff41fb56a10a4d0429
mizn Miznettk 18 https://etherscan.io/token/0x57fe785236542cb21747ed011be2699f43c372dc
mkr Maker 18 https://etherscan.io/token/0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2
mns Monnos Token 18 https://etherscan.io/token/0x53884b61963351c283118a8e1fc05ba464a11959
moc Moss Coin 18 https://etherscan.io/token/0x865ec58b06bf6305b886793aa20a2da31d034e68
mof Molecular Future 16 https://etherscan.io/token/0x653430560be843c4a3d143d0110e896c2ab8ac0d
mpay MenaPay 18 https://etherscan.io/token/0x3810a4ddf41e586fa0dba1463a7951b748cecfca
mpl Maple Token 18 https://etherscan.io/token/0x33349b282065b0284d756f0577fb39c158f935e6
mtcn Multiven 18 https://etherscan.io/token/0xf6117cc92d7247f605f11d4c942f0feda3399cb5
mtl Metal 8 https://etherscan.io/token/0xf433089366899d83a9f26a773d59ec7ecf30355e
musd mStable USD 18 https://etherscan.io/token/0xe2f2a5c287993345a840db3b0845fbc70f5935a5
mvl Mass Vehicle Ledger 18 https://etherscan.io/token/0xa849eaae994fb86afa73382e9bd88c2b6b18dc71
mvi Metaverse Index 18 https://etherscan.io/token/0x72e364f2abdc788b7e918bc238b21f109cd634d7
mwt Mountain Wolf Token 18 https://etherscan.io/token/0x1bd936a1d180b5afc640ea9b2274156af0b7533b
nas Nebulas 18 https://etherscan.io/token/0x5d65d971895edc438f465c17db6992698a52318d
nct Polyswarm 18 https://etherscan.io/token/0x9e46a38f5daabe8683e10793b06749eef7d733d1
ndx Indexed Finance 18 https://etherscan.io/token/0x86772b1409b61c639eaac9ba0acfbb6e238e5f83
neu Neumark 18 https://etherscan.io/token/0xa823e6722006afe99e91c30ff5295052fe6b8e32
nexo Nexo 18 https://etherscan.io/token/0xb62132e35a6c13ee1ee0f84dc5d40bad8d815206
nftx NFTX 18 https://etherscan.io/token/0x87d73e916d7057945c9bcd8cdd94e42a6f47f776
ngnt Naira Token 2 https://etherscan.io/token/0x05bbed16620b352a7f889e23e3cf427d1d379ffe
niax IONIAX Token 18 https://etherscan.io/token/0x8cd18aface2bddd788b4e130ae374f54e43f2960
nmr Numeraire 18 https://etherscan.io/token/0x1776e1f26f98b1a5df9cd347953a26dd3cb46671
npxs Pundi X 18 https://etherscan.io/token/0xa15c7ebe1f07caf6bff097d8a589fb8ac49ae5b3
ns2drp New Silver Series 2 DROP 18 https://etherscan.io/token/0xe4c72b4de5b0f9accea880ad0b1f944f85a9daa0
nu NuCypher 18 https://etherscan.io/token/0x4fe83213d56308330ec302a8bd641f1d0113a4cc
nym NYM 6 https://etherscan.io/token/0x525a8f6f3ba4752868cde25164382bfbae3990e1
nzdx eToro New Zealand Dollar 18 https://etherscan.io/token/0x6871799a4866bb9068b36b7a9bb93475ac77ac5d
ocean Ocean Token 18 https://etherscan.io/token/0x7afebbb46fdb47ed17b22ed075cde2447694fb9e
oceanv2 Ocean Token V2 18 https://etherscan.io/token/0x967da4048cd07ab37855c090aaf366e4ce1b9f48
ogn Origin Token 18 https://etherscan.io/token/0x8207c1ffc5b6804f6024322ccf34f29c3541ae26
okb OKB Token 18 https://etherscan.io/token/0x75231f58b43240c9718dd58b4967c5114342a86c
om Om Token 18 https://etherscan.io/token/0x2baecdf43734f22fd5c152db08e3c27233f0c7d2
omg OmiseGO Token 18 https://etherscan.io/token/0xd26114cd6ee289accf82350c8d8487fedb8a0c07
onl On.Live 18 https://etherscan.io/token/0x6863be0e7cf7ce860a574760e9020d519a8bdc47
op Optimism 18 https://optimistic.etherscan.io/token/0x4200000000000000000000000000000000000042
opt OPTin Token 18 https://etherscan.io/token/0xde8893346ce8052a02606b62d13b142648e062dd
orai Orai Token 18 https://etherscan.io/token/0x4c11249814f11b9346808179cf06e71ac328c1b5
orbs Orbs Token 18 https://etherscan.io/token/0xff56cc6b1e6ded347aa0b7676c85ab0b3d08b0fa
oxt Orchid 18 https://etherscan.io/token/0x4575f41308ec1483f3d399aa9a2826d74da13deb
oxy Oxygen Prime Brokerage 6 https://etherscan.io/token/0x965697b4ef02f0de01384d0d4f9f782b1670c163
ohm Olympus 9 https://etherscan.io/token/0x64aa3364f17a4d01c6f1751fd97c2bd3d7e7f1d5
par PAR Stable Coin 18 https://etherscan.io/token/0x68037790a0229e9ce6eaa8a99ea92964106c4703
pass Blockpass 6 https://etherscan.io/token/0xee4458e052b533b1aabd493b5f8c4d85d7b263dc
pau PegGold Token 8 https://etherscan.io/token/0x57accaad359ed96a0b4d027079b6f5351b043912
pax Paxos 18 https://etherscan.io/token/0x8e870d67f660d95d5be530380d0ec0bd388289e1
paxg Paxos Gold 18 https://etherscan.io/token/0x45804880de22913dafe09f4980848ece6ecbaf78
pay TenX 18 https://etherscan.io/token/0xb97048628db6b661d4c2aa833e95dbe1a905b280
pbch PegBitcoin Cash Token 8 https://etherscan.io/token/0xb38bb9f5b9a73a3097d3a7cadd330aa6e6da8586
pbtc PegBitcoin Token 8 https://etherscan.io/token/0x6a7041ff8cb4da0253a00bb1e548caf77c238bda
pdata Opiria Token 18 https://etherscan.io/token/0x0db03b6cde0b2d427c64a04feafd825938368f1f
peg PegNet 8 https://etherscan.io/token/0x996b396b88cc4a1d8df3dbd1c088cdfaee17e6d4
perp Perpetual Protocol 18 https://etherscan.io/token/0xbc396689893d065f41bc2c6ecbee5e0085233447
peth PegEthereum Token 8 https://etherscan.io/token/0x6065616a4bad5ce723a5608dcb85d3dbd20b55dd
pfct PegFactom Token 8 https://etherscan.io/token/0x069480de51cfc3a8fdc7d2338925089a3f842740
phnx Pheonix Dao 18 https://etherscan.io/token/0x38a2fdc11f526ddd5a607c1f251c065f40fbf2f7
pie DeFiPie 18 https://etherscan.io/token/0x607c794cda77efb21f8848b7910ecf27451ae842
planet Planet 18 https://etherscan.io/token/0x307d45afbb7e84f82ef3d251a6bb0f00edf632e4
plc PlusCoin 18 https://etherscan.io/token/0xdf99c7f9e0eadd71057a801055da810985df38bd
plnx eToro Polish Zloty 18 https://etherscan.io/token/0xaace6480798b4a7b596ec4ce3a26b8de9b9ae2e2
plx PLN Stable Token 18 https://etherscan.io/token/0x8d682bc7ad206e54055c609ea1d4717caab665d0
pma PumaPay 18 https://etherscan.io/token/0x846c66cf71c43f80403b51fe3906b3599d63336f
poly Polymath 18 https://etherscan.io/token/0x9992ec3cf6a55b00978cddf2b27bc6882d88d1ec
powr Power Ledger 6 https://etherscan.io/token/0x595832f8fc6bf59c85c527fec3740a1b7a361269
ppt Populous Platform 8 https://etherscan.io/token/0xd4fa1460f537bb9085d22c7bccb5dd450ef28e3a
prdx PRDX Token 9 https://etherscan.io/token/0xe17900f23b7ebb2791f25f1eaa63d8f5e603e9a5
prints FingerprintsDAO 18 https://etherscan.io/token/0x4dd28568d05f09b02220b09c2cb307bfd837cb95
pro Propy 18 https://etherscan.io/token/0x9041fe5b3fdea0f5e4afdc17e75180738d877a01
prts Protos 0 https://etherscan.io/token/0x835a44027ee4e92bbd8874e5ede9e5148b069e96
pstake PSTAKE Finance 18 https://etherscan.io/token/0xfB5c6815cA3AC72Ce9F5006869AE67f18bF77006
pundix Pundi X2 18 https://etherscan.io/token/0x0fd10b9899882a6f2fcb5c371e17e70fdee00c38
pusd PegUSD Token 8 https://etherscan.io/token/0x93d3296cac208422bf587c3597d116e809870f2b
pxp PointPay Crypto Banking Token V2 18 https://etherscan.io/token/0x95aa5d2dbd3c16ee3fdea82d5c6ec3e38ce3314f
pyr Pyr Token 18 https://etherscan.io/token/0x9534ad65fb398e27ac8f4251dae1780b989d136e
qash QASH 6 https://etherscan.io/token/0x618e75ac90b12c6049ba3b27f5d5f8651b0037f6
qcad QCAD 2 https://etherscan.io/token/0x4a16baf414b8e637ed12019fad5dd705735db2e0
qdt Quadrans Token 18 https://etherscan.io/token/0x9adc7710e9d1b29d8a78c04d52d32532297c2ef3
qkc QuarkChain 18 https://etherscan.io/token/0xea26c4ac16d4a5a106820bc8aee85fd0b7b2b664
qnt Quant 18 https://etherscan.io/token/0x4a220e6096b25eadb88358cb44068a3248254675
qrdo Qredo 8 https://etherscan.io/token/0x4123a133ae3c521fd134d7b13a2dec35b56c2463
qrl Qrl 8 https://etherscan.io/token/0x697beac28b09e122c4332d163985e8a73121b97f
qsp Quantstamp 18 https://etherscan.io/token/0x99ea4db9ee77acd40b119bd1dc4e33e1c070b80d
quick Quickswap 18 https://etherscan.io/token/0x6c28aef8977c9b773996d0e8376d2ee379446f2f
qvt Qvolta 18 https://etherscan.io/token/0x1183f92a5624d68e85ffb9170f16bf0443b4c242
rad Radicle 18 https://etherscan.io/token/0x31c8eacbffdd875c74b94b077895bd78cf1e64a3
rare SuperRare 18 https://etherscan.io/token/0xba5bde662c17e2adff1075610382b9b691296350
rari Rarible 18 https://etherscan.io/token/0xfca59cd816ab1ead66534d82bc21e7515ce441cf
ray Raydium 6 https://etherscan.io/token/0x5245c0249e5eeb2a0838266800471fd32adb1089
rby Ruby X 18 https://etherscan.io/token/0xf7705dee19a63e0bc1a240f723c5c0f570c78572
rdn Raiden Network 18 https://etherscan.io/token/0x255aa6df07540cb5d3d297f0d0d4d84cb52bc8e6
reb Regblo 18 https://etherscan.io/token/0x61383ac89988b498df5363050ff07fe5c52ecdda
rebl Rebellious 18 https://etherscan.io/token/0x5f53f7a8075614b699baad0bc2c899f4bad8fbbf
reef Reef 18 https://etherscan.io/token/0xfe3e6a25e6b192a42a44ecddcd13796471735acf
rep Augur 18 https://etherscan.io/token/0x1985365e9f78359a9b6ad760e32412f4a445e862
repv2 Augur V2 Token 18 https://etherscan.io/token/0x221657776846890989a759ba2973e427dff5c9bb
seth-h Staked ETH Harbour 18 https://etherscan.io/token/0x65077fa7df8e38e135bd4052ac243f603729892d
reth-h Reward ETH Harbour 18 https://etherscan.io/token/0xcbe26dbc91b05c160050167107154780f36ceaab
rfr Refereum 4 https://etherscan.io/token/0xd0929d411954c47438dc1d871dd6081f5c5e149c
rfuel RioDeFi 18 https://etherscan.io/token/0xaf9f549774ecedbd0966c52f250acc548d3f36e5
rgt Rari Governance Token 18 https://etherscan.io/token/0xd291e7a03283640fdc51b121ac401383a46cc623
rif RIF Token 18 https://etherscan.io/token/0x2acc95758f8b5f583470ba265eb685a8f45fc9d5
ringx Ringx Token 18 https://etherscan.io/token/0x7f86c782ec802ac402e0369d2e6d500256f7abc5
rlc Iexec Rlc 9 https://etherscan.io/token/0x607f4c5bb672230e8672085532f7e901544a7375
rsr Reserve Rights 18 https://etherscan.io/token/0x320623b8e4ff03373931769a31fc52a4e78b5d70
rly Rally 18 https://etherscan.io/token/0xf1f955016ecbcd7321c7266bccfb96c68ea5e49b
rndr Render Token 18 https://etherscan.io/token/0x6de037ef9ad2725eb40118bb1702ebb27e4aeb24
ron Ronin 18 https://etherscan.io/token/0x23f043426b2336e723b32fb3bf4a1ca410f7c49a
ronc RONCoin 18 https://etherscan.io/token/0xf1b819fdb689f43afc161db789800ed799f18388
roobee ROOBEE 18 https://etherscan.io/token/0xa31b1767e09f842ecfd4bc471fe44f830e3891aa
rook ROOK 18 https://etherscan.io/token/0xfa5047c9c78b8877af97bdcb85db743fd7313d4a
rsr Reserve Rig 18 https://etherscan.io/token/0x320623b8E4fF03373931769A31Fc52A4E78B5d70
rubx eToro Russian Ruble 18 https://etherscan.io/token/0xd6d69a3d5e51dbc2636dc332338765fcca71d5d5
ruedatk Ruedacoin 6 https://etherscan.io/token/0xe2f43e8053444e764e658bab63d49f873a75ce63
salt Salt 8 https://etherscan.io/token/0x4156d3342d5c385a87d264f90653733592000581
sand Sand 18 https://etherscan.io/token/0x3845badade8e6dff049820680d1f14bd3903a5d0
sashimi SashimiToken 18 https://etherscan.io/token/0xc28e27870558cf22add83540d2126da2e4b464c2
sd Stader 18 https://etherscan.io/token/0xC7452D6a59a3a38dCe2Ed44c9586F1E0ccd7bfF4
sga Saga 18 https://etherscan.io/token/0xed0849bf46cfb9845a2d900a0a4e593f2dd3673c
sgdx eToro Singapore Dollar 18 https://etherscan.io/token/0x0e3e965acffb719e2f5dd4309969e2debe6215dd
sgr Sogur 18 https://etherscan.io/token/0xaea8e1b6cb5c05d1dac618551c76bcd578ea3524
shib Shiba Inu 18 https://etherscan.io/token/0x95ad61b0a150d79219dcf64e1e6cc01f0b64c4ce
shk iShook 18 https://etherscan.io/token/0xebe4a49df7885d015329c919bf43e6460a858f1e
shopx Splyt Core Token 18 https://etherscan.io/token/0x7bef710a5759d197ec0bf621c3df802c2d60d848
shr ShareToken 2 https://etherscan.io/token/0xee5fe244406f35d9b4ddb488a64d51456630befc
sih Sih 18 https://etherscan.io/token/0x6d728ff862bfe74be2aba30537e992a24f259a22
sipher Sipher Token 18 https://etherscan.io/token/0x9f52c8ecbee10e00d9faaac5ee9ba0ff6550f511
sis Symbiosis Finance 18 https://etherscan.io/token/0xd38bb40815d2b0c2d2c866e0c72c5728ffc76dd9
silv XBullion Silver 8 https://etherscan.io/token/0x628ab8b061fea2af1239b68efa5e46135d186666
skale SKALE Network 18 https://etherscan.io/token/0x00c83aecc790e8a4453e5dd3b0b4b3680501a7a7
slab SLAB 18 https://etherscan.io/token/0x994466f822af45cf5db0a0f41b9af6d503bcf3d5
slot AlphaSlot 18 https://etherscan.io/token/0xaee7474c3713ece228aa5ec43c89c708f2ec7ed2
slp Smooth Love Potion 0 https://etherscan.io/token/0xcc8fa225d80b9c7d42f96e9570156c65d6caaa25
slvx eToro Silver 18 https://etherscan.io/token/0x8e4d222dbd4f8f9e7c175e77d6e71715c3da78e0
snc SunContract 18 https://etherscan.io/token/0xf4134146af2d511dd5ea8cdb1c4ac88c57d60404
snov Snovio 18 https://etherscan.io/token/0xbdc5bac39dbe132b1e030e898ae3830017d7d969
snt Status Network Token 18 https://etherscan.io/token/0x744d70fdbe2ba4cf95131626614a1763df805b9e
snx Synthetix Network 18 https://etherscan.io/token/0xc011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f
soc SODACoin 18 https://etherscan.io/token/0xcad49c39b72c37b32cee8b14f33f316d3a8bc335
sohm Staked OHM 9 https://etherscan.io/token/0x04906695d6d12cf5459975d7c3c03356e4ccd460
solve Solve Token 8 https://etherscan.io/token/0x446c9033e7516d820cc9a2ce2d0b7328b579406f
spell Spell Token 18 https://etherscan.io/token/0x090185f2135308bad17527004364ebcc2d37e5f6
spo Sparrow Options 18 https://etherscan.io/token/0x89eafa06d99f0a4d816918245266800c9a0941e0
srnt Serenity 18 https://etherscan.io/token/0xbc7942054f77b82e8a71ace170e4b00ebae67eb6
stbu Stobox Token 18 https://etherscan.io/token/0x212dd60d4bf0da8372fe8116474602d429e5735f
stc Student Coin 2 https://etherscan.io/token/0xb8b7791b1a445fb1e202683a0a329504772e0e52
stcv2 Student Coin V2 18 https://etherscan.io/token/0x15b543e986b8c34074dfc9901136d9355a537e7e
stkaave Staked Aave 18 https://etherscan.io/token/0x4da27a545c0c5b758a6ba100e3a049001de870f5
store Store 8 https://etherscan.io/token/0x2c0f41eb07a0635bac34bd7d11d0ca6058279601
storj Storj 8 https://etherscan.io/token/0xb64ef51c888972c908cfacf59b47c1afbc0ab8ac
storm Storm 18 https://etherscan.io/token/0xd0a4b8946cb52f0661273bfbc6fd0e0c75fc6433
stmx StormX 18 https://etherscan.io/token/0xbe9375c6a420d2eeb258962efb95551a5b722803
stzen stakedZEN 8 https://etherscan.io/token/0x31b595e7cfdb624d10a3e7a562ed98c3567e3865
squig Squiggle 4 https://etherscan.io/token/0x373acda15ce392362e4b46ed97a7feecd7ef9eb8
super SuperFarm 18 https://etherscan.io/token/0xe53ec727dbdeb9e2d5456c3be40cff031ab40a55
sushi SushiToken 18 https://etherscan.io/token/0x6b3595068778dd592e39a122f4f5a5cf09c90fe2
sxp Swipe 18 https://etherscan.io/token/0x8ce9137d39326ad0cd6491fb5cc0cba0e089b6a9
t Threshold 18 https://etherscan.io/token/0xcdf7028ceab81fa0c6971208e83fa7872994bee5
taud TrueAUD 18 https://etherscan.io/token/0x00006100f7090010005f1bd7ae6122c3c2cf0090
tbtc1 Tbtc1 18 https://etherscan.io/token/0x8daebade922df735c38c80c7ebd708af50815faa
tcad TrueCAD 18 https://etherscan.io/token/0x00000100f2a2bd000715001920eb70d229700085
tco Think Coin 18 https://etherscan.io/token/0x6288014d6ba425d71f5fdc1dbfb01378241d78db
tel Telcoin 2 https://etherscan.io/token/0x467bccd9d29f223bce8043b84e8c8b282827790f
ten Tokenomy 18 https://etherscan.io/token/0xdd16ec0f66e54d453e6756713e533355989040e4
tenx TenX Token 18 https://etherscan.io/token/0x515ba0a2e286af10115284f151cf398688a69170
tgbp TrueGBP 18 https://etherscan.io/token/0x00000000441378008ea67f4284a57932b1c000a5
thkd TrueHKD 18 https://etherscan.io/token/0x0000852600ceb001e08e00bc008be620d60031f2
tiox Trade Token X 18 https://etherscan.io/token/0xd947b0ceab2a8885866b9a04a06ae99de852a3d4
trl Triall Token 18 https://etherscan.io/token/0x58f9102bf53cf186682bd9a281d3cd3c616eec41
tknt Tknt 18 https://etherscan.io/token/0xbce7bd79558dda90b261506768f265c5543a9f90
tkx Tokenize 8 https://etherscan.io/token/0x667102bd3413bfeaa3dffb48fa8288819e480a88
tlab TLAB 18 https://etherscan.io/token/0x36222730e78a8656230c54f9e402a062d168d2d9
tnt Tierion 8 https://etherscan.io/token/0x08f5a9235b08173b7569f83645d2c7fb55e8ccd8
tok Tokenplace 8 https://etherscan.io/token/0x4fb721ef3bf99e0f2c193847afa296b9257d3c30
traxx TokenTrax 18 https://etherscan.io/token/0xd43be54c1aedf7ee4099104f2dae4ea88b18a249
trac OriginTrail 18 https://etherscan.io/token/0xaa7a9ca87d3694b5755f213b5d04094b8d0f0a6f
tribe Tribe 18 https://etherscan.io/token/0xc7283b66eb1eb5fb86327f08e1b5816b0720212b
trst WeTrust 6 https://etherscan.io/token/0xcb94be6f13a1182e4a4b6140cb7bf2025d28e41b
tru Tru 8 https://etherscan.io/token/0x4c19596f5aaff459fa38b0f7ed92f11ae6543784
tryb Bilira Token 6 https://etherscan.io/token/0x2c537e5624e4af88a7ae4060c022609376c8d0eb
bico Biconomy 18 https://etherscan.io/token/0xF17e65822b568B3903685a7c9F496CF7656Cc6C2
tryx eToro Turkish Lira 18 https://etherscan.io/token/0x6faff971d9248e7d398a98fdbe6a81f6d7489568
tusd TrueUSD 18 https://etherscan.io/token/0x0000000000085d4780b73119b644ae5ecd22b376
txl Tixl 18 https://etherscan.io/token/0x8eef5a82e6aa222a60f009ac18c24ee12dbf4b41
uair Unicorn AIR Security Token 0 https://etherscan.io/token/0xac47fbb90458695044d9b08d6de285148db4daff
uco UnirisToken 18 https://etherscan.io/token/0x8a3d77e9d6968b780564936d15b09805827c21fa
ukg UnikoinGold 18 https://etherscan.io/token/0x24692791bc444c5cd0b81e3cbcaba4b04acd1f3b
uma UMA Voting Token V1 18 https://etherscan.io/token/0x04fa0d235c4abf4bcf4787af4cf447de572ef828
umee Umee 6 https://etherscan.io/token/0xc0a4df35568f116c370e6a6a6022ceb908eeddac
unb Unbound Protocol 18 https://etherscan.io/token/0x8db253a1943dddf1af9bcf8706ac9a0ce939d922
uni Uniswap Token 18 https://etherscan.io/token/0x1f9840a85d5af5bf1d1762f925bdaddc4201f984
up UpToken 8 https://etherscan.io/token/0x6ba460ab75cd2c56343b3517ffeba60748654d26
upbtc Universal Bitcoin 8 https://etherscan.io/token/0xc7461b398005e50bcc43c8e636378c6722e76c01
upp Sentinel Protocol 18 https://etherscan.io/token/0xc86d054809623432210c107af2e3f619dcfbf652
upt Universal Protocol Token 18 https://etherscan.io/token/0x6ca88cc8d9288f5cad825053b6a1b179b05c76fc
upusd Universal US Dollar 2 https://etherscan.io/token/0x86367c0e517622dacdab379f2de389c3c9524345
uqc Uquid Coin 18 https://etherscan.io/token/0xd01db73e047855efb414e6202098c4be4cd2423b
usdc USD Coin 6 https://etherscan.io/token/0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
usdt Tether 6 https://etherscan.io/token/0xdac17f958d2ee523a2206206994597c13d831ec7
usdx eToro United States Dollar 18 https://etherscan.io/token/0x4e3856c37b2fe7ff2fe34510cda82a1dffd63cd0
usg US Gold 9 https://etherscan.io/token/0x4000369acfa25c8fe5d17fe3312e30c332bef633
uspx USPX Token 0 https://etherscan.io/token/0x38d3d9abbdba8305ebb8b72996efe55bf785aed0
ust TerraUSD 18 https://etherscan.io/token/0xa47c8bf37f92abed4a126bda807a7b7498661acd
usx USD Stable Token 18 https://etherscan.io/token/0xe72f4c4ff9d294fc34829947e4371da306f90465
utk UTrust 18 https://etherscan.io/token/0x70a72833d6bf7f508c8224ce59ea1ef3d0ea3a38
utk1 UTrust Token 18 https://etherscan.io/token/0xdc9ac3c20d1ed0b540df9b1fedc10039df13f99c
valor ValorToken 18 https://etherscan.io/token/0x297e4e5e59ad72b1b0a2fd446929e76117be0e0a
vdx Vodi X 18 https://etherscan.io/token/0x91e64f39c1fe14492e8fdf5a8b0f305bd218c8a1
vega Vega Protocol 18 https://etherscan.io/token/0xcb84d72e61e383767c4dfeb2d8ff7f4fb89abc6e
visr Visor.Finance 18 https://etherscan.io/token/0xf938424f7210f31df2aee3011291b658f872e91e
vrgx VroomGo 8 https://etherscan.io/token/0x4861b1a0ead261897174fd849ca0f5154fcf2442
vsp Vesper Token 18 https://etherscan.io/token/0x1b40183efb4dd766f11bda7a7c3ad8982e998421
vxc Vinx Coin 18 https://etherscan.io/token/0x14f0a12a43c36c49d4b403dd6e1a9b8222be456c
wabi Tael Token 18 https://etherscan.io/token/0x286bda1413a2df81731d4930ce2f862a35a609fe
wafl Wafl Token 18 https://etherscan.io/token/0x3fee076a0f0218899b89fe7e3f54dd2dc18917e0
wax Wax 8 https://etherscan.io/token/0x39bb259f66e1c59d5abef88375979b4d20d98022
wbtc Wrapped Bitcoin 8 https://etherscan.io/token/0x2260fac5e5542a773aa44fbcfedf7c193bc2c599
wcfg Wrapped Centrifuge 18 https://etherscan.io/token/0xc221b7e65ffc80de234bbb6667abdd46593d34f0
wec Whole Earth Coin 18 https://etherscan.io/token/0xcc1a8bd438bebc4b2a885a34475bb974f2124317
wet We Show Token 18 https://etherscan.io/token/0x36d10c6800d569bb8c4fe284a05ffe3b752f972c
weth Wrapped Ether 18 https://etherscan.io/token/0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
whale WHALE 4 https://etherscan.io/token/0x9355372396e3f6daf13359b7b607a3374cc638e0
wht Whatshalal 18 https://etherscan.io/token/0xae8d4da01658dd0ac118dde60f5b78042d0da7f2
wnxm Wrapped NXM 18 https://etherscan.io/token/0x0d438f3b5175bebc262bf23753c1e53d03432bde
woo Wootrade Network 18 https://etherscan.io/token/0x4691937a7508860f876c9c0a2a617e7d9e945d4b
wpx WalletPlusX 18 https://etherscan.io/token/0x4bb0a085db8cedf43344bd2fbec83c2c79c4e76b
wsteth Wrapped stETH 18 https://etherscan.io/token/0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0
wtc Walton Token 18 https://etherscan.io/token/0xb7cb1c96db6b22b0d3d9536e0108d062bd488f74
wtk WadzPay Token 18 https://etherscan.io/token/0x4cff49d0a19ed6ff845a9122fa912abcfb1f68a6
wxrp Wrapped XRP 18 https://etherscan.io/token/0x39fbbabf11738317a448031930706cd3e612e1b9
wxrpv0 Wrapped XRP v0 6 https://etherscan.io/token/0xda7e5a3841550a5ba271dcc76a885af902142dfc
wluna Wrapped LUNA 18 https://etherscan.io/token/0xd2877702675e6ceb975b4a1dff9fb7baf4c91ea9
wlxt Wallex Token 18 https://etherscan.io/token/0x1fd389ac8e6c958b0f01067540fdff8a11488201
wxt Wirex 18 https://etherscan.io/token/0xa02120696c7b8fe16c09c749e4598819b2b0e915
wild Wilder World 18 https://etherscan.io/token/0x2a3bff78b79a009976eea096a51a948a3dc00e34
xaud XAUD Token 5 https://etherscan.io/token/0x1185a1b58bdd774a36cc9598c5e3531dfeb1b736
xbgold XBullion Token 8 https://etherscan.io/token/0x670f9d9a26d3d42030794ff035d35a67aa092ead
xcd CapdaxToken 18 https://etherscan.io/token/0xca00bc15f67ebea4b20dfaaa847cace113cc5501
xex Cross Exchange Token 18 https://etherscan.io/token/0xbf68b3756f82b522588511da682dfd7e3bf34dee
xrl Rialto 9 https://etherscan.io/token/0xb24754be79281553dc1adc160ddf5cd9b74361a4
xsgd StraitsX 6 https://etherscan.io/token/0x70e8de73ce538da2beed35d14187f6959a8eca96
xsushi xSUSHI 18 https://etherscan.io/token/0x8798249c2e607446efb7ad49ec89dd1865ff4272
xtp Tap 18 https://etherscan.io/token/0x6368e1e18c4c419ddfc608a0bed1ccb87b9250fc
yfdai Yfdai.Finance 18 https://etherscan.io/token/0xf4cd3d3fda8d7fd6c5a500203e38640a70bf9577
yfi Yearn.Finance 18 https://etherscan.io/token/0x0bc529c00c6401aef6d220be8c6ea1667f6ad93e
yfii YFII.Finance 18 https://etherscan.io/token/0xa1d0e215a23d7030842fc67ce582a6afa3ccab83
ygg Yield Guild Games 18 https://etherscan.io/token/0x25f8087ead173b73d6e8b84329989a8eea16cf73
yld Yld 18 https://etherscan.io/token/0xf94b5c5651c888d928439ab6514b93944eee6f48
yng Young Token 18 https://etherscan.io/token/0xa26cbb76156090f4b40a1799a220fc4c946afb3c
ysey YSEY Utility Token 3 https://etherscan.io/token/0x1358efe5d9bfc2005918c0b2f220a4345c9ee7a3
zarx eToro South African Rand 18 https://etherscan.io/token/0x29ec3ff4e1dcad5a207dbd5d14e48073abba0bd3
zco Zebi Coin 8 https://etherscan.io/token/0x2008e3057bd734e10ad13c9eae45ff132abc1722
zil Zilliqa 12 https://etherscan.io/token/0x05f4a42e251f2d52b8ed15e9fedaacfcef1fad27
zix Zeex Token 18 https://etherscan.io/token/0xf3c092ca8cd6d3d4ca004dc1d0f1fe8ccab53599
zlw Zelwin 18 https://etherscan.io/token/0x5319e86f0e41a06e49eb37046b8c11d78bcad68c
zmt Zipmex Token 18 https://etherscan.io/token/0xaa602de53347579f86b996d2add74bb6f79462b2
zoom CoinZoom 18 https://etherscan.io/token/0x69cf3091c91eb72db05e45c76e58225177dea742
zrx 0x Token 18 https://etherscan.io/token/0xe41d2489571d322189246dafa5ebde1f4699f498
zusd Z.com Usd 6 https://etherscan.io/token/0xc56c2b7e71b54d38aab6d52e94a04cbfa8f604fa
seth2 StakeWise Staked ETH2 18 https://etherscan.io/address/0xFe2e637202056d30016725477c5da089Ab0A043A
reth2 StakeWise Reward ETH2 18 https://etherscan.io/address/0x20bc832ca081b91433ff6c17f85701b6e92486c5
ldo Lido DAO Token 18 https://etherscan.io/token/0x5a98fcbea516cf06857215779fd812ca3bef1b32
gbpt Poundtoken 18 https://etherscan.io/token/0x86b4dbe5d203e634a12364c0e428fa242a3fba98
ever Everscale 9 https://etherscan.io/token/0x29d578cec46b50fa5c88a99c6a4b70184c062953

Test Ethereum - TERC20 Tokens

TERC20 tokens can be accessed on different Testnets with the following identifiers.

Testnet Token Id Token Name Precision Contract Details
Ethereum Goerli fixed Goerli Example Fixed Supply Token 18 https://goerli.etherscan.io/token/0xa13de8df4ef9d6016f0826858d48045848429390
Ethereum Goerli gterc2dp Goerli ERC20 Token 2 Decimals 2 https://goerli.etherscan.io/token/0xe19e232e942cde4320b6354646cbb1336ae732c7
Ethereum Goerli gterc6dp Goerli ERC20 Token 6 Decimals 6 https://goerli.etherscan.io/token/0xe7afa17e6e5257806d2309b01e6de320668ec3dc
Ethereum Goerli gterc18dp Goerli ERC20 Token 18 Decimals 18 https://goerli.etherscan.io/token/0x61d54356be035944a3868eaa9556353b7150699d
Ethereum Goerli gtaave18dp Goerli Test AAVE Token 18 Decimals 18 https://goerli.etherscan.io/token/0x631d5e3c45a459e8f98b9d6a2734fce7b051f845
Ethereum Goerli gtbat18dp Goerli Test BAT Token 18 Decimals 18 https://goerli.etherscan.io/token/0x95458b26c8b524eb5ef92c7a1759ede6224bef2e
Ethereum Goerli gtcomp18dp Goerli Test COMP Token 18 Decimals 18 https://goerli.etherscan.io/token/0xa1ff97c394b25926acb09d12bacf0613055a2727
Ethereum Goerli gtgrt18dp Goerli Test GRT Token 18 Decimals 18 https://goerli.etherscan.io/token/0x1441f298d1f15084a0e5c714c966033e39597de7
Ethereum Goerli gtlink18dp Goerli Test LINK Token 18 Decimals 18 https://goerli.etherscan.io/token/0xfe4537ff71aef28592c5c7331ed4b20f276d770b
Ethereum Goerli gtmkr18dp Goerli Test MKR Token 18 Decimals 18 https://goerli.etherscan.io/token/0xf84e8207e4dc846e250208a6e4b05aa3e7ab00c6
Ethereum Goerli gtsnx18dp Goerli Test SNX1 Token 18 Decimals 18 https://goerli.etherscan.io/token/0x50608a26bff103290a4a47b152395047801e9280
Ethereum Goerli gtuni18dp Goerli Test UNI Token 18 Decimals 18 https://goerli.etherscan.io/token/0x6be1a99c215872cea33217b0f4bad63f186ddfac
Ethereum Goerli gtusdt6dp Goerli Test USDT Token 6 Decimals 6 https://goerli.etherscan.io/token/0x51445dcddf5246229bae8c0ba3ea462e63038641
Ethereum Goerli gtyfi18dp Goerli Test YFI Token 18 Decimals 18 https://goerli.etherscan.io/token/0xf4755c1a9aaad9d6b919edb8346ce9b46d066be4
Ethereum Goerli gtwbtc8dp Goerli Test WBTC Token 8 Decimals 8 https://goerli.etherscan.io/token/0xd4bccebe77b7c1da89818f8889e3ea09046e7e38
Ethereum Goerli ghcn Himalayan Coin 18 https://goerli.etherscan.io/token/0xa05e3efe2771cd04191f3eadb9a99ba3b4bf9d26
Ethereum Goerli ghdo Himalayan Dollar 18 https://goerli.etherscan.io/token/0x5426635915740813092eeff72158bc492799da5f
Ethereum Goerli gusdt Goerli USDT 18 https://goerli.etherscan.io/token/0x64d081854fad45e64db52cd28ba78ae1ecfee59b
Ethereum Goerli terc2dp1 Test ERC Token 2 Decimals 2 https://goerli.etherscan.io/token/0xceef48d58cc3a51d8b6df155633007415b9bae01
Ethereum Goerli terc2dp2 Test ERC Token 2 Decimals 2 https://goerli.etherscan.io/token/0x168AE5b381F7C317AC6EF2161c6e5fcC0e0de41e
Ethereum Goerli terc2dp3 Test ERC Token 2 Decimals 2 https://goerli.etherscan.io/token/0x12cb9d6127ac74847cc444e6661cfd1b5107bd26
Ethereum Goerli terc2dp4 Test ERC Token 2 Decimals 2 https://goerli.etherscan.io/token/0x458fdef6e1e58614d82f3116d8ca1f23419cb8c0
Ethereum Goerli terc2dp5 Test ERC Token 2 Decimals 2 https://goerli.etherscan.io/token/0xf44c85bf1d556a8268a1212cf0b9248af4f238bd
Ethereum Goerli terc6dp1 Test ERC Token 6 Decimals 6 https://goerli.etherscan.io/token/0x3b9f958f0ba34aa103fabb054f29400703470bac
Ethereum Goerli terc6dp2 Test ERC Token 6 Decimals 6 https://goerli.etherscan.io/token/0x2508d109a0cd87e597a1de071325f5cf56d4639a
Ethereum Goerli terc6dp3 Test ERC Token 6 Decimals 6 https://goerli.etherscan.io/token/0xdda2375104ee9a97e1d7aa4bc48ede2c4c6ddf48
Ethereum Goerli terc6dp4 Test ERC Token 6 Decimals 6 https://goerli.etherscan.io/token/0x06c1f1195c59ec5f318d12d4cc2d1f9d45261756
Ethereum Goerli terc6dp5 Test ERC Token 6 Decimals 6 https://goerli.etherscan.io/token/0x3326af8eeb6d4ce1f1f0652fcb3d5e07cd9c1039
Ethereum Goerli terc18dp1 Test ERC Token 18 Decimals 18 https://goerli.etherscan.io/token/0x9f77b76e6866b3f5dd99382c96f16eddabc0b78e
Ethereum Goerli terc18dp2 Test ERC Token 18 Decimals 18 https://goerli.etherscan.io/token/0x18b17853ff62122c60f113b8b8967243c39ad30e
Ethereum Goerli terc18dp3 Test ERC Token 18 Decimals 18 https://goerli.etherscan.io/token/0x96f13e2ea4b738380922dd9f5cd8fcf0416e5f2d
Ethereum Goerli terc18dp4 Test ERC Token 18 Decimals 18 https://goerli.etherscan.io/token/0xbecf20f89b6898bd8bbf3fa93fb4bcda367b9594
Ethereum Goerli terc18dp5 Test ERC Token 18 Decimals 18 https://goerli.etherscan.io/token/0x4464fe55f9a8aea46e02c4a22b4d74661805ec26
Ethereum Goerli terc18dp6 Test ERC Token 18 Decimals 18 https://goerli.etherscan.io/token/0x998ddfd1ac3ed76fc163528c5fc69b8d67fa5395
Ethereum Goerli terc18dp7 Test ERC Token 18 Decimals 18 https://goerli.etherscan.io/token/0xf2555ac243ab2606fa71e2f2728117054dd1867b
Ethereum Goerli terc18dp8 Test ERC Token 18 Decimals 18 https://goerli.etherscan.io/token/0xd9da1e909e3b4b2c1ec31b702bef0bf1e42533e4
Ethereum Goerli terc18dp9 Test ERC Token 18 Decimals 18 https://goerli.etherscan.io/token/0xb91be6a36b60c4576aff75a50d2b7c762349ddec
Ethereum Goerli terc18dp10 Test ERC Token 18 Decimals 18 https://goerli.etherscan.io/token/0xc53d2c04795a1cef22a91c9d52c04f5082bb5631
Ethereum Goerli terc18dp11 Test ERC Token 18 Decimals 18 https://goerli.etherscan.io/token/0xc325d7f188dc6015f45d3d39e58c5404e79b5cb9
Ethereum Goerli terc18dp12 Test ERC Token 18 Decimals 18 https://goerli.etherscan.io/token/0x7a8f375798284920cd27d1c757ceca3675603ab1
Ethereum Goerli terc18dp13 Test ERC Token 18 Decimals 18 https://goerli.etherscan.io/token/0x2e3f4bf47e4ea53a7a94f0597b47fe3caab78b0d
Ethereum Goerli terc18dp14 Test ERC Token 18 Decimals 18 https://goerli.etherscan.io/token/0x4f369aa78b9f299cb50ad4d96e13bdfbd8be7239
Ethereum Goerli terc18dp15 Test ERC Token 18 Decimals 18 https://goerli.etherscan.io/token/0x0fcb9bc4c67d502a45a07f514638ca8f83ba2912
Ethereum Goerli teuroc Test Euro Coin 6 https://goerli.etherscan.io/token/0xa683d909e996052955500ddc45ca13e25c76e286
Ethereum Goerli tmatic Test Polygon 18 https://goerli.etherscan.io/token/0x499d11e0b6eac7c0593d8fb292dcbbf815fb29ae

Wallet functionality

Unlike Ether, ERC20 tokens do not have the full functionality of a wallet. You cannot create wallets, create/list/get receive addresses, or share wallets for ERC20 tokens.

To retrieve token details associated with an Ethereum wallet, such as balance, pending approvals, policies, and webhooks, set the allTokens parameter to true with the following calls:

  1. Get Wallet
  2. List Wallets
  3. List Pending Approvals
  4. List Wallet Webhooks
  5. List Transfers
  6. Add Wallet Webhook

Keychains

ERC20 tokens do not have a direct association with keys or keychains. Instead, all tokens share the same keys/keychains that belong to the Ethereum wallet.

Balances

Each token has a different divisibility factor which is specified in the token contract. This value is usually 1,000,000,000,000,000,000 (1018) units, but can vary from token to token. Check the client constants to see the number of decimal places the token supports.

Balances are supported in string format: balanceString, confirmedBalanceString, and spendableBalanceString.

Transactions

BitGo's Ethereum multisig contract currently only supports one sender and one recipient. That means that the sendMany call only accepts one recipient for tokens.

ERC20 Tokens Webhooks

By setting the allTokens parameter to true, a generic webhook is created which triggers on all ERC20 token and ETH transactions. It sends an HTPP request to your webhook URL and specifies whether it is Ethereum or a token using the field "coin".

Here's an example response for a test token called "terc".

{
    "hash":"0x3e00ae17961d3d42ae722085904ba84e63a32b005ff46afff28b7c9c76f63291",
    "transfer":"5b612d25c9067f2a1db11a15f165989e",
    "coin":"terc",
    "type":"transfer",
    "state":"confirmed",
    "wallet":"5a13adcab70f2c284fdd9682db5e6d64"
}

To get additional details about this transfer, you need to get the transfer details using the token name and transfer id. For the above transfer you'd need to call the Get Transfer route to check the amount transferred and other details (e.g. /api/v2/terc/wallet/5a13adcab70f2c284fdd9682db5e6d64/transfer/5b612d25c9067f2a1db11a15f165989e).

Note: Transactions that send both Ethereum and ERC20 tokens (or multiple token types) supported by BitGo generate one webhook notification for each.

Hedera Hashgraph

Hedera (HBAR) can be accessed with the following coin types:

Environment Coin Type Faucet
Hedera Production hbar https://portal.hedera.com/register
Hedera Testnet thbar https://portal.hedera.com/register

Generating wallets

To create a HBAR wallet using BitGoJS:

bitgo
  .coin('thbar')
  .wallets()
  .generateWallet({
    label: 'My Test Wallet',
    passphrase: 'secretpassphrase1a5df8380e0e30',
  })
  .then(function (wallet) {
    // print the new wallet
    console.dir(wallet);

    // print the new wallets address to send to
    console.dir(wallet.coinSpecific.baseAddress);
  });

Creating HBAR wallets is restricted to enterprise customers. In production, there is limit of 100 wallets total per enterprise. In testnet, there is no limit.

Note: To inquire about increasing your limit, contact BitGo at support@bitgo.com.

Before you can use an HBAR wallet, it must be initialized on the Hedera blockchain. A funding transaction must first be sent to the wallet's address. When BitGo detects this funding transaction, it automatically sends another initialization transaction to set up the signers and the home domain of the account. There is a fee associated with creating HBAR wallets that BitGo covers for the user.

Until the initialization transaction is confirmed, the wallet is not ready for use, and the receive address is not exposed in the API. This is to protect users from losing funds by sending to a wallet that does not exist on the network.

Warning: Do not use an HBAR wallet while it is being initialized or you may lose funds.

LABEL="My Test Wallet"
PASSPHRASE="secretpassphrase1a5df8380e0e30"

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d "{ \"label\": \"$LABEL\", \"passphrase\": \"$PASSPHRASE\" }" \
http://$BITGO_EXPRESS_HOST:3080/api/v2/thbar/wallet/generate

Creating addresses

bitgo
  .coin('thbar')
  .wallets()
  .getWallet({ id: '585c51a5df8380e0e3082e46' })
  .then(function (wallet) {
    return wallet.createAddress();
  })
  .then(function (newAddress) {
    // print new address details
    console.dir(newAddress);
  });
WALLET=585c51a5df8380e0e3082e46

curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/thbar/wallet/$WALLET/address

HBAR receive addresses are defined as a memo which can be attached to a transaction. For each BitGo wallet, an incrementing string number value is used as the memo. Whenever a new address is created, the incremented memoId and is returned in the coinSpecific property of the address.

Balances

HBAR (HBAR) is the native asset of the Hedera blockchain. The base unit of HBAR is tinybar:

  • 1 tinybar is (10-8) or 0.00000001 HBAR.
  • 1 HBAR is (108) or 100000000 tinybars (100 million).

Balances are supported in string format: balanceString, confirmedBalanceString, and spendableBalanceString.

Litecoin

Litecoin can be accessed with the following coin types:

Environment Coin Type Faucet
Litecoin Production ltc
Litecoin Testnet tltc http://testnet.litecointools.com/

Generating wallets

bitgo
  .coin('tltc')
  .wallets()
  .generateWallet({
    label: 'My Test Wallet',
    passphrase: 'secretpassphrase1a5df8380e0e30',
  })
  .then(function (wallet) {
    // print the new wallet
    console.dir(wallet);
  });
LABEL="My Test Wallet"
PASSPHRASE="secretpassphrase1a5df8380e0e30"

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d "{ \"label\": \"$LABEL\", \"passphrase\": \"$PASSPHRASE\" }" \
http://$BITGO_EXPRESS_HOST:3080/api/v2/tltc/wallet/generate

For Litecoin, BitGo uses the same 2-of-3 multisig P2SH scheme as for Bitcoin, with the keys in the order of User, Backup and BitGo respectively.

Creating addresses

bitgo
  .coin('tltc')
  .wallets()
  .getWallet({ id: '585c51a5df8380e0e3082e46' })
  .then(function (wallet) {
    return wallet.createAddress();
  })
  .then(function (newAddress) {
    // print new address details
    console.dir(newAddress);
  });
WALLET=585c51a5df8380e0e3082e46

curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/tltc/wallet/$WALLET/address

See the table of address types under Address Derivation (BIP-32) above. Litecoin defaults to chain 0.

Converting addresses

bitgo.coin('ltc').canonicalAddress('3GBygsGPvTdfKMbq4AKZZRu1sPMWPEsBfd', 2);
// MNQ7zkgMsaV67rsjA3JuP59RC5wxRXpwgE

bitgo.coin('ltc').canonicalAddress('3GBygsGPvTdfKMbq4AKZZRu1sPMWPEsBfd', 1);
bitgo.coin('ltc').canonicalAddress('MNQ7zkgMsaV67rsjA3JuP59RC5wxRXpwgE', 1);
// 3GBygsGPvTdfKMbq4AKZZRu1sPMWPEsBfd
curl -X POST \
-H "Content-Type: application/json" \
-d "{ \"address\": \"3GBygsGPvTdfKMbq4AKZZRu1sPMWPEsBfd\", \"scriptHashVersion\": 2 }" \
http://$BITGO_EXPRESS_HOST:3080/api/v2/ltc/canonicaladdress
# MNQ7zkgMsaV67rsjA3JuP59RC5wxRXpwgE

Litecoin used to support the same P2SH address format as Bitcoin, but switched to other version identifiers. This is why some Litecoin addresses start with 3 and some with M. Both addresses are the same.

For incoming transactions, BitGo converts each address that start with 3 to one that starts with M. For outgoing transactions, BitGo only accepts the new address format.

In testnet, the new P2SH addresses start with Q, so the corresponding conversion could be between 2MsFGJvxH1kCoRp3XEYvKduAjY6eYz9PJHz and QLc2RwpX2rFtZzoZrexLibcAgV6Nsg74Jn.

Method

bitgo.coin('ltc').canonicalAddress(address, scriptHashVersion)

bitgo.coin('tltc').canonicalAddress(address, scriptHashVersion)

HTTP Request

POST /api/v2/:coin/canonicaladdress

Function Arguments

Parameter Type Required Description
address String Yes The address string to convert
scriptHashVersion Integer No 1 for old address format, 2 for new. Defaults to 2.

Balances

Litecoin (LTC) is the native asset of the Litecoin blockchain. The base unit of Litecoin is microlitecoin:

  • 1 microlitecoin is (10-8) or 0.00000001 Litecoin.
  • 1 Litecoin is (108) or 100000000 microlitecoins (100 million).

Balances are supported in string and number format but string is recommended to ensure values do not exceed the programmable number limit: balanceString, confirmedBalanceString, and spendableBalanceString.

RSK Smart Bitcoin

Note: RSK was formely known as Rootstock

RSK Smart Bitcoincan be accessed with the following coin types:

Environment Coin Type Faucet
RSK Production rbtc
RSK Testnet trbtc https://faucet.rsk.co/

Enterprise fee address

ENTERPRISEID=585c51a5df8380e0e3082e46

curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/trbtc/enterprise/$ENTERPRISEID/feeAddressBalance

RSK uses the same fee address structure as Ethereum.

Each enterprise has a fee address which will be used to pay for transaction fees on all RSK wallets in that enterprise. The fee address is displayed in the dashboard of the BitGo website, and you must fund it before creating a wallet, address, or sending a transaction. If the enterprise's fee address runs out of funds, you will not be able to create new wallets, addresses, or send transactions until you fund the fee address. You will not be able to use one of your own RSK wallets to fund the fee address if the fee address is too low (because you will not be able to send transactions from your RSK wallet). I It is best to create and fund a non-BitGo RSK account, so you can use it to fund your BitGo enterprise fee address. Any open source RSK wallet can be used to create an account.

Note that the fee address is a single-signature account, and the private key is created and owned by BitGo. You will not be able to send funds out of the fee address once you have sent them in.

There will be a feeAddress field under the CoinSpecific key for RSK wallets. You will use this address to pay the fees for creating transactions and addresses.

Generating wallets

bitgo
  .coin('trbtc')
  .wallets()
  .generateWallet({
    label: 'My Test Wallet',
    passphrase: 'secretpassphrase1a5df8380e0e30',
    enterprise: '5612c2beeecf83610b621b90964448cd',
  })
  .then(function (wallet) {
    // print the new wallet
    console.dir(wallet);
  });
LABEL="My Test Wallet"
PASSPHRASE="secretpassphrase1a5df8380e0e30"

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d "{ \"label\": \"$LABEL\", \"passphrase\": \"$PASSPHRASE\" }" \
http://$BITGO_EXPRESS_HOST:3080/api/v2/trbtc/wallet/generate

Before you can use an RSK wallet, it must be initialized on the RSK blockchain. When you create an RSK wallet, BitGo sends a transaction on the RSK network in order to generate the wallet.

Until the initialization transaction is confirmed, the wallet is not ready for use, and the receive address is not exposed in the API. This is to protect users from losing funds by sending to a wallet that does not exist on the network.

Warning: Do not use an RSK wallet while it is being initialized or you may lose funds.

Creating addresses

bitgo
  .coin('trbtc')
  .wallets()
  .getWallet({ id: '585c51a5df8380e0e3082e46' })
  .then(function (wallet) {
    return wallet.createAddress();
  })
  .then(function (newAddress) {
    // print new address details
    console.dir(newAddress);
  });
WALLET=585c51a5df8380e0e3082e46

curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/trbtc/wallet/$WALLET/address

RSK address creation requires interactions with the RSK blockchain. In order to deploy a receive address contract, BitGo sends a transaction on the RSK network. Make sure to fund the fee address mentioned above. Like the wallet creation process, a RSK address will not be immediately usable upon creation and so the caller of this function will have to wait for the initialization transaction to be confirmed before attempting to fetch, or send to, the address.

Balances

Smart Bitcoin (RBTC) is the native asset of the RSK blockchain and is pegged 1:1 to BTC. RSK is a smart-contract compatible Bitcoin sidechain and uses the Ethereum Virtual Machine (EVM).

RBTC is used to pay for RSK gas fees like Ether is used to pay for Ethereum gas fees. The base unit of Smart Bitcoin is wei:

  • 1 wei is (10-18) or 0.000000000000000001 RSK.
  • 1 RSK is (1018) or 1000000000000000000 wei (1 quintillion).

Balances are supported in string format: balanceString, confirmedBalanceString, and spendableBalanceString.

Transactions

BitGo's RSK multisig contract currently only supports one sender and one recipient. That means that the sendMany call will only accept one recipient.

Stacks

Stacks can be accessed with the following coin types:

Environment Coin Type Faucet
STX Production stx
STX Testnet tstx https://docs.stacks.co/understand-stacks/testnet#faucet

Generating wallets

bitgo
  .coin('tstx')
  .wallets()
  .generateWallet({
    label: 'My Test Wallet',
    passphrase: 'secretpassphrase1a5df8380e0e30',
  })
  .then(function (wallet) {
    // print the new wallet
    console.dir(wallet);
  });
LABEL="My Test Wallet"
PASSPHRASE="secretpassphrase1a5df8380e0e30"

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d "{ \"label\": \"$LABEL\", \"passphrase\": \"$PASSPHRASE\" }" \
http://$BITGO_EXPRESS_HOST:3080/api/v2/tbtc/wallet/generate

Creating addresses

bitgo
  .coin('tstx')
  .wallets()
  .getWallet({ id: '585c51a5df8380e0e3082e46' })
  .then(function (wallet) {
    return wallet.createAddress();
  })
  .then(function (newAddress) {
    // print new address details
    console.dir(newAddress);
  });
WALLET=585c51a5df8380e0e3082e46

curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/tstx/wallet/$WALLET/address

Balances

Stacks Stacks (STX) is the native asset of the Stacks blockchain. It is called a "token," but as a layer-1 asset it is treated here as a coin. The base unit of STX is a micro-STX:

  • 1 micro-STX is (10-6) or 0.000001 STX.
  • 1 STX is (106) or 1000000 micro-STX (1 million).

Balances are supported in string format: balanceString, confirmedBalanceString, and spendableBalanceString.

Fee rate

Fees fees are calculated based on the estimate fee rate and the size of the raw transaction in bytes. The fee rate is a market determined variable. For the testnet, it is set to 1 micro-STX.

Set the fee manually

In order to set the fee manually, add feeRate param to the body of the request.

Example for single recipient transfer:

{
    recipients: [{
        amount: amount, //string - amount in micro-stx
        address: receiverAddress, //string
    }],
    feeRate: 500000 // amount in micro-stx as number or string, equal to 0.5 STX
}

Send-Many: send to multiple recipients

Stacks doesnt provide a native funtionality to send to many recipients in the same transaction but there is smart contract that allows us to do it. It also supports for memos on each receiver. In order to use it, the recipients params in the body of a transfer transaction should have more than 1 recipient object.

{
    recipients: [{
        amount: "amount1", //string - amount in micro-stx
        address: "receiverAddress1", //string
        memo: "memo1", //string - optional
    },{
        amount: "amount2", //string - amount in micro-stx
        address: "receiverAddress2", //string
        memo: "memo2", //string - optional
    },{
        amount: "amount3", //string - amount in micro-stx
        address: "receiverAddress3", //string
        memo: "memo3", //string - optional
    },{
        amount: "amount4", //string - amount in micro-stx
        address: "receiverAddress4", //string
        memo: "memo4", //string - optional
    }],
}

Staking

Stacks refers to staking as stacking. Stacks is a proof of stake protocol where users can delegate part of their funds to a validator (or "stacker") to stake and get rewards for participating in securing the network. Stacks has a unique staking mechanism where users delegate STX but earn BTC as reward. When users delegate, funds are “locked” but remain in the wallet. Users must undelegate to “unlock” the funds to be withdrawn or sent out.

Currently, BitGo allows users to act as delegators which means that from their wallets they can:

  • Delegate (or stake) STX
  • Undelegate (or unstake) STX
  • Receive rewards for delegating STX.

Delegating

Staking cycles run in sequence. Users must delegate their funds before the cycle ends in order to generate rewards from a stacker (validator).

Note: BitGo recommends that users use a specific BTC address solely for generating rewards.

Stacks staking examples

These examples are for wallet endpoints like:

https://app.bitgo.com/api/v2/stx/wallet/walletId/tx/build
https://app.bitgo.com/api/v2/stx/wallet/walletId/tx/initiate

Delegate

To get the BTC Address hash and version BitGo recommends that you use a script like this:

Note: Addresses must be in legacy format (and start with a 1 or a 3). Native SegWit addresses (that start with bc1) are not supported.

const bitcoinjs = require('bitcoinjs-lib');

const btcAddress = '1QF7K4izEcgDxu9yRBLpFe6viFihiL1w5j';
const parsedAddress = bitcoinjs.address.fromBase58Check(btcAddress);

const btcAddressVersionToHashMode = (version) => {
  switch (version) {
    case '0': // BTC version for mainnet P2PKH
    case '111': // BTC version for testnet P2PKH
      return { data: [0], type: 'Buffer' };
    case '5': // BTC version for mainnet P2SH
    case '196': // BTC version for testnet P2SH
      return { data: [1], type: 'Buffer' };
    default:
      break;
  }
};
const AddressHash = bas58.hash.toJSON();
const AddressVersion = btcAddressVersionToHashMode(parsedAddress.version.toString());
console.log(AddressHash); //{type: 'Buffer',data: [ 254, 245, 252,  42, 179, 220, 238, 122, 241, 132, 202, 47, 217,  13,  20,  38, 151, 116, 250, 128]}
console.log(AddressVersion); //{ data: [ 0 ], type: 'Buffer' }

The body of the request transaction should look like this:

{
    type: "stakingLock",
    recipients: [{
        amount: amount, //string - amount in micro-stx
        address: validatorAddress, //string
    }],
    stakingOptions: {
        contractName: 'pox',
        functionName: 'delegate-stx',
        functionArgs: [
            // First param is the amount in micro-stx do delegate
            {
                type: 'uint128',
                val: amount //string - amount in micro-stx
            },
            // Second param is validator address
            {
                type: 'principal',
                val: validatorAddress //string
            },
            // Third param is the delegation cycles that delegate permisions will last.
            // Is a required parameter and must be a 1 or higher.
            {
                type: 'optional',
                val: numberOfCycles //string
            },
            // Fourth param is the BTC address in which you will receive the rewards.
            // Is required.
            {
                type: 'optional',
                val: {
                    type: 'tuple',
                    val: [{
                            key: 'hashbytes',
                            type: 'buffer',
                            val: AddressHash
                        },
                        {
                            key: 'version',
                            type: 'buffer',
                            val: AddressVersion
                        },
                    ],
                },
            },
        ],
    };
}

Revoke delegate

The body of the request transaction should look like this:

{
    type: "stakingUnlock",
    recipients: [{
        amount: '0', // string
        address: '', // empty string
    }],
    stakingOptions: {
        contractName: 'pox',
        functionName: 'revoke-delegate-stx',
        functionArgs: [] // empty array
        },
}

Avalanche Contract Chain (C-Chain)

Avalanche can be accessed with the following coin types

Environment Coin Type Faucet
Avax C-Chain Production avaxc
Avax C-Chain Testnet tavaxc https://faucet.avax-test.network/

Enterprise fee address

ENTERPRISEID=585c51a5df8380e0e3082e46

curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/tavaxc/enterprise/$ENTERPRISEID/feeAddressBalance

The C-Chain is an instance of the Ethereum Virtual Machine (EVM). Each enterprise has a fee address which will be used to pay for transaction fees on all Avalanche C-Chain wallets in that enterprise. The fee address is displayed in the dashboard of the BitGo website, and you must fund it before creating a wallet, address, or sending a transaction. If the enterprise's fee address runs out of funds, you will not be able to create new wallets, addresses, or send transactions until you fund the fee address. You will not be able to use one of your own Avalanche C-Chain wallets to fund the fee address if the fee address is too low (because you will not be able to send transactions from your Avalanche C-Chain wallet). It is best to create and fund a non-BitGo Avalanche C-Chain account, so you can use it to fund your BitGo enterprise fee address. Any open source Avalanche C-Chain wallet can be used to create an account.

Please note that the fee address is a single-signature account, and that the private key is created and owned by BitGo. You will not be able to send funds out of the fee address once you have sent them in.

There will be a feeAddress field under the CoinSpecific key for Avalanche C-Chain wallets. You will use this address to pay the fees for creating transactions and addresses.

Wallet construction

bitgo
  .coin('tavaxc')
  .wallets()
  .generateWallet({
    label: 'My Test Wallet',
    passphrase: 'secretpassphrase1a5df8380e0e30',
    enterprise: '5612c2beeecf83610b621b90964448cd',
  })
  .then(function (wallet) {
    // print the new wallet
    console.dir(wallet);
  });
LABEL="My Test Wallet"
PASSPHRASE="secretpassphrase1a5df8380e0e30"

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d "{ \"label\": \"$LABEL\", \"passphrase\": \"$PASSPHRASE\" }" \
http://$BITGO_EXPRESS_HOST:3080/api/v2/tavaxc/wallet/generate

Avalanche C-Chain wallets can only be created under an enterprise. You must pass in the id of the enterprise to associate the wallet with.

The creation of Avalanche C-Chain wallets requires interaction with the Avalanche ledger to be complete. When you create an Avalanche C-Chain wallet, BitGo sends an initialization transaction on the Avalanche network in order to create the wallet. While these initialization transactions are unconfirmed, the wallet should not be used, nor should anyone attempt to send funds to the wallet. For this reason, while the wallet's initialization transactions are still unconfirmed on the Avalanche C-Chain network, the wallet's receive address will not be visible through the API. This is to protect users against sending to a Avalanche C-Chain wallet which does not exist on the network and losing funds.

bitgo
  .coin('tavaxc')
  .wallets()
  .getWallet({ id: '585c51a5df8380e0e3082e46' })
  .then(function (wallet) {
    return wallet.createAddress();
  })
  .then(function (newAddress) {
    // print new address details
    console.dir(newAddress);
  });
WALLET=585c51a5df8380e0e3082e46

curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/tavaxc/wallet/$WALLET/address

Avalanche C-Chain address creation requires interactions with the Avalanche blockchain. In order to deploy a receive address contract, BitGo sends a transaction on the Avalanche C-Chain network. Please make sure to fund the fee address mentioned above. Like the wallet creation process, a Avalanche C-Chain address will not be immediately usable upon creation and so the caller of this function will have to wait for the initialization transaction to be confirmed before attempting to fetch the address or send funds to it.

Balances

Each Avax is comprised of 1,000,000,000,000,000,000 (1018) wei, so not even a single Avax can be stored numerically without exceeding the range of Javascript numbers.

For that reason, only string balance properties are available, which are balanceString, confirmedBalanceString, and spendableBalanceString.

Transactions

BitGo's Avalanche C-Chain multisig contract currently only supports one sender and one recipient. That means that the sendMany call will only accept one recipient.

Stellar

Stellar can be accessed with the following coin types:

Environment Coin Type Faucet
Stellar Production xlm
Stellar Testnet txlm https://www.stellar.org/laboratory/#account-creator?network=test

Generating wallets

bitgo
  .coin('txlm')
  .wallets()
  .generateWallet({
    label: 'My Test Wallet',
    passphrase: 'secretpassphrase1a5df8380e0e30',
  })
  .then(function (wallet) {
    // print the new wallet
    console.dir(wallet);
  });
LABEL="My Test Wallet"
PASSPHRASE="secretpassphrase1a5df8380e0e30"

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d "{ \"label\": \"$LABEL\", \"passphrase\": \"$PASSPHRASE\" }" \
http://$BITGO_EXPRESS_HOST:3080/api/v2/txlm/wallet/generate

Before you can use a Stellar wallet, it must be initialized on the Stellar blockchain. A funding transaction must first be sent to the wallet's address. When BitGo detects this funding transaction, it automatically sends another initialization transaction to set up the signers and the home domain of the account.

Until the initialization transaction is confirmed, the wallet is not ready for use, and the receive address is not exposed in the API. This is to protect users from losing funds by sending to a wallet that does not exist on the network.

Warning: Do not use a Stellar wallet while it is being initialized or you may lose funds.

Stellar accounts must maintain a minimum balance. See Stellar Balances.

Required reserve

curl -X GET \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/txlm/requiredReserve

Fetch information about reserve requirements for an account. See Stellar Balances.

HTTP Request

GET /api/v2/:coin/requiredReserve

HTTP Response

Field Description
baseFee base fee used in transaction fees.
baseReserve base reserve used in minimum account balances.
reserve minimum account balance, calculated using base reserve.
minimumFunding minimum funding balance, calculated using reserve and base fee.
height the height of the block that provides the base values.

Creating addresses

bitgo
  .coin('txlm')
  .wallets()
  .getWallet({ id: '585c51a5df8380e0e3082e46' })
  .then(function (wallet) {
    return wallet.createAddress();
  })
  .then(function (newAddress) {
    // print new address details
    console.dir(newAddress);
  });
WALLET=585c51a5df8380e0e3082e46

curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/txlm/wallet/$WALLET/address

The BIP-32 standard cannot be taken advantage of, and hence generated XLM addresses differ only in their sequentially incrementing memo id components. The memo type used by BitGo is MEMO_ID: a 64-bit unsigned numeric string. Whenever a new address is created, the incremented memoId and the rootAddress are returned in the address' coinSpecific property.

Balances

Lumen (XLM) is the native asset of the Stellar blockchain. The base unit of Lumen is stroop:

  • 1 stroop is 10 -7 or 0.0000001 Lumen.
  • 1 Lumen is 10 7 or 10000000 stroop (10 million).

Balances are supported in string format: balanceString, confirmedBalanceString, and spendableBalanceString.

All Stellar accounts must maintain a minimum balance of lumens. The minimum balance is calculated using the base reserve, which is currently 0.5 XLM. The absolute minimum balance for an account is 1 XLM, which is equal to (2 + 0 entries) * 0.5 base reserve. Each additional entry reserves an additional 0.5 XLM.

Base fee

Stellar has a base fee determined dynamically using a version of a VCG auction. When you submit a transaction to the network, you specify the maximum base fee you’re willing to pay per operation, but you’re actually charged the lowest possible fee based on network activity.

When network activity is below capacity, you pay the network minimum, which is currently 100 stroops (0.00001 XLM) per operation.

Transactions

Stellar uses an account-based model, similar to XRP. Additionally, due to the use of memo, Stellar transactions only support one input and one output.

Federation

BitGo supports the Stellar federation protocol that matches Stellar addresses to Stellar accounts. Additionally, the BitGo federation server provides the next memo id for the wallet. Stellar accounts can be looked up by their Stellar address or their account ID.

Users can create email-like usernames for their Stellar wallets. A Stellar address is conformed by the Stellar username and the account's home domain (e.g. test*bitgo.com).

Stellar usernames are unique, and only accept lower-case letters, numbers and the characters: -_.+@. The home domain is automatically set to bitgo.com. A Stellar username can only be set once the wallet has been initialized, and it cannot be changed. See Update Wallet.

Stellar Tokens

Stellar tokens can be accessed with the following coin types:

Environment Coin Type Code Issuer Website
Stellar Mainnet xlm:AQUA-GBNZILSTVQZ4R7IKQDGHYGY2QXL5QOFJYQMXPKWRRM5PAV7Y4M67AQUA AQUA aqua.network
Stellar Testnet txlm:BST-GBQTIOS3XGHB7LVYGBKQVJGCZ3R4JL5E4CBSWJ5ALIJUHBKS6263644L BST
Stellar Mainnet xlm:VELO-GDM4RQUQQUVSKQA7S6EM7XBZP3FCGH4Q7CL6TABQ7B2BEJ5ERARM2M5M VELO velo.org
Stellar Mainnet xlm:SLT-GCKA6K5PCQ6PNF5RQBF7PQDJWRHO6UOGFMRLK3DYHDOI244V47XKQ4GP SLT smartlands.io
Stellar Mainnet xlm:USD-GDUKMGUGDZQK6YHYA5Z6AY2G4XDSZPSZ3SW5UN3ARVMO6QSRDWP5YLEX USD anchorusd.com
Stellar Mainnet xlm:ETH-GBVOL67TMUQBGL4TZYNMY3ZQ5WGQYFPFD5VJRWXR72VA33VFNL225PL5 ETH stellarport.io
Stellar Mainnet xlm:WXT-GASBLVHS5FOABSDNW5SPPH3QRJYXY5JHA2AOA2QHH2FJLZBRXSG4SWXT WXT wxt.wirexapp.com
Stellar Mainnet xlm:USDC-GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN USDC centre.io
Stellar Mainnet xlm:SIX-GDMS6EECOH6MBMCP3FYRYEVRBIV3TQGLOFQIPVAITBRJUMTI6V7A2X6Z SIX six.network
Stellar Mainnet xlm:ARST-GCSAZVWXZKWS4XS223M5F54H2B6XPIIXZZGP7KEAIU6YSL5HDRGCI3DG ARST anchors.stablex.org
Stellar Mainnet xlm:BRLT-GCHQ3F2BF5P74DMDNOOGHT5DUCKC773AW5DTOFINC26W4KGYFPYDPRSO BRLT anchors.stablex.org

Wallet functionality

Stellar tokens are stored in Stellar wallets. As a result certain wallet functionality available to other coins is not available to supported tokens. It is not possible to create wallets, create/list/get receive addresses, or share wallets for Stellar tokens. All these functions will have to be done with the coin set to xlm or txlm since that is the actual coin type being used. In order to retrieve all token details associated with a Stellar wallet, such as balance, pending approvals, policies, and webhooks, set the "allTokens" parameter to true with the following calls:

  1. Get Wallet
  2. List Wallets
  3. List Pending Approvals
  4. List Wallet Webhooks
  5. List Transfers
  6. Add Wallet Webhook

Wallet trust lines (trusted tokens)

Stellar tokens must be "trusted" on-chain by sending a trustline transaction from the receiving wallet authorizing holding the token.

For self-managed wallets, use Build transaction and Send half-signed transaction with the type and trustlines parameters.

For custodial wallets, contact us at support@bitgo.com.

Keychains

Stellar tokens do not have a direct association with keys or keychains. Instead, all tokens share the same keys/keychains which belong to the Stellar wallet.

Balances

Stellar tokens share the same precision as Lumen (10 7). To view token balances, call Get Wallet with expandBalance=true and allTokens=true:

  {{baseUrl}}/api/v2/xlm/wallet/{walletId}}?expandBalance=true&allTokens=true

Transactions

Stellar token transactions spend two types of assets: the token itself being sent and XLM (Lumens) paid in transaction fees. For this reason, BitGo will generate two transfers on the sending wallet with the same txid to track changes in both balances.

Stellar Tokens Webhooks

By setting the "allTokens" parameter to true, a generic webhook is created which will trigger on all Stellar token and XLM transactions. It will send an http request to your webhook url and specify whether it is Stellar or a token using the field "coin". Here's an example response for a test token called "txlm:BST-GBQTIOS3XGHB7LVYGBKQVJGCZ3R4JL5E4CBSWJ5ALIJUHBKS6263644L".

{
    "hash":"26683ffb83b86f29c9c0ccd14e8cbebf17fa903dab286320b3ef2e36f5d9a924",
    "transfer":"5b612d25c9067f2a1db11a15f165989e",
    "coin":"txlm:BST-GBQTIOS3XGHB7LVYGBKQVJGCZ3R4JL5E4CBSWJ5ALIJUHBKS6263644L",
    "type":"transfer",
    "state":"confirmed",
    "wallet":"5a13adcab70f2c284fdd9682db5e6d64"
}

To get additional details about this transfer, you will then need to get the transfer details using the token name and transfer id. For the above transfer you'd need to call the Get Transfer route to check the amount transferred and other details (e.g. /api/v2/txlm:BST-GBQTIOS3XGHB7LVYGBKQVJGCZ3R4JL5E4CBSWJ5ALIJUHBKS6263644L/wallet/5a13adcab70f2c284fdd9682db5e6d64/transfer/5b612d25c9067f2a1db11a15f165989e).

Note: A transaction that sends both XLM and a Stellar token will cause one webhook notification for each asset.

Tezos

Tezos (xtz) can be accessed with the following coin types:

Environment Coin Type Faucet
Tezos Production xtz https://faucet.tezos.com/
Tezos Carthage Testnet txtz https://faucet.tzalpha.net/

Enterprise fee address

ENTERPRISEID=585c51a5df8380e0e3082e46

curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/txtz/enterprise/$ENTERPRISEID/feeAddressBalance

Each enterprise has a fee address which will be used to pay for transaction fees on every Tezos wallet in such enterprise. The fee address is displayed in the dashboard of the BitGo website, and you must fund it before creating a wallet, address, or sending funds. Unlike in Bitcoin (where the sending wallet also pays the transaction fees) BitGo's Tezos wallet contract requires a separate account to initiate the transaction and pay the fees. If the enterprise's fee address runs out of funds, you will not be able to create new wallets, addresses, or send transactions until you fund the fee address. You will not be able to use one of your own Tezos wallets to fund the fee address if the fee address is too low (because you will not be able to send transactions from your wallet) so it is best to create and fund a non-BitGo Tezos account so you can use it to fund your BitGo enterprise fee address. Any open source Tezos wallet or exchange can be used to create an account.

Note that the fee address is a single-signature account and the private key is created and owned by BitGo, so you will not be able to send funds out of the fee address once you have sent them in.

There will be a 'feeAddress' field under the 'CoinSpecific' key for Tezos wallets. You will use this address to pay the fees for creating transactions and addresses.

Generating wallets

To create a Tezos wallet using BitGoJS:

bitgo
  .coin('txtz')
  .wallets()
  .generateWallet({
    label: 'My Test Wallet',
    passphrase: 'secretpassphrase1a5df8380e0e30',
  })
  .then(function (wallet) {
    // print the new wallet
    console.dir(wallet);

    // print the new wallets address to send to
    console.dir(wallet.coinSpecific.rootAddress);
  });

It currently costs 1.33964 ꜩ to create a new Tezos wallet. This amount is payed by the fee account and consists of 0.04764 ꜩ in baker fees, 1.035 ꜩ storage fees, and 0.257 ꜩ for allocation fees.

To create a Tezos wallet using the platform API:

LABEL="My Test Wallet"
PASSPHRASE="secretpassphrase1a5df8380e0e30"

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d "{ \"label\": \"$LABEL\", \"passphrase\": \"$PASSPHRASE\" }" \
http://$BITGO_EXPRESS_HOST:3080/api/v2/txtz/wallet/generate

A similar operation will need to be provided above to the resultant rootAddress.

Creating addresses

bitgo
  .coin('txtz')
  .wallets()
  .getWallet({ id: '585c51a5df8380e0e3082e46' })
  .then(function (wallet) {
    return wallet.createAddress();
  })
  .then(function (newAddress) {
    // print new address details
    console.dir(newAddress);
  });
WALLET=585c51a5df8380e0e3082e46

curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/txtz/wallet/$WALLET/address

The creation of receive addresses for Tezos wallets results in additional accounts associated with the main wallet. When a user receives funds on a receive address, those funds need to be consolidated in the base address of the wallet first in order to be spent. See Consolidate account.

Sending

Funds can only be sent out from the wallet's base address. If your wallet has sufficient funds but you are unable to send, you may need to consolidate the funds from the receive addresses into the base address by calling Consolidate account first. Fees of transactions sent from the base wallet address are paid for by the fee address, while fees of consolidation transactions taken from the receive address itself. The public key of every Tezos receive address must be revealed to the network before it can send transactions. The reveal operation will be added to the address' first consolidation transaction. The baker fee for a reveal operation is 0.00142 ꜩ and for a consolidation transaction is 0.04764 ꜩ.

Balances

tez (ꜩ) (XTZ) is the native asset of the Tezos blockchain. The base unit of tez is micro tez (or "mutez"):

  • 1 micro tez is (10-6) or 0.000001 tez.
  • 1 tez is (106) or 1000000 micro tez (1 million).

Balances are supported in string format: balanceString, confirmedBalanceString, and spendableBalanceString.

Funds stored in the base address of a Tezos wallet are considered "spendable balance". The sum of the balances of the base address and the receive addresses is the wallet's "confirmed balance".

TRON

TRON (TRX) can be accessed with the following coin types:

Environment Coin Type Faucet
TRON Production trx
TRON Tronex Testnet ttrx http://testnet.tronex.io/status/getStatusPage

Generating wallets

To create an Tron wallet using BitGoJS:

bitgo
  .coin('ttrx')
  .wallets()
  .generateWallet({
    label: 'My Test Wallet',
    passphrase: 'secretpassphrase1a5df8380e0e30',
  })
  .then(function (wallet) {
    // print the new wallet
    console.dir(wallet);

    // print the new wallets address to send to
    console.dir(wallet.coinSpecific.rootAddress);
  });

You need to fund the wallet with 100 TRX as wallet creation costs this much for an individual user. You can find the address to fill on the rootAddress field above.

To create an TRON wallet using the platform API:

LABEL="My Test Wallet"
PASSPHRASE="secretpassphrase1a5df8380e0e30"

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d "{ \"label\": \"$LABEL\", \"passphrase\": \"$PASSPHRASE\" }" \
http://$BITGO_EXPRESS_HOST:3080/api/v2/ttrx/wallet/generate

A similar operation will need to be provided above to the resultant rootAddress.

Creating addresses

Due to protocol limitations, multiple receive addresses for a wallet is not supported yet.

That means that the sendMany call is not supported since transactions are one to one in TRON. Using such method will result in a 400 error.

Balances

Tronix (TRX) is the native asset of the TRON blockchain. The base unit of Tronix is sun:

  • 1 sun is (10-6) or 0.000001 Tronix.
  • 1 Tronix is (106) or 1000000 sun (1 million).

Balances are supported in string format: balanceString, confirmedBalanceString, and spendableBalanceString.

XRP Ledger (Ripple)

XRP can be accessed with the following coin types:

Environment Coin Type Faucet
XRP Production xrp
XRP Altnet txrp

Generating wallets

bitgo
  .coin('txrp')
  .wallets()
  .generateWallet({
    label: 'My Test Wallet',
    passphrase: 'secretpassphrase1a5df8380e0e30',
  })
  .then(function (wallet) {
    // print the new wallet
    console.dir(wallet);
  });
LABEL="My Test Wallet"
PASSPHRASE="secretpassphrase1a5df8380e0e30"

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d "{ \"label\": \"$LABEL\", \"passphrase\": \"$PASSPHRASE\" }" \
http://$BITGO_EXPRESS_HOST:3080/api/v2/txrp/wallet/generate

Before you can use an XRP wallet, it must be initialized on the XRP blockchain (or XRP Ledger). When you create an XRP wallet, BitGo sends 4 initialization transactions on the XRP network to generate the wallet.

Until the initialization transaction is confirmed, the wallet is not ready for use, and the receive address is not exposed in the API. This is to protect users from losing funds by sending to a wallet that does not exist on the network.

Warning: Do not use an XRP wallet while it is being initialized or you may lose funds.

The fee for creating an XRP wallet is currently 25 XRP. In production, there is limit of 5 wallets total per enterprise plus a mantatory payment agreement. In testnet, there is no limit.

Note: To inquire about increasing your limit, contact BitGo at support@bitgo.com.

Creating addresses

bitgo
  .coin('txrp')
  .wallets()
  .getWallet({ id: '585c51a5df8380e0e3082e46' })
  .then(function (wallet) {
    return wallet.createAddress();
  })
  .then(function (newAddress) {
    // print new address details
    console.dir(newAddress);
  });
WALLET=585c51a5df8380e0e3082e46

curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/txrp/wallet/$WALLET/address

A key difference between XRP and Bitcoin is that XRP has no concept of UTXOs, and operates on an account-based model instead. Additionally, XRP transactions only support one input and one output. That means that the sendMany call is not supported.

The BIP-32 standard therefore cannot be taken advantage of, and hence generated XRP addresses differ only in their sequentially incrementing destination tag components.

Balances

XRP (XRP) is the native asset of the XRP ledger. The base unit of XRP is drop:

  • 1 drop is (10-6) or 0.000001 XRP.
  • 1 XRP is (106) or 1000000 drops (1 million).

Balances are supported in string format: balanceString, confirmedBalanceString, and spendableBalanceString.

XRP is formerly known as Ripple.

Zcash

BitGo supports transparent transactions with the latest Zcash network upgrade, Sapling. This means only Sapling compatible transactions will be generated and read by BitGo. To sign Sapling transactions, BitGo SDK version 9.2.0 or greater is required.

Zcash can be accessed with the following coin types:

Environment Coin Type Faucet
Zcash Production zec
Zcash Testnet tzec https://faucet.testnet.z.cash/

Notes on shielded transactions

Only transparent addresses are supported by BitGo wallets which limits the type of transactions allowed. A Zcash BitGo wallet can receive funds from a transparent or a shielded address but can only send funds to a transparent address.

Generating wallets

bitgo
  .coin('tzec')
  .wallets()
  .generateWallet({
    label: 'My Test Wallet',
    passphrase: 'secretpassphrase1a5df8380e0e30',
  })
  .then(function (wallet) {
    // print the new wallet
    console.dir(wallet);
  });
LABEL="My Test Wallet"
PASSPHRASE="secretpassphrase1a5df8380e0e30"

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d "{ \"label\": \"$LABEL\", \"passphrase\": \"$PASSPHRASE\" }" \
http://$BITGO_EXPRESS_HOST:3080/api/v2/tzec/wallet/generate

Creating addresses

bitgo
  .coin('tzec')
  .wallets()
  .getWallet({ id: '585c51a5df8380e0e3082e46' })
  .then(function (wallet) {
    return wallet.createAddress();
  })
  .then(function (newAddress) {
    // print new address details
    console.dir(newAddress);
  });
WALLET=585c51a5df8380e0e3082e46

curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/tzec/wallet/$WALLET/address

See the table of address types under Address Derivation (BIP-32) above. Zcash defaults to chain 0 (and does not support segwit).

Balances

Zec (ZEC) is the native asset of the Zcash blockchain. The base unit of ZEC is zatoshi:

  • 1 zatoshi is (10-8) or 0.00000001 Zec.
  • 1 ZEC is (108) or 100000000 zatoshis (100 million).

Balances are supported in string and number format but string is recommended to ensure values do not exceed the programmable number limit: balanceString, confirmedBalanceString, and spendableBalanceString.

Sending Transactions using BitGoJS or BitGo Express

Zcash blockchain parameters update with each hard fork, and this means an updated version of BitGoJS or BitGo Express is required to successfully sign and send transactions using the new blockchain parameters.

For the current Zcash blockchain parameters, the minimum supported versions for sending Zcash are BitGoJS 9.2.0 or greater, and BitGo Express 9.2.0 or greater.

If an SDK version is detected which does not support the current blockchain parameters, an UnsupportedSdkVersion error will be returned when attempting to build or send transactions.

Address Derivation (BIP-32)

Creating addresses

BitGo uses a hierarchical deterministic (HD) wallet scheme for:

  • Manually generated addresses (for deposits)
  • Change addresses.

This HD scheme supports the BIP-32 standard with the path /0/0/{chain_code}/n where {chain_code} is a variable that represents an address type:

Chain Code Address Type Deposit or Change
0 Pay to Script Hash (P2SH) Deposit
1 Pay to Script Hash (P2SH) Change
10 Wrapped Segwit (P2SH-P2WSH) Deposit
11 Wrapped Segwit (P2SH-P2WSH) Change
20 Bech32/Native Segwit/Pay to Witness Script Hash (P2WSH) Deposit
21 Bech32/Native Segwit/Pay to Witness Script Hash (P2WSH) Change
30 Bech32m Taproot (P2TR) Deposit
31 Bech32m Taproot (P2TR) Change

Algorand

Algorand can be accessed with the following coin types:

Environment Coin Type Faucet
Algorand Production algo
Algorand Testnet talgo https://bank.testnet.algorand.network/

Generating wallets

To create an Algo wallet using BitGoJS:

bitgo
  .coin('talgo')
  .wallets()
  .generateWallet({
    label: 'My Test Wallet',
    passphrase: 'secretpassphrase1a5df8380e0e30',
  })
  .then(function (wallet) {
    // print the new wallet
    console.dir(wallet);
  });

To create an Algo wallet using the platform API:

LABEL="My Test Wallet"
PASSPHRASE="secretpassphrase1a5df8380e0e30"

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d "{ \"label\": \"$LABEL\", \"passphrase\": \"$PASSPHRASE\" }" \
http://$BITGO_EXPRESS_HOST:3080/api/v2/talgo/wallet/generate

Algorand accounts must maintain a minimum balance of 100,000 microAlgos (0.1 Algos). Account operations (send, receive, etc) that trigger a balance lower than the minimium are not permitted.

In addition every enabled token will increase the minimum balance in 100,000 microAlgos. In example :

  • given a wallet without tokens enabled minumum balance is 100,000 microalgos.
  • given a wallet with one token enabled minimum balance is 200,000 microAlgos
  • given a wallet with two token enabled minimum balance is 300,000 microAlgos
  • and so ...

Creating addresses

bitgo
  .coin('talgo')
  .wallets()
  .getWallet({ id: '585c51a5df8380e0e3082e46' })
  .then(function (wallet) {
    return wallet.createAddress();
  })
  .then(function (newAddress) {
    // print new address details
    console.dir(newAddress);
  });
WALLET=585c51a5df8380e0e3082e46

curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/talgo/wallet/$WALLET/address

Algorand is an account-based coin. The creation of receive addresses results in additional accounts. When a user receives funds on a receive address, those funds need to be consolidated in the base address of the wallet first in order to be spent. See Consolidate account.

Sending

Funds can only be sent out from the wallet's base address. If your wallet has sufficient funds but you are unable to send, you may first need to sweep the funds from the receive addresses into the base address by calling Consolidate account.

Note: sendMany is not supported as Algo transactions only support one input and one output.

Balances

Algo (ALGO) is the native asset of the Algorand blockchain. The base unit of Algo is microAlgo:

  • 1 microAlgo is (10-6) or 0.000001 Algo.
  • 1 Algo is (106) or 1000000 microAlgos (1 million).

Note: The minimum earning unit (MEU) of Algorand is 1 Algo.

Balances are supported in string and number format but string is recommended to ensure values do not exceed the programmable number limit: balanceString, confirmedBalanceString, and spendableBalanceString.

Tokens

Algorand supports tokens transactions. This means you can now make transactions with other tokens apart from native algo coin.

Enable token

In order to make token transactions you first need to enable the token in your wallet address(es). Once enabled, you will be able to receive and send that respective token. This process will take some fees from your account (1,000 microAlgos is the minimum and most common fee for enabling tokens).

bitgo
  .coin('talgo:tokenID')
  .wallets()
  .get({ id: walletId })
  .then(function (wallet) {
    return wallet.sendMany({
      type: 'enabletoken',
      recipients: [
        {
          amount: '0',
          address: yourWalletAddress,
        },
      ],
      feeRate: 1,
      yourWalletPassphrase,
    })
  });

Disable token

In order to reduce minimum balance needed into account, or just for stop receiving transactions from some tokens, you can disable each previous enabled from your wallet address(es).

bitgo
  .coin('talgo:tokenID')
  .wallets()
  .get({ id: walletId })
  .then(function (wallet) {
    return wallet.sendMany({
      type: 'disabletoken',
      recipients: [
        {
          amount: '0',
          address: yourWalletAddress,
        },
      ],
      feeRate: 1,
      yourWalletPassphrase,
      closeRemainderTo,
    })
  });

Note: closeRemainderTo is the address you want to send all remaining token balance when disable it.

Send tokens

Just as for your native token (ALGOs) you would be able to send tokens (from token enabled addresses) to other wallets. Here is an example of it:

bitgo
  .coin('talgo:tokenID')
  .wallets()
  .get({ id: walletId })
  .then(function (wallet) {
    return wallet.sendMany({
      type: 'transfer',
      recipients: [
        {
          amount,
          receiverAddress,
        },
      ],
      walletPassphrase: yourWalletPassphrase,
    })
  });

Recieve tokens

Once you have enabled the token you desire, and the token enable transaction has been confirmed, you will be able to receive tokens from other wallets.

Rewards

Accounts holding at least 1 MEU (1 Algo or more) are eligible to earn rewards. Rewards are accrued in the Algorand network and claimed by a specific account when a transaction involving that account is confirmed.

BitGo does not keep track of pending rewards. Balances only account for rewards received in confirmed pay transactions.

Reward calculation is complex and the amounts change every 500,000 blocks (the Rewards Period). To learn more, see Algorand Rewards - A Technical Overview.

Fee rate

Algorand's minimum transaction fee is 1000 microAlgos. For example, if you set feeRate to "1" microAlgo/kByte and the fee size is 247 kBytes, then the fee amount=247 microAlgos. But because this is less than the required minimum, the default of 1000 microAlgos is applied.

Binance Smart Chain

Binance Smart Chain can be accessed with the following coin types:

Environment Coin Type Faucet
BSC Production bsc
BSC Testnet tbsc https://testnet.binance.org/faucet-smart

Generating wallets

bitgo
  .coin('tbsc')
  .wallets()
  .generateWallet({
    label: 'My Test Wallet',
    passphrase: 'secretpassphrase1a5df8380e0e30',
    enterprise: '5612c2beeecf83610b621b90964448cd',
    multisigType: 'tss',
    walletVersion: 3,
  })
  .then(function (wallet) {
    // print the new wallet
    console.dir(wallet);
  });

Balances

BNB is the native asset of the Binance Smart Chain blockchain. The base unit of BNB is jager:

  • 1 jager is (10-8) or 0.00000001 BNB.
  • 1 BNB is (108) or 100000000 jager (100 million).

Bitcoin

Bitcoin can be accessed with the following coin types:

Environment Coin Type Faucet
Bitcoin Production btc
Bitcoin Testnet tbtc https://coinfaucet.eu/en/btc-testnet/

Note: The Bitcoin wallets in Platform V2 should not be confused with the wallets created via V1 routes.

Generating wallets

bitgo
  .coin('tbtc')
  .wallets()
  .generateWallet({
    label: 'My Test Wallet',
    passphrase: 'secretpassphrase1a5df8380e0e30',
  })
  .then(function (wallet) {
    // print the new wallet
    console.dir(wallet);
  });
LABEL="My Test Wallet"
PASSPHRASE="secretpassphrase1a5df8380e0e30"

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d "{ \"label\": \"$LABEL\", \"passphrase\": \"$PASSPHRASE\" }" \
http://$BITGO_EXPRESS_HOST:3080/api/v2/tbtc/wallet/generate

For Bitcoin, BitGo uses a 2-of-3 multisig P2SH scheme, with the keys in the order of User, Backup, and BitGo respectively.

You can create wallets with a single line of code using the BitGo SDK.

Creating addresses

bitgo
  .coin('tbtc')
  .wallets()
  .getWallet({ id: '585c51a5df8380e0e3082e46' })
  .then(function (wallet) {
    return wallet.createAddress();
  })
  .then(function (newAddress) {
    // print new address details
    console.dir(newAddress);
  });
WALLET=585c51a5df8380e0e3082e46

curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/tbtc/wallet/$WALLET/address

Note: See the table of address types under Address Derivation (BIP-32) above. Bitcoin defaults to chain 10.

Balances

Bitcoin (BTC) is the native asset of the Bitcoin blockchain. The base unit of Bitcoin is satoshi (or "sat"):

  • 1 satoshi is (10-8) or 0.00000001 Bitcoin.
  • 1 Bitcoin is (108) or 100000000 satoshis (100 million).

Balances are supported in string and number format but string is recommended to ensure values do not exceed the programmable number limit: balanceString, confirmedBalanceString, and spendableBalanceString.

Fee rate

Bitcoin's minimum transaction fee is 1000 satoshis. When sending a transaction, the default feeRate is 1000 satoshis/kvByte or 1 sat/vByte (which is 0.00000001 BTC/vByte). Use Get Fee Estimate to calculate a fee rate (feePerKb) that increases the probability that your transaction is confirmed.

Bitcoin Cash

Bitcoin Cash can be accessed with the following coin types:

Environment Coin Type Faucet
Bitcoin Cash Production bch
Bitcoin Cash Testnet tbch https://coinfaucet.eu/en/bch-testnet/

New wallets created within Bitcoin Cash are not able to receive normal Bitcoin.

Fork notes

Bitcoin Cash (BCH) forked from the Bitcoin mainnet on August 1st, 2017. Bitcoin addresses that had balances on this date kept the same balance within Bitcoin Cash. After this date, blocks and transactions on the BCH fork no longer overlap with Bitcoin.

The Bitcoin Cash fork is replay-safe both ways, meaning that transactions made after August 1st, 2017 on one chain do not occur on the other.

Migrated Wallets

All BitGo customers using our Bitcoin wallets on August 1st, 2017 had their wallets and keys automatically migrated to the V2 BCH coin type.

Users can find migrated wallets by using the List Wallets API. On the wallet object, there is a migratedFrom property that corresponds to the Bitcoin Wallet ID.

To protect against confusion (users sending BCH to BTC addresses or vice versa), migrated wallets may not create new addresses by default. Users should create a new wallet with new keys to ensure all new BCH addresses do not collide with BTC addresses.

Generating wallets

bitgo
  .coin('bch')
  .wallets()
  .generateWallet({
    label: 'My Test Wallet',
    passphrase: 'secretpassphrase1a5df8380e0e30',
  })
  .then(function (wallet) {
    // print the new wallet
    console.dir(wallet);
  });
LABEL="My Test Wallet"
PASSPHRASE="secretpassphrase1a5df8380e0e30"

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d "{ \"label\": \"$LABEL\", \"passphrase\": \"$PASSPHRASE\" }" \
http://$BITGO_EXPRESS_HOST:3080/api/v2/bch/wallet/generate

For Bitcoin, BitGo uses a 2-of-3 multisig P2SH scheme, with the keys in the order of User, Backup and BitGo respectively.

Wallet creation can be done in a single line with the help of our SDK.

Creating addresses

bitgo
  .coin('bch')
  .wallets()
  .getWallet({ id: '585c51a5df8380e0e3082e46' })
  .then(function (wallet) {
    return wallet.createAddress();
  })
  .then(function (newAddress) {
    // print new address details
    console.dir(newAddress);
  });
WALLET=585c51a5df8380e0e3082e46

curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/bch/wallet/$WALLET/address

Note: See the table of address types under Address Derivation (BIP-32) above. Bitcoin Cash defaults to chain 0 (and does not support segwit).

Bitcoin Gold

Bitcoin Gold can be accessed with the following coin types:

Environment Coin Type Faucet
Bitcoin Gold Production btg

Fork notes

Bitcoin Gold (BTG) forked from the Bitcoin mainnet on October 24th, 2017. Bitcoin addresses that had balances on this date kept the same balance within Bitcoin Gold. After this date, blocks and transactions on the BTG fork no longer overlap with Bitcoin.

Bitcoin Gold uses a different address format from Bitcoin which protects users from accidentally sending coins to the wrong chain. Bitcoin Gold addresses start with either a G or an A. As BitGo wallets use multisig addresses, all addresses for BitGo wallets start with an A.

The Bitcoin Gold fork is replay-safe both ways, meaning that new transaction made on one chain will not occur on the other.

Migrated Wallets

All BitGo customers using our Bitcoin wallets on October 24th, 2017 had their wallets and keys automatically migrated to the V2 BTG coin type.

Users can find migrated wallets by using the List Wallets API. On the wallet object, there is a migratedFrom property that corresponds to the Bitcoin Wallet ID.

Creating addresses

Note: See section Address Derivation (BIP-32) for a table of address types. Bitcoin Gold defaults to chain 10.

Casper

Casper can be accessed with the following coin types:

Environment Coin Type Faucet
Casper Production cspr
Casper Testnet tcspr https://testnet.cspr.live/tools/faucet

Generating wallets

bitgo
  .coin('tcspr')
  .wallets()
  .generateWallet({
    label: 'My Test Wallet',
    passphrase: 'secretpassphrase1a5df8380e0e30',
  })
  .then(function (wallet) {
    // print the new wallet
    console.dir(wallet);
  });
LABEL="My Test Wallet"
PASSPHRASE="secretpassphrase1a5df8380e0e30"

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d "{ \"label\": \"$LABEL\", \"passphrase\": \"$PASSPHRASE\" }" \
http://$BITGO_EXPRESS_HOST:3080/api/v2/tcspr/wallet/generate

Before you can use a Casper wallet, it must be initialized on the Casper blockchain. A funding transaction must first be sent to the wallet's address. When BitGo detects this funding transaction, it automatically sends another initialization transaction to set up the signers and the home domain of the account.

Until the initialization transaction is confirmed, the wallet is not ready for use, and the receive address is not exposed in the API. This is to protect users from losing funds by sending to a wallet that does not exist on the network.

Warning: Do not use a Casper wallet while it is being initialized or you may lose funds.

Casper accounts must maintain a minimum balance. See Casper Balances.

Required reserve

curl -X GET \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/tcspr/requiredReserve

Fetch information about reserve requirements for an account. See Casper Balances.

HTTP Request

GET /api/v2/:coin/requiredReserve

Response

Field Description
baseFee Base fee used in transaction fees.
baseReserve Base reserve used in minimum account balances.
reserve Minimum account balance, calculated using base reserve.
minimumFunding Minimum funding balance, calculated using reserve and base fee.
height Height of the block that provides the base values.

Creating addresses

bitgo
  .coin('tcspr')
  .wallets()
  .getWallet({ id: '585c51a5df8380e0e3082e46' })
  .then(function (wallet) {
    return wallet.createAddress();
  })
  .then(function (newAddress) {
    // print new address details
    console.dir(newAddress);
  });
WALLET=585c51a5df8380e0e3082e46

curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/tcspr/wallet/$WALLET/address

Casper wallet addresses differ by a sequentially incremented transferId (because they cannot leverage the BIP-32 standard). The transferId type used by BitGo is TRANSFER_ID: a 64-bit unsigned numeric string.

When a new address is created, the incremented transferId and the rootAddress are returned in the coinSpecific property.

Balances

Casper (CSPR) the native asset of the Casper blockchain. The base unit of Casper is the mote:

  • 1 mote is 10-9 or 0.000000001 Casper.
  • 1 Casper is 109 or 1000000000 motes (1 billion).

Balances are supported in string format: balanceString, confirmedBalanceString, and spendableBalanceString.

Casper accounts must maintain a minimum balance which is calculated by adding a base reserve and a base fee. Currently, the base reserve is 2.5 CSPR and the base fee is 1 CSPR so the minimum balance required is 3.5 CSPR.

Transactions

Casper uses an account-based model like XLM and XRP. But instead of using XLM's memo or XRP's destination tag, Casper uses transferId.

Currently, the fixed fee is 10,000 motes (0.0001 CSPR). And the minimum amount for a transaction is 2.5 CSPR.

Staking

Casper provides staking service via smart contracts. Staking and unstaking requests require an active validator and an amount greater or equal to 2.5 CSPR to be provided.

Currently, the fees for staking and unstaking are 5 CSPR for both.

Celo

Celo can be accessed with the following coin types:

Environment Coin Type Faucet
Celo Production celo
Celo Testnet tcelo https://celo.org/developers/faucet

Enterprise fee address

ENTERPRISEID=585c51a5df8380e0e3082e46

curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/tcelo/enterprise/$ENTERPRISEID/feeAddressBalance

Celo uses the same fee address structure as Ethereum. Each enterprise has a fee address that is used to pay for transaction fees on all Celo wallets in that enterprise. The fee address is displayed in the dashboard of the BitGo website, and you must fund it before creating a wallet, address, or sending a transaction.

If the enterprise's fee address runs out of funds, you cannot create new wallets or addresses, and cannot send transactions until you fund the fee address. If the balance of your fee address gets too low, you will not be able to fund it with one of your own Celo wallets (because you will not be able to send transactions from your Celo wallet). BitGo recommneds that you create and fund a non-BitGo Celo account, so you can use it to fund your BitGo enterprise fee address. Any open source Celo wallet can be used to create an account.

Note: A best practice is to create and fund a non-BitGo Celo account to fund your BitGo enterprise fee address.

Note that the fee address is a single-signature account, and the private key is created and owned by BitGo. You cannot send funds out of the fee address once you have sent them in. There is a feeAddress field under the CoinSpecific key for Celo wallets. Use this address to pay the fees for creating transactions and addresses.

Generating wallets

bitgo
  .coin('tcelo')
  .wallets()
  .generateWallet({
    label: 'My Test Wallet',
    passphrase: 'secretpassphrase1a5df8380e0e30',
    enterprise: '5612c2beeecf83610b621b90964448cd',
  })
  .then(function (wallet) {
    // print the new wallet
    console.dir(wallet);
  });
LABEL="My Test Wallet"
PASSPHRASE="secretpassphrase1a5df8380e0e30"

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d "{ \"label\": \"$LABEL\", \"passphrase\": \"$PASSPHRASE\" }" \
http://$BITGO_EXPRESS_HOST:3080/api/v2/tcelo/wallet/generate

Before you can use a Celo wallet, it must be initialized on the Celo blockchain. A funding transaction must first be sent to the wallet's address. When BitGo detects this funding transaction, it automatically sends another initialization transaction to set up the signers and the home domain of the account.

Until the initialization transaction is confirmed, the wallet is not ready for use, and the receive address is not exposed in the API. This is to protect users from losing funds by sending to a wallet that does not exist on the network.

Warning: Do not use a Celo wallet while it is being initialized or you may lose funds.

Creating addresses

bitgo
  .coin('tcelo')
  .wallets()
  .getWallet({ id: '585c51a5df8380e0e3082e46' })
  .then(function (wallet) {
    return wallet.createAddress();
  })
  .then(function (newAddress) {
    // print new address details
    console.dir(newAddress);
  });
WALLET=585c51a5df8380e0e3082e46

curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/tcelo/wallet/$WALLET/address

As with Celo wallets, Celo address must be initialized on the Celo blockchain before they can be used.

To deploy a receive address contract, BitGo sends a transaction on the Celo network. Remember that you must fund the fee address. Like wallet creation process, a Celo address is not immediately usable and so the caller of this function must wait for the initialization transaction to be confirmed before attempting to fetch, or send to, the address.

Warning: Do not use a Celo address while it is being initialized or you may lose funds.

Balances

CELO (CELO) is the native asset of the Celo blockchain. The base unit of CELO is wei:

  • 1 wei is (10-18) or 0.000000000000000001 CELO.
  • 1 CELO is (1018) or 1000000000000000000 wei (1 quintillion).

Balances are supported in string format: balanceString, confirmedBalanceString, and spendableBalanceString.

Transactions

BitGo's Celo multisig contract currently only supports one sender and one recipient so the sendMany is not supported.

Celo - ERC20 Tokens

Celo ERC20 tokens can be accessed with the following coin types:

Environment Coin Type Contract Details
Celo Alfajores Testnet Testnet tcusd https://alfajores-blockscout.celo-testnet.org/tokens/0x874069fa1eb16d44d622f2e0ca25eea172369bc1/token_transfers
Celo Mainnet cusd https://explorer.celo.org/tokens/0x765de816845861e75a25fca122bb6898b8b1282a/token_transfers

Dash

Dash can be accessed with the following coin types:

Environment Coin Type Faucet
Dash Production dash
Dash Testnet tdash http://test.faucet.masternode.io/

Generating wallets

bitgo
  .coin('tdash')
  .wallets()
  .generateWallet({
    label: 'My Test Wallet',
    passphrase: 'secretpassphrase1a5df8380e0e30',
  })
  .then(function (wallet) {
    // print the new wallet
    console.dir(wallet);
  });
LABEL="My Test Wallet"
PASSPHRASE="secretpassphrase1a5df8380e0e30"

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d "{ \"label\": \"$LABEL\", \"passphrase\": \"$PASSPHRASE\" }" \
http://$BITGO_EXPRESS_HOST:3080/api/v2/tdash/wallet/generate

For Dash, BitGo uses the same 2-of-3 multisig P2SH scheme as for Bitcoin, with the keys in the order of User, Backup and BitGo respectively.

Creating addresses

bitgo
  .coin('tdash')
  .wallets()
  .getWallet({ id: '585c51a5df8380e0e3082e46' })
  .then(function (wallet) {
    return wallet.createAddress();
  })
  .then(function (newAddress) {
    // print new address details
    console.dir(newAddress);
  });
WALLET=585c51a5df8380e0e3082e46

curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/tdash/wallet/$WALLET/address

Note: See the table of address types under Address Derivation (BIP-32) above. Dash defaults to chain 0 (and does not support segwit).

Balances

Dash (DASH) is the native asset of the Dash blockchain. The base unit of Dash is duff:

  • 1 duff is (10-8) or 0.00000001 Dash.
  • 1 Dash is (108) or 100000000 duffs (100 million).

Balances are supported in string and number format but string is recommended to ensure values do not exceed the programmable number limit: balanceString, confirmedBalanceString, and spendableBalanceString.

Dash InstantSend

Dash InstantSend is a extension allowing instant on-chain Dash payments.

Dash masternodes provide near instant certainty (before an on-chain confirmation) that a transaction's inputs cannot be respent, and that the transaction will be included in a following block instead of a conflicting transaction.

Dash InstantSend receiving and sending support is exposed through the instant flag on Transfer objects and sending APIs.

Dash InstantSend transactions require higher than normal fees. When the instant flag is set to true, these fees are automatically calculated when building a tranaction and enforced when sending.

EOS

EOS can be accessed with the following coin types:

Environment Coin Type Faucet
EOS Production eos
EOS Jungle Testnet teos https://monitor.jungletestnet.io/#faucet

Generating wallets

bitgo
  .coin('teos')
  .wallets()
  .generateWallet({
    label: 'My Test Wallet',
    passphrase: 'secretpassphrase1a5df8380e0e30',
  })
  .then(function (wallet) {
    // print the new wallet
    console.dir(wallet);
  });
LABEL="My Test Wallet"
PASSPHRASE="secretpassphrase1a5df8380e0e30"

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d "{ \"label\": \"$LABEL\", \"passphrase\": \"$PASSPHRASE\" }" \
http://$BITGO_EXPRESS_HOST:3080/api/v2/teos/wallet/generate

Before you can use an EOS wallet, it must be initialized on the EOS blockchain. A funding transaction must first be sent to the wallet's address. When BitGo detects this funding transaction, it automatically sends another initialization transaction to set up the signers and the home domain of the account.

Until the initialization transaction is confirmed, the wallet is not ready for use, and the receive address is not exposed in the API. This is to protect users from losing funds by sending to a wallet that does not exist on the network.

Warning: Do not use an EOS wallet while it is being initialized or you may lose funds.

Creating addresses

bitgo
  .coin('teos')
  .wallets()
  .getWallet({ id: '585c51a5df8380e0e3082e46' })
  .then(function (wallet) {
    return wallet.createAddress();
  })
  .then(function (newAddress) {
    // print new address details
    console.dir(newAddress);
  });
WALLET=585c51a5df8380e0e3082e46

curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/teos/wallet/$WALLET/address

EOS transactions only support one input and one output. That means that the sendMany call is not supported.

Like XLM, EOS addresses differ only by sequential and incrementing memo components (and do not use the BIP-32 standard).

Balances

EOS (EOS) is the native asset of the EOS blockchain. The base unit does not have a name and is simply referred to as the base unit of EOS.

  • 1 base unit of EOS is (10-4) or 0.0001 EOS.
  • 1 EOS is (104) or 10000 base units of EOS (10 thousand).

Balances are supported in string format: balanceString, confirmedBalanceString, and spendableBalanceString.

Ethereum

Ethereum can be accessed with the following coin types:

Environment Coin Type Faucet Instructions
Ethereum Production eth
Ethereum Testnet gteth https://goerlifaucet.com

Note: teth (aka Kovan testnet) has been deprecated. Please use gteth (aka Goerli testnet) instead.

Enterprise fee address

ENTERPRISEID=585c51a5df8380e0e3082e46

curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/gteth/enterprise/$ENTERPRISEID/feeAddressBalance

BitGo's Ethereum wallet contract requires separate accounts to send transactions and pay fees (unlike Bitcoin).

Each enterprise has one or more dedicated fee addresses (or "gas tanks") for paying Ethereum transaction fees. There is one fee address per network, for example, Ethereum mainnet, and each testnet.

On the dashboard of the BitGo UI, your "Network Gas Tanks," and their associated fee addresses, are displayed. In an Ethereum wallet response, there is a 'feeAddress' field under the 'CoinSpecific' key. Use this address to pay the fees for creating transactions and addresses.

Your enterprise must keep the relevant fee addresses funded in order to create wallets, create addresses, or send transaction. If you don't, you cannot do those operations, nor can you fund the tank.

Note: BitGo recommends that you create and fund a non-BitGo Ethereum account so you can use it to fund your BitGo enterprise fee addresses. Any open source Ethereum wallet or Ethereum exchange can be used to create an account.

A BitGo fee address is a single-signature account and the private key is created and owned by BitGo, so you cannot send funds from this address once you have sent them in.

Generating wallets

bitgo
  .coin('gteth')
  .wallets()
  .generateWallet({
    label: 'My Test Wallet',
    passphrase: 'secretpassphrase1a5df8380e0e30',
    enterprise: '5612c2beeecf83610b621b90964448cd',
  })
  .then(function (wallet) {
    // print the new wallet
    console.dir(wallet);
  });
LABEL="My Test Wallet"
PASSPHRASE="secretpassphrase1a5df8380e0e30"

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d "{ \"label\": \"$LABEL\", \"passphrase\": \"$PASSPHRASE\" }" \
http://$BITGO_EXPRESS_HOST:3080/api/v2/gteth/wallet/generate

Before you can use an Ethereum wallet, it must be initialized on the Ethereum blockchain. When you create an Ethereum wallet, BitGo sends a transaction on the Ethereum network in order to deploy its multi-signature wallet contract.

Note: Ethereum wallets can only be created under an enterprise. When you create an Ethereum wallet, remember to pass the enterprise Id.

Until the initialization transaction is confirmed, the wallet is not ready for use, and the receive address is not exposed in the API. This is to protect users from losing funds by sending to a wallet that does not exist on the network.

Warning: Do not use an Ethereum wallet while it is being initialized or you may lose funds.

Creating addresses

bitgo
  .coin('gteth')
  .wallets()
  .getWallet({ id: '585c51a5df8380e0e3082e46' })
  .then(function (wallet) {
    return wallet.createAddress();
  })
  .then(function (newAddress) {
    // print new address details
    console.dir(newAddress);
  });
WALLET=585c51a5df8380e0e3082e46

curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/gteth/wallet/$WALLET/address

Unlike Bitcoin, Ethereum address creation requires interactions with the Ethereum blockchain. In order to deploy a receive address contract, BitGo sends a transaction on the Ethereum network. Make sure to fund the fee address mentioned above. Like the wallet creation process, an Ethereum address will not be immediately usable upon creation and so the caller of this function will have to wait for the initialization transaction to be confirmed before attempting to fetch, or send to, the address

Balances

Ether (ETH) is the native asset of the Ethereum blockchain. The base unit is wei (and gas fees are denoted in gwei):

  • 1 wei is (10-18) or 0.000000000000000001 Ether.
  • 1 gwei is (10-9) or 0.000000001 Ether (or 1000000000 wei).
  • 1 Ether is (1018) or 1000000000000000000 wei (1 quintillion).

Balances are supported in string format: balanceString, confirmedBalanceString, and spendableBalanceString.

Transactions

BitGo's Ethereum multisig contract currently only supports one sender and one recipient. That means that the sendMany call only accepts one recipient.

Ethereum - ERC20 Tokens

Coins are native to a blockchain, such as Bitcoin or Ether. Tokens represent as asset on someone else's blockchain. ERC20 tokens are assets on the Ethereum blcokchain that adhere to EIP-20 Token Standard.

BitGo supported ERC20 tokens can be accessed on the Ethereum Mainnet:

Coin Type Token Name Precicison Contract Details
1inch 1inch Token 18 https://etherscan.io/token/0x111111111117dc0aa78b770fa6a738034120c302
1up Uptrennd Token 18 https://etherscan.io/token/0x07597255910a51509ca469568b048f2597e72504
aave Aave 18 https://etherscan.io/token/0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9
abt ArcBlock 18 https://etherscan.io/token/0xb98d4c97425d9908e66e53a6fdf673acca0be986
ace Ace Token 6 https://etherscan.io/token/0xe17e41acd4caa3cec048837bfd1918b3c4141767
acxt Ac Exchange Token 18 https://etherscan.io/token/0x7be00ed6796b21656732e8f739fc1b8f1c53da0d
ach Alchemy Pay 8 https://etherscan.io/token/0xed04915c23f00a313a544955524eb7dbd823143d
ae Aeternity 18 https://etherscan.io/token/0x5ca9a71b1d01849c0a95490cc00559717fcf0d1d
aergo Aergo 18 https://etherscan.io/token/0xae31b85bfe62747d0836b82608b4830361a3d37a
aergo1 Aergo1 18 https://etherscan.io/token/0x91af0fbb28aba7e31403cb457106ce79397fd4e6
agwd AGARWOOD 18 https://etherscan.io/token/0xc3e419177044c9172823f06335d5d82aaf38a5c6
aion AION 8 https://etherscan.io/token/0x4ceda7906a5ed2179785cd3a40a69ee8bc99c466
ali Artificial Liquid Intelligence Token 18 https://etherscan.io/token/0x6b0b3a982b4634ac68dd83a4dbf02311ce324181
alpha Alpha Finance 18 https://etherscan.io/token/0xa1faa113cbe53436df28ff0aee54275c13b40975
amn Amon 18 https://etherscan.io/token/0x737f98ac8ca59f2c68ad658e3c3d8c8963e40a4c
amo AMO Token 18 https://etherscan.io/token/0x38c87aa89b2b8cd9b95b736e1fa7b612ea972169
amon AmonD 18 https://etherscan.io/token/0x00059ae69c1622a7542edc15e8d17b060fe307b6
amp AMP Token 18 https://etherscan.io/token/0xff20817765cb7f73d4bde2e66e067e58d11095c2
ampx Amplify Exchange 18 https://etherscan.io/token/0x735af341f2d9ce3663616cd84ff522dbf62fbc1f
ana ANA 18 https://etherscan.io/token/0xfafd51641ab09dff163cd04d2eb6b7865eb83f53
ape ApeCoin 18 https://etherscan.io/token/0x4d224452801aced8b2f0aebe155379bb5d594381
api3 API3 18 https://etherscan.io/token/0x0b38210ea11411557c13457d4da7dc6ea731b88a
ant Aragon 18 https://etherscan.io/token/0x960b236a07cf122663c4303350609a66a7b288c0
antv2 Antv2 18 https://etherscan.io/token/0xa117000000f279d81a1d3cc75430faa017fa5a2e
aoa Aurora 18 https://etherscan.io/token/0x9ab165d795019b6d8b3e971dda91071421305e5a
appc AppCoins 18 https://etherscan.io/token/0x1a7a8bd9106f2b8d977e08582dc7d24c723ab0db
aqt Alpha Quark Token 18 https://etherscan.io/token/0x2a9bdcff37ab68b95a53435adfd8892e86084f93
arct ArCoin US Treasury 18 https://etherscan.io/token/0xeb0f0df01c400fd21fb8533a68423703d22cfcc5
arcx ARCx Governance Token 18 https://etherscan.io/token/0x1321f1f1aa541a56c31682c57b80ecfccd9bb288
ast AirSwap 4 https://etherscan.io/token/0x27054b13b1b798b345b591a4d22e6562d47ea75a
atri Atari Token 0 https://etherscan.io/token/0xdacd69347de42babfaecd09dc88958378780fb62
audio Audio 18 https://etherscan.io/token/0x18aaa7115705e8be94bffebde57af9bfc265b998
axl Axelar 6 [https://etherscan.io/token/0x3eacbdc6c382ea22b78acc158581a55aaf4ef3cc](ht tps://etherscan.io/token/0x3eacbdc6c382ea22b78acc158581a55aaf4ef3cc)
audx eToro Australian Dollar 18 https://etherscan.io/token/0xdf1e9e1a218cff9888faef311d6fbb472e4175ce
aust Wrapped Anchor UST Token 18 https://etherscan.io/token/0xa8de3e3c934e2a1bb08b010104ccabbd4d6293ab
axpr aXpire 18 https://etherscan.io/token/0xc39e626a04c5971d770e319760d7926502975e47
axs Axie Infinity Shards 18 https://etherscan.io/token/0xf5d669627376ebd411e34b98f19c868c8aba5ada
axsv2 Axie Infinity Shards V2 18 https://etherscan.io/token/0xbb0e17ef65f82ab018d8edd776e8dd940327b28b
badger Badger 18 https://etherscan.io/token/0x3472a5a71965499acd81997a54bba8d852c6e53d
bal Balancer 18 https://etherscan.io/token/0xba100000625a3754423978a60c9317c58a424e3d
band Band Protocol 18 https://etherscan.io/token/0xba11d00c5f74255f56a5e366f4f77f5a186d7f55
basic BASIC Token 18 https://etherscan.io/token/0xf25c91c87e0b1fd9b4064af0f427157aab0193a7
bat Basic Attention Token 18 https://etherscan.io/token/0x0d8775f648430679a709e98d2b0cb6250d2887ef
bax BABB 18 https://etherscan.io/token/0x9a0242b7a33dacbe40edb927834f96eb39f8fbcb
bbx BBX 18 https://etherscan.io/token/0x71529cea068e3785efd4f18aaf59a6cb82b7e5cb
bcap BCAP 0 https://etherscan.io/token/0x1f41e42d0a9e3c0dd3ba15b527342783b43200a9
bcc Basiscoin Cash 18 https://etherscan.io/token/0xae17f4f5ca32f77ea8e3786db7c0b2fe877ac176
bcio Blockchain.io 18 https://etherscan.io/token/0xcdc412f306e0c51e3249b88c65423cd16b322673
bepro BetProtocol 18 https://etherscan.io/token/0x786001c9c5ca6e502deb8a8a72480d2147891f32
bed Bankless BED Index 18 https://etherscan.io/token/0x2af1df3ab0ab157e1e2ad8f88a7d04fbea0c7dc6
bid Blockbid 2 https://etherscan.io/token/0xdd5151da2ab25566e1d2a3c9a3e77396303f8a93
blocks Blocks 18 https://etherscan.io/token/0x8a6d4c8735371ebaf8874fbd518b56edd66024eb
bidl Blockbid Liquidity 2 https://etherscan.io/token/0x5c7ec304a60ed545518085bb4aba156e8a7596f6
bird BirdCoin 18 https://etherscan.io/token/0x026e62dded1a6ad07d93d39f96b9eabd59665e0d
bit BitDAO 18 https://etherscan.io/token/0x1a4b46696b2bb4794eb3d4c26f1c55f9170fa4c5
bnb BNB Token 18 https://etherscan.io/token/0xb8c77482e45f1f44de1745f52c74426c631bdd52
bnk Bankera 8 https://etherscan.io/token/0xc80c5e40220172b36adee2c951f26f2a577810c5
bnl BitNational 18 https://etherscan.io/token/0xa717d0f45652fb430fd84d3d1b6b02e4510102ea
bnt Bancor 18 https://etherscan.io/token/0x1f573d6fb3f13d689ff844b4ce37794d79a7ff1c
bnty Bounty0x 18 https://etherscan.io/token/0xd2d6158683aee4cc838067727209a0aaf4359de3
boba Boba Token 18 https://etherscan.io/token/0x42bbfa2e77757c645eeaad1655e0911a7553efbc
bond BarnBridge 18 https://etherscan.io/token/0x0391d2021f89dc339f60fff84546ea23e337750f
box ContentBox 18 https://etherscan.io/token/0x63f584fa56e60e4d0fe8802b27c7e6e3b33e007f
brd Bread 18 https://etherscan.io/token/0x558ec3152e2eb2174905cd19aea4e34a23de9ad6
brz Brazilian Digital Token 4 https://etherscan.io/token/0x420412e765bfa6d85aaac94b4f7b708c89be2e2b
bsx Bistox Exchange Token 18 https://etherscan.io/token/0x435b67f0dcae34c046720de42fcdc135b8f90e55
btrst Braintrust 18 https://etherscan.io/token/0x799ebfabe77a6e34311eeee9825190b9ece32824
btt Blocktrade 18 https://etherscan.io/token/0xfa456cf55250a839088b27ee32a424d7dacb54ff
btu BTU Protocol 18 https://etherscan.io/token/0xb683d83a532e2cb7dfa5275eed3698436371cc9f
burp Big Town Chef 18 https://etherscan.io/token/0x33f391f4c4fe802b70b77ae37670037a92114a7c
busd Binance USD 18 https://etherscan.io/token/0x4fabb145d64652a948d72533023f6e7a623c7c53
buy buying.com 18 https://etherscan.io/token/0x0d7f0fa3a79bfedbab291da357958596c74e27d7
bxx Baanx 18 https://etherscan.io/token/0x6b1a8f210Ec6b7B6643cea3583Fb0c079f367898
bxxv1 Baanx (deprecated) 18 https://etherscan.io/token/0x54f9b4b4485543a815c51c412a9e20436a06491d
bzz BZZ 16 https://etherscan.io/token/0x19062190b1925b5b6689d7073fdfc8c2976ef8cb
c8p C8 Plus 18 https://etherscan.io/token/0x6930d2299964bcc81b8bcb453a522791e6488be1
cacxt Cacxt 18 https://etherscan.io/token/0xe2b8c4938a3103c1ab5c19a6b93d07ab6f9da2ba
cadx eToro Canadian Dollar 18 https://etherscan.io/token/0x8ed876e408959643479534a21970ec023d0fb51e
cag Change 18 https://etherscan.io/token/0x7d4b8cce0591c9044a22ee543533b72e976e36c3
cbat Compound BAT 8 https://etherscan.io/token/0x6c8c6b02e7b2be14d4fa6022dfd6d75921d90e4e
cbc CashBet Coin 8 https://etherscan.io/token/0x26db5439f651caf491a87d48799da81f191bdb6b
cbrl Crypto BRL 6 https://etherscan.io/token/0xa6fa6531acdf1f9f96eddd66a0f9481e35c2e42a
cct Cyber Credit Token 0 https://etherscan.io/token/0x8469e5158fb3c043cf88ce769c94e4b9fc8d79b5
cdag CannDollar 18 https://etherscan.io/token/0xf43401ea8ac4b86155b929e1a5a5e46626c23842
cdai Compound DAI 8 https://etherscan.io/token/0xf5dce57282a584d2746faf1593d3121fcac444dc
cdt Blox 18 https://etherscan.io/token/0x177d39ac676ed1c67a2b268ad7f1e58826e5b0af
cel Celsius 4 https://etherscan.io/token/0xaaaebe6fe48e54f431b0c390cfaf0b017d09d42d
celr Celer Network 18 https://etherscan.io/token/0x4f9254c83eb525f9fcf346490bbb3ed28a81c667
ceth Compound Ether 8 https://etherscan.io/token/0x4ddc2d193948926d02f9b1fe9e1daa0718270ed5
chfx eToro Swiss Frank 18 https://etherscan.io/token/0xe435502c85a4e7e79cfab4167af566c27a7a0784
chsb SwissBorg 8 https://etherscan.io/token/0xba9d4199fab4f26efe3551d490e3821486f135ba
chz Chiliz 18 https://etherscan.io/token/0x3506424f91fd33084466f402d5d97f05f8e3b4af
cix100 Cryptoindex 100 18 https://etherscan.io/token/0x6393e822874728f8afa7e1c9944e417d37ca5878
cliq DefiCliq 18 https://etherscan.io/token/0x0def8d8adde14c9ef7c2a986df3ea4bd65826767
cln Colu Local Network 18 https://etherscan.io/token/0x4162178b78d6985480a308b2190ee5517460406d
clt CoinLoan Token 8 https://etherscan.io/token/0x2001f2a0cf801ecfda622f6c28fb6e10d803d969
clv Clover Token 18 https://etherscan.io/token/0x80c62fe4487e1351b47ba49809ebd60ed085bf52
cng Changer 18 https://etherscan.io/token/0x5c1d9aa868a30795f92fae903edc9eff269044bf
cnyx eToro Chinese Yuan 18 https://etherscan.io/token/0x319ad3ff82bedddb3bc85fd7943002d25cdb3cb9
comp Compound Token 18 https://etherscan.io/token/0xc00e94cb662c3520282e6f5717214004a7f26888
cover Cover 18 https://etherscan.io/token/0x5d8d9f5b96f4438195be9b99eee6118ed4304286
cpay Cryptopay 0 https://etherscan.io/token/0x0ebb614204e47c09b6c3feb9aaecad8ee060e23e
cplt Coineru Platinum 8 https://etherscan.io/token/0xa3f7871a4b86bcc3b6e97c8fd0745e71c55e1f82
cqt Covalent 18 https://etherscan.io/token/0xd417144312dbf50465b1c641d016962017ef6240
cqx Coinquista Coin 18 https://etherscan.io/token/0x618c29dd2d16475b2ae6244f9e8aaead68f0ca44
cra Crabada 18 https://etherscan.io/token/0xa32608e873f9ddef944b24798db69d80bbb4d1ed
crdt Crypto Daily Token 18 https://etherscan.io/token/0xdaab5e695bb0e8ce8384ee56ba38fa8290618e52
cre CarryToken 18 https://etherscan.io/token/0x115ec79f1de567ec68b7ae7eda501b406626478e
cream Cream 18 https://etherscan.io/token/0x2ba592f78db6436527729929aaf6c908497cb200
crep Compound Augur 8 https://etherscan.io/token/0x158079ee67fce2f58472a96584a73c7ab9ac95c1
cro Crypto.com Chain 8 https://etherscan.io/token/0xa0b73e1ff0b80914ab6fe0444e65848c4c34450b
crpt Crypterium 18 https://etherscan.io/token/0x80a7e048f37a50500351c204cb407766fa3bae7f
crpt1 CRPT Token 18 https://etherscan.io/token/0x08389495d7456e1951ddf7c3a1314a4bfb646d8b
crv Curve DAO Token 18 https://etherscan.io/token/0xd533a949740bb3306d119cc777fa900ba034cd52
cslv Coineru Silver 8 https://etherscan.io/token/0x6dc05497f0b087c7692816e6acaa8bdda73907fc
csp Caspian Token 18 https://etherscan.io/token/0xa6446d655a0c34bc4f05042ee88170d056cbaf45
ctsi Cartesi 18 https://etherscan.io/token/0x491604c0fdf08347dd1fa4ee062a822a5dd06b5d
cusdc Compound USDC 8 https://etherscan.io/token/0x39aa39c021dfbae8fac545936693ac917d5e7563
cvc Civic 8 https://etherscan.io/token/0x41e5560054824ea6b0732e656e3ad64e20e94e45
cvx Convex Finance 18 https://etherscan.io/token/0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b
cwbtc Compound WBTC 8 https://etherscan.io/token/0xc11b1268c1a384e55c48c2391d8d480264a3a7f4
czrx Compound ZRX 8 https://etherscan.io/token/0xb3319f5d18bc0d84dd1b4825dcde5d5f7266d407
coti Coti 18 https://etherscan.io/token/0xddb3422497e61e13543bea06989c0789117555c5
dacxi Dacxi Coin 18 https://etherscan.io/token/0xefab7248d36585e2340e5d25f8a8d243e6e3193f
dai Dai 18 https://etherscan.io/token/0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359
dao DAO Maker 18 https://etherscan.io/token/0x0f51bb10119727a7e5ea3538074fb341f56b09ad
data Streamr DATAcoin 18 https://etherscan.io/token/0x0cf0ee63788a0849fe5297f3407f701e122cc023
datav2 Streamr Data 18 https://etherscan.io/token/0x8f693ca8d21b157107184d29d398a8d082b38b76
dataecon Data Economy Index 18 https://etherscan.io/token/0x33d63ba1e57e54779f7ddaeaa7109349344cf5f1
dec Dark Energy Crystals 3 https://etherscan.io/token/0x9393fdc77090f31c7db989390d43f454b1a6e7f3
dent Dent 8 https://etherscan.io/token/0x3597bfd533a99c9aa083587b074434e61eb0a258
dep Deap Coin 18 https://etherscan.io/token/0x1a3496c18d558bd9c6c8f609e1b129f67ab08163
dexa Dexa Coin 18 https://etherscan.io/token/0x725440512cb7b78bf56b334e50e31707418231cb
dfd DeFiDollar DAO 18 https://etherscan.io/token/0x20c36f062a31865bed8a5b1e512d9a1a20aa333a
dfi DeFiChain 8 https://etherscan.io/token/0x8fc8f8269ebca376d046ce292dc7eac40c8d358a
dgcl Dgcl 18 https://etherscan.io/token/0x63b8b7d4a3efd0735c4bffbd95b332a55e4eb851
dgd Digix DAO 9 https://etherscan.io/token/0xe0b7927c4af23765cb51314a0e0521a9645f0e2a
dgx Digix 9 https://etherscan.io/token/0x4f3afec4e5a3f2a6a1a411def7d7dfe50ee057bf
digg Digg 9 https://etherscan.io/token/0x798d1be841a82a273720ce31c822c61a67a601c3
dmt DMarket 8 https://etherscan.io/token/0x2ccbff3a042c68716ed2a2cb0c544a9f1d1935e1
dodo DODO 18 https://etherscan.io/token/0x43dfc4159d86f3a37a5a4b3d4580b888ad7d4ddd
dpi DeFi Pulse Index 18 https://etherscan.io/token/0x1494ca1f11d487c2bbe4543e90080aeba4ba3c2b
drpu DRP Utility 8 https://etherscan.io/token/0xe30e02f049957e2a5907589e06ba646fb2c321ba
drv Drive 18 https://etherscan.io/token/0x0b9d89a71bdabd231d4d497b7b7b879740d739c4
duc DUING COIN 18 https://etherscan.io/token/0xd3d84d494b24661bb4a477169bb24bc905fb55dd
dx1u Dx1u 8 https://etherscan.io/token/0x2d8b3bb04864754b1540e3c4758ab00764d00751
dxgt Dacxi Gold Token 18 https://etherscan.io/token/0x51be9f12dd5095c5b1acf90e7e0aa4aa8023218b
dxpt Dacxi Platinum Token 18 https://etherscan.io/token/0x155ab266b9226525cfd5b1e7d8a80bab65b6b609
dxst Dacxi Silver Token 18 https://etherscan.io/token/0xd71bbf61079d3ea7ea7890356850d4579be304af
dydx dYdX 18 https://etherscan.io/token/0x92d6c1e31e14520e676a687f0a93788b716beff5
dyn DYN 18 https://etherscan.io/token/0x65167e381388bc803aa2f22cd99d093068e98007
easy Easy 18 https://etherscan.io/token/0x913d8adf7ce6986a8cbfee5a54725d9eea4f0729
ebtcq EmberBTCQuant 18 https://etherscan.io/token/0x430a35baa51ddeaccf89092a5edbda47aaae78e4
echt eChat 0 https://etherscan.io/token/0x1aadead0d2e0b6d888ae1d73b11db65a8447634a
edison Edison 8 https://etherscan.io/token/0xed58569d516a5bd37427ebd592a6619c0c581953
edn Eden 18 https://etherscan.io/token/0x05860d453c7974cbf46508c06cba14e211c629ce
edr Endor Protocol 18 https://etherscan.io/token/0xc528c28fec0a90c083328bc45f587ee215760a0f
efi Efinity 18 https://etherscan.io/token/0x656c00e1bcd96f256f224ad9112ff426ef053733
egl Ethereum Eagle 18 https://etherscan.io/token/0x1e83916ea2ef2d7a6064775662e163b2d4c330a7
egld Elrond Gold 18 https://etherscan.io/token/0xe3fb646fc31ca12657b17070bc31a52e323b8543
egold eGold 4 https://etherscan.io/token/0x8f00458479ea850f584ed82881421f9d9eac6cb1
elf Aelf 18 https://etherscan.io/token/0xbf2179859fc6d5bee9bf9158632dc51678a4100e
erd Elrond 18 https://etherscan.io/token/0xf9986d445ced31882377b5d6a5f58eaea72288c3
emx EMX 18 https://etherscan.io/token/0x75a29c405bd5ab2f3b35144af937ee98d390b5ee
eng Enigma 8 https://etherscan.io/token/0xf0ee6b27b759c9893ce4f094b49ad28fd15a23e4
enj Enjin Coin 18 https://etherscan.io/token/0xf629cbd94d3791c9250152bd8dfbdf380e2a3b9c
ens Ethereum Name Service 18 https://etherscan.io/token/0xc18360217d8f7ab5e7c516566761ea12ce7f9d72
eqo EQUOS Origin 18 https://etherscan.io/token/0x46e9fe43470fafd690100c86037f9e566e24d480
eta ETA Token 18 https://etherscan.io/token/0x1065bd32fc7a6683c97c2c6638ad4022d9c61c05
ethos Ethos 8 https://etherscan.io/token/0x5af2be193a6abca9c8817001f45744777db30756
etv Ecotech Visions 18 https://etherscan.io/token/0x695f5d0692655ebf710c0003ca499323488334c6
eurs Stasis EURS 2 https://etherscan.io/token/0xdb25f211ab05b1c97d595516f45794528a807ad8
eurst Euro Stable Token 18 https://etherscan.io/token/0xb1abd7aba7d99bbefb33d1dfc66b0dd522335350
euroc Euro Coin 6 https://etherscan.io/token/0x1abaea1f7c830bd89acc67ec4af516284b1bc33c
eurt Tether EUR 6 https://etherscan.io/token/0xc581b735a1688071a1746c968e0798d642ede491
eurx eToro Euro 18 https://etherscan.io/token/0x05ac103f68e05da35e78f6165b9082432fe64b58
eux EUR Stable Token 18 https://etherscan.io/token/0x1b9064207e8046ec1d8e83de79380ed31283914f
evx Everex 4 https://etherscan.io/token/0xf3db5fa2c66b7af3eb0c0b782510816cbe4813b8
exe EXE Token 8 https://etherscan.io/token/0x0d9a653f681168f410d14d19b7743c041eafc58a
fdt Fiat DAO 18 https://etherscan.io/token/0xed1480d12be41d92f36f5f7bdd88212e381a3677
fei Fei Protocol 18 https://etherscan.io/token/0x956f47f50a910163d8bf957cf5846d573e7f87ca
fet Fetch 18 https://etherscan.io/token/0x1d287cc25dad7ccaf76a26bc660c5f7c8e2a05bd
fet1 Fet1 18 https://etherscan.io/token/0xaea46a60368a7bd060eec7df8cba43b7ef41ad85
ff1 Two Prime FF1 18 https://etherscan.io/token/0x59af0356cdebd1fa23ae5dadff9170bbfc31278c
fft Fight to Fame Token 18 https://etherscan.io/token/0xdea05e09f5b0e102616bb145a0e4772a9b5ab193
fire Ceramic Token 18 https://etherscan.io/token/0x2033e559cddff6dd36ec204e3014faa75a01052e
front Frontier 18 https://etherscan.io/token/0xf8c3527cc04340b208c854e985240c02f7b7793f
fmf Formosa Financial 18 https://etherscan.io/token/0xb4d0fdfc8497aef97d3c2892ae682ee06064a2bc
ftm Fantom Token 18 https://etherscan.io/token/0x4e15361fd6b4bb609fa63c81a2be19d873717870
ftt FTX Token 18 https://etherscan.io/token/0x50d1c9771902476076ecfc8b2a83ad6b9355a4c9
fun FunFair 8 https://etherscan.io/token/0x419d0d8bdd9af5e606ae2232ed285aff190e711b
fwb Friends With Benefits Pro 18 https://etherscan.io/token/0x35bd01fc9d6d5d81ca9e055db88dc49aa2c699a8
fxrt FXRT 3 https://etherscan.io/token/0x506742a24c54b77c5af4065b2626ab96c641f90e
fxs Frax Share 18 https://etherscan.io/token/0x3432b6a60d23ca0dfca7761b7ab56459d9c964d0
gal Project Galaxy 18 https://etherscan.io/token/0x5faa989af96af85384b8a938c2ede4a7378d9875
gala gala 8 https://etherscan.io/token/0x15d4c048f83bd7e37d49ea4c83a07267ec4203da
gamma Gamma 18 https://etherscan.io/token/0x6bea7cfef803d1e3d5f7c0103f7ded065644e197
gbpx eToro Pound Sterling 18 https://etherscan.io/token/0xf85ef57fcdb36d628d063fa663e61e44d35ae661
gdt GDT 8 https://etherscan.io/token/0xc67b12049c2d0cf6e476bc64c7f82fc6c63cffc5
gec GECoin 18 https://etherscan.io/token/0xe304283c3e60cefaf7ea514007cf4e8fdc3d869d
gen DAOstack 18 https://etherscan.io/token/0x543ff227f64aa17ea132bf9886cab5db55dcaddf
gohm Governance OHM 9 https://etherscan.io/token/0x0ab87046fbb341d058f17cbc4c1133f25a20a52f
ghub Genohub 8 https://etherscan.io/token/0xeb40045347531f06179ffb3c6be33d5b35a52ebd
gigdrop GIG-POOL-DROP 18 https://etherscan.io/token/0xa08399989e77b8ce8dd68374cc7b4345304b3161
gldx eToro Gold 18 https://etherscan.io/token/0x7d2bebd6e41b05384f0a8eb8ff228daac6f39c96
glm Golem 18 https://etherscan.io/token/0x7dd9c5cba05e151c895fde1cf355c9a1d5da6429
gno Gnosis 18 https://etherscan.io/token/0x6810e776880c02933d47db1b9fc05908e5386b96
gnt Golem 18 https://etherscan.io/token/0xa74476443119a942de498590fe1f2454d7d4ac0d
gods Gods Unchained 18 https://etherscan.io/token/0xccc8cb5229b0ac8069c51fd58367fd1e622afd97
gog Guild of Guardians 18 https://etherscan.io/token/0x9AB7bb7FdC60f4357ECFef43986818A2A3569c62
gold XBullion Token 8 https://etherscan.io/token/0x0e573fdd3c5acf3a74f1775b0f9823a1a0e2b86b
got GOExchange 18 https://etherscan.io/token/0xf11f2550769dac4226731b7732dd4e17e72b1b01
grt The Graph 18 https://etherscan.io/token/0xc944e90c64b2c07662a292be6244bdf05cda44a7
gtc Gitcoin 18 https://etherscan.io/token/0xde30da39c46104798bb5aa3fe8b9e0e1f348163f
gto Gifto 5 https://etherscan.io/token/0xc5bbae50781be1669306b9e001eff57a2957b09d
gusd Gemini Dollar 2 https://etherscan.io/token/0x056fd409e1d7a124bd7017459dfea2f387b6d5cd
gxc Game X Coin 18 https://etherscan.io/token/0x953e22945b416730bad05009af05b420e598e412
gyen Gmo JPY 6 https://etherscan.io/token/0xc08512927d12348f6620a698105e1baac6ecd911
hcn Himalaya Coin 18 https://etherscan.io/token/0xb01b22dcd2f4b199a27ec28d8a688dd26f162067
hdo Himalaya Dollar 18 https://etherscan.io/token/0x7c197afcd8d36884309ed731424985e3ed17f018
hedg HedgeTrade 18 https://etherscan.io/token/0xf1290473e210b2108a85237fbcd7b6eb42cc654f
hkdx eToro Hong Kong Dollar 18 https://etherscan.io/token/0x1af20b8d1ede928f437b3a86801796b167840d2b
hlc HalalChain 9 https://etherscan.io/token/0x58c69ed6cd6887c0225d1fccecc055127843c69b
hmt HUMAN Token 18 https://etherscan.io/token/0xd1ba9bac957322d6e8c07a160a3a8da11a0d2867
hold Hold 18 https://etherscan.io/token/0xd6e1401a079922469e9b965cb090ea6ff64c6839
hot Holo 18 https://etherscan.io/token/0x6c6ee5e31d828de241282b9606c8e98ea48526e2
hqt HyperQuant 18 https://etherscan.io/token/0x3e1d5a855ad9d948373ae68e4fe1f094612b1322
hst Decision Token 18 https://etherscan.io/token/0x554c20b7c486beee439277b4540a434566dc4c02
ht Huobi Token 18 https://etherscan.io/token/0x6f259637dcd74c767781e37bc6133cd6a68aa161
hum HumanScape 18 https://etherscan.io/token/0x174afe7a032b5a33a3270a9f6c30746e25708532
husd HUSD 18 https://etherscan.io/token/0xdf574c24545e5ffecb9a659c229253d4111d87e1
hxro Hxro 18 https://etherscan.io/token/0x4bd70556ae3f8a6ec6c4080a0c327b24325438f3
hyb Hybrid Block 18 https://etherscan.io/token/0x6059f55751603ead7dc6d280ad83a7b33d837c90
hydro Hydro 18 https://etherscan.io/token/0xebbdf302c940c6bfd49c6b165f457fdb324649bc
i8 i8 Exchange Token 18 https://etherscan.io/token/0xb61bb66bf9caba531e6bb2fb75dec389a1664dfd
iceth Interest Compounding ETH Index 18 https://etherscan.io/token/0x7c07f7abe10ce8e33dc6c5ad68fe033085256a84
idex IDEX 18 https://etherscan.io/token/0xb705268213d593b8fd88d3fdeff93aff5cbdcfae
idrc Rupiah Coin 18 https://etherscan.io/token/0x569f2241551011d5710c40fc61e0b3906c780b2f
idrt Rupiah Token 2 https://etherscan.io/token/0x998ffe1e43facffb941dc337dd0468d52ba5b48a
imxv2 Immutable X 18 https://etherscan.io/token/0xf57e7e7c23978c3caec3c3548e3d615c346e79ff
incx InternationalCryptoX 18 https://etherscan.io/token/0xa984a92731c088f1ea4d53b71a2565a399f7d8d5
ind Indorse 18 https://etherscan.io/token/0xf8e386eda857484f5a12e4b5daa9984e06e73705
index Index Coop 18 https://etherscan.io/token/0x0954906da0bf32d5479e25f46056d22f08464cab
inf Infinitus Token 18 https://etherscan.io/token/0x00e150d741eda1d49d341189cae4c08a73a49c95
inj Inj 18 https://etherscan.io/token/0x84bffffd702d924c6d9b25f87151bf0fb1a8913e
injv2 Injv2 18 https://etherscan.io/token/0xe28b3b32b6c345a34ff64674606124dd5aceca30
inst Instadapp 18 https://etherscan.io/token/0x6f40d4a6237c257fff2db00fa0510deeecd303eb
inx INX Token 18 https://etherscan.io/token/0xbbc7f7a6aadac103769c66cbc69ab720f7f9eae3
isf Susnova 18 https://etherscan.io/token/0x3f9c0211e9ddfccabd614162ffb768f5a7a8ab38
isr Insureum 18 https://etherscan.io/token/0xd4a293ae8bb9e0be12e99eb19d48239e8c83a136
ivo INVAO Token 18 https://etherscan.io/token/0xe03df9fda489a405f5db8a919adbc9a1b931a19f
ivy Ivy Koin 18 https://etherscan.io/token/0xa4ea687a2a7f29cf2dc66b39c68e4411c0d00c49
jbc Japan Brand Coin 18 https://etherscan.io/token/0x3635e381c67252405c1c0e550973155832d5e490
jfin JFIN Coin 18 https://etherscan.io/token/0x940bdcb99a0ee5fb008a606778ae87ed9789f257
jpyx eToro Japanese Yen 18 https://etherscan.io/token/0x743c79f88dcadc6e7cfd7fa2bd8e2bfc68dae053
keep Keep 18 https://etherscan.io/token/0x85eee30c52b0b379b046fb0f85f4f3dc3009afec
key SelfKey 18 https://etherscan.io/token/0x4cc19356f2d37338b9802aa8e8fc58b0373296e7
kin Kin 18 https://etherscan.io/token/0x818fc6c2ec5986bc6e2cbf00939d90556ab12ce5
kiro Kirobo 18 https://etherscan.io/token/0xb1191f691a355b43542bea9b8847bc73e7abb137
knc Kyber Network 18 https://etherscan.io/token/0xdd974d5c2e2928dea5f71b9825b8b646686bd200
knc2 Kyber Network 18 https://etherscan.io/token/0xdefa4e8a7bcba345f687a2f1456f5edd9ce97202
koin Koin 18 https://etherscan.io/token/0x1fb62df2b6ef8966161e422dbb40860b70941e50
koz KOZJIN Token 18 https://etherscan.io/token/0xd95e7d16000cbeb66acbf70b4a843d4346ff4555
kp3r Kp3r 18 https://etherscan.io/token/0x1ceb5cb57c4d4e2b2433641b95dd330a33185a44
kze Almeela 18 https://etherscan.io/token/0x8de67d55c58540807601dbf1259537bc2dffc84d
layer Unilayer 18 https://etherscan.io/token/0x0ff6ffcfda92c53f615a4a75d982f399c989366b
lba Cred 18 https://etherscan.io/token/0xfe5f141bf94fe84bc28ded0ab966c16b17490657
lend EthLend 18 https://etherscan.io/token/0x80fb784b7ed66730e8b1dbd9820afd29931aab03
leo Bitfinex LEO 18 https://etherscan.io/token/0x2af5d2ad76741191d15dfe7bf6ac92d4bd912ca3
lgo LGO Exchange 8 https://etherscan.io/token/0x0a50c93c762fdd6e56d86215c24aaad43ab629aa
link ChainLink 18 https://etherscan.io/token/0x514910771af9ca656af840dff83e8264ecf986ca
lion CoinLion 18 https://etherscan.io/token/0x2167fb82309cf76513e83b25123f8b0559d6b48f
lnc Linker Coin 18 https://etherscan.io/token/0x6beb418fc6e1958204ac8baddcf109b8e9694966
loom Loom Network 18 https://etherscan.io/token/0xa4e8c3ec456107ea67d3075bf9e3df3a75823db0
loom1 Loom Token 18 https://etherscan.io/token/0x42476f744292107e34519f9c357927074ea3f75d
looks LooksRare 18 https://etherscan.io/token/0xf4d2888d29d722226fafa5d9b24f9164c092421e
lrc loopring 18 https://etherscan.io/token/0xef68e7c694f40c8202821edf525de3782458639f
lrcv2 loopring V2 18 https://etherscan.io/token/0xbbbbca6a901c926f240b89eacb641d8aec7aeafd
lyn Lynchpin 18 https://etherscan.io/token/0xb0b1685f55843d03739c7d9b0a230f1b7dcf03d5
mana Decentraland 18 https://etherscan.io/token/0x0f5d2fb29fb7d3cfee444a200298f468908cc942
maps Maps 6 https://etherscan.io/token/0x2b915b505c017abb1547aa5ab355fbe69865cc6d
matic Matic Token 18 https://etherscan.io/token/0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0
mcdai Dai 18 https://etherscan.io/token/0x6b175474e89094c44da98b954eedeac495271d0f
mco Crypto.com 8 https://etherscan.io/token/0xb63b606ac810a52cca15e44bb630fd42d8d1d83d
mco2 Moss Carbon Credit 18 https://etherscan.io/token/0xfc98e825a2264d890f9a1e68ed50e1526abccacd
mcs MCS Token 18 https://etherscan.io/token/0x2fdf40c484b1bd6f1c214acac737fedc8b03e5a8
mcx MachiX Token 18 https://etherscan.io/token/0xd15ecdcf5ea68e3995b2d0527a0ae0a3258302f8
mdfc MDFC 18 https://etherscan.io/token/0x2810ff4092864f4b9259d05dd6da829d61bdcdab
mdx Mandala 18 https://etherscan.io/token/0x9d03393d297e42c135625d450c814892505f1a84
medx Medibloc 8 https://etherscan.io/token/0xfd1e80508f243e64ce234ea88a5fd2827c71d4b7
meme Meme 8 https://etherscan.io/token/0xd5525d397898e5502075ea5e830d8914f6f0affe
met Metronome 18 https://etherscan.io/token/0xa3d58c4e56fedcae3a7c43a725aee9a71f0ece4e
meta Metadium 18 https://etherscan.io/token/0xde2f7766c8bf14ca67193128535e5c7454f8387c
mfg SyncFab 18 https://etherscan.io/token/0x6710c63432a2de02954fc0f851db07146a6c0312
mfph MFPH Token 18 https://etherscan.io/token/0xbc7e1056ecc72d14228a14a53815c5d3ad86c84e
mft Mainframe 18 https://etherscan.io/token/0xdf2c7238198ad8b389666574f2d8bc411a4b7428
milkv2 Milkv2 18 https://etherscan.io/token/0x80c8c3dcfb854f9542567c8dac3f44d709ebc1de
mir Mirror Protocol 18 https://etherscan.io/token/0x09a3ecafa817268f77be1283176b946c4ff2e608
mith Mithril 18 https://etherscan.io/token/0x3893b9422cd5d70a81edeffe3d5a1c6a978310bb
mix MixMarvel Token 18 https://etherscan.io/token/0x5d285f735998f36631f678ff41fb56a10a4d0429
mizn Miznettk 18 https://etherscan.io/token/0x57fe785236542cb21747ed011be2699f43c372dc
mkr Maker 18 https://etherscan.io/token/0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2
mns Monnos Token 18 https://etherscan.io/token/0x53884b61963351c283118a8e1fc05ba464a11959
moc Moss Coin 18 https://etherscan.io/token/0x865ec58b06bf6305b886793aa20a2da31d034e68
mof Molecular Future 16 https://etherscan.io/token/0x653430560be843c4a3d143d0110e896c2ab8ac0d
mpay MenaPay 18 https://etherscan.io/token/0x3810a4ddf41e586fa0dba1463a7951b748cecfca
mpl Maple Token 18 https://etherscan.io/token/0x33349b282065b0284d756f0577fb39c158f935e6
mtcn Multiven 18 https://etherscan.io/token/0xf6117cc92d7247f605f11d4c942f0feda3399cb5
mtl Metal 8 https://etherscan.io/token/0xf433089366899d83a9f26a773d59ec7ecf30355e
musd mStable USD 18 https://etherscan.io/token/0xe2f2a5c287993345a840db3b0845fbc70f5935a5
mvl Mass Vehicle Ledger 18 https://etherscan.io/token/0xa849eaae994fb86afa73382e9bd88c2b6b18dc71
mvi Metaverse Index 18 https://etherscan.io/token/0x72e364f2abdc788b7e918bc238b21f109cd634d7
mwt Mountain Wolf Token 18 https://etherscan.io/token/0x1bd936a1d180b5afc640ea9b2274156af0b7533b
nas Nebulas 18 https://etherscan.io/token/0x5d65d971895edc438f465c17db6992698a52318d
nct Polyswarm 18 https://etherscan.io/token/0x9e46a38f5daabe8683e10793b06749eef7d733d1
ndx Indexed Finance 18 https://etherscan.io/token/0x86772b1409b61c639eaac9ba0acfbb6e238e5f83
neu Neumark 18 https://etherscan.io/token/0xa823e6722006afe99e91c30ff5295052fe6b8e32
nexo Nexo 18 https://etherscan.io/token/0xb62132e35a6c13ee1ee0f84dc5d40bad8d815206
nftx NFTX 18 https://etherscan.io/token/0x87d73e916d7057945c9bcd8cdd94e42a6f47f776
ngnt Naira Token 2 https://etherscan.io/token/0x05bbed16620b352a7f889e23e3cf427d1d379ffe
niax IONIAX Token 18 https://etherscan.io/token/0x8cd18aface2bddd788b4e130ae374f54e43f2960
nmr Numeraire 18 https://etherscan.io/token/0x1776e1f26f98b1a5df9cd347953a26dd3cb46671
npxs Pundi X 18 https://etherscan.io/token/0xa15c7ebe1f07caf6bff097d8a589fb8ac49ae5b3
ns2drp New Silver Series 2 DROP 18 https://etherscan.io/token/0xe4c72b4de5b0f9accea880ad0b1f944f85a9daa0
nu NuCypher 18 https://etherscan.io/token/0x4fe83213d56308330ec302a8bd641f1d0113a4cc
nym NYM 6 https://etherscan.io/token/0x525a8f6f3ba4752868cde25164382bfbae3990e1
nzdx eToro New Zealand Dollar 18 https://etherscan.io/token/0x6871799a4866bb9068b36b7a9bb93475ac77ac5d
ocean Ocean Token 18 https://etherscan.io/token/0x7afebbb46fdb47ed17b22ed075cde2447694fb9e
oceanv2 Ocean Token V2 18 https://etherscan.io/token/0x967da4048cd07ab37855c090aaf366e4ce1b9f48
ogn Origin Token 18 https://etherscan.io/token/0x8207c1ffc5b6804f6024322ccf34f29c3541ae26
okb OKB Token 18 https://etherscan.io/token/0x75231f58b43240c9718dd58b4967c5114342a86c
om Om Token 18 https://etherscan.io/token/0x2baecdf43734f22fd5c152db08e3c27233f0c7d2
omg OmiseGO Token 18 https://etherscan.io/token/0xd26114cd6ee289accf82350c8d8487fedb8a0c07
onl On.Live 18 https://etherscan.io/token/0x6863be0e7cf7ce860a574760e9020d519a8bdc47
op Optimism 18 https://optimistic.etherscan.io/token/0x4200000000000000000000000000000000000042
opt OPTin Token 18 https://etherscan.io/token/0xde8893346ce8052a02606b62d13b142648e062dd
orai Orai Token 18 https://etherscan.io/token/0x4c11249814f11b9346808179cf06e71ac328c1b5
orbs Orbs Token 18 https://etherscan.io/token/0xff56cc6b1e6ded347aa0b7676c85ab0b3d08b0fa
oxt Orchid 18 https://etherscan.io/token/0x4575f41308ec1483f3d399aa9a2826d74da13deb
oxy Oxygen Prime Brokerage 6 https://etherscan.io/token/0x965697b4ef02f0de01384d0d4f9f782b1670c163
ohm Olympus 9 https://etherscan.io/token/0x64aa3364f17a4d01c6f1751fd97c2bd3d7e7f1d5
par PAR Stable Coin 18 https://etherscan.io/token/0x68037790a0229e9ce6eaa8a99ea92964106c4703
pass Blockpass 6 https://etherscan.io/token/0xee4458e052b533b1aabd493b5f8c4d85d7b263dc
pau PegGold Token 8 https://etherscan.io/token/0x57accaad359ed96a0b4d027079b6f5351b043912
pax Paxos 18 https://etherscan.io/token/0x8e870d67f660d95d5be530380d0ec0bd388289e1
paxg Paxos Gold 18 https://etherscan.io/token/0x45804880de22913dafe09f4980848ece6ecbaf78
pay TenX 18 https://etherscan.io/token/0xb97048628db6b661d4c2aa833e95dbe1a905b280
pbch PegBitcoin Cash Token 8 https://etherscan.io/token/0xb38bb9f5b9a73a3097d3a7cadd330aa6e6da8586
pbtc PegBitcoin Token 8 https://etherscan.io/token/0x6a7041ff8cb4da0253a00bb1e548caf77c238bda
pdata Opiria Token 18 https://etherscan.io/token/0x0db03b6cde0b2d427c64a04feafd825938368f1f
peg PegNet 8 https://etherscan.io/token/0x996b396b88cc4a1d8df3dbd1c088cdfaee17e6d4
perp Perpetual Protocol 18 https://etherscan.io/token/0xbc396689893d065f41bc2c6ecbee5e0085233447
peth PegEthereum Token 8 https://etherscan.io/token/0x6065616a4bad5ce723a5608dcb85d3dbd20b55dd
pfct PegFactom Token 8 https://etherscan.io/token/0x069480de51cfc3a8fdc7d2338925089a3f842740
phnx Pheonix Dao 18 https://etherscan.io/token/0x38a2fdc11f526ddd5a607c1f251c065f40fbf2f7
pie DeFiPie 18 https://etherscan.io/token/0x607c794cda77efb21f8848b7910ecf27451ae842
planet Planet 18 https://etherscan.io/token/0x307d45afbb7e84f82ef3d251a6bb0f00edf632e4
plc PlusCoin 18 https://etherscan.io/token/0xdf99c7f9e0eadd71057a801055da810985df38bd
plnx eToro Polish Zloty 18 https://etherscan.io/token/0xaace6480798b4a7b596ec4ce3a26b8de9b9ae2e2
plx PLN Stable Token 18 https://etherscan.io/token/0x8d682bc7ad206e54055c609ea1d4717caab665d0
pma PumaPay 18 https://etherscan.io/token/0x846c66cf71c43f80403b51fe3906b3599d63336f
poly Polymath 18 https://etherscan.io/token/0x9992ec3cf6a55b00978cddf2b27bc6882d88d1ec
powr Power Ledger 6 https://etherscan.io/token/0x595832f8fc6bf59c85c527fec3740a1b7a361269
ppt Populous Platform 8 https://etherscan.io/token/0xd4fa1460f537bb9085d22c7bccb5dd450ef28e3a
prdx PRDX Token 9 https://etherscan.io/token/0xe17900f23b7ebb2791f25f1eaa63d8f5e603e9a5
prints FingerprintsDAO 18 https://etherscan.io/token/0x4dd28568d05f09b02220b09c2cb307bfd837cb95
pro Propy 18 https://etherscan.io/token/0x9041fe5b3fdea0f5e4afdc17e75180738d877a01
prts Protos 0 https://etherscan.io/token/0x835a44027ee4e92bbd8874e5ede9e5148b069e96
pstake PSTAKE Finance 18 https://etherscan.io/token/0xfB5c6815cA3AC72Ce9F5006869AE67f18bF77006
pundix Pundi X2 18 https://etherscan.io/token/0x0fd10b9899882a6f2fcb5c371e17e70fdee00c38
pusd PegUSD Token 8 https://etherscan.io/token/0x93d3296cac208422bf587c3597d116e809870f2b
pxp PointPay Crypto Banking Token V2 18 https://etherscan.io/token/0x95aa5d2dbd3c16ee3fdea82d5c6ec3e38ce3314f
pyr Pyr Token 18 https://etherscan.io/token/0x9534ad65fb398e27ac8f4251dae1780b989d136e
qash QASH 6 https://etherscan.io/token/0x618e75ac90b12c6049ba3b27f5d5f8651b0037f6
qcad QCAD 2 https://etherscan.io/token/0x4a16baf414b8e637ed12019fad5dd705735db2e0
qdt Quadrans Token 18 https://etherscan.io/token/0x9adc7710e9d1b29d8a78c04d52d32532297c2ef3
qkc QuarkChain 18 https://etherscan.io/token/0xea26c4ac16d4a5a106820bc8aee85fd0b7b2b664
qnt Quant 18 https://etherscan.io/token/0x4a220e6096b25eadb88358cb44068a3248254675
qrdo Qredo 8 https://etherscan.io/token/0x4123a133ae3c521fd134d7b13a2dec35b56c2463
qrl Qrl 8 https://etherscan.io/token/0x697beac28b09e122c4332d163985e8a73121b97f
qsp Quantstamp 18 https://etherscan.io/token/0x99ea4db9ee77acd40b119bd1dc4e33e1c070b80d
quick Quickswap 18 https://etherscan.io/token/0x6c28aef8977c9b773996d0e8376d2ee379446f2f
qvt Qvolta 18 https://etherscan.io/token/0x1183f92a5624d68e85ffb9170f16bf0443b4c242
rad Radicle 18 https://etherscan.io/token/0x31c8eacbffdd875c74b94b077895bd78cf1e64a3
rare SuperRare 18 https://etherscan.io/token/0xba5bde662c17e2adff1075610382b9b691296350
rari Rarible 18 https://etherscan.io/token/0xfca59cd816ab1ead66534d82bc21e7515ce441cf
ray Raydium 6 https://etherscan.io/token/0x5245c0249e5eeb2a0838266800471fd32adb1089
rby Ruby X 18 https://etherscan.io/token/0xf7705dee19a63e0bc1a240f723c5c0f570c78572
rdn Raiden Network 18 https://etherscan.io/token/0x255aa6df07540cb5d3d297f0d0d4d84cb52bc8e6
reb Regblo 18 https://etherscan.io/token/0x61383ac89988b498df5363050ff07fe5c52ecdda
rebl Rebellious 18 https://etherscan.io/token/0x5f53f7a8075614b699baad0bc2c899f4bad8fbbf
reef Reef 18 https://etherscan.io/token/0xfe3e6a25e6b192a42a44ecddcd13796471735acf
rep Augur 18 https://etherscan.io/token/0x1985365e9f78359a9b6ad760e32412f4a445e862
repv2 Augur V2 Token 18 https://etherscan.io/token/0x221657776846890989a759ba2973e427dff5c9bb
seth-h Staked ETH Harbour 18 https://etherscan.io/token/0x65077fa7df8e38e135bd4052ac243f603729892d
reth-h Reward ETH Harbour 18 https://etherscan.io/token/0xcbe26dbc91b05c160050167107154780f36ceaab
rfr Refereum 4 https://etherscan.io/token/0xd0929d411954c47438dc1d871dd6081f5c5e149c
rfuel RioDeFi 18 https://etherscan.io/token/0xaf9f549774ecedbd0966c52f250acc548d3f36e5
rgt Rari Governance Token 18 https://etherscan.io/token/0xd291e7a03283640fdc51b121ac401383a46cc623
rif RIF Token 18 https://etherscan.io/token/0x2acc95758f8b5f583470ba265eb685a8f45fc9d5
ringx Ringx Token 18 https://etherscan.io/token/0x7f86c782ec802ac402e0369d2e6d500256f7abc5
rlc Iexec Rlc 9 https://etherscan.io/token/0x607f4c5bb672230e8672085532f7e901544a7375
rsr Reserve Rights 18 https://etherscan.io/token/0x320623b8e4ff03373931769a31fc52a4e78b5d70
rly Rally 18 https://etherscan.io/token/0xf1f955016ecbcd7321c7266bccfb96c68ea5e49b
rndr Render Token 18 https://etherscan.io/token/0x6de037ef9ad2725eb40118bb1702ebb27e4aeb24
ron Ronin 18 https://etherscan.io/token/0x23f043426b2336e723b32fb3bf4a1ca410f7c49a
ronc RONCoin 18 https://etherscan.io/token/0xf1b819fdb689f43afc161db789800ed799f18388
roobee ROOBEE 18 https://etherscan.io/token/0xa31b1767e09f842ecfd4bc471fe44f830e3891aa
rook ROOK 18 https://etherscan.io/token/0xfa5047c9c78b8877af97bdcb85db743fd7313d4a
rsr Reserve Rig 18 https://etherscan.io/token/0x320623b8E4fF03373931769A31Fc52A4E78B5d70
rubx eToro Russian Ruble 18 https://etherscan.io/token/0xd6d69a3d5e51dbc2636dc332338765fcca71d5d5
ruedatk Ruedacoin 6 https://etherscan.io/token/0xe2f43e8053444e764e658bab63d49f873a75ce63
salt Salt 8 https://etherscan.io/token/0x4156d3342d5c385a87d264f90653733592000581
sand Sand 18 https://etherscan.io/token/0x3845badade8e6dff049820680d1f14bd3903a5d0
sashimi SashimiToken 18 https://etherscan.io/token/0xc28e27870558cf22add83540d2126da2e4b464c2
sd Stader 18 https://etherscan.io/token/0xC7452D6a59a3a38dCe2Ed44c9586F1E0ccd7bfF4
sga Saga 18 https://etherscan.io/token/0xed0849bf46cfb9845a2d900a0a4e593f2dd3673c
sgdx eToro Singapore Dollar 18 https://etherscan.io/token/0x0e3e965acffb719e2f5dd4309969e2debe6215dd
sgr Sogur 18 https://etherscan.io/token/0xaea8e1b6cb5c05d1dac618551c76bcd578ea3524
shib Shiba Inu 18 https://etherscan.io/token/0x95ad61b0a150d79219dcf64e1e6cc01f0b64c4ce
shk iShook 18 https://etherscan.io/token/0xebe4a49df7885d015329c919bf43e6460a858f1e
shopx Splyt Core Token 18 https://etherscan.io/token/0x7bef710a5759d197ec0bf621c3df802c2d60d848
shr ShareToken 2 https://etherscan.io/token/0xee5fe244406f35d9b4ddb488a64d51456630befc
sih Sih 18 https://etherscan.io/token/0x6d728ff862bfe74be2aba30537e992a24f259a22
sipher Sipher Token 18 https://etherscan.io/token/0x9f52c8ecbee10e00d9faaac5ee9ba0ff6550f511
sis Symbiosis Finance 18 https://etherscan.io/token/0xd38bb40815d2b0c2d2c866e0c72c5728ffc76dd9
silv XBullion Silver 8 https://etherscan.io/token/0x628ab8b061fea2af1239b68efa5e46135d186666
skale SKALE Network 18 https://etherscan.io/token/0x00c83aecc790e8a4453e5dd3b0b4b3680501a7a7
slab SLAB 18 https://etherscan.io/token/0x994466f822af45cf5db0a0f41b9af6d503bcf3d5
slot AlphaSlot 18 https://etherscan.io/token/0xaee7474c3713ece228aa5ec43c89c708f2ec7ed2
slp Smooth Love Potion 0 https://etherscan.io/token/0xcc8fa225d80b9c7d42f96e9570156c65d6caaa25
slvx eToro Silver 18 https://etherscan.io/token/0x8e4d222dbd4f8f9e7c175e77d6e71715c3da78e0
snc SunContract 18 https://etherscan.io/token/0xf4134146af2d511dd5ea8cdb1c4ac88c57d60404
snov Snovio 18 https://etherscan.io/token/0xbdc5bac39dbe132b1e030e898ae3830017d7d969
snt Status Network Token 18 https://etherscan.io/token/0x744d70fdbe2ba4cf95131626614a1763df805b9e
snx Synthetix Network 18 https://etherscan.io/token/0xc011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f
soc SODACoin 18 https://etherscan.io/token/0xcad49c39b72c37b32cee8b14f33f316d3a8bc335
sohm Staked OHM 9 https://etherscan.io/token/0x04906695d6d12cf5459975d7c3c03356e4ccd460
solve Solve Token 8 https://etherscan.io/token/0x446c9033e7516d820cc9a2ce2d0b7328b579406f
spell Spell Token 18 https://etherscan.io/token/0x090185f2135308bad17527004364ebcc2d37e5f6
spo Sparrow Options 18 https://etherscan.io/token/0x89eafa06d99f0a4d816918245266800c9a0941e0
srnt Serenity 18 https://etherscan.io/token/0xbc7942054f77b82e8a71ace170e4b00ebae67eb6
stbu Stobox Token 18 https://etherscan.io/token/0x212dd60d4bf0da8372fe8116474602d429e5735f
stc Student Coin 2 https://etherscan.io/token/0xb8b7791b1a445fb1e202683a0a329504772e0e52
stcv2 Student Coin V2 18 https://etherscan.io/token/0x15b543e986b8c34074dfc9901136d9355a537e7e
stkaave Staked Aave 18 https://etherscan.io/token/0x4da27a545c0c5b758a6ba100e3a049001de870f5
store Store 8 https://etherscan.io/token/0x2c0f41eb07a0635bac34bd7d11d0ca6058279601
storj Storj 8 https://etherscan.io/token/0xb64ef51c888972c908cfacf59b47c1afbc0ab8ac
storm Storm 18 https://etherscan.io/token/0xd0a4b8946cb52f0661273bfbc6fd0e0c75fc6433
stmx StormX 18 https://etherscan.io/token/0xbe9375c6a420d2eeb258962efb95551a5b722803
stzen stakedZEN 8 https://etherscan.io/token/0x31b595e7cfdb624d10a3e7a562ed98c3567e3865
squig Squiggle 4 https://etherscan.io/token/0x373acda15ce392362e4b46ed97a7feecd7ef9eb8
super SuperFarm 18 https://etherscan.io/token/0xe53ec727dbdeb9e2d5456c3be40cff031ab40a55
sushi SushiToken 18 https://etherscan.io/token/0x6b3595068778dd592e39a122f4f5a5cf09c90fe2
sxp Swipe 18 https://etherscan.io/token/0x8ce9137d39326ad0cd6491fb5cc0cba0e089b6a9
t Threshold 18 https://etherscan.io/token/0xcdf7028ceab81fa0c6971208e83fa7872994bee5
taud TrueAUD 18 https://etherscan.io/token/0x00006100f7090010005f1bd7ae6122c3c2cf0090
tbtc1 Tbtc1 18 https://etherscan.io/token/0x8daebade922df735c38c80c7ebd708af50815faa
tcad TrueCAD 18 https://etherscan.io/token/0x00000100f2a2bd000715001920eb70d229700085
tco Think Coin 18 https://etherscan.io/token/0x6288014d6ba425d71f5fdc1dbfb01378241d78db
tel Telcoin 2 https://etherscan.io/token/0x467bccd9d29f223bce8043b84e8c8b282827790f
ten Tokenomy 18 https://etherscan.io/token/0xdd16ec0f66e54d453e6756713e533355989040e4
tenx TenX Token 18 https://etherscan.io/token/0x515ba0a2e286af10115284f151cf398688a69170
tgbp TrueGBP 18 https://etherscan.io/token/0x00000000441378008ea67f4284a57932b1c000a5
thkd TrueHKD 18 https://etherscan.io/token/0x0000852600ceb001e08e00bc008be620d60031f2
tiox Trade Token X 18 https://etherscan.io/token/0xd947b0ceab2a8885866b9a04a06ae99de852a3d4
trl Triall Token 18 https://etherscan.io/token/0x58f9102bf53cf186682bd9a281d3cd3c616eec41
tknt Tknt 18 https://etherscan.io/token/0xbce7bd79558dda90b261506768f265c5543a9f90
tkx Tokenize 8 https://etherscan.io/token/0x667102bd3413bfeaa3dffb48fa8288819e480a88
tlab TLAB 18 https://etherscan.io/token/0x36222730e78a8656230c54f9e402a062d168d2d9
tnt Tierion 8 https://etherscan.io/token/0x08f5a9235b08173b7569f83645d2c7fb55e8ccd8
tok Tokenplace 8 https://etherscan.io/token/0x4fb721ef3bf99e0f2c193847afa296b9257d3c30
traxx TokenTrax 18 https://etherscan.io/token/0xd43be54c1aedf7ee4099104f2dae4ea88b18a249
trac OriginTrail 18 https://etherscan.io/token/0xaa7a9ca87d3694b5755f213b5d04094b8d0f0a6f
tribe Tribe 18 https://etherscan.io/token/0xc7283b66eb1eb5fb86327f08e1b5816b0720212b
trst WeTrust 6 https://etherscan.io/token/0xcb94be6f13a1182e4a4b6140cb7bf2025d28e41b
tru Tru 8 https://etherscan.io/token/0x4c19596f5aaff459fa38b0f7ed92f11ae6543784
tryb Bilira Token 6 https://etherscan.io/token/0x2c537e5624e4af88a7ae4060c022609376c8d0eb
bico Biconomy 18 https://etherscan.io/token/0xF17e65822b568B3903685a7c9F496CF7656Cc6C2
tryx eToro Turkish Lira 18 https://etherscan.io/token/0x6faff971d9248e7d398a98fdbe6a81f6d7489568
tusd TrueUSD 18 https://etherscan.io/token/0x0000000000085d4780b73119b644ae5ecd22b376
txl Tixl 18 https://etherscan.io/token/0x8eef5a82e6aa222a60f009ac18c24ee12dbf4b41
uair Unicorn AIR Security Token 0 https://etherscan.io/token/0xac47fbb90458695044d9b08d6de285148db4daff
uco UnirisToken 18 https://etherscan.io/token/0x8a3d77e9d6968b780564936d15b09805827c21fa
ukg UnikoinGold 18 https://etherscan.io/token/0x24692791bc444c5cd0b81e3cbcaba4b04acd1f3b
uma UMA Voting Token V1 18 https://etherscan.io/token/0x04fa0d235c4abf4bcf4787af4cf447de572ef828
umee Umee 6 https://etherscan.io/token/0xc0a4df35568f116c370e6a6a6022ceb908eeddac
unb Unbound Protocol 18 https://etherscan.io/token/0x8db253a1943dddf1af9bcf8706ac9a0ce939d922
uni Uniswap Token 18 https://etherscan.io/token/0x1f9840a85d5af5bf1d1762f925bdaddc4201f984
up UpToken 8 https://etherscan.io/token/0x6ba460ab75cd2c56343b3517ffeba60748654d26
upbtc Universal Bitcoin 8 https://etherscan.io/token/0xc7461b398005e50bcc43c8e636378c6722e76c01
upp Sentinel Protocol 18 https://etherscan.io/token/0xc86d054809623432210c107af2e3f619dcfbf652
upt Universal Protocol Token 18 https://etherscan.io/token/0x6ca88cc8d9288f5cad825053b6a1b179b05c76fc
upusd Universal US Dollar 2 https://etherscan.io/token/0x86367c0e517622dacdab379f2de389c3c9524345
uqc Uquid Coin 18 https://etherscan.io/token/0xd01db73e047855efb414e6202098c4be4cd2423b
usdc USD Coin 6 https://etherscan.io/token/0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
usdt Tether 6 https://etherscan.io/token/0xdac17f958d2ee523a2206206994597c13d831ec7
usdx eToro United States Dollar 18 https://etherscan.io/token/0x4e3856c37b2fe7ff2fe34510cda82a1dffd63cd0
usg US Gold 9 https://etherscan.io/token/0x4000369acfa25c8fe5d17fe3312e30c332bef633
uspx USPX Token 0 https://etherscan.io/token/0x38d3d9abbdba8305ebb8b72996efe55bf785aed0
ust TerraUSD 18 https://etherscan.io/token/0xa47c8bf37f92abed4a126bda807a7b7498661acd
usx USD Stable Token 18 https://etherscan.io/token/0xe72f4c4ff9d294fc34829947e4371da306f90465
utk UTrust 18 https://etherscan.io/token/0x70a72833d6bf7f508c8224ce59ea1ef3d0ea3a38
utk1 UTrust Token 18 https://etherscan.io/token/0xdc9ac3c20d1ed0b540df9b1fedc10039df13f99c
valor ValorToken 18 https://etherscan.io/token/0x297e4e5e59ad72b1b0a2fd446929e76117be0e0a
vdx Vodi X 18 https://etherscan.io/token/0x91e64f39c1fe14492e8fdf5a8b0f305bd218c8a1
vega Vega Protocol 18 https://etherscan.io/token/0xcb84d72e61e383767c4dfeb2d8ff7f4fb89abc6e
visr Visor.Finance 18 https://etherscan.io/token/0xf938424f7210f31df2aee3011291b658f872e91e
vrgx VroomGo 8 https://etherscan.io/token/0x4861b1a0ead261897174fd849ca0f5154fcf2442
vsp Vesper Token 18 https://etherscan.io/token/0x1b40183efb4dd766f11bda7a7c3ad8982e998421
vxc Vinx Coin 18 https://etherscan.io/token/0x14f0a12a43c36c49d4b403dd6e1a9b8222be456c
wabi Tael Token 18 https://etherscan.io/token/0x286bda1413a2df81731d4930ce2f862a35a609fe
wafl Wafl Token 18 https://etherscan.io/token/0x3fee076a0f0218899b89fe7e3f54dd2dc18917e0
wax Wax 8 https://etherscan.io/token/0x39bb259f66e1c59d5abef88375979b4d20d98022
wbtc Wrapped Bitcoin 8 https://etherscan.io/token/0x2260fac5e5542a773aa44fbcfedf7c193bc2c599
wcfg Wrapped Centrifuge 18 https://etherscan.io/token/0xc221b7e65ffc80de234bbb6667abdd46593d34f0
wec Whole Earth Coin 18 https://etherscan.io/token/0xcc1a8bd438bebc4b2a885a34475bb974f2124317
wet We Show Token 18 https://etherscan.io/token/0x36d10c6800d569bb8c4fe284a05ffe3b752f972c
weth Wrapped Ether 18 https://etherscan.io/token/0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
whale WHALE 4 https://etherscan.io/token/0x9355372396e3f6daf13359b7b607a3374cc638e0
wht Whatshalal 18 https://etherscan.io/token/0xae8d4da01658dd0ac118dde60f5b78042d0da7f2
wnxm Wrapped NXM 18 https://etherscan.io/token/0x0d438f3b5175bebc262bf23753c1e53d03432bde
woo Wootrade Network 18 https://etherscan.io/token/0x4691937a7508860f876c9c0a2a617e7d9e945d4b
wpx WalletPlusX 18 https://etherscan.io/token/0x4bb0a085db8cedf43344bd2fbec83c2c79c4e76b
wsteth Wrapped stETH 18 https://etherscan.io/token/0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0
wtc Walton Token 18 https://etherscan.io/token/0xb7cb1c96db6b22b0d3d9536e0108d062bd488f74
wtk WadzPay Token 18 https://etherscan.io/token/0x4cff49d0a19ed6ff845a9122fa912abcfb1f68a6
wxrp Wrapped XRP 18 https://etherscan.io/token/0x39fbbabf11738317a448031930706cd3e612e1b9
wxrpv0 Wrapped XRP v0 6 https://etherscan.io/token/0xda7e5a3841550a5ba271dcc76a885af902142dfc
wluna Wrapped LUNA 18 https://etherscan.io/token/0xd2877702675e6ceb975b4a1dff9fb7baf4c91ea9
wlxt Wallex Token 18 https://etherscan.io/token/0x1fd389ac8e6c958b0f01067540fdff8a11488201
wxt Wirex 18 https://etherscan.io/token/0xa02120696c7b8fe16c09c749e4598819b2b0e915
wild Wilder World 18 https://etherscan.io/token/0x2a3bff78b79a009976eea096a51a948a3dc00e34
xaud XAUD Token 5 https://etherscan.io/token/0x1185a1b58bdd774a36cc9598c5e3531dfeb1b736
xbgold XBullion Token 8 https://etherscan.io/token/0x670f9d9a26d3d42030794ff035d35a67aa092ead
xcd CapdaxToken 18 https://etherscan.io/token/0xca00bc15f67ebea4b20dfaaa847cace113cc5501
xex Cross Exchange Token 18 https://etherscan.io/token/0xbf68b3756f82b522588511da682dfd7e3bf34dee
xrl Rialto 9 https://etherscan.io/token/0xb24754be79281553dc1adc160ddf5cd9b74361a4
xsgd StraitsX 6 https://etherscan.io/token/0x70e8de73ce538da2beed35d14187f6959a8eca96
xsushi xSUSHI 18 https://etherscan.io/token/0x8798249c2e607446efb7ad49ec89dd1865ff4272
xtp Tap 18 https://etherscan.io/token/0x6368e1e18c4c419ddfc608a0bed1ccb87b9250fc
yfdai Yfdai.Finance 18 https://etherscan.io/token/0xf4cd3d3fda8d7fd6c5a500203e38640a70bf9577
yfi Yearn.Finance 18 https://etherscan.io/token/0x0bc529c00c6401aef6d220be8c6ea1667f6ad93e
yfii YFII.Finance 18 https://etherscan.io/token/0xa1d0e215a23d7030842fc67ce582a6afa3ccab83
ygg Yield Guild Games 18 https://etherscan.io/token/0x25f8087ead173b73d6e8b84329989a8eea16cf73
yld Yld 18 https://etherscan.io/token/0xf94b5c5651c888d928439ab6514b93944eee6f48
yng Young Token 18 https://etherscan.io/token/0xa26cbb76156090f4b40a1799a220fc4c946afb3c
ysey YSEY Utility Token 3 https://etherscan.io/token/0x1358efe5d9bfc2005918c0b2f220a4345c9ee7a3
zarx eToro South African Rand 18 https://etherscan.io/token/0x29ec3ff4e1dcad5a207dbd5d14e48073abba0bd3
zco Zebi Coin 8 https://etherscan.io/token/0x2008e3057bd734e10ad13c9eae45ff132abc1722
zil Zilliqa 12 https://etherscan.io/token/0x05f4a42e251f2d52b8ed15e9fedaacfcef1fad27
zix Zeex Token 18 https://etherscan.io/token/0xf3c092ca8cd6d3d4ca004dc1d0f1fe8ccab53599
zlw Zelwin 18 https://etherscan.io/token/0x5319e86f0e41a06e49eb37046b8c11d78bcad68c
zmt Zipmex Token 18 https://etherscan.io/token/0xaa602de53347579f86b996d2add74bb6f79462b2
zoom CoinZoom 18 https://etherscan.io/token/0x69cf3091c91eb72db05e45c76e58225177dea742
zrx 0x Token 18 https://etherscan.io/token/0xe41d2489571d322189246dafa5ebde1f4699f498
zusd Z.com Usd 6 https://etherscan.io/token/0xc56c2b7e71b54d38aab6d52e94a04cbfa8f604fa
seth2 StakeWise Staked ETH2 18 https://etherscan.io/address/0xFe2e637202056d30016725477c5da089Ab0A043A
reth2 StakeWise Reward ETH2 18 https://etherscan.io/address/0x20bc832ca081b91433ff6c17f85701b6e92486c5
ldo Lido DAO Token 18 https://etherscan.io/token/0x5a98fcbea516cf06857215779fd812ca3bef1b32
gbpt Poundtoken 18 https://etherscan.io/token/0x86b4dbe5d203e634a12364c0e428fa242a3fba98
ever Everscale 9 https://etherscan.io/token/0x29d578cec46b50fa5c88a99c6a4b70184c062953

Test Ethereum - TERC20 Tokens

TERC20 tokens can be accessed on different Testnets with the following identifiers.

Testnet Token Id Token Name Precision Contract Details
Ethereum Goerli fixed Goerli Example Fixed Supply Token 18 https://goerli.etherscan.io/token/0xa13de8df4ef9d6016f0826858d48045848429390
Ethereum Goerli gterc2dp Goerli ERC20 Token 2 Decimals 2 https://goerli.etherscan.io/token/0xe19e232e942cde4320b6354646cbb1336ae732c7
Ethereum Goerli gterc6dp Goerli ERC20 Token 6 Decimals 6 https://goerli.etherscan.io/token/0xe7afa17e6e5257806d2309b01e6de320668ec3dc
Ethereum Goerli gterc18dp Goerli ERC20 Token 18 Decimals 18 https://goerli.etherscan.io/token/0x61d54356be035944a3868eaa9556353b7150699d
Ethereum Goerli gtaave18dp Goerli Test AAVE Token 18 Decimals 18 https://goerli.etherscan.io/token/0x631d5e3c45a459e8f98b9d6a2734fce7b051f845
Ethereum Goerli gtbat18dp Goerli Test BAT Token 18 Decimals 18 https://goerli.etherscan.io/token/0x95458b26c8b524eb5ef92c7a1759ede6224bef2e
Ethereum Goerli gtcomp18dp Goerli Test COMP Token 18 Decimals 18 https://goerli.etherscan.io/token/0xa1ff97c394b25926acb09d12bacf0613055a2727
Ethereum Goerli gtgrt18dp Goerli Test GRT Token 18 Decimals 18 https://goerli.etherscan.io/token/0x1441f298d1f15084a0e5c714c966033e39597de7
Ethereum Goerli gtlink18dp Goerli Test LINK Token 18 Decimals 18 https://goerli.etherscan.io/token/0xfe4537ff71aef28592c5c7331ed4b20f276d770b
Ethereum Goerli gtmkr18dp Goerli Test MKR Token 18 Decimals 18 https://goerli.etherscan.io/token/0xf84e8207e4dc846e250208a6e4b05aa3e7ab00c6
Ethereum Goerli gtsnx18dp Goerli Test SNX1 Token 18 Decimals 18 https://goerli.etherscan.io/token/0x50608a26bff103290a4a47b152395047801e9280
Ethereum Goerli gtuni18dp Goerli Test UNI Token 18 Decimals 18 https://goerli.etherscan.io/token/0x6be1a99c215872cea33217b0f4bad63f186ddfac
Ethereum Goerli gtusdt6dp Goerli Test USDT Token 6 Decimals 6 https://goerli.etherscan.io/token/0x51445dcddf5246229bae8c0ba3ea462e63038641
Ethereum Goerli gtyfi18dp Goerli Test YFI Token 18 Decimals 18 https://goerli.etherscan.io/token/0xf4755c1a9aaad9d6b919edb8346ce9b46d066be4
Ethereum Goerli gtwbtc8dp Goerli Test WBTC Token 8 Decimals 8 https://goerli.etherscan.io/token/0xd4bccebe77b7c1da89818f8889e3ea09046e7e38
Ethereum Goerli ghcn Himalayan Coin 18 https://goerli.etherscan.io/token/0xa05e3efe2771cd04191f3eadb9a99ba3b4bf9d26
Ethereum Goerli ghdo Himalayan Dollar 18 https://goerli.etherscan.io/token/0x5426635915740813092eeff72158bc492799da5f
Ethereum Goerli gusdt Goerli USDT 18 https://goerli.etherscan.io/token/0x64d081854fad45e64db52cd28ba78ae1ecfee59b
Ethereum Goerli terc2dp1 Test ERC Token 2 Decimals 2 https://goerli.etherscan.io/token/0xceef48d58cc3a51d8b6df155633007415b9bae01
Ethereum Goerli terc2dp2 Test ERC Token 2 Decimals 2 https://goerli.etherscan.io/token/0x168AE5b381F7C317AC6EF2161c6e5fcC0e0de41e
Ethereum Goerli terc2dp3 Test ERC Token 2 Decimals 2 https://goerli.etherscan.io/token/0x12cb9d6127ac74847cc444e6661cfd1b5107bd26
Ethereum Goerli terc2dp4 Test ERC Token 2 Decimals 2 https://goerli.etherscan.io/token/0x458fdef6e1e58614d82f3116d8ca1f23419cb8c0
Ethereum Goerli terc2dp5 Test ERC Token 2 Decimals 2 https://goerli.etherscan.io/token/0xf44c85bf1d556a8268a1212cf0b9248af4f238bd
Ethereum Goerli terc6dp1 Test ERC Token 6 Decimals 6 https://goerli.etherscan.io/token/0x3b9f958f0ba34aa103fabb054f29400703470bac
Ethereum Goerli terc6dp2 Test ERC Token 6 Decimals 6 https://goerli.etherscan.io/token/0x2508d109a0cd87e597a1de071325f5cf56d4639a
Ethereum Goerli terc6dp3 Test ERC Token 6 Decimals 6 https://goerli.etherscan.io/token/0xdda2375104ee9a97e1d7aa4bc48ede2c4c6ddf48
Ethereum Goerli terc6dp4 Test ERC Token 6 Decimals 6 https://goerli.etherscan.io/token/0x06c1f1195c59ec5f318d12d4cc2d1f9d45261756
Ethereum Goerli terc6dp5 Test ERC Token 6 Decimals 6 https://goerli.etherscan.io/token/0x3326af8eeb6d4ce1f1f0652fcb3d5e07cd9c1039
Ethereum Goerli terc18dp1 Test ERC Token 18 Decimals 18 https://goerli.etherscan.io/token/0x9f77b76e6866b3f5dd99382c96f16eddabc0b78e
Ethereum Goerli terc18dp2 Test ERC Token 18 Decimals 18 https://goerli.etherscan.io/token/0x18b17853ff62122c60f113b8b8967243c39ad30e
Ethereum Goerli terc18dp3 Test ERC Token 18 Decimals 18 https://goerli.etherscan.io/token/0x96f13e2ea4b738380922dd9f5cd8fcf0416e5f2d
Ethereum Goerli terc18dp4 Test ERC Token 18 Decimals 18 https://goerli.etherscan.io/token/0xbecf20f89b6898bd8bbf3fa93fb4bcda367b9594
Ethereum Goerli terc18dp5 Test ERC Token 18 Decimals 18 https://goerli.etherscan.io/token/0x4464fe55f9a8aea46e02c4a22b4d74661805ec26
Ethereum Goerli terc18dp6 Test ERC Token 18 Decimals 18 https://goerli.etherscan.io/token/0x998ddfd1ac3ed76fc163528c5fc69b8d67fa5395
Ethereum Goerli terc18dp7 Test ERC Token 18 Decimals 18 https://goerli.etherscan.io/token/0xf2555ac243ab2606fa71e2f2728117054dd1867b
Ethereum Goerli terc18dp8 Test ERC Token 18 Decimals 18 https://goerli.etherscan.io/token/0xd9da1e909e3b4b2c1ec31b702bef0bf1e42533e4
Ethereum Goerli terc18dp9 Test ERC Token 18 Decimals 18 https://goerli.etherscan.io/token/0xb91be6a36b60c4576aff75a50d2b7c762349ddec
Ethereum Goerli terc18dp10 Test ERC Token 18 Decimals 18 https://goerli.etherscan.io/token/0xc53d2c04795a1cef22a91c9d52c04f5082bb5631
Ethereum Goerli terc18dp11 Test ERC Token 18 Decimals 18 https://goerli.etherscan.io/token/0xc325d7f188dc6015f45d3d39e58c5404e79b5cb9
Ethereum Goerli terc18dp12 Test ERC Token 18 Decimals 18 https://goerli.etherscan.io/token/0x7a8f375798284920cd27d1c757ceca3675603ab1
Ethereum Goerli terc18dp13 Test ERC Token 18 Decimals 18 https://goerli.etherscan.io/token/0x2e3f4bf47e4ea53a7a94f0597b47fe3caab78b0d
Ethereum Goerli terc18dp14 Test ERC Token 18 Decimals 18 https://goerli.etherscan.io/token/0x4f369aa78b9f299cb50ad4d96e13bdfbd8be7239
Ethereum Goerli terc18dp15 Test ERC Token 18 Decimals 18 https://goerli.etherscan.io/token/0x0fcb9bc4c67d502a45a07f514638ca8f83ba2912
Ethereum Goerli teuroc Test Euro Coin 6 https://goerli.etherscan.io/token/0xa683d909e996052955500ddc45ca13e25c76e286
Ethereum Goerli tmatic Test Polygon 18 https://goerli.etherscan.io/token/0x499d11e0b6eac7c0593d8fb292dcbbf815fb29ae

Wallet functionality

Unlike Ether, ERC20 tokens do not have the full functionality of a wallet. You cannot create wallets, create/list/get receive addresses, or share wallets for ERC20 tokens.

To retrieve token details associated with an Ethereum wallet, such as balance, pending approvals, policies, and webhooks, set the allTokens parameter to true with the following calls:

  1. Get Wallet
  2. List Wallets
  3. List Pending Approvals
  4. List Wallet Webhooks
  5. List Transfers
  6. Add Wallet Webhook

Keychains

ERC20 tokens do not have a direct association with keys or keychains. Instead, all tokens share the same keys/keychains that belong to the Ethereum wallet.

Balances

Each token has a different divisibility factor which is specified in the token contract. This value is usually 1,000,000,000,000,000,000 (1018) units, but can vary from token to token. Check the client constants to see the number of decimal places the token supports.

Balances are supported in string format: balanceString, confirmedBalanceString, and spendableBalanceString.

Transactions

BitGo's Ethereum multisig contract currently only supports one sender and one recipient. That means that the sendMany call only accepts one recipient for tokens.

ERC20 Tokens Webhooks

By setting the allTokens parameter to true, a generic webhook is created which triggers on all ERC20 token and ETH transactions. It sends an HTPP request to your webhook URL and specifies whether it is Ethereum or a token using the field "coin".

Here's an example response for a test token called "terc".

{
    "hash":"0x3e00ae17961d3d42ae722085904ba84e63a32b005ff46afff28b7c9c76f63291",
    "transfer":"5b612d25c9067f2a1db11a15f165989e",
    "coin":"terc",
    "type":"transfer",
    "state":"confirmed",
    "wallet":"5a13adcab70f2c284fdd9682db5e6d64"
}

To get additional details about this transfer, you need to get the transfer details using the token name and transfer id. For the above transfer you'd need to call the Get Transfer route to check the amount transferred and other details (e.g. /api/v2/terc/wallet/5a13adcab70f2c284fdd9682db5e6d64/transfer/5b612d25c9067f2a1db11a15f165989e).

Note: Transactions that send both Ethereum and ERC20 tokens (or multiple token types) supported by BitGo generate one webhook notification for each.

Hedera Hashgraph

Hedera (HBAR) can be accessed with the following coin types:

Environment Coin Type Faucet
Hedera Production hbar https://portal.hedera.com/register
Hedera Testnet thbar https://portal.hedera.com/register

Generating wallets

To create a HBAR wallet using BitGoJS:

bitgo
  .coin('thbar')
  .wallets()
  .generateWallet({
    label: 'My Test Wallet',
    passphrase: 'secretpassphrase1a5df8380e0e30',
  })
  .then(function (wallet) {
    // print the new wallet
    console.dir(wallet);

    // print the new wallets address to send to
    console.dir(wallet.coinSpecific.baseAddress);
  });

Creating HBAR wallets is restricted to enterprise customers. In production, there is limit of 100 wallets total per enterprise. In testnet, there is no limit.

Note: To inquire about increasing your limit, contact BitGo at support@bitgo.com.

Before you can use an HBAR wallet, it must be initialized on the Hedera blockchain. A funding transaction must first be sent to the wallet's address. When BitGo detects this funding transaction, it automatically sends another initialization transaction to set up the signers and the home domain of the account. There is a fee associated with creating HBAR wallets that BitGo covers for the user.

Until the initialization transaction is confirmed, the wallet is not ready for use, and the receive address is not exposed in the API. This is to protect users from losing funds by sending to a wallet that does not exist on the network.

Warning: Do not use an HBAR wallet while it is being initialized or you may lose funds.

LABEL="My Test Wallet"
PASSPHRASE="secretpassphrase1a5df8380e0e30"

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d "{ \"label\": \"$LABEL\", \"passphrase\": \"$PASSPHRASE\" }" \
http://$BITGO_EXPRESS_HOST:3080/api/v2/thbar/wallet/generate

Creating addresses

bitgo
  .coin('thbar')
  .wallets()
  .getWallet({ id: '585c51a5df8380e0e3082e46' })
  .then(function (wallet) {
    return wallet.createAddress();
  })
  .then(function (newAddress) {
    // print new address details
    console.dir(newAddress);
  });
WALLET=585c51a5df8380e0e3082e46

curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/thbar/wallet/$WALLET/address

HBAR receive addresses are defined as a memo which can be attached to a transaction. For each BitGo wallet, an incrementing string number value is used as the memo. Whenever a new address is created, the incremented memoId and is returned in the coinSpecific property of the address.

Balances

HBAR (HBAR) is the native asset of the Hedera blockchain. The base unit of HBAR is tinybar:

  • 1 tinybar is (10-8) or 0.00000001 HBAR.
  • 1 HBAR is (108) or 100000000 tinybars (100 million).

Balances are supported in string format: balanceString, confirmedBalanceString, and spendableBalanceString.

Litecoin

Litecoin can be accessed with the following coin types:

Environment Coin Type Faucet
Litecoin Production ltc
Litecoin Testnet tltc http://testnet.litecointools.com/

Generating wallets

bitgo
  .coin('tltc')
  .wallets()
  .generateWallet({
    label: 'My Test Wallet',
    passphrase: 'secretpassphrase1a5df8380e0e30',
  })
  .then(function (wallet) {
    // print the new wallet
    console.dir(wallet);
  });
LABEL="My Test Wallet"
PASSPHRASE="secretpassphrase1a5df8380e0e30"

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d "{ \"label\": \"$LABEL\", \"passphrase\": \"$PASSPHRASE\" }" \
http://$BITGO_EXPRESS_HOST:3080/api/v2/tltc/wallet/generate

For Litecoin, BitGo uses the same 2-of-3 multisig P2SH scheme as for Bitcoin, with the keys in the order of User, Backup and BitGo respectively.

Creating addresses

bitgo
  .coin('tltc')
  .wallets()
  .getWallet({ id: '585c51a5df8380e0e3082e46' })
  .then(function (wallet) {
    return wallet.createAddress();
  })
  .then(function (newAddress) {
    // print new address details
    console.dir(newAddress);
  });
WALLET=585c51a5df8380e0e3082e46

curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/tltc/wallet/$WALLET/address

See the table of address types under Address Derivation (BIP-32) above. Litecoin defaults to chain 0.

Converting addresses

bitgo.coin('ltc').canonicalAddress('3GBygsGPvTdfKMbq4AKZZRu1sPMWPEsBfd', 2);
// MNQ7zkgMsaV67rsjA3JuP59RC5wxRXpwgE

bitgo.coin('ltc').canonicalAddress('3GBygsGPvTdfKMbq4AKZZRu1sPMWPEsBfd', 1);
bitgo.coin('ltc').canonicalAddress('MNQ7zkgMsaV67rsjA3JuP59RC5wxRXpwgE', 1);
// 3GBygsGPvTdfKMbq4AKZZRu1sPMWPEsBfd
curl -X POST \
-H "Content-Type: application/json" \
-d "{ \"address\": \"3GBygsGPvTdfKMbq4AKZZRu1sPMWPEsBfd\", \"scriptHashVersion\": 2 }" \
http://$BITGO_EXPRESS_HOST:3080/api/v2/ltc/canonicaladdress
# MNQ7zkgMsaV67rsjA3JuP59RC5wxRXpwgE

Litecoin used to support the same P2SH address format as Bitcoin, but switched to other version identifiers. This is why some Litecoin addresses start with 3 and some with M. Both addresses are the same.

For incoming transactions, BitGo converts each address that start with 3 to one that starts with M. For outgoing transactions, BitGo only accepts the new address format.

In testnet, the new P2SH addresses start with Q, so the corresponding conversion could be between 2MsFGJvxH1kCoRp3XEYvKduAjY6eYz9PJHz and QLc2RwpX2rFtZzoZrexLibcAgV6Nsg74Jn.

Method

bitgo.coin('ltc').canonicalAddress(address, scriptHashVersion)

bitgo.coin('tltc').canonicalAddress(address, scriptHashVersion)

HTTP Request

POST /api/v2/:coin/canonicaladdress

Function Arguments

Parameter Type Required Description
address String Yes The address string to convert
scriptHashVersion Integer No 1 for old address format, 2 for new. Defaults to 2.

Balances

Litecoin (LTC) is the native asset of the Litecoin blockchain. The base unit of Litecoin is microlitecoin:

  • 1 microlitecoin is (10-8) or 0.00000001 Litecoin.
  • 1 Litecoin is (108) or 100000000 microlitecoins (100 million).

Balances are supported in string and number format but string is recommended to ensure values do not exceed the programmable number limit: balanceString, confirmedBalanceString, and spendableBalanceString.

RSK Smart Bitcoin

Note: RSK was formely known as Rootstock

RSK Smart Bitcoincan be accessed with the following coin types:

Environment Coin Type Faucet
RSK Production rbtc
RSK Testnet trbtc https://faucet.rsk.co/

Enterprise fee address

ENTERPRISEID=585c51a5df8380e0e3082e46

curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/trbtc/enterprise/$ENTERPRISEID/feeAddressBalance

RSK uses the same fee address structure as Ethereum.

Each enterprise has a fee address which will be used to pay for transaction fees on all RSK wallets in that enterprise. The fee address is displayed in the dashboard of the BitGo website, and you must fund it before creating a wallet, address, or sending a transaction. If the enterprise's fee address runs out of funds, you will not be able to create new wallets, addresses, or send transactions until you fund the fee address. You will not be able to use one of your own RSK wallets to fund the fee address if the fee address is too low (because you will not be able to send transactions from your RSK wallet). I It is best to create and fund a non-BitGo RSK account, so you can use it to fund your BitGo enterprise fee address. Any open source RSK wallet can be used to create an account.

Note that the fee address is a single-signature account, and the private key is created and owned by BitGo. You will not be able to send funds out of the fee address once you have sent them in.

There will be a feeAddress field under the CoinSpecific key for RSK wallets. You will use this address to pay the fees for creating transactions and addresses.

Generating wallets

bitgo
  .coin('trbtc')
  .wallets()
  .generateWallet({
    label: 'My Test Wallet',
    passphrase: 'secretpassphrase1a5df8380e0e30',
    enterprise: '5612c2beeecf83610b621b90964448cd',
  })
  .then(function (wallet) {
    // print the new wallet
    console.dir(wallet);
  });
LABEL="My Test Wallet"
PASSPHRASE="secretpassphrase1a5df8380e0e30"

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d "{ \"label\": \"$LABEL\", \"passphrase\": \"$PASSPHRASE\" }" \
http://$BITGO_EXPRESS_HOST:3080/api/v2/trbtc/wallet/generate

Before you can use an RSK wallet, it must be initialized on the RSK blockchain. When you create an RSK wallet, BitGo sends a transaction on the RSK network in order to generate the wallet.

Until the initialization transaction is confirmed, the wallet is not ready for use, and the receive address is not exposed in the API. This is to protect users from losing funds by sending to a wallet that does not exist on the network.

Warning: Do not use an RSK wallet while it is being initialized or you may lose funds.

Creating addresses

bitgo
  .coin('trbtc')
  .wallets()
  .getWallet({ id: '585c51a5df8380e0e3082e46' })
  .then(function (wallet) {
    return wallet.createAddress();
  })
  .then(function (newAddress) {
    // print new address details
    console.dir(newAddress);
  });
WALLET=585c51a5df8380e0e3082e46

curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/trbtc/wallet/$WALLET/address

RSK address creation requires interactions with the RSK blockchain. In order to deploy a receive address contract, BitGo sends a transaction on the RSK network. Make sure to fund the fee address mentioned above. Like the wallet creation process, a RSK address will not be immediately usable upon creation and so the caller of this function will have to wait for the initialization transaction to be confirmed before attempting to fetch, or send to, the address.

Balances

Smart Bitcoin (RBTC) is the native asset of the RSK blockchain and is pegged 1:1 to BTC. RSK is a smart-contract compatible Bitcoin sidechain and uses the Ethereum Virtual Machine (EVM).

RBTC is used to pay for RSK gas fees like Ether is used to pay for Ethereum gas fees. The base unit of Smart Bitcoin is wei:

  • 1 wei is (10-18) or 0.000000000000000001 RSK.
  • 1 RSK is (1018) or 1000000000000000000 wei (1 quintillion).

Balances are supported in string format: balanceString, confirmedBalanceString, and spendableBalanceString.

Transactions

BitGo's RSK multisig contract currently only supports one sender and one recipient. That means that the sendMany call will only accept one recipient.

Stacks

Stacks can be accessed with the following coin types:

Environment Coin Type Faucet
STX Production stx
STX Testnet tstx https://docs.stacks.co/understand-stacks/testnet#faucet

Generating wallets

bitgo
  .coin('tstx')
  .wallets()
  .generateWallet({
    label: 'My Test Wallet',
    passphrase: 'secretpassphrase1a5df8380e0e30',
  })
  .then(function (wallet) {
    // print the new wallet
    console.dir(wallet);
  });
LABEL="My Test Wallet"
PASSPHRASE="secretpassphrase1a5df8380e0e30"

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d "{ \"label\": \"$LABEL\", \"passphrase\": \"$PASSPHRASE\" }" \
http://$BITGO_EXPRESS_HOST:3080/api/v2/tbtc/wallet/generate

Creating addresses

bitgo
  .coin('tstx')
  .wallets()
  .getWallet({ id: '585c51a5df8380e0e3082e46' })
  .then(function (wallet) {
    return wallet.createAddress();
  })
  .then(function (newAddress) {
    // print new address details
    console.dir(newAddress);
  });
WALLET=585c51a5df8380e0e3082e46

curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/tstx/wallet/$WALLET/address

Balances

Stacks Stacks (STX) is the native asset of the Stacks blockchain. It is called a "token," but as a layer-1 asset it is treated here as a coin. The base unit of STX is a micro-STX:

  • 1 micro-STX is (10-6) or 0.000001 STX.
  • 1 STX is (106) or 1000000 micro-STX (1 million).

Balances are supported in string format: balanceString, confirmedBalanceString, and spendableBalanceString.

Fee rate

Fees fees are calculated based on the estimate fee rate and the size of the raw transaction in bytes. The fee rate is a market determined variable. For the testnet, it is set to 1 micro-STX.

Set the fee manually

In order to set the fee manually, add feeRate param to the body of the request.

Example for single recipient transfer:

{
    recipients: [{
        amount: amount, //string - amount in micro-stx
        address: receiverAddress, //string
    }],
    feeRate: 500000 // amount in micro-stx as number or string, equal to 0.5 STX
}

Send-Many: send to multiple recipients

Stacks doesnt provide a native funtionality to send to many recipients in the same transaction but there is smart contract that allows us to do it. It also supports for memos on each receiver. In order to use it, the recipients params in the body of a transfer transaction should have more than 1 recipient object.

{
    recipients: [{
        amount: "amount1", //string - amount in micro-stx
        address: "receiverAddress1", //string
        memo: "memo1", //string - optional
    },{
        amount: "amount2", //string - amount in micro-stx
        address: "receiverAddress2", //string
        memo: "memo2", //string - optional
    },{
        amount: "amount3", //string - amount in micro-stx
        address: "receiverAddress3", //string
        memo: "memo3", //string - optional
    },{
        amount: "amount4", //string - amount in micro-stx
        address: "receiverAddress4", //string
        memo: "memo4", //string - optional
    }],
}

Staking

Stacks refers to staking as stacking. Stacks is a proof of stake protocol where users can delegate part of their funds to a validator (or "stacker") to stake and get rewards for participating in securing the network. Stacks has a unique staking mechanism where users delegate STX but earn BTC as reward. When users delegate, funds are “locked” but remain in the wallet. Users must undelegate to “unlock” the funds to be withdrawn or sent out.

Currently, BitGo allows users to act as delegators which means that from their wallets they can:

  • Delegate (or stake) STX
  • Undelegate (or unstake) STX
  • Receive rewards for delegating STX.

Delegating

Staking cycles run in sequence. Users must delegate their funds before the cycle ends in order to generate rewards from a stacker (validator).

Note: BitGo recommends that users use a specific BTC address solely for generating rewards.

Stacks staking examples

These examples are for wallet endpoints like:

https://app.bitgo.com/api/v2/stx/wallet/walletId/tx/build
https://app.bitgo.com/api/v2/stx/wallet/walletId/tx/initiate

Delegate

To get the BTC Address hash and version BitGo recommends that you use a script like this:

Note: Addresses must be in legacy format (and start with a 1 or a 3). Native SegWit addresses (that start with bc1) are not supported.

const bitcoinjs = require('bitcoinjs-lib');

const btcAddress = '1QF7K4izEcgDxu9yRBLpFe6viFihiL1w5j';
const parsedAddress = bitcoinjs.address.fromBase58Check(btcAddress);

const btcAddressVersionToHashMode = (version) => {
  switch (version) {
    case '0': // BTC version for mainnet P2PKH
    case '111': // BTC version for testnet P2PKH
      return { data: [0], type: 'Buffer' };
    case '5': // BTC version for mainnet P2SH
    case '196': // BTC version for testnet P2SH
      return { data: [1], type: 'Buffer' };
    default:
      break;
  }
};
const AddressHash = bas58.hash.toJSON();
const AddressVersion = btcAddressVersionToHashMode(parsedAddress.version.toString());
console.log(AddressHash); //{type: 'Buffer',data: [ 254, 245, 252,  42, 179, 220, 238, 122, 241, 132, 202, 47, 217,  13,  20,  38, 151, 116, 250, 128]}
console.log(AddressVersion); //{ data: [ 0 ], type: 'Buffer' }

The body of the request transaction should look like this:

{
    type: "stakingLock",
    recipients: [{
        amount: amount, //string - amount in micro-stx
        address: validatorAddress, //string
    }],
    stakingOptions: {
        contractName: 'pox',
        functionName: 'delegate-stx',
        functionArgs: [
            // First param is the amount in micro-stx do delegate
            {
                type: 'uint128',
                val: amount //string - amount in micro-stx
            },
            // Second param is validator address
            {
                type: 'principal',
                val: validatorAddress //string
            },
            // Third param is the delegation cycles that delegate permisions will last.
            // Is a required parameter and must be a 1 or higher.
            {
                type: 'optional',
                val: numberOfCycles //string
            },
            // Fourth param is the BTC address in which you will receive the rewards.
            // Is required.
            {
                type: 'optional',
                val: {
                    type: 'tuple',
                    val: [{
                            key: 'hashbytes',
                            type: 'buffer',
                            val: AddressHash
                        },
                        {
                            key: 'version',
                            type: 'buffer',
                            val: AddressVersion
                        },
                    ],
                },
            },
        ],
    };
}

Revoke delegate

The body of the request transaction should look like this:

{
    type: "stakingUnlock",
    recipients: [{
        amount: '0', // string
        address: '', // empty string
    }],
    stakingOptions: {
        contractName: 'pox',
        functionName: 'revoke-delegate-stx',
        functionArgs: [] // empty array
        },
}

Avalanche Contract Chain (C-Chain)

Avalanche can be accessed with the following coin types

Environment Coin Type Faucet
Avax C-Chain Production avaxc
Avax C-Chain Testnet tavaxc https://faucet.avax-test.network/

Enterprise fee address

ENTERPRISEID=585c51a5df8380e0e3082e46

curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/tavaxc/enterprise/$ENTERPRISEID/feeAddressBalance

The C-Chain is an instance of the Ethereum Virtual Machine (EVM). Each enterprise has a fee address which will be used to pay for transaction fees on all Avalanche C-Chain wallets in that enterprise. The fee address is displayed in the dashboard of the BitGo website, and you must fund it before creating a wallet, address, or sending a transaction. If the enterprise's fee address runs out of funds, you will not be able to create new wallets, addresses, or send transactions until you fund the fee address. You will not be able to use one of your own Avalanche C-Chain wallets to fund the fee address if the fee address is too low (because you will not be able to send transactions from your Avalanche C-Chain wallet). It is best to create and fund a non-BitGo Avalanche C-Chain account, so you can use it to fund your BitGo enterprise fee address. Any open source Avalanche C-Chain wallet can be used to create an account.

Please note that the fee address is a single-signature account, and that the private key is created and owned by BitGo. You will not be able to send funds out of the fee address once you have sent them in.

There will be a feeAddress field under the CoinSpecific key for Avalanche C-Chain wallets. You will use this address to pay the fees for creating transactions and addresses.

Wallet construction

bitgo
  .coin('tavaxc')
  .wallets()
  .generateWallet({
    label: 'My Test Wallet',
    passphrase: 'secretpassphrase1a5df8380e0e30',
    enterprise: '5612c2beeecf83610b621b90964448cd',
  })
  .then(function (wallet) {
    // print the new wallet
    console.dir(wallet);
  });
LABEL="My Test Wallet"
PASSPHRASE="secretpassphrase1a5df8380e0e30"

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d "{ \"label\": \"$LABEL\", \"passphrase\": \"$PASSPHRASE\" }" \
http://$BITGO_EXPRESS_HOST:3080/api/v2/tavaxc/wallet/generate

Avalanche C-Chain wallets can only be created under an enterprise. You must pass in the id of the enterprise to associate the wallet with.

The creation of Avalanche C-Chain wallets requires interaction with the Avalanche ledger to be complete. When you create an Avalanche C-Chain wallet, BitGo sends an initialization transaction on the Avalanche network in order to create the wallet. While these initialization transactions are unconfirmed, the wallet should not be used, nor should anyone attempt to send funds to the wallet. For this reason, while the wallet's initialization transactions are still unconfirmed on the Avalanche C-Chain network, the wallet's receive address will not be visible through the API. This is to protect users against sending to a Avalanche C-Chain wallet which does not exist on the network and losing funds.

bitgo
  .coin('tavaxc')
  .wallets()
  .getWallet({ id: '585c51a5df8380e0e3082e46' })
  .then(function (wallet) {
    return wallet.createAddress();
  })
  .then(function (newAddress) {
    // print new address details
    console.dir(newAddress);
  });
WALLET=585c51a5df8380e0e3082e46

curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/tavaxc/wallet/$WALLET/address

Avalanche C-Chain address creation requires interactions with the Avalanche blockchain. In order to deploy a receive address contract, BitGo sends a transaction on the Avalanche C-Chain network. Please make sure to fund the fee address mentioned above. Like the wallet creation process, a Avalanche C-Chain address will not be immediately usable upon creation and so the caller of this function will have to wait for the initialization transaction to be confirmed before attempting to fetch the address or send funds to it.

Balances

Each Avax is comprised of 1,000,000,000,000,000,000 (1018) wei, so not even a single Avax can be stored numerically without exceeding the range of Javascript numbers.

For that reason, only string balance properties are available, which are balanceString, confirmedBalanceString, and spendableBalanceString.

Transactions

BitGo's Avalanche C-Chain multisig contract currently only supports one sender and one recipient. That means that the sendMany call will only accept one recipient.

Stellar

Stellar can be accessed with the following coin types:

Environment Coin Type Faucet
Stellar Production xlm
Stellar Testnet txlm https://www.stellar.org/laboratory/#account-creator?network=test

Generating wallets

bitgo
  .coin('txlm')
  .wallets()
  .generateWallet({
    label: 'My Test Wallet',
    passphrase: 'secretpassphrase1a5df8380e0e30',
  })
  .then(function (wallet) {
    // print the new wallet
    console.dir(wallet);
  });
LABEL="My Test Wallet"
PASSPHRASE="secretpassphrase1a5df8380e0e30"

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d "{ \"label\": \"$LABEL\", \"passphrase\": \"$PASSPHRASE\" }" \
http://$BITGO_EXPRESS_HOST:3080/api/v2/txlm/wallet/generate

Before you can use a Stellar wallet, it must be initialized on the Stellar blockchain. A funding transaction must first be sent to the wallet's address. When BitGo detects this funding transaction, it automatically sends another initialization transaction to set up the signers and the home domain of the account.

Until the initialization transaction is confirmed, the wallet is not ready for use, and the receive address is not exposed in the API. This is to protect users from losing funds by sending to a wallet that does not exist on the network.

Warning: Do not use a Stellar wallet while it is being initialized or you may lose funds.

Stellar accounts must maintain a minimum balance. See Stellar Balances.

Required reserve

curl -X GET \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/txlm/requiredReserve

Fetch information about reserve requirements for an account. See Stellar Balances.

HTTP Request

GET /api/v2/:coin/requiredReserve

HTTP Response

Field Description
baseFee base fee used in transaction fees.
baseReserve base reserve used in minimum account balances.
reserve minimum account balance, calculated using base reserve.
minimumFunding minimum funding balance, calculated using reserve and base fee.
height the height of the block that provides the base values.

Creating addresses

bitgo
  .coin('txlm')
  .wallets()
  .getWallet({ id: '585c51a5df8380e0e3082e46' })
  .then(function (wallet) {
    return wallet.createAddress();
  })
  .then(function (newAddress) {
    // print new address details
    console.dir(newAddress);
  });
WALLET=585c51a5df8380e0e3082e46

curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/txlm/wallet/$WALLET/address

The BIP-32 standard cannot be taken advantage of, and hence generated XLM addresses differ only in their sequentially incrementing memo id components. The memo type used by BitGo is MEMO_ID: a 64-bit unsigned numeric string. Whenever a new address is created, the incremented memoId and the rootAddress are returned in the address' coinSpecific property.

Balances

Lumen (XLM) is the native asset of the Stellar blockchain. The base unit of Lumen is stroop:

  • 1 stroop is 10 -7 or 0.0000001 Lumen.
  • 1 Lumen is 10 7 or 10000000 stroop (10 million).

Balances are supported in string format: balanceString, confirmedBalanceString, and spendableBalanceString.

All Stellar accounts must maintain a minimum balance of lumens. The minimum balance is calculated using the base reserve, which is currently 0.5 XLM. The absolute minimum balance for an account is 1 XLM, which is equal to (2 + 0 entries) * 0.5 base reserve. Each additional entry reserves an additional 0.5 XLM.

Base fee

Stellar has a base fee determined dynamically using a version of a VCG auction. When you submit a transaction to the network, you specify the maximum base fee you’re willing to pay per operation, but you’re actually charged the lowest possible fee based on network activity.

When network activity is below capacity, you pay the network minimum, which is currently 100 stroops (0.00001 XLM) per operation.

Transactions

Stellar uses an account-based model, similar to XRP. Additionally, due to the use of memo, Stellar transactions only support one input and one output.

Federation

BitGo supports the Stellar federation protocol that matches Stellar addresses to Stellar accounts. Additionally, the BitGo federation server provides the next memo id for the wallet. Stellar accounts can be looked up by their Stellar address or their account ID.

Users can create email-like usernames for their Stellar wallets. A Stellar address is conformed by the Stellar username and the account's home domain (e.g. test*bitgo.com).

Stellar usernames are unique, and only accept lower-case letters, numbers and the characters: -_.+@. The home domain is automatically set to bitgo.com. A Stellar username can only be set once the wallet has been initialized, and it cannot be changed. See Update Wallet.

Stellar Tokens

Stellar tokens can be accessed with the following coin types:

Environment Coin Type Code Issuer Website
Stellar Mainnet xlm:AQUA-GBNZILSTVQZ4R7IKQDGHYGY2QXL5QOFJYQMXPKWRRM5PAV7Y4M67AQUA AQUA aqua.network
Stellar Testnet txlm:BST-GBQTIOS3XGHB7LVYGBKQVJGCZ3R4JL5E4CBSWJ5ALIJUHBKS6263644L BST
Stellar Mainnet xlm:VELO-GDM4RQUQQUVSKQA7S6EM7XBZP3FCGH4Q7CL6TABQ7B2BEJ5ERARM2M5M VELO velo.org
Stellar Mainnet xlm:SLT-GCKA6K5PCQ6PNF5RQBF7PQDJWRHO6UOGFMRLK3DYHDOI244V47XKQ4GP SLT smartlands.io
Stellar Mainnet xlm:USD-GDUKMGUGDZQK6YHYA5Z6AY2G4XDSZPSZ3SW5UN3ARVMO6QSRDWP5YLEX USD anchorusd.com
Stellar Mainnet xlm:ETH-GBVOL67TMUQBGL4TZYNMY3ZQ5WGQYFPFD5VJRWXR72VA33VFNL225PL5 ETH stellarport.io
Stellar Mainnet xlm:WXT-GASBLVHS5FOABSDNW5SPPH3QRJYXY5JHA2AOA2QHH2FJLZBRXSG4SWXT WXT wxt.wirexapp.com
Stellar Mainnet xlm:USDC-GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN USDC centre.io
Stellar Mainnet xlm:SIX-GDMS6EECOH6MBMCP3FYRYEVRBIV3TQGLOFQIPVAITBRJUMTI6V7A2X6Z SIX six.network
Stellar Mainnet xlm:ARST-GCSAZVWXZKWS4XS223M5F54H2B6XPIIXZZGP7KEAIU6YSL5HDRGCI3DG ARST anchors.stablex.org
Stellar Mainnet xlm:BRLT-GCHQ3F2BF5P74DMDNOOGHT5DUCKC773AW5DTOFINC26W4KGYFPYDPRSO BRLT anchors.stablex.org

Wallet functionality

Stellar tokens are stored in Stellar wallets. As a result certain wallet functionality available to other coins is not available to supported tokens. It is not possible to create wallets, create/list/get receive addresses, or share wallets for Stellar tokens. All these functions will have to be done with the coin set to xlm or txlm since that is the actual coin type being used. In order to retrieve all token details associated with a Stellar wallet, such as balance, pending approvals, policies, and webhooks, set the "allTokens" parameter to true with the following calls:

  1. Get Wallet
  2. List Wallets
  3. List Pending Approvals
  4. List Wallet Webhooks
  5. List Transfers
  6. Add Wallet Webhook

Wallet trust lines (trusted tokens)

Stellar tokens must be "trusted" on-chain by sending a trustline transaction from the receiving wallet authorizing holding the token.

For self-managed wallets, use Build transaction and Send half-signed transaction with the type and trustlines parameters.

For custodial wallets, contact us at support@bitgo.com.

Keychains

Stellar tokens do not have a direct association with keys or keychains. Instead, all tokens share the same keys/keychains which belong to the Stellar wallet.

Balances

Stellar tokens share the same precision as Lumen (10 7). To view token balances, call Get Wallet with expandBalance=true and allTokens=true:

  {{baseUrl}}/api/v2/xlm/wallet/{walletId}}?expandBalance=true&allTokens=true

Transactions

Stellar token transactions spend two types of assets: the token itself being sent and XLM (Lumens) paid in transaction fees. For this reason, BitGo will generate two transfers on the sending wallet with the same txid to track changes in both balances.

Stellar Tokens Webhooks

By setting the "allTokens" parameter to true, a generic webhook is created which will trigger on all Stellar token and XLM transactions. It will send an http request to your webhook url and specify whether it is Stellar or a token using the field "coin". Here's an example response for a test token called "txlm:BST-GBQTIOS3XGHB7LVYGBKQVJGCZ3R4JL5E4CBSWJ5ALIJUHBKS6263644L".

{
    "hash":"26683ffb83b86f29c9c0ccd14e8cbebf17fa903dab286320b3ef2e36f5d9a924",
    "transfer":"5b612d25c9067f2a1db11a15f165989e",
    "coin":"txlm:BST-GBQTIOS3XGHB7LVYGBKQVJGCZ3R4JL5E4CBSWJ5ALIJUHBKS6263644L",
    "type":"transfer",
    "state":"confirmed",
    "wallet":"5a13adcab70f2c284fdd9682db5e6d64"
}

To get additional details about this transfer, you will then need to get the transfer details using the token name and transfer id. For the above transfer you'd need to call the Get Transfer route to check the amount transferred and other details (e.g. /api/v2/txlm:BST-GBQTIOS3XGHB7LVYGBKQVJGCZ3R4JL5E4CBSWJ5ALIJUHBKS6263644L/wallet/5a13adcab70f2c284fdd9682db5e6d64/transfer/5b612d25c9067f2a1db11a15f165989e).

Note: A transaction that sends both XLM and a Stellar token will cause one webhook notification for each asset.

Tezos

Tezos (xtz) can be accessed with the following coin types:

Environment Coin Type Faucet
Tezos Production xtz https://faucet.tezos.com/
Tezos Carthage Testnet txtz https://faucet.tzalpha.net/

Enterprise fee address

ENTERPRISEID=585c51a5df8380e0e3082e46

curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/txtz/enterprise/$ENTERPRISEID/feeAddressBalance

Each enterprise has a fee address which will be used to pay for transaction fees on every Tezos wallet in such enterprise. The fee address is displayed in the dashboard of the BitGo website, and you must fund it before creating a wallet, address, or sending funds. Unlike in Bitcoin (where the sending wallet also pays the transaction fees) BitGo's Tezos wallet contract requires a separate account to initiate the transaction and pay the fees. If the enterprise's fee address runs out of funds, you will not be able to create new wallets, addresses, or send transactions until you fund the fee address. You will not be able to use one of your own Tezos wallets to fund the fee address if the fee address is too low (because you will not be able to send transactions from your wallet) so it is best to create and fund a non-BitGo Tezos account so you can use it to fund your BitGo enterprise fee address. Any open source Tezos wallet or exchange can be used to create an account.

Note that the fee address is a single-signature account and the private key is created and owned by BitGo, so you will not be able to send funds out of the fee address once you have sent them in.

There will be a 'feeAddress' field under the 'CoinSpecific' key for Tezos wallets. You will use this address to pay the fees for creating transactions and addresses.

Generating wallets

To create a Tezos wallet using BitGoJS:

bitgo
  .coin('txtz')
  .wallets()
  .generateWallet({
    label: 'My Test Wallet',
    passphrase: 'secretpassphrase1a5df8380e0e30',
  })
  .then(function (wallet) {
    // print the new wallet
    console.dir(wallet);

    // print the new wallets address to send to
    console.dir(wallet.coinSpecific.rootAddress);
  });

It currently costs 1.33964 ꜩ to create a new Tezos wallet. This amount is payed by the fee account and consists of 0.04764 ꜩ in baker fees, 1.035 ꜩ storage fees, and 0.257 ꜩ for allocation fees.

To create a Tezos wallet using the platform API:

LABEL="My Test Wallet"
PASSPHRASE="secretpassphrase1a5df8380e0e30"

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d "{ \"label\": \"$LABEL\", \"passphrase\": \"$PASSPHRASE\" }" \
http://$BITGO_EXPRESS_HOST:3080/api/v2/txtz/wallet/generate

A similar operation will need to be provided above to the resultant rootAddress.

Creating addresses

bitgo
  .coin('txtz')
  .wallets()
  .getWallet({ id: '585c51a5df8380e0e3082e46' })
  .then(function (wallet) {
    return wallet.createAddress();
  })
  .then(function (newAddress) {
    // print new address details
    console.dir(newAddress);
  });
WALLET=585c51a5df8380e0e3082e46

curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/txtz/wallet/$WALLET/address

The creation of receive addresses for Tezos wallets results in additional accounts associated with the main wallet. When a user receives funds on a receive address, those funds need to be consolidated in the base address of the wallet first in order to be spent. See Consolidate account.

Sending

Funds can only be sent out from the wallet's base address. If your wallet has sufficient funds but you are unable to send, you may need to consolidate the funds from the receive addresses into the base address by calling Consolidate account first. Fees of transactions sent from the base wallet address are paid for by the fee address, while fees of consolidation transactions taken from the receive address itself. The public key of every Tezos receive address must be revealed to the network before it can send transactions. The reveal operation will be added to the address' first consolidation transaction. The baker fee for a reveal operation is 0.00142 ꜩ and for a consolidation transaction is 0.04764 ꜩ.

Balances

tez (ꜩ) (XTZ) is the native asset of the Tezos blockchain. The base unit of tez is micro tez (or "mutez"):

  • 1 micro tez is (10-6) or 0.000001 tez.
  • 1 tez is (106) or 1000000 micro tez (1 million).

Balances are supported in string format: balanceString, confirmedBalanceString, and spendableBalanceString.

Funds stored in the base address of a Tezos wallet are considered "spendable balance". The sum of the balances of the base address and the receive addresses is the wallet's "confirmed balance".

TRON

TRON (TRX) can be accessed with the following coin types:

Environment Coin Type Faucet
TRON Production trx
TRON Tronex Testnet ttrx http://testnet.tronex.io/status/getStatusPage

Generating wallets

To create an Tron wallet using BitGoJS:

bitgo
  .coin('ttrx')
  .wallets()
  .generateWallet({
    label: 'My Test Wallet',
    passphrase: 'secretpassphrase1a5df8380e0e30',
  })
  .then(function (wallet) {
    // print the new wallet
    console.dir(wallet);

    // print the new wallets address to send to
    console.dir(wallet.coinSpecific.rootAddress);
  });

You need to fund the wallet with 100 TRX as wallet creation costs this much for an individual user. You can find the address to fill on the rootAddress field above.

To create an TRON wallet using the platform API:

LABEL="My Test Wallet"
PASSPHRASE="secretpassphrase1a5df8380e0e30"

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d "{ \"label\": \"$LABEL\", \"passphrase\": \"$PASSPHRASE\" }" \
http://$BITGO_EXPRESS_HOST:3080/api/v2/ttrx/wallet/generate

A similar operation will need to be provided above to the resultant rootAddress.

Creating addresses

Due to protocol limitations, multiple receive addresses for a wallet is not supported yet.

That means that the sendMany call is not supported since transactions are one to one in TRON. Using such method will result in a 400 error.

Balances

Tronix (TRX) is the native asset of the TRON blockchain. The base unit of Tronix is sun:

  • 1 sun is (10-6) or 0.000001 Tronix.
  • 1 Tronix is (106) or 1000000 sun (1 million).

Balances are supported in string format: balanceString, confirmedBalanceString, and spendableBalanceString.

XRP Ledger (Ripple)

XRP can be accessed with the following coin types:

Environment Coin Type Faucet
XRP Production xrp
XRP Altnet txrp

Generating wallets

bitgo
  .coin('txrp')
  .wallets()
  .generateWallet({
    label: 'My Test Wallet',
    passphrase: 'secretpassphrase1a5df8380e0e30',
  })
  .then(function (wallet) {
    // print the new wallet
    console.dir(wallet);
  });
LABEL="My Test Wallet"
PASSPHRASE="secretpassphrase1a5df8380e0e30"

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d "{ \"label\": \"$LABEL\", \"passphrase\": \"$PASSPHRASE\" }" \
http://$BITGO_EXPRESS_HOST:3080/api/v2/txrp/wallet/generate

Before you can use an XRP wallet, it must be initialized on the XRP blockchain (or XRP Ledger). When you create an XRP wallet, BitGo sends 4 initialization transactions on the XRP network to generate the wallet.

Until the initialization transaction is confirmed, the wallet is not ready for use, and the receive address is not exposed in the API. This is to protect users from losing funds by sending to a wallet that does not exist on the network.

Warning: Do not use an XRP wallet while it is being initialized or you may lose funds.

The fee for creating an XRP wallet is currently 25 XRP. In production, there is limit of 5 wallets total per enterprise plus a mantatory payment agreement. In testnet, there is no limit.

Note: To inquire about increasing your limit, contact BitGo at support@bitgo.com.

Creating addresses

bitgo
  .coin('txrp')
  .wallets()
  .getWallet({ id: '585c51a5df8380e0e3082e46' })
  .then(function (wallet) {
    return wallet.createAddress();
  })
  .then(function (newAddress) {
    // print new address details
    console.dir(newAddress);
  });
WALLET=585c51a5df8380e0e3082e46

curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/txrp/wallet/$WALLET/address

A key difference between XRP and Bitcoin is that XRP has no concept of UTXOs, and operates on an account-based model instead. Additionally, XRP transactions only support one input and one output. That means that the sendMany call is not supported.

The BIP-32 standard therefore cannot be taken advantage of, and hence generated XRP addresses differ only in their sequentially incrementing destination tag components.

Balances

XRP (XRP) is the native asset of the XRP ledger. The base unit of XRP is drop:

  • 1 drop is (10-6) or 0.000001 XRP.
  • 1 XRP is (106) or 1000000 drops (1 million).

Balances are supported in string format: balanceString, confirmedBalanceString, and spendableBalanceString.

XRP is formerly known as Ripple.

Zcash

BitGo supports transparent transactions with the latest Zcash network upgrade, Sapling. This means only Sapling compatible transactions will be generated and read by BitGo. To sign Sapling transactions, BitGo SDK version 9.2.0 or greater is required.

Zcash can be accessed with the following coin types:

Environment Coin Type Faucet
Zcash Production zec
Zcash Testnet tzec https://faucet.testnet.z.cash/

Notes on shielded transactions

Only transparent addresses are supported by BitGo wallets which limits the type of transactions allowed. A Zcash BitGo wallet can receive funds from a transparent or a shielded address but can only send funds to a transparent address.

Generating wallets

bitgo
  .coin('tzec')
  .wallets()
  .generateWallet({
    label: 'My Test Wallet',
    passphrase: 'secretpassphrase1a5df8380e0e30',
  })
  .then(function (wallet) {
    // print the new wallet
    console.dir(wallet);
  });
LABEL="My Test Wallet"
PASSPHRASE="secretpassphrase1a5df8380e0e30"

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d "{ \"label\": \"$LABEL\", \"passphrase\": \"$PASSPHRASE\" }" \
http://$BITGO_EXPRESS_HOST:3080/api/v2/tzec/wallet/generate

Creating addresses

bitgo
  .coin('tzec')
  .wallets()
  .getWallet({ id: '585c51a5df8380e0e3082e46' })
  .then(function (wallet) {
    return wallet.createAddress();
  })
  .then(function (newAddress) {
    // print new address details
    console.dir(newAddress);
  });
WALLET=585c51a5df8380e0e3082e46

curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/tzec/wallet/$WALLET/address

See the table of address types under Address Derivation (BIP-32) above. Zcash defaults to chain 0 (and does not support segwit).

Balances

Zec (ZEC) is the native asset of the Zcash blockchain. The base unit of ZEC is zatoshi:

  • 1 zatoshi is (10-8) or 0.00000001 Zec.
  • 1 ZEC is (108) or 100000000 zatoshis (100 million).

Balances are supported in string and number format but string is recommended to ensure values do not exceed the programmable number limit: balanceString, confirmedBalanceString, and spendableBalanceString.

Sending Transactions using BitGoJS or BitGo Express

Zcash blockchain parameters update with each hard fork, and this means an updated version of BitGoJS or BitGo Express is required to successfully sign and send transactions using the new blockchain parameters.

For the current Zcash blockchain parameters, the minimum supported versions for sending Zcash are BitGoJS 9.2.0 or greater, and BitGo Express 9.2.0 or greater.

If an SDK version is detected which does not support the current blockchain parameters, an UnsupportedSdkVersion error will be returned when attempting to build or send transactions.