This site has been deprecated. Please use developers.bitgo.com instead.
Download OpenAPI specification:Download
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:
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 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.
All calls to endpoints that require authentication must pass the client access token in the Authorization
HTTP header
of the request message.
You can create an access token in the BitGo web UI at User Settings > Developer Options. An access token can limit access by:
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.
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 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:
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.
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.
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.
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');
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.
BitGo has two separate environments available for development and production. For security reasons, all BitGo API requests are made using TLS over HTTPS.
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.
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.
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');
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 |
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 |
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.
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"
}
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 |
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.
The Get Trading Account Settings API displays the current settings on your trading account.
enterpriseId required | string Enterprise ID |
accountId required | string Trading Account ID |
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 |
{- "accountId": "59cd72485007a239fb00282ed480da1f",
- "affirmationExpirationTime": 86400000,
- "feeRates": {
- "settlement": 5
}, - "referralCode": "FC8G"
}
The Update Trading Account Settings API allows you to modify the settings on your trading account.
enterpriseId required | string Enterprise ID |
accountId required | string Trading Account ID |
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. |
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 |
{- "affirmationExpirationTime": 86400000
}
{- "accountId": "59cd72485007a239fb00282ed480da1f",
- "affirmationExpirationTime": 86400000,
- "feeRates": {
- "settlement": 5
}, - "referralCode": "FC8G"
}
Tools for initiating post-trade settlement activity between BitGo custodial counterparties
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
enterpriseId required | string Enterprise ID |
accountId required | string Trading Account ID |
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 ] |
payload | string (Trade Payload) This payload must be cryptographically signed with a trading account's private key to authorize the movement of funds |
{- "version": "1.2.0",
- "amounts": [
- {
- "accountId": "59cd72485007a239fb00282ed480da1f",
- "sendAmount": "1000000",
- "sendCurrency": "ofcbtc",
- "receiveAmount": "3000",
- "receiveCurrency": "ofcsud"
}
]
}
{- "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==\"}"
}
The Calculate Settlement Fees method will calculate the fees that will be taken out for settlement
enterpriseId required | string Enterprise ID |
accountId required | string Trading Account ID |
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 |
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 |
{- "counterpartyAccountId": "string",
- "sendAmount": "1000000",
- "sendCurrency": "ofcbtc",
- "receiveAmount": "3000",
- "receiveCurrency": "ofcsud"
}
{- "feeRate": "string",
- "feeAmount": "string",
- "feeCurrency": "string"
}
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.
enterpriseId required | string Enterprise ID |
accountId required | string Trading Account ID |
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 |
Array of objects (Trade) [ items ] |
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 ] |
{- "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": [
- {
- "id": "f4e94c8b-9d4f-40c8-815d-87cf2cec5d2d",
- "baseAccountId": "5e20faa943795147000da7b2f5d063fe",
- "quoteAccountId": "5e20faa843795147000da79b8a01f757",
- "status": "executed",
- "timestamp": "2020-01-17T00:07:13.057Z",
- "baseAmount": "781592",
- "quoteAmount": "842032",
- "baseCurrency": "ofctbtc",
- "quoteCurrency": "ofctusd",
- "baseReceiveAmount": "842032",
- "quoteReceiveAmount": "781592",
- "baseReceiveCurrency": "ofctusd",
- "quoteReceiveCurrency": "ofctbtc",
- "costBasis": "200",
- "costBasisCurrency": "usd",
- "externalId": "q1zuut12yza9dpcaukej0atn48jrpw9q"
}
]
}
{- "id": "5be99b8a-6eb5-4ed6-b135-894bb22c5454",
- "requesterAccountId": "5caed8b6e9abd8e865e3a942a74967d3",
- "requesterAccountName": "Enterprise A Trading Account",
- "status": "pending",
- "type": "direct",
- "affirmations": [
- {
- "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"
}
], - "expireAt": "2019-08-24T14:15:22Z",
- "finalizedAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "trades": [
- {
- "id": "f4e94c8b-9d4f-40c8-815d-87cf2cec5d2d",
- "baseAccountId": "5e20faa943795147000da7b2f5d063fe",
- "quoteAccountId": "5e20faa843795147000da79b8a01f757",
- "status": "executed",
- "timestamp": "2020-01-17T00:07:13.057Z",
- "baseAmount": "781592",
- "quoteAmount": "842032",
- "baseCurrency": "ofctbtc",
- "quoteCurrency": "ofctusd",
- "baseReceiveAmount": "842032",
- "quoteReceiveAmount": "781592",
- "baseReceiveCurrency": "ofctusd",
- "quoteReceiveCurrency": "ofctbtc",
- "costBasis": "200",
- "costBasisCurrency": "usd",
- "externalId": "q1zuut12yza9dpcaukej0atn48jrpw9q"
}
]
}
The List Settlements by Trading Account API lists Settlements under a trading account. Settlements can also be filtered by status.
enterpriseId required | string Enterprise ID |
accountId required | string Trading Account ID |
status | string (SettlementStatus) Enum: "canceled" "pending" "rejected" "settled" "failed" Example: status=pending Filter by Settlement status |
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 ] |
[- {
- "id": "5be99b8a-6eb5-4ed6-b135-894bb22c5454",
- "requesterAccountId": "5caed8b6e9abd8e865e3a942a74967d3",
- "requesterAccountName": "Enterprise A Trading Account",
- "status": "pending",
- "type": "direct",
- "affirmations": [
- {
- "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"
}
], - "expireAt": "2019-08-24T14:15:22Z",
- "finalizedAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "trades": [
- {
- "id": "f4e94c8b-9d4f-40c8-815d-87cf2cec5d2d",
- "baseAccountId": "5e20faa943795147000da7b2f5d063fe",
- "quoteAccountId": "5e20faa843795147000da79b8a01f757",
- "status": "executed",
- "timestamp": "2020-01-17T00:07:13.057Z",
- "baseAmount": "781592",
- "quoteAmount": "842032",
- "baseCurrency": "ofctbtc",
- "quoteCurrency": "ofctusd",
- "baseReceiveAmount": "842032",
- "quoteReceiveAmount": "781592",
- "baseReceiveCurrency": "ofctusd",
- "quoteReceiveCurrency": "ofctbtc",
- "costBasis": "200",
- "costBasisCurrency": "usd",
- "externalId": "q1zuut12yza9dpcaukej0atn48jrpw9q"
}
]
}
]
The List Settlements by Enterprise API lists Settlements under an enterprise. Settlements can also be filtered by status.
enterpriseId required | string Enterprise ID |
status | string (SettlementStatus) Enum: "canceled" "pending" "rejected" "settled" "failed" Example: status=pending Filter by Settlement status |
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 ] |
[- {
- "id": "5be99b8a-6eb5-4ed6-b135-894bb22c5454",
- "requesterAccountId": "5caed8b6e9abd8e865e3a942a74967d3",
- "requesterAccountName": "Enterprise A Trading Account",
- "status": "pending",
- "type": "direct",
- "affirmations": [
- {
- "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"
}
], - "expireAt": "2019-08-24T14:15:22Z",
- "finalizedAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "trades": [
- {
- "id": "f4e94c8b-9d4f-40c8-815d-87cf2cec5d2d",
- "baseAccountId": "5e20faa943795147000da7b2f5d063fe",
- "quoteAccountId": "5e20faa843795147000da79b8a01f757",
- "status": "executed",
- "timestamp": "2020-01-17T00:07:13.057Z",
- "baseAmount": "781592",
- "quoteAmount": "842032",
- "baseCurrency": "ofctbtc",
- "quoteCurrency": "ofctusd",
- "baseReceiveAmount": "842032",
- "quoteReceiveAmount": "781592",
- "baseReceiveCurrency": "ofctusd",
- "quoteReceiveCurrency": "ofctbtc",
- "costBasis": "200",
- "costBasisCurrency": "usd",
- "externalId": "q1zuut12yza9dpcaukej0atn48jrpw9q"
}
]
}
]
The Get Settlement API gets a Settlement by ID.
enterpriseId required | string Enterprise ID |
accountId required | string Trading Account ID |
settlementId required | string Settlement ID |
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 ] |
{- "id": "5be99b8a-6eb5-4ed6-b135-894bb22c5454",
- "requesterAccountId": "5caed8b6e9abd8e865e3a942a74967d3",
- "requesterAccountName": "Enterprise A Trading Account",
- "status": "pending",
- "type": "direct",
- "affirmations": [
- {
- "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"
}
], - "expireAt": "2019-08-24T14:15:22Z",
- "finalizedAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "trades": [
- {
- "id": "f4e94c8b-9d4f-40c8-815d-87cf2cec5d2d",
- "baseAccountId": "5e20faa943795147000da7b2f5d063fe",
- "quoteAccountId": "5e20faa843795147000da79b8a01f757",
- "status": "executed",
- "timestamp": "2020-01-17T00:07:13.057Z",
- "baseAmount": "781592",
- "quoteAmount": "842032",
- "baseCurrency": "ofctbtc",
- "quoteCurrency": "ofctusd",
- "baseReceiveAmount": "842032",
- "quoteReceiveAmount": "781592",
- "baseReceiveCurrency": "ofctusd",
- "quoteReceiveCurrency": "ofctbtc",
- "costBasis": "200",
- "costBasisCurrency": "usd",
- "externalId": "q1zuut12yza9dpcaukej0atn48jrpw9q"
}
]
}
The List Affirmations by Trading Account API lists Affirmations under a trading account. Affirmations can also be filtered by status.
enterpriseId required | string Enterprise ID |
accountId required | string Trading Account ID |
status | string (AffirmationStatus) Enum: "pending" "overdue" "rejected" "affirmed" "failed" "canceled" Example: status=pending Filter by Affirmation status |
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 |
signature | string The |
createdAt | string <date-time> ISO date string |
expireAt | string <date-time> ISO date string |
[- {
- "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"
}
]
The List Affirmations by Enterprise API lists Affirmations under an enterprise. Affirmations can also be filtered by status.
enterpriseId required | string Enterprise ID |
status | string (AffirmationStatus) Enum: "pending" "overdue" "rejected" "affirmed" "failed" "canceled" Example: status=pending Filter by Affirmation status |
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 |
signature | string The |
createdAt | string <date-time> ISO date string |
expireAt | string <date-time> ISO date string |
[- {
- "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"
}
]
The Get Affirmation API gets an Affirmation by ID.
enterpriseId required | string Enterprise ID |
accountId required | string Trading Account ID |
affirmationId required | string Affirmation ID |
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 |
signature | string The |
createdAt | string <date-time> ISO date string |
expireAt | string <date-time> ISO date string |
{- "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"
}
The Update Affirmation API handles affirming and rejecting an affirmation.
enterpriseId required | string Enterprise ID |
accountId required | string Trading Account ID |
affirmationId required | string Affirmation ID |
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 |
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 |
signature | string The |
createdAt | string <date-time> ISO date string |
expireAt | string <date-time> ISO date string |
{- "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"
}
{- "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"
}
Tools for referring and accessing trading partner details for clearing and settlement
The List Trading Partners API gets the trading partners for the given trading account.
enterpriseId required | string Enterprise ID |
accountId required | string Trading Account ID |
status | string (TradingPartnerStatus) Enum: "accepted" "rejected" "canceled" "pending" "unknown" Example: status=accepted Status of trading partner relationship |
Array of objects (TradingPartner) [ items ] |
{- "tradingPartners": [
- {
- "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"
}
]
}
The Add Trading Partners API lets you add a trading partner given your trading partner's referral code
enterpriseId required | string Enterprise ID |
accountId required | string Trading Account ID |
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. |
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 |
{- "referralCode": "FC8G",
- "type": "direct",
- "requesterSide": "primary"
}
{- "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"
}
The List Trading Partners By Enterprise API gets the trading partners for the given enterprise.
enterpriseId required | string Enterprise ID |
status | string (TradingPartnerStatus) Enum: "accepted" "rejected" "canceled" "pending" "unknown" Example: status=accepted Status of trading partner relationship |
Array of objects (TradingPartner) [ items ] |
{- "tradingPartners": [
- {
- "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"
}
]
}
The Update Trading Partner Request API allows you to accept, reject, or cancel a pending trading partner request
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 |
Trading partner status update
status required | string (TradingPartnerStatus) Enum: "accepted" "rejected" "canceled" "pending" "unknown" Partnership status between two trading accounts |
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 |
{- "status": "accepted"
}
{- "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"
}
The Account Balance Check API verifies whether an account has enough funds to support a settlement of some amount.
enterpriseId required | string Enterprise ID |
accountId required | string Your trading account ID |
partnerAccountId required | string Trading partner's trading account ID to balance check |
amount required | string Amount of offchain currency to balance check. Integer as a string |
currency required | string Offchain currency to balance check |
check | boolean |
{- "check": true
}
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
Header | Description |
X-Ratelimit-Limit | Request limit per second |
X-Ratelimit-Remaining | Remaining number of requests allowed in interval |
X-Ratelimit-Reset | Duration in milliseconds until the total quota resets |
429 Too Many Requests
Header | Description |
Retry-After | Duration in seconds of how long to wait before making a new request |
Get the current user’s public information
id required | string <uuid> |
firstName required | string |
lastName required | string |
email required | string <email> |
{- "id": "a253c86c-1f0f-42cc-bcd0-2dcc5040b204",
- "firstName": "Uncle",
- "lastName": "MoneyPenny",
- "email": "uncle.moneypenny@bitgo.com"
}
Get a list of the portfolios to which the user with the access token belongs
id required | string <uuid> |
name required | string |
organization_id required | string <uuid> |
organization_name required | string |
[- {
- "id": "c702a0d4-0a09-4d86-bd6a-76540359a497",
- "name": "Main Portfolio",
- "organization_id": "15e108fd-4ea8-458a-b329-cc4750729e9b",
- "organization_name": "Lumina Technologies, Inc."
}
]
Get a list of daily historical prices in the portfolio's functional currency - defaults to prior month
portfolioId required | string The id of the portfolio to retrieve |
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 |
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> |
[- {
- "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 a list of the connections for a given portfolio to which the user with the access token belongs
portfolioId required | string The id of the portfolio to retrieve |
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" |
[- {
- "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 information for a single connection within a given portfolio to which the user with the access token belongs
portfolioId required | string The id of the portfolio to retrieve |
connectionId required | string The id of the connection to retrieve |
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" |
{- "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 a list of the accounts for a given portfolio to which the user with the access token belongs
portfolioId required | string The id of the portfolio to retrieve |
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" |
[- {
- "id": "ca0eda2d-0b76-4aba-94dd-88bc06ea5b92",
- "name": "Coinbase Pro Main Account",
- "type": "exchange"
}
]
Get information for a single account within a given portfolio to which the user with the access token belongs
portfolioId required | string The id of the portfolio to retrieve |
accountId required | string The id of the account to retrieve |
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" |
{- "id": "ca0eda2d-0b76-4aba-94dd-88bc06ea5b92",
- "name": "Coinbase Pro Main Account",
- "type": "exchange"
}
Get balance information (grouped by instrument) for a single portfolio to which the user with the access token belongs
portfolioId required | string The id of the portfolio to retrieve |
instrument_id required | string <uuid> |
instrument_symbol | string Currency symbol |
quantity required | string <decimal> |
marketPrice required | string <decimal> |
marketValue required | string <decimal> |
[- {
- "instrument_id": "6016e0a9-545a-45fb-8370-caab1680956a",
- "instrument_symbol": "BTC",
- "quantity": "0.02713510000000001",
- "marketPrice": "15659.03",
- "marketValue": "424.9093449530002"
}
]
Get balance information (grouped by instrument) for a single connection within a given portfolio to which the user with the access token belongs
portfolioId required | string The id of the portfolio to retrieve |
connectionId required | string The id of the connection to retrieve |
instrument_id required | string <uuid> |
instrument_symbol | string Currency symbol |
quantity required | string <decimal> |
marketPrice required | string <decimal> |
marketValue required | string <decimal> |
[- {
- "instrument_id": "6016e0a9-545a-45fb-8370-caab1680956a",
- "instrument_symbol": "BTC",
- "quantity": "0.02713510000000001",
- "marketPrice": "15659.03",
- "marketValue": "424.9093449530002"
}
]
Get balance information (grouped by instrument) for a single account within a given portfolio to which the user with the access token belongs
portfolioId required | string The id of the portfolio to retrieve |
accountId required | string The id of the account to retrieve |
instrument_id required | string <uuid> |
instrument_symbol | string Currency symbol |
quantity required | string <decimal> |
marketPrice required | string <decimal> |
marketValue required | string <decimal> |
[- {
- "instrument_id": "6016e0a9-545a-45fb-8370-caab1680956a",
- "instrument_symbol": "BTC",
- "quantity": "0.02713510000000001",
- "marketPrice": "15659.03",
- "marketValue": "424.9093449530002"
}
]
List all transactions for a given portfolio to which the user with the access token belongs
portfolioId required | string The id of the portfolio to retrieve |
offset | integer |
limit | integer |
required | Array of objects (Transaction) [ items ] |
{- "data": [
- {
- "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"
}
]
}
Get details for a single transaction by Transaction ID within a given portfolio to which the user with the access token belongs
portfolioId required | string The id of the portfolio to retrieve |
transactionId required | string The id of the transaction to retrieve |
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> |
{- "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 all accounting line items within a given portfolio to which the user with the access token belongs
portfolioId required | string The id of the portfolio to retrieve |
offset | integer |
limit | integer |
required | Array of objects (LineItem) [ items ] |
{- "data": [
- {
- "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": ""
}
]
}
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
portfolioId required | string The id of the portfolio to retrieve |
itemId required | string The id of the accounting line item to retrieve |
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 |
{- "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": ""
}
The Price kit is a partner kit from CryptoCompare that you can use to compare prices of cryptocurrency, tokens, and fiat.
Get a list of historical prices in a specified time range.
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. |
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> |
{- "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 historical spot prices from a specific time.
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> |
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> |
{- "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
}
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
Header | Description |
X-Ratelimit-Limit | Request limit per second |
X-Ratelimit-Remaining | Remaining number of requests allowed in interval |
X-Ratelimit-Reset | Duration in milliseconds until the total quota resets |
429 Too Many Requests
Header | Description |
Retry-After | Duration in seconds of how long to wait before making a new request |
Get the current user’s public information.
id required | string <uuid> |
firstName required | string |
lastName required | string |
email required | string <email> |
{- "id": "a253c86c-1f0f-42cc-bcd0-2dcc5040b204",
- "firstName": "Uncle",
- "lastName": "MoneyPenny",
- "email": "uncle.moneypenny@bitgo.com"
}
Get the list of trading accounts that the current user belongs to.
required | Array of objects (Accounts) [ items ] |
{- "data": [
- {
- "id": "f230fdebfa084ffebc7e00515f54603f",
- "name": "Uncle MoneyPenny's Trading Wallet"
}
]
}
Get balance information about a single trading account.
accountId required | string The id of the trading account to retrieve |
required | Array of objects (AccountBalances) [ items ] |
{- "data": [
- {
- "currencyId": "6016e0a9-545a-45fb-8370-caab1680956a",
- "currency": "BTC",
- "balance": "100.0",
- "heldBalance": "10.0",
- "tradableBalance": "90.0"
}
]
}
Lists all orders from the given trading account.
accountId required | string The id of the trading account to retrieve |
offset | integer |
limit | integer |
clientOrderId | string The clientOrderId of the order to retrieve |
dateGte | string <date-time> Return client orders with a |
dateLt | string <date-time> Return client orders with a |
required | Array of objects (Orders) [ items ] |
{- "data": [
- {
- "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"
}
]
}
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.
accountId required | string The id of the trading account to retrieve |
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. |
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> |
{- "clientOrderId": "myorder1",
- "type": "market",
- "product": "BTC-USD",
- "side": "buy",
- "quantity": "10000",
- "quantityCurrency": "USD"
}
{- "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 a single order by order id.
accountId required | string The id of the trading account to retrieve |
orderId required | string The id of the order to retrieve |
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> |
{- "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"
}
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.
accountId required | string The id of the trading account to retrieve |
orderId required | string The id of the order to retrieve |
{- "error": "invalid permission",
- "errorName": "backend:common:forbidden",
- "reqId": "d41d4d21e63d63b293caf55f2a739a79"
}
Lists trades from the trading account. This will include trades that have not yet settled.
accountId required | string The id of the trading account to retrieve |
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 |
required | Array of objects (Trades) [ items ] |
{- "data": [
- {
- "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
}
]
}
Get the details of a single trade by trade id.
accountId required | string The id of the trading account to retrieve |
tradeId required | string The id of the trade to retrieve |
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 |
{- "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
}
Gets a list of all available currencies.
accountId required | string The id of the trading account to retrieve |
required | Array of objects (Currencies) [ items ] |
{- "data": [
- {
- "id": "6016e0a9-545a-45fb-8370-caab1680956a",
- "symbol": "BTC",
- "name": "Bitcoin"
}
]
}
Gets a list of all available products.
accountId required | string The id of the trading account to retrieve |
required | Array of objects (Products) [ items ] |
{- "data": [
- {
- "id"": "86d09911-e58e-4f27-ac1f-91d5f9c79952",
- "name": "BTC-USD",
- "baseCurrencyId": "6016e0a9-545a-45fb-8370-caab1680956a",
- "quoteCurrencyId": "7d5d1e8d-e6e1-4676-99af-190012515418",
- "baseCurrency": "BTC",
- "quoteCurrency": "USD",
- "baseMinSize": "0.001",
- "baseMaxSize": "10000.00",
- "quoteIncrement": "0.01"
}
]
}
Gets a snapshot of the level1 order book for product
accountId required | string The id of the trading account to retrieve |
product required | string The name of the product |
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> |
{- "time": "2020-01-14T00:00:00.123Z",
- "product": "BTC-USD",
- "bidPrice": "7090.96",
- "bidSize": "1.253433",
- "askPrice": "7090.97",
- "askSize": "25.23881"
}
Gets a snapshot of the order book for product
accountId required | string The id of the trading account to retrieve |
product required | string The name of the product |
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] |
{- "time": "2020-01-14T00:00:00.123Z",
- "product": "BTC-USD",
- "bids": [
- [
- "7090.96",
- "1.253433"
]
], - "asks": [
- [
- "7090.97",
- "25.23881"
]
]
}
The websocket feed provides real-time market data updates for the orderbook, orders, and trades.
Environment | Endpoint |
---|---|
Production | wss://app.bitgo.com/api/prime/trading/v1/ws |
Test | wss://app.bitgo-test.com/api/prime/trading/v1/ws |
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 will provide a feed of snapshots of the order book.
In order to subscribe, you must indicate the accountId, channel and productId.
{
"type": "subscribe",
"accountId": "f230fdebfa084ffebc7e00515f54603f",
"channel": "level2",
"productId": "BTC-USD"
}
{
"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 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.
{
"type": "subscribe",
"channel": "orders",
"accountId": "f230fdebfa084ffebc7e00515f54603f",
}
{
"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",
}
{
"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",
}
{
"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",
}
{
"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",
}
{
"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",
}
List receive addresses on a wallet
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
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 |
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 |
segwit | boolean DEPRECATED. Mutually exclusive with |
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) |
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 |
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 |
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 |
count | integer Total number of addresses returned in this response |
wallet.addresses().then(function (addresses) { // print addresses console.dir(addresses); });
{- "coin": "string",
- "totalAddressCount": 0,
- "pendingAddressCount": 0,
- "addresses": [
- {
- "id": "59cd72485007a239fb00282ed480da1f",
- "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
- "chain": 1,
- "index": 0,
- "coin": "string",
- "lastNonce": -1,
- "wallet": "59cd72485007a239fb00282ed480da1f",
- "coinSpecific": {
- "xlm": {
- "memoId": "2000000",
- "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM"
}, - "txlm": {
- "memoId": "2000000",
- "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM"
}
}, - "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"
}
], - "nextBatchPrevId": "585951a5df8380e0e3063e9f",
- "count": 0
}
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.
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
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 |
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" |
{- "chain": 1,
- "label": "Bob's Hot Wallet Address",
- "lowPriority": false,
- "gasPrice": 0,
- "eip1559": {
- "maxPriorityFeePerGas": "string",
- "maxFeePerGas": "string"
}, - "forwarderVersion": 2,
- "onToken": "ofcbtc",
- "format": "cashaddr"
}
{- "id": "59cd72485007a239fb00282ed480da1f",
- "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
- "chain": 1,
- "index": 0,
- "coin": "string",
- "lastNonce": -1,
- "wallet": "59cd72485007a239fb00282ed480da1f",
- "coinSpecific": {
- "xlm": {
- "memoId": "2000000",
- "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM"
}, - "txlm": {
- "memoId": "2000000",
- "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM"
}
}, - "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"
}
This API call is to manually deploy an ETH address
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 |
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. |
txId | string |
{- "forceDeploy": true,
- "gasPrice": 0,
- "eip1559": {
- "maxPriorityFeePerGas": 0,
- "maxFeePerGas": 0
}
}
{- "txId": "string"
}
This API call is to manually forward tokens from an ETH or CELO address
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 |
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. |
txId | string |
{- "tokenName": "string",
- "forceFlush": true,
- "gasPrice": 0,
- "eip1559": {
- "maxPriorityFeePerGas": 0,
- "maxFeePerGas": 0
}
}
{- "txId": "string"
}
Gets a receive address on a wallet
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 |
dt | string For XRP addresses |
memoId | string For XLM addresses |
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" |
wallet.getAddress({ address: '2NCzBK2Yf7PFAAfKsgc6cfTSG8FxtgMGG9C' }).then(function (address) { // print address console.dir(address); });
{- "id": "59cd72485007a239fb00282ed480da1f",
- "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
- "chain": 1,
- "index": 0,
- "coin": "string",
- "lastNonce": -1,
- "wallet": "59cd72485007a239fb00282ed480da1f",
- "coinSpecific": {
- "xlm": {
- "memoId": "2000000",
- "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM"
}, - "txlm": {
- "memoId": "2000000",
- "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM"
}
}, - "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 a receive address on a wallet
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 |
dt | string For XRP addresses |
memoId | string For XLM addresses |
string or null (AddressLabel) <= 250 characters A human-readable label for the address. |
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" |
{- "label": "Bob's Hot Wallet Address"
}
{- "id": "59cd72485007a239fb00282ed480da1f",
- "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
- "chain": 1,
- "index": 0,
- "coin": "string",
- "lastNonce": -1,
- "wallet": "59cd72485007a239fb00282ed480da1f",
- "coinSpecific": {
- "xlm": {
- "memoId": "2000000",
- "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM"
}, - "txlm": {
- "memoId": "2000000",
- "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM"
}
}, - "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"
}
Gets proof of ownership for an address on a wallet
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 |
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 ] |
{- "address": "string",
- "chain": "string",
- "iou": true,
- "signature": "string",
- "prefix": "string",
- "proofType": "string",
- "auxProofData": [
- {
- "type": "string",
- "data": {
- "script": "string"
}
}
]
}
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 |
prevId | string (Id) ^[0-9a-f]{32}$ Example: prevId=59cd72485007a239fb00282ed480da1f Return the next batch of results, based on the |
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 |
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 |
{- "logs": [
- {
- "coin": "btc",
- "data": { },
- "date": "2018-05-05T19:46:22.019Z",
- "enterpriseId": "59cd72485007a239fb00282ed480da1f",
- "id": "59cd72485007a239fb00282ed480da1f",
- "ip": "string",
- "target": "string",
- "type": "addPolicy",
- "user": "string",
- "walletId": "59cd72485007a239fb00282ed480da1f"
}
], - "nextBatchPrevId": "585951a5df8380e0e3063e9f"
}
enterpriseId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
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 |
{- "accountType": "individual",
- "additionalEnterpriseInfo": {
- "regulator": "string",
- "regulatorId": "string",
- "contact": {
- "name": "Jane Doe",
- "street": "1",
- "street2": "Wall Street",
- "suite": "3",
- "city": "New York",
- "state": "NY",
- "postalCode": "10005",
- "country": "USA"
}
}, - "admin": {
- "policy": {
- "id": "59cd72485007a239fb00282ed480da1f",
- "date": "2019-08-24T14:15:22Z",
- "label": "string",
- "latest": true,
- "rules": [
- {
- "id": "string",
- "lockDate": "2019-08-24T14:15:22Z",
- "mutabilityConstraint": "managed",
- "coin": "btc",
- "type": "advancedWhitelist",
- "condition": {
- "amountString": "2000000",
- "timeWindow": 2678400,
- "groupTags": [
- "59cd72485007a239fb00282ed480da1f"
], - "excludeTags": [
- "59cd72485007a239fb00282ed480da1f"
]
}, - "action": {
- "type": "deny",
- "approvalsRequired": 1,
- "userIds": [
- "59cd72485007a239fb00282ed480da1f"
]
}
}
], - "version": 0
}
}, - "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": [
- {
- "name": {
- "name": "starter"
}, - "datesActive": [
- {
- "id": "string",
- "startDate": "string",
- "startReason": "string",
- "endDate": "string",
- "endReason": "string"
}
]
}
], - "activePricingType": {
- "id": "string",
- "startDate": "string",
- "startReason": "string",
- "endDate": "string",
- "endReason": "string",
- "name": "starter"
}, - "kits": [
- {
- "name": {
- "name": "default"
}, - "datesActive": [
- {
- "id": "string",
- "startDate": "string",
- "startReason": "string",
- "endDate": "string",
- "endReason": "string"
}
]
}
], - "activeKits": [
- {
- "id": "string",
- "startDate": "string",
- "startReason": "string",
- "endDate": "string",
- "endReason": "string",
- "name": "default"
}
], - "primaryContact": "59cd72485007a239fb00282ed480da1f",
- "usersViewAllWallets": true,
- "videoIdWaived": true,
- "tags": [
- {
- "name": "string",
- "id": "59cd72485007a239fb00282ed480da1f"
}
], - "wallets": [
- "string"
]
}
enterpriseId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
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 |
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. |
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 |
{- "legalIdentifiers": {
- "legalPersonName": "Pineapple Capital Inc"
}, - "additionalEnterpriseInfo": {
- "regulator": "string",
- "regulatorId": "string",
- "contact": {
- "name": "Jane Doe",
- "street": "1",
- "street2": "Wall Street",
- "suite": "3",
- "city": "New York",
- "state": "NY",
- "postalCode": "10005",
- "country": "USA"
}
}, - "approvalsRequired": 1,
- "usersViewAllWallets": true
}
{- "accountType": "individual",
- "additionalEnterpriseInfo": {
- "regulator": "string",
- "regulatorId": "string",
- "contact": {
- "name": "Jane Doe",
- "street": "1",
- "street2": "Wall Street",
- "suite": "3",
- "city": "New York",
- "state": "NY",
- "postalCode": "10005",
- "country": "USA"
}
}, - "admin": {
- "policy": {
- "id": "59cd72485007a239fb00282ed480da1f",
- "date": "2019-08-24T14:15:22Z",
- "label": "string",
- "latest": true,
- "rules": [
- {
- "id": "string",
- "lockDate": "2019-08-24T14:15:22Z",
- "mutabilityConstraint": "managed",
- "coin": "btc",
- "type": "advancedWhitelist",
- "condition": {
- "amountString": "2000000",
- "timeWindow": 2678400,
- "groupTags": [
- "59cd72485007a239fb00282ed480da1f"
], - "excludeTags": [
- "59cd72485007a239fb00282ed480da1f"
]
}, - "action": {
- "type": "deny",
- "approvalsRequired": 1,
- "userIds": [
- "59cd72485007a239fb00282ed480da1f"
]
}
}
], - "version": 0
}
}, - "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": [
- {
- "name": {
- "name": "starter"
}, - "datesActive": [
- {
- "id": "string",
- "startDate": "string",
- "startReason": "string",
- "endDate": "string",
- "endReason": "string"
}
]
}
], - "activePricingType": {
- "id": "string",
- "startDate": "string",
- "startReason": "string",
- "endDate": "string",
- "endReason": "string",
- "name": "starter"
}, - "kits": [
- {
- "name": {
- "name": "default"
}, - "datesActive": [
- {
- "id": "string",
- "startDate": "string",
- "startReason": "string",
- "endDate": "string",
- "endReason": "string"
}
]
}
], - "activeKits": [
- {
- "id": "string",
- "startDate": "string",
- "startReason": "string",
- "endDate": "string",
- "endReason": "string",
- "name": "default"
}
], - "primaryContact": "59cd72485007a239fb00282ed480da1f",
- "usersViewAllWallets": true,
- "videoIdWaived": true
}
enterpriseId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
Array of objects (EnterpriseActiveKits) [ items ] | |
Array of objects[ items ] The list of pricingTypes to update. A maximum of 2 is expected. |
Array of objects (EnterprisePricingTypes) [ items ] | |
Array of objects (EnterpriseKits) [ items ] | |
object (EnterpriseActivePricingType) | |
Array of objects (EnterpriseActiveKits) [ items ] |
{- "activeKits": [
- {
- "id": "string",
- "startDate": "string",
- "startReason": "string",
- "endDate": "string",
- "endReason": "string",
- "name": "default"
}
], - "activePricingTypes": [
- {
- "id": "string",
- "startDate": "string",
- "startReason": "string",
- "endDate": "string",
- "endReason": "string",
- "name": "starter"
}
]
}
{- "pricingTypes": [
- {
- "name": {
- "name": "starter"
}, - "datesActive": [
- {
- "id": "string",
- "startDate": "string",
- "startReason": "string",
- "endDate": "string",
- "endReason": "string"
}
]
}
], - "kits": [
- {
- "name": {
- "name": "default"
}, - "datesActive": [
- {
- "id": "string",
- "startDate": "string",
- "startReason": "string",
- "endDate": "string",
- "endReason": "string"
}
]
}
], - "activePricingType": {
- "id": "string",
- "startDate": "string",
- "startReason": "string",
- "endDate": "string",
- "endReason": "string",
- "name": "starter"
}, - "activeKits": [
- {
- "id": "string",
- "startDate": "string",
- "startReason": "string",
- "endDate": "string",
- "endReason": "string",
- "name": "default"
}
]
}
{- "enterprises": [
- {
- "accountType": "individual",
- "additionalEnterpriseInfo": {
- "regulator": "string",
- "regulatorId": "string",
- "contact": {
- "name": "Jane Doe",
- "street": "1",
- "street2": "Wall Street",
- "suite": "3",
- "city": "New York",
- "state": "NY",
- "postalCode": "10005",
- "country": "USA"
}
}, - "admin": {
- "policy": {
- "id": "59cd72485007a239fb00282ed480da1f",
- "date": "2019-08-24T14:15:22Z",
- "label": "string",
- "latest": true,
- "rules": [
- {
- "id": "string",
- "lockDate": "2019-08-24T14:15:22Z",
- "mutabilityConstraint": "managed",
- "coin": "btc",
- "type": "advancedWhitelist",
- "condition": {
- "amountString": "2000000",
- "timeWindow": 2678400,
- "groupTags": [
- "59cd72485007a239fb00282ed480da1f"
], - "excludeTags": [
- "59cd72485007a239fb00282ed480da1f"
]
}, - "action": {
- "type": "deny",
- "approvalsRequired": 1,
- "userIds": [
- "59cd72485007a239fb00282ed480da1f"
]
}
}
], - "version": 0
}
}, - "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": [
- {
- "name": {
- "name": "starter"
}, - "datesActive": [
- {
- "id": "string",
- "startDate": "string",
- "startReason": "string",
- "endDate": "string",
- "endReason": "string"
}
]
}
], - "activePricingType": {
- "id": "string",
- "startDate": "string",
- "startReason": "string",
- "endDate": "string",
- "endReason": "string",
- "name": "starter"
}, - "kits": [
- {
- "name": {
- "name": "default"
}, - "datesActive": [
- {
- "id": "string",
- "startDate": "string",
- "startReason": "string",
- "endDate": "string",
- "endReason": "string"
}
]
}
], - "activeKits": [
- {
- "id": "string",
- "startDate": "string",
- "startReason": "string",
- "endDate": "string",
- "endReason": "string",
- "name": "default"
}
], - "primaryContact": "59cd72485007a239fb00282ed480da1f",
- "usersViewAllWallets": true,
- "videoIdWaived": true,
- "tags": [
- "user"
]
}
]
}
enterpriseId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
allowInactiveAdmins | boolean Whether inactive admins should be returned as well |
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. |
{- "adminUsers": [
- {
- "id": "59cd72485007a239fb00282ed480da1f",
- "username": "user@example.com",
- "verified": true
}
], - "nonAdminUsers": [
- {
- "id": "59cd72485007a239fb00282ed480da1f",
- "username": "user@example.com",
- "verified": true
}
], - "walletUsers": [
- {
- "id": "59cd72485007a239fb00282ed480da1f",
- "username": "user@example.com"
}
], - "kycState": "unverified",
- "incomplete": true
}
enterpriseId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
permission | string Value: "admin" |
username | string <email> The Username of the User that should be added to the Enterprise |
usernames | Array of strings <email> |
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 |
{- "permission": "admin",
- "username": "user@example.com",
- "usernames": [
- "user@example.com"
]
}
{ }
enterpriseId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
username required | string <email> |
Array of objects (V1PendingApproval) [ items ] |
{- "username": "user@example.com"
}
{- "pendingApprovals": [
- {
- "id": "59cd72485007a239fb00282ed480da1f",
- "bitcoinAddress": "1G47mSr3oANXMafVrR8UC4pzV7FEAzo3r9",
- "enterprise": "59cd72485007a239fb00282ed480da1f",
- "walletId": "1G47mSr3oANXMafVrR8UC4pzV7FEAzo3r9",
- "creator": "59cd72485007a239fb00282ed480da1f",
- "createDate": "2019-08-24T14:15:22Z",
- "info": {
- "type": "bitcoinAddressWhitelistRequest",
- "updateEnterpriseRequest": {
- "action": "add",
- "permissions": [
- "admin"
], - "userId": "59cd72485007a239fb00282ed480da1f",
- "email": "user@example.com"
}, - "updateApprovalsRequiredRequest": {
- "requestedApprovalsRequired": 1
}
}, - "state": "pending",
- "walletUserIds": [
- "59cd72485007a239fb00282ed480da1f"
], - "approvalsRequired": 1
}
]
}
enterpriseId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
permission | string Value: "admin" |
username | string <email> The Username of the User that should be added to the Enterprise |
usernames | Array of strings <email> |
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 |
{- "permission": "admin",
- "username": "user@example.com",
- "usernames": [
- "user@example.com"
]
}
{ }
enterpriseId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
username required | string <email> |
Array of objects (PendingApproval) [ items ] |
{- "username": "user@example.com"
}
{- "pendingApprovals": [
- {
- "id": "59cd72485007a239fb00282ed480da1f",
- "coin": "btc",
- "wallet": "59cd72485007a239fb00282ed480da1f",
- "enterprise": "59cd72485007a239fb00282ed480da1f",
- "creator": "59cd72485007a239fb00282ed480da1f",
- "createDate": "2019-08-24T14:15:22Z",
- "info": {
- "transactionRequest": {
- "buildParams": { },
- "coinSpecific": { },
- "comment": "string",
- "fee": "2000000",
- "isUnsigned": true,
- "recipients": [
- {
- "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
- "amount": "2000000",
- "data": "string"
}
], - "requestedAmount": "2000000",
- "sourceWallet": "59cd72485007a239fb00282ed480da1f",
- "triggeredPolicy": "59cd72485007a239fb00282ed480da1f",
- "validTransaction": "string",
- "validTransactionHash": "string"
}, - "type": "transactionRequest"
}, - "state": "pending",
- "scope": "enterprise",
- "userIds": [
- "59cd72485007a239fb00282ed480da1f"
], - "approvalsRequired": 1,
- "walletLabel": "string"
}
]
}
enterpriseId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
duration | integer Default: 3600 seconds to freeze the enterprise for |
time | string <date-time> When the freeze started |
expires | string <date-time> When the freeze will end |
{- "duration": 3600
}
{- "time": "2019-08-24T14:15:22Z",
- "expires": "2019-08-24T14:15:22Z"
}
enterpriseId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
coin | Array of strings (Coin) Example: coin=btc Filter by coin(s) |
isCustodial | boolean Value: true Whether custodial limits should be returned |
coin required | string (Coin) A cryptocurrency or token ticker symbol. |
limit | integer |
count required | integer >= 0 |
isCustodial | boolean Value: true |
[- {
- "coin": "btc",
- "limit": 0,
- "count": 0,
- "isCustodial": true
}
]
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.
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
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 |
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" |
{- "chain": 1,
- "label": "Bob's Hot Wallet Address",
- "lowPriority": false,
- "gasPrice": 0,
- "eip1559": {
- "maxPriorityFeePerGas": "string",
- "maxFeePerGas": "string"
}, - "forwarderVersion": 2,
- "onToken": "ofcbtc",
- "format": "cashaddr"
}
{- "id": "59cd72485007a239fb00282ed480da1f",
- "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
- "chain": 1,
- "index": 0,
- "coin": "string",
- "lastNonce": -1,
- "wallet": "59cd72485007a239fb00282ed480da1f",
- "coinSpecific": {
- "xlm": {
- "memoId": "2000000",
- "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM"
}, - "txlm": {
- "memoId": "2000000",
- "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM"
}
}, - "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"
}
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).
email required | string <email> (Email) |
extensible | boolean
|
otp | string (Otp) Second factor authentication token |
password required | string |
access_token required | string |
expires_at required | integer Unix timestamp |
scope required | Array of strings (Scope) |
required | object (User) |
{- "email": "user@example.com",
- "extensible": false,
- "otp": "123456",
- "password": "secret"
}
{- "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": {
- "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"
}
}
This call allows you to create and send cryptocurrency to a destination address.
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
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 |
numBlocks | integer [ 2 .. 1000 ] (BTC only) Used to estimate the fee rate by targeting confirmation within the given number of blocks. If neither |
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 | |
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. | |
string or number Custom multiplier for fee rate. Suggested to be used in conjunction with | |
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 | 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 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 |
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 |
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 Also see: |
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 |
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 |
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. |
strategy | string <= 20 characters Optional unspent selection strategy to use. One of |
validFromBlock | integer Optional block this transaction is valid from |
validToBlock | integer Optional block this transaction is valid until |
type | string transaction type (e.g., |
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 |
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 |
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 |
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 |
{- "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": [
- {
- "token": "txlm:BST-GBQTIOS3XGHB7LVYGBKQVJGCZ3R4JL5E4CBSWJ5ALIJUHBKS6263644L",
- "action": "add",
- "limit": "2000000"
}
], - "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
}
{- "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": [
- "59cd72485007a239fb00282ed480da1f"
], - "history": [
- {
- "date": "2019-08-24T14:15:22Z",
- "user": "59cd72485007a239fb00282ed480da1f",
- "action": "created",
- "comment": "string"
}
], - "comment": "string",
- "vSize": 0,
- "nSegwitInputs": 0,
- "coinSpecific": { },
- "sequenceId": "string",
- "entries": [
- {
- "address": "2NAUwNgXaoFj2VVnSEvNLGuez8CfdU2UCMZ",
- "wallet": "string",
- "value": 0,
- "valueString": "string",
- "isChange": true,
- "isPayGo": true,
- "token": "omg"
}
], - "usersNotified": true
}, - "txid": "string",
- "tx": "string",
- "status": "signed"
}
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.
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
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 |
numBlocks | integer [ 2 .. 1000 ] (BTC only) Used to estimate the fee rate by targeting confirmation within the given number of blocks. If neither |
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 | |
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. | |
string or number Custom multiplier for fee rate. Suggested to be used in conjunction with | |
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 | 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 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 |
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 |
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 Also see: |
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 |
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 |
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. |
strategy | string <= 20 characters Optional unspent selection strategy to use. One of |
validFromBlock | integer Optional block this transaction is valid from |
validToBlock | integer Optional block this transaction is valid until |
type | string transaction type (e.g., |
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 |
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 |
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 |
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 |
{- "recipients": [
- {
- "address": "string",
- "amount": "string"
}
], - "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": [
- {
- "token": "txlm:BST-GBQTIOS3XGHB7LVYGBKQVJGCZ3R4JL5E4CBSWJ5ALIJUHBKS6263644L",
- "action": "add",
- "limit": "2000000"
}
], - "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"
}
{- "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": [
- "59cd72485007a239fb00282ed480da1f"
], - "history": [
- {
- "date": "2019-08-24T14:15:22Z",
- "user": "59cd72485007a239fb00282ed480da1f",
- "action": "created",
- "comment": "string"
}
], - "comment": "string",
- "vSize": 0,
- "nSegwitInputs": 0,
- "coinSpecific": { },
- "sequenceId": "string",
- "entries": [
- {
- "address": "2NAUwNgXaoFj2VVnSEvNLGuez8CfdU2UCMZ",
- "wallet": "string",
- "value": 0,
- "valueString": "string",
- "isChange": true,
- "isPayGo": true,
- "token": "omg"
}
], - "usersNotified": true
}, - "txid": "string",
- "tx": "string",
- "status": "signed"
}
Symmetrically encrypt an arbitrary message with provided password
input | string Plaintext message which should be encrypted |
password | string Password which should be used to encrypt message |
encrypted | string |
{- "input": "string",
- "password": "string"
}
{- "encrypted": "string"
}
Decrypt a ciphertext generated by encrypt route with provided password
input | string Ciphertext to decrypt |
password | string Key which is used for decryption |
decrypted | string |
{- "input": "string",
- "password": "string"
}
{- "decrypted": "string"
}
Calculate the fee and estimated size in bytes for a Bitcoin 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 | |
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 |
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 |
{- "feeRate": 10000,
- "nP2shInputs": 2,
- "nP2pkhInputs": 0,
- "nP2shP2wshInputs": 1,
- "nOutputs": 2
}
{- "size": 776,
- "fee": 38800,
- "feeRate": 50000
}
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.
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
prv | string Private key |
pub | string (Pub) public part of a key pair |
let key = bitgo.coin('tbtc').keychains().create();
{- "prv": "xprv9s21ZrQH143K2Y4th5Bn8sCRCMNjVr3sm9TLj9yw9SRKxYbJdB18bpc7cZFHKKWKuWZUBATfbDVE26u7w2iUhmWD8Gsp8UkaemhLEfopC35",
- "pub": "xpub661MyMwAqRbcGMVhmc7wqQRYMtcX9LAvSj1pjB213y5TsrkV2uuzJjWnjBrT1FUeNWGPjaVm5p7o6jdNcQJrV1cy3a1R8NQ9m7LuYKA8RpH"
}
This API call creates a new wallet. Under the hood, the SDK (or BitGo Express) does the following:
ⓘ 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.
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
includeKeychains | boolean Default: false Include user, backup and bitgo keychains along with generated wallet |
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. |
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 |
{- "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
}
{- "id": "59cd72485007a239fb00282ed480da1f",
- "users": [
- {
- "user": "59cd72485007a239fb00282ed480da1f",
- "permissions": [
- [
- "admin",
- "view",
- "spend"
]
]
}
], - "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": {
- "xlm": {
- "memoId": "2000000",
- "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM"
}, - "txlm": {
- "memoId": "2000000",
- "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM"
}
}, - "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"
}, - "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": { }
}
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
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
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) |
object or object |
{- "prv": "xprv9s21ZrQH143K3xQwj4yx3fHjDieEdqFDweBvFxn28qGvfQGvweUWuUuDRpepDu6opq3jiWHU9h3yYTKk5vvu4ykRuGA4i4Kz1vmFMPLTsoC",
- "txPrebuild": {
- "wallet": "59cd72485007a239fb00282ed480da1f",
- "txHex": "string",
- "txBase64": "string",
- "txInfo": {
- "changeAddresses": [
- "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS"
], - "nOutputs": 2,
- "nP2SHInputs": 0,
- "nSegwitInputs": 1,
- "unspents": [
- {
- "id": "003f688cc349f1fca8ac5ffa21671ca911b6ef351085c60733ed8c2ebf162cb8:2",
- "address": "2MsKxhhkDo5WaLaYRGA9Cr3iSQPyXsu6Fi2",
- "value": 0,
- "valueString": "2000000",
- "blockHeight": 0,
- "date": "2017-03-25T23:01:40.248Z",
- "coinbase": true,
- "wallet": "59cd72485007a239fb00282ed480da1f",
- "fromWallet": "59cd72485007a239fb00282ed480da1f",
- "chain": 0,
- "index": 0,
- "redeemScript": "522102f1e990044d2a8be43d5b500bbdcb36277b97a4b07e01c5101ae8ec1568bfd6532103dab7dc82f2fc8c28200c1bdeca9c4cf181e0ca257395829cbd599395048afb57210205422e711827d8356f2fb75334d863941dd7eb45bd5788fa231dc5fa755135b653ae",
- "witnessScript": "52210351311cd81144e6cbdba561d24dfc22644cb02d053339d4beace03231b3be4f372103a8d0c1a375b9ee1a2411f9f8e18373be7f228b18260f63bbfca48809170ed08b2103c3bd8bd074657bbe9ee6714b31a4a54b6fd5b5cda0e1030122f9bf46b5034f6b53ae",
- "isSegwit": true
}
], - "walletAddressDetails": {
- "id": "59cd72485007a239fb00282ed480da1f",
- "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
- "chain": 1,
- "index": 0,
- "coin": "string",
- "lastNonce": -1,
- "wallet": "59cd72485007a239fb00282ed480da1f",
- "coinSpecific": {
- "xlm": {
- "memoId": "2000000",
- "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM"
}, - "txlm": {
- "memoId": "2000000",
- "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM"
}
}, - "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"
}
}, - "feeInfo": {
- "size": 776,
- "fee": 38800,
- "feeRate": 10000,
- "payGoFee": 0,
- "payGoFeeString": "0"
}
}, - "isLastSignature": true,
- "pubs": [
- "string",
- "string",
- "string"
]
}
{- "txInfo": {
- "txHex": "01000000000101d58f82d996dd872012675adadf4606734906b25a413f6e2ee535c0c10aef96020000000000ffffffff028de888000000000017a914c91aa24f65827eecec775037d886f2952b73cbe48740420f000000000017a9149304d18497b9bfe9532778a0f06d9fff3b3befaf870500473044022023d7210ba6d8bbd7a28b8af226f40f7235caab79156f93f9c9969fc459ea7f73022050fbdca788fba3de686b66b3501853695ff9d6f375867470207d233b099576e001000069522103d4788cda52f91c1f6c82eb91491ca76108c9c5f0839bc4f02eccc55fedb3311c210391bcef9dcc89570a79ba3c7514e65cd48e766a8868eca2769fa9242fdcc796662102ef3c5ebac4b54df70dea1bb2655126368be10ca0462382fcb730e55cddd2dd6a53aec8b11400"
}
}
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.
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
object The user's keychain object with an | |
prv | string User private key Note: The request must include either |
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. |
recipients | Array of objects[ items ] Array of objects describing the recipients. See buildTransaction for more detail. Required on ETH. |
object or object |
{- "keychain": {
- "encryptedPrv": "string"
}, - "prv": "xprv9s21ZrQH143K3xQwj4yx3fHjDieEdqFDweBvFxn28qGvfQGvweUWuUuDRpepDu6opq3jiWHU9h3yYTKk5vvu4ykRuGA4i4Kz1vmFMPLTsoC",
- "txPrebuild": {
- "wallet": "59cd72485007a239fb00282ed480da1f",
- "txHex": "string",
- "txBase64": "string",
- "txInfo": {
- "changeAddresses": [
- "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS"
], - "nOutputs": 2,
- "nP2SHInputs": 0,
- "nSegwitInputs": 1,
- "unspents": [
- {
- "id": "003f688cc349f1fca8ac5ffa21671ca911b6ef351085c60733ed8c2ebf162cb8:2",
- "address": "2MsKxhhkDo5WaLaYRGA9Cr3iSQPyXsu6Fi2",
- "value": 0,
- "valueString": "2000000",
- "blockHeight": 0,
- "date": "2017-03-25T23:01:40.248Z",
- "coinbase": true,
- "wallet": "59cd72485007a239fb00282ed480da1f",
- "fromWallet": "59cd72485007a239fb00282ed480da1f",
- "chain": 0,
- "index": 0,
- "redeemScript": "522102f1e990044d2a8be43d5b500bbdcb36277b97a4b07e01c5101ae8ec1568bfd6532103dab7dc82f2fc8c28200c1bdeca9c4cf181e0ca257395829cbd599395048afb57210205422e711827d8356f2fb75334d863941dd7eb45bd5788fa231dc5fa755135b653ae",
- "witnessScript": "52210351311cd81144e6cbdba561d24dfc22644cb02d053339d4beace03231b3be4f372103a8d0c1a375b9ee1a2411f9f8e18373be7f228b18260f63bbfca48809170ed08b2103c3bd8bd074657bbe9ee6714b31a4a54b6fd5b5cda0e1030122f9bf46b5034f6b53ae",
- "isSegwit": true
}
], - "walletAddressDetails": {
- "id": "59cd72485007a239fb00282ed480da1f",
- "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
- "chain": 1,
- "index": 0,
- "coin": "string",
- "lastNonce": -1,
- "wallet": "59cd72485007a239fb00282ed480da1f",
- "coinSpecific": {
- "xlm": {
- "memoId": "2000000",
- "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM"
}, - "txlm": {
- "memoId": "2000000",
- "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM"
}
}, - "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"
}
}, - "feeInfo": {
- "size": 776,
- "fee": 38800,
- "feeRate": 10000,
- "payGoFee": 0,
- "payGoFeeString": "0"
}
}, - "coldDerivationSeed": "string",
- "walletPassphrase": "string",
- "recipients": [
- { }
]
}
{- "txInfo": {
- "txHex": "01000000000101d58f82d996dd872012675adadf4606734906b25a413f6e2ee535c0c10aef96020000000000ffffffff028de888000000000017a914c91aa24f65827eecec775037d886f2952b73cbe48740420f000000000017a9149304d18497b9bfe9532778a0f06d9fff3b3befaf870500473044022023d7210ba6d8bbd7a28b8af226f40f7235caab79156f93f9c9969fc459ea7f73022050fbdca788fba3de686b66b3501853695ff9d6f375867470207d233b099576e001000069522103d4788cda52f91c1f6c82eb91491ca76108c9c5f0839bc4f02eccc55fedb3311c210391bcef9dcc89570a79ba3c7514e65cd48e766a8868eca2769fa9242fdcc796662102ef3c5ebac4b54df70dea1bb2655126368be10ca0462382fcb730e55cddd2dd6a53aec8b11400"
}
}
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.
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
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. |
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 |
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. |
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 |
{- "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": {
- "value": "100",
- "symbol": "usdc"
}
}, - "intents": [
- {
- "nonce": "string",
- "memo": "string",
- "intentType": "claim",
- "sequenceId": "abc123",
- "comment": "string",
- "stakingRequestId": "string",
- "stakingAddress": "string",
- "amount": {
- "value": "100",
- "symbol": "usdc"
}
}
], - "pendingApprovalId": "string",
- "unsignedTxs": [
- {
- "serializedTxHex": "string",
- "signableHex": "string",
- "derivationPath": "string",
- "feeInfo": {
- "feeString": "string",
- "fee": 0
}
}
], - "signatureShares": [
- {
- "from": "user",
- "to": "user",
- "share": "string"
}
], - "txHashes": [
- "string"
]
}
{- "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": {
- "value": "100",
- "symbol": "usdc"
}
}, - "intents": [
- {
- "nonce": "string",
- "memo": "string",
- "intentType": "claim",
- "sequenceId": "abc123",
- "comment": "string",
- "stakingRequestId": "string",
- "stakingAddress": "string",
- "amount": {
- "value": "100",
- "symbol": "usdc"
}
}
], - "pendingApprovalId": "string",
- "unsignedTxs": [
- {
- "serializedTxHex": "string",
- "signableHex": "string",
- "derivationPath": "string",
- "feeInfo": {
- "feeString": "string",
- "fee": 0
}
}
], - "signatureShares": [
- {
- "from": "user",
- "to": "user",
- "share": "string"
}
], - "txHashes": [
- "string"
]
}
Recover an unsupported Ethereum token from a BitGo multisig wallet
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
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 |
object |
{- "tokenContractAddress": "string",
- "recipient": "string",
- "walletPassphrase": "string",
- "prv": "string"
}
{- "halfSigned": {
- "contractSequenceId": 1101,
- "expireTime": 1550088020,
- "gasLimit": 500000,
- "gasPrice": 20000000000,
- "operationHash": 9.44792020725999e+76,
- "recipient": {
- "address": 4.7261295088313645e+47,
- "amount": "2400"
}, - "signature": 1.9519588812712557e+156,
- "tokenContractAddress": 3.8941146273864216e+46,
- "walletId": "59cd72485007a239fb00282ed480da1f"
}
}
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.
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 |
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. |
keyDerivationPath | string |
{- "consolidateAddresses": [
- "string"
]
}
{- "keyDerivationPath": "string"
}
Consolidate unspents on a wallet
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
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 | |
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. | |
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. |
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 |
{- "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"
}
{- "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": [
- "59cd72485007a239fb00282ed480da1f"
], - "history": [
- {
- "date": "2019-08-24T14:15:22Z",
- "user": "59cd72485007a239fb00282ed480da1f",
- "action": "created",
- "comment": "string"
}
], - "comment": "string",
- "vSize": 0,
- "nSegwitInputs": 0,
- "coinSpecific": { },
- "sequenceId": "string",
- "entries": [
- {
- "address": "2NAUwNgXaoFj2VVnSEvNLGuez8CfdU2UCMZ",
- "wallet": "string",
- "value": 0,
- "valueString": "string",
- "isChange": true,
- "isPayGo": true,
- "token": "omg"
}
], - "usersNotified": true
}, - "txid": "string",
- "tx": "string",
- "status": "signed"
}
Fan out unspents on a wallet
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
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 | |
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. | |
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. |
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 |
{- "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"
}
{- "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": [
- "59cd72485007a239fb00282ed480da1f"
], - "history": [
- {
- "date": "2019-08-24T14:15:22Z",
- "user": "59cd72485007a239fb00282ed480da1f",
- "action": "created",
- "comment": "string"
}
], - "comment": "string",
- "vSize": 0,
- "nSegwitInputs": 0,
- "coinSpecific": { },
- "sequenceId": "string",
- "entries": [
- {
- "address": "2NAUwNgXaoFj2VVnSEvNLGuez8CfdU2UCMZ",
- "wallet": "string",
- "value": 0,
- "valueString": "string",
- "isChange": true,
- "isPayGo": true,
- "token": "omg"
}
], - "usersNotified": true
}, - "txid": "string",
- "tx": "string",
- "status": "signed"
}
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.
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
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 | |
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. | |
allowPartialSweep | boolean Default: false Use |
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 |
{- "address": "string",
- "walletPassphrase": "string",
- "xprv": "string",
- "otp": "string",
- "feeTxConfirmTarget": "string",
- "feeRate": 10000,
- "maxFeeRate": 20000,
- "allowPartialSweep": false
}
{- "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": [
- "59cd72485007a239fb00282ed480da1f"
], - "history": [
- {
- "date": "2019-08-24T14:15:22Z",
- "user": "59cd72485007a239fb00282ed480da1f",
- "action": "created",
- "comment": "string"
}
], - "comment": "string",
- "vSize": 0,
- "nSegwitInputs": 0,
- "coinSpecific": { },
- "sequenceId": "string",
- "entries": [
- {
- "address": "2NAUwNgXaoFj2VVnSEvNLGuez8CfdU2UCMZ",
- "wallet": "string",
- "value": 0,
- "valueString": "string",
- "isChange": true,
- "isPayGo": true,
- "token": "omg"
}
], - "usersNotified": true
}, - "txid": "string",
- "tx": "string",
- "status": "signed"
}
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:
cpfpFeeRate
.coin required | string (Bitcoin) Enum: "btc" "tbtc" This route is only available for Bitcoin. |
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
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. |
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 |
{- "cpfpTxIds": [
- "b8a828b98dbf32d9fd1875cbace9640ceb8c82626716b4a64203fdc79bb46d26"
], - "cpfpFeeRate": 0,
- "maxFee": 0
}
{- "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": [
- "59cd72485007a239fb00282ed480da1f"
], - "history": [
- {
- "date": "2019-08-24T14:15:22Z",
- "user": "59cd72485007a239fb00282ed480da1f",
- "action": "created",
- "comment": "string"
}
], - "comment": "string",
- "vSize": 0,
- "nSegwitInputs": 0,
- "coinSpecific": { },
- "sequenceId": "string",
- "entries": [
- {
- "address": "2NAUwNgXaoFj2VVnSEvNLGuez8CfdU2UCMZ",
- "wallet": "string",
- "value": 0,
- "valueString": "string",
- "isChange": true,
- "isPayGo": true,
- "token": "omg"
}
], - "usersNotified": true
}, - "txid": "string",
- "tx": "string",
- "status": "signed"
}
Canonicalize an LTC or BCH address.
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
address | string Address to canonicalize |
string or integer |
{- "address": "string",
- "version": "base58"
}
"2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS"
Verify address for a given coin
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
address | string <= 250 characters Address which should be verified for correct format |
isValid | boolean |
{- "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS"
}
{- "isValid": true
}
Accept or reject a pending approval
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
approvalId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
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 |
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 |
{- "state": "approved",
- "walletPassphrase": "string",
- "xprv": "string",
- "otp": "123456"
}
{- "id": "59cd72485007a239fb00282ed480da1f",
- "coin": "btc",
- "wallet": "59cd72485007a239fb00282ed480da1f",
- "enterprise": "59cd72485007a239fb00282ed480da1f",
- "creator": "59cd72485007a239fb00282ed480da1f",
- "createDate": "2019-08-24T14:15:22Z",
- "info": {
- "transactionRequest": {
- "buildParams": { },
- "coinSpecific": { },
- "comment": "string",
- "fee": "2000000",
- "isUnsigned": true,
- "recipients": [
- {
- "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
- "amount": "2000000",
- "data": "string"
}
], - "requestedAmount": "2000000",
- "sourceWallet": "59cd72485007a239fb00282ed480da1f",
- "triggeredPolicy": "59cd72485007a239fb00282ed480da1f",
- "validTransaction": "string",
- "validTransactionHash": "string"
}, - "type": "transactionRequest"
}, - "state": "pending",
- "scope": "enterprise",
- "userIds": [
- "59cd72485007a239fb00282ed480da1f"
], - "approvalsRequired": 1,
- "walletLabel": "string"
}
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.
Types of searches available:
q required | string Example: q=test*bitgo.com |
type required | string Enum: "name" "id" Example: type=name |
account_id | string |
stellar_address | string |
memo_type | string |
memo | string |
{- "account_id": "string",
- "stellar_address": "string",
- "memo_type": "string",
- "memo": "string"
}
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
id required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
encryptedPrv | string The encrypted private key |
id required | string (Id) ^[0-9a-f]{32}$ |
isBitGo | boolean
|
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 |
let keyId = '58c1f8a0781a5df8380e0e304b228c68'; bitgo .coin('tbtc') .keychains() .get({ id: keyId }) .then(function (keychain) { // print the keychain console.dir(keychain); });
{- "encryptedPrv": "string",
- "id": "59cd72485007a239fb00282ed480da1f",
- "isBitGo": false,
- "source": "user",
- "type": "tss",
- "ethAddress": "string",
- "pub": "xpub661MyMwAqRbcGMVhmc7wqQRYMtcX9LAvSj1pjB213y5TsrkV2uuzJjWnjBrT1FUeNWGPjaVm5p7o6jdNcQJrV1cy3a1R8NQ9m7LuYKA8RpH"
}
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
required | Array of Key (object) or KeyTSS (object)[ items ] |
bitgo .coin('tbtc') .keychains() .list() .then(function (keychain) { // print the keychains console.dir(keychains); });
{- "keys": [
- {
- "encryptedPrv": "string",
- "id": "59cd72485007a239fb00282ed480da1f",
- "isBitGo": false,
- "source": "user",
- "type": "tss",
- "ethAddress": "string",
- "pub": "xpub661MyMwAqRbcGMVhmc7wqQRYMtcX9LAvSj1pjB213y5TsrkV2uuzJjWnjBrT1FUeNWGPjaVm5p7o6jdNcQJrV1cy3a1R8NQ9m7LuYKA8RpH"
}
]
}
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
encryptedPrv | string Private part of this key pair, encrypted with a passphrase that only the client knows. Required for all sources except |
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. |
encryptedPrv | string The encrypted private key |
id required | string (Id) ^[0-9a-f]{32}$ |
isBitGo | boolean
|
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 |
{- "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": [
- {
- "from": "user",
- "to": "user",
- "publicShare": "string",
- "privateShare": "string"
}
], - "type": "eth",
- "keyType": "tss",
- "userGPGPublicKey": "string",
- "backupGPGPublicKey": "string"
}
{- "encryptedPrv": "string",
- "id": "59cd72485007a239fb00282ed480da1f",
- "isBitGo": false,
- "source": "user",
- "type": "tss",
- "ethAddress": "string",
- "pub": "xpub661MyMwAqRbcGMVhmc7wqQRYMtcX9LAvSj1pjB213y5TsrkV2uuzJjWnjBrT1FUeNWGPjaVm5p7o6jdNcQJrV1cy3a1R8NQ9m7LuYKA8RpH"
}
prevId | string (Id) ^[0-9a-f]{32}$ Example: prevId=59cd72485007a239fb00282ed480da1f Return the next batch of results, based on the |
limit | integer [ 1 .. 500 ] Default: 25 Maximum number of results to return. If the result set is truncated, use the |
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 |
walletId | string (Id) ^[0-9a-f]{32}$ Example: walletId=59cd72485007a239fb00282ed480da1f Filter by wallet |
Array of objects (PendingApproval) [ items ] |
let walletId = '590bb3598005caaf07b5bffbe35f3c11'; pendingapproval() .list(walletId) .then(function (list) { // Print approval list console.dir(list); });
{- "pendingApprovals": [
- {
- "id": "59cd72485007a239fb00282ed480da1f",
- "coin": "btc",
- "wallet": "59cd72485007a239fb00282ed480da1f",
- "enterprise": "59cd72485007a239fb00282ed480da1f",
- "creator": "59cd72485007a239fb00282ed480da1f",
- "createDate": "2019-08-24T14:15:22Z",
- "info": {
- "transactionRequest": {
- "buildParams": { },
- "coinSpecific": { },
- "comment": "string",
- "fee": "2000000",
- "isUnsigned": true,
- "recipients": [
- {
- "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
- "amount": "2000000",
- "data": "string"
}
], - "requestedAmount": "2000000",
- "sourceWallet": "59cd72485007a239fb00282ed480da1f",
- "triggeredPolicy": "59cd72485007a239fb00282ed480da1f",
- "validTransaction": "string",
- "validTransactionHash": "string"
}, - "type": "transactionRequest"
}, - "state": "pending",
- "scope": "enterprise",
- "userIds": [
- "59cd72485007a239fb00282ed480da1f"
], - "approvalsRequired": 1,
- "walletLabel": "string"
}
]
}
id required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
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 |
{- "id": "59cd72485007a239fb00282ed480da1f",
- "coin": "btc",
- "wallet": "59cd72485007a239fb00282ed480da1f",
- "enterprise": "59cd72485007a239fb00282ed480da1f",
- "creator": "59cd72485007a239fb00282ed480da1f",
- "createDate": "2019-08-24T14:15:22Z",
- "info": {
- "transactionRequest": {
- "buildParams": { },
- "coinSpecific": { },
- "comment": "string",
- "fee": "2000000",
- "isUnsigned": true,
- "recipients": [
- {
- "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
- "amount": "2000000",
- "data": "string"
}
], - "requestedAmount": "2000000",
- "sourceWallet": "59cd72485007a239fb00282ed480da1f",
- "triggeredPolicy": "59cd72485007a239fb00282ed480da1f",
- "validTransaction": "string",
- "validTransactionHash": "string"
}, - "type": "transactionRequest"
}, - "state": "pending",
- "scope": "enterprise",
- "userIds": [
- "59cd72485007a239fb00282ed480da1f"
], - "approvalsRequired": 1,
- "walletLabel": "string"
}
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.
id required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
otp | string |
state | string |
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 |
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 |
{- "otp": "string",
- "state": "string"
}
{- "id": "59cd72485007a239fb00282ed480da1f",
- "coin": "btc",
- "wallet": "59cd72485007a239fb00282ed480da1f",
- "enterprise": "59cd72485007a239fb00282ed480da1f",
- "creator": "59cd72485007a239fb00282ed480da1f",
- "createDate": "2019-08-24T14:15:22Z",
- "info": {
- "transactionRequest": {
- "buildParams": { },
- "coinSpecific": { },
- "comment": "string",
- "fee": "2000000",
- "isUnsigned": true,
- "recipients": [
- {
- "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
- "amount": "2000000",
- "data": "string"
}
], - "requestedAmount": "2000000",
- "sourceWallet": "59cd72485007a239fb00282ed480da1f",
- "triggeredPolicy": "59cd72485007a239fb00282ed480da1f",
- "validTransaction": "string",
- "validTransactionHash": "string"
}, - "type": "transactionRequest"
}, - "state": "pending",
- "scope": "enterprise",
- "userIds": [
- "59cd72485007a239fb00282ed480da1f"
], - "approvalsRequired": 1,
- "walletLabel": "string"
}
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.
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
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:
|
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 |
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. |
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" |
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 |
{- "id": "my-rule-id",
- "type": "advancedWhitelist",
- "condition": {
- "add": {
- "type": "my-wallet-id",
- "item": "my-item-id",
- "metaData": {
- "label": "Recipient Wallet"
}
}
}, - "action": {
- "type": "getApproval",
- "userIds": [ ]
}
}
{- "admin": {
- "policy": {
- "id": "59cd72485007a239fb00282ed480da1f",
- "date": "2019-08-24T14:15:22Z",
- "label": "string",
- "latest": true,
- "rules": [
- {
- "id": "string",
- "lockDate": "2019-08-24T14:15:22Z",
- "mutabilityConstraint": "managed",
- "coin": "btc",
- "type": "advancedWhitelist",
- "condition": {
- "amountString": "2000000",
- "timeWindow": 2678400,
- "groupTags": [
- "59cd72485007a239fb00282ed480da1f"
], - "excludeTags": [
- "59cd72485007a239fb00282ed480da1f"
]
}, - "action": {
- "type": "deny",
- "approvalsRequired": 1,
- "userIds": [
- "59cd72485007a239fb00282ed480da1f"
]
}
}
], - "version": 0
}
}, - "allowBackupKeySigning": true,
- "approvalsRequired": 1,
- "balanceString": "string",
- "buildDefaults": {
- "minFeeRate": 12000
}, - "coin": "btc",
- "coinSpecific": {
- "creationFailure": [
- "b8a828b98dbf32d9fd1875cbace9640ceb8c82626716b4a64203fdc79bb46d26"
], - "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": {
- "xlm": {
- "memoId": "2000000",
- "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM"
}, - "txlm": {
- "memoId": "2000000",
- "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM"
}
}, - "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"
}, - "recoverable": true,
- "tags": [
- "59cd72485007a239fb00282ed480da1f"
], - "spendableBalanceString": "string",
- "startDate": "string",
- "type": "cold",
- "users": [
- {
- "user": "55e8a1a5df8380e0e30e20c6",
- "permissions": [
- "admin",
- "view",
- "spend"
]
}
], - "customChangeKeySignatures": {
- "user": "string",
- "backup": "string",
- "bitgo": "string"
}, - "multisigType": "onchain"
}
Updates a rule on the policy attached to a wallet
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
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 |
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. |
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" |
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 |
{- "coin": "string",
- "id": "string",
- "type": "advancedWhitelist",
- "condition": {
- "amountString": "2000000",
- "timeWindow": 2678400,
- "groupTags": [
- "59cd72485007a239fb00282ed480da1f"
], - "excludeTags": [
- "59cd72485007a239fb00282ed480da1f"
], - "startDateReset": true
}, - "action": {
- "type": "deny",
- "approvalsRequired": 1,
- "userIds": [
- "59cd72485007a239fb00282ed480da1f"
]
}
}
{- "admin": {
- "policy": {
- "id": "59cd72485007a239fb00282ed480da1f",
- "date": "2019-08-24T14:15:22Z",
- "label": "string",
- "latest": true,
- "rules": [
- {
- "id": "string",
- "lockDate": "2019-08-24T14:15:22Z",
- "mutabilityConstraint": "managed",
- "coin": "btc",
- "type": "advancedWhitelist",
- "condition": {
- "amountString": "2000000",
- "timeWindow": 2678400,
- "groupTags": [
- "59cd72485007a239fb00282ed480da1f"
], - "excludeTags": [
- "59cd72485007a239fb00282ed480da1f"
]
}, - "action": {
- "type": "deny",
- "approvalsRequired": 1,
- "userIds": [
- "59cd72485007a239fb00282ed480da1f"
]
}
}
], - "version": 0
}
}, - "allowBackupKeySigning": true,
- "approvalsRequired": 1,
- "balanceString": "string",
- "buildDefaults": {
- "minFeeRate": 12000
}, - "coin": "btc",
- "coinSpecific": {
- "creationFailure": [
- "b8a828b98dbf32d9fd1875cbace9640ceb8c82626716b4a64203fdc79bb46d26"
], - "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": {
- "xlm": {
- "memoId": "2000000",
- "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM"
}, - "txlm": {
- "memoId": "2000000",
- "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM"
}
}, - "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"
}, - "recoverable": true,
- "tags": [
- "59cd72485007a239fb00282ed480da1f"
], - "spendableBalanceString": "string",
- "startDate": "string",
- "type": "cold",
- "users": [
- {
- "user": "55e8a1a5df8380e0e30e20c6",
- "permissions": [
- "admin",
- "view",
- "spend"
]
}
], - "customChangeKeySignatures": {
- "user": "string",
- "backup": "string",
- "bitgo": "string"
}, - "multisigType": "onchain"
}
Deletes a rule from the policy attached to a wallet
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
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 |
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. |
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" |
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 |
{- "coin": "string",
- "id": "string",
- "type": "advancedWhitelist",
- "condition": {
- "amountString": "2000000",
- "timeWindow": 2678400,
- "groupTags": [
- "59cd72485007a239fb00282ed480da1f"
], - "excludeTags": [
- "59cd72485007a239fb00282ed480da1f"
], - "startDateReset": true
}, - "action": {
- "type": "deny",
- "approvalsRequired": 1,
- "userIds": [
- "59cd72485007a239fb00282ed480da1f"
]
}
}
{- "admin": {
- "policy": {
- "id": "59cd72485007a239fb00282ed480da1f",
- "date": "2019-08-24T14:15:22Z",
- "label": "string",
- "latest": true,
- "rules": [
- {
- "id": "string",
- "lockDate": "2019-08-24T14:15:22Z",
- "mutabilityConstraint": "managed",
- "coin": "btc",
- "type": "advancedWhitelist",
- "condition": {
- "amountString": "2000000",
- "timeWindow": 2678400,
- "groupTags": [
- "59cd72485007a239fb00282ed480da1f"
], - "excludeTags": [
- "59cd72485007a239fb00282ed480da1f"
]
}, - "action": {
- "type": "deny",
- "approvalsRequired": 1,
- "userIds": [
- "59cd72485007a239fb00282ed480da1f"
]
}
}
], - "version": 0
}
}, - "allowBackupKeySigning": true,
- "approvalsRequired": 1,
- "balanceString": "string",
- "buildDefaults": {
- "minFeeRate": 12000
}, - "coin": "btc",
- "coinSpecific": {
- "creationFailure": [
- "b8a828b98dbf32d9fd1875cbace9640ceb8c82626716b4a64203fdc79bb46d26"
], - "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": {
- "xlm": {
- "memoId": "2000000",
- "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM"
}, - "txlm": {
- "memoId": "2000000",
- "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM"
}
}, - "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"
}, - "recoverable": true,
- "tags": [
- "59cd72485007a239fb00282ed480da1f"
], - "spendableBalanceString": "string",
- "startDate": "string",
- "type": "cold",
- "users": [
- {
- "user": "55e8a1a5df8380e0e30e20c6",
- "permissions": [
- "admin",
- "view",
- "spend"
]
}
], - "customChangeKeySignatures": {
- "user": "string",
- "backup": "string",
- "bitgo": "string"
}, - "multisigType": "onchain"
}
List all send labels for the enterprise. Address and coin parameters optional.
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 |
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 |
[- {
- "id": "59cd72485007a239fb00282ed480da1f",
- "coin": "btc",
- "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
- "enterpriseId": "59cd72485007a239fb00282ed480da1f",
- "label": "string"
}
]
Create an address send label for an id
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 |
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 |
{- "coin": "btc",
- "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
- "enterpriseId": "59cd72485007a239fb00282ed480da1f",
- "label": "string"
}
{- "id": "59cd72485007a239fb00282ed480da1f",
- "coin": "btc",
- "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
- "enterpriseId": "59cd72485007a239fb00282ed480da1f",
- "label": "string"
}
Gets an address send label by the specified id
id required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
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 |
{- "id": "59cd72485007a239fb00282ed480da1f",
- "coin": "btc",
- "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
- "enterpriseId": "59cd72485007a239fb00282ed480da1f",
- "label": "string"
}
Updates an address send label by the specified id
id required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
label required | string <= 250 characters A human-readable mapping to an address |
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 |
{- "label": "string"
}
{- "id": "59cd72485007a239fb00282ed480da1f",
- "coin": "btc",
- "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
- "enterpriseId": "59cd72485007a239fb00282ed480da1f",
- "label": "string"
}
id required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
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 |
{- "id": "59cd72485007a239fb00282ed480da1f",
- "coin": "btc",
- "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
- "enterpriseId": "59cd72485007a239fb00282ed480da1f",
- "label": "string"
}
Returns all the transfers without blockchain information (inputs, outputs, confirms). Use the coin specific route to annotate blockchain information.
enterpriseId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
dateGte | string <date-time> Return transfers with a |
dateLt | string <date-time> Return transfers with a |
limit | integer [ 1 .. 500 ] Default: 25 Maximum number of results to return. If the result set is truncated, use the |
prevId | string (Id) ^[0-9a-f]{32}$ Example: prevId=59cd72485007a239fb00282ed480da1f Return the next batch of results, based on the |
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 |
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 |
{- "transfers": [
- {
- "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": [
- {
- "date": "2019-08-24T14:15:22Z",
- "user": "59cd72485007a239fb00282ed480da1f",
- "action": "created",
- "comment": "string"
}
], - "comment": "string",
- "vSize": 0,
- "nSegwitInputs": 0,
- "coinSpecific": { },
- "sequenceId": "string",
- "entries": [
- {
- "address": "2NAUwNgXaoFj2VVnSEvNLGuez8CfdU2UCMZ",
- "wallet": "string",
- "value": 0,
- "valueString": "string",
- "isChange": true,
- "isPayGo": true,
- "token": "omg"
}
], - "usersNotified": true
}
], - "nextBatchPrevId": "585951a5df8380e0e3063e9f"
}
Returns all the transfers. Currently requires an enterpriseId and block height.
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
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 |
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 |
{- "transfers": [
- {
- "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": [
- {
- "date": "2019-08-24T14:15:22Z",
- "user": "59cd72485007a239fb00282ed480da1f",
- "action": "created",
- "comment": "string"
}
], - "comment": "string",
- "vSize": 0,
- "nSegwitInputs": 0,
- "coinSpecific": { },
- "sequenceId": "string",
- "entries": [
- {
- "address": "2NAUwNgXaoFj2VVnSEvNLGuez8CfdU2UCMZ",
- "wallet": "string",
- "value": 0,
- "valueString": "string",
- "isChange": true,
- "isPayGo": true,
- "token": "omg",
- "label": "string"
}
], - "usersNotified": true,
- "confirmations": 0,
- "inputs": [
- {
- "id": "003f688cc349f1fca8ac5ffa21671ca911b6ef351085c60733ed8c2ebf162cb8:2",
- "address": "2MsKxhhkDo5WaLaYRGA9Cr3iSQPyXsu6Fi2",
- "value": 0,
- "valueString": "2000000",
- "blockHeight": 0,
- "date": "2017-03-25T23:01:40.248Z",
- "coinbase": true,
- "wallet": "59cd72485007a239fb00282ed480da1f",
- "fromWallet": "59cd72485007a239fb00282ed480da1f",
- "chain": 0,
- "index": 0,
- "redeemScript": "522102f1e990044d2a8be43d5b500bbdcb36277b97a4b07e01c5101ae8ec1568bfd6532103dab7dc82f2fc8c28200c1bdeca9c4cf181e0ca257395829cbd599395048afb57210205422e711827d8356f2fb75334d863941dd7eb45bd5788fa231dc5fa755135b653ae",
- "witnessScript": "52210351311cd81144e6cbdba561d24dfc22644cb02d053339d4beace03231b3be4f372103a8d0c1a375b9ee1a2411f9f8e18373be7f228b18260f63bbfca48809170ed08b2103c3bd8bd074657bbe9ee6714b31a4a54b6fd5b5cda0e1030122f9bf46b5034f6b53ae",
- "isSegwit": true
}
], - "outputs": [
- {
- "id": "003f688cc349f1fca8ac5ffa21671ca911b6ef351085c60733ed8c2ebf162cb8:2",
- "address": "2MsKxhhkDo5WaLaYRGA9Cr3iSQPyXsu6Fi2",
- "value": 0,
- "valueString": "2000000",
- "blockHeight": 0,
- "date": "2017-03-25T23:01:40.248Z",
- "coinbase": true,
- "wallet": "59cd72485007a239fb00282ed480da1f",
- "fromWallet": "59cd72485007a239fb00282ed480da1f",
- "chain": 0,
- "index": 0,
- "redeemScript": "522102f1e990044d2a8be43d5b500bbdcb36277b97a4b07e01c5101ae8ec1568bfd6532103dab7dc82f2fc8c28200c1bdeca9c4cf181e0ca257395829cbd599395048afb57210205422e711827d8356f2fb75334d863941dd7eb45bd5788fa231dc5fa755135b653ae",
- "witnessScript": "52210351311cd81144e6cbdba561d24dfc22644cb02d053339d4beace03231b3be4f372103a8d0c1a375b9ee1a2411f9f8e18373be7f228b18260f63bbfca48809170ed08b2103c3bd8bd074657bbe9ee6714b31a4a54b6fd5b5cda0e1030122f9bf46b5034f6b53ae",
- "isSegwit": true
}
]
}
], - "coin": "btc",
- "nextBatchPrevId": "585951a5df8380e0e3063e9f"
}
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
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
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) |
feePerKb required | integer Fee per kilobyte for a transaction to be confirmed across two or more blocks. Defaults to 2 if |
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). |
{- "feePerKb": 15902,
- "cpfpFeePerKb": 0,
- "numBlocks": 2,
- "confidence": 80,
- "multiplier": 0,
- "feeByBlockTarget": {
- "1": 50536,
- "2": 15902,
- "3": 1579
}
}
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.
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
allTokens | boolean Example: allTokens=true Include data for all subtokens (i.e. ERC20 Tokens, Stellar Tokens) |
dateGte | string <date-time> Return transfers with a |
dateLt | string <date-time> Return transfers with a |
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 |
prevId | string (Id) ^[0-9a-f]{32}$ Example: prevId=59cd72485007a239fb00282ed480da1f Return the next batch of results, based on the |
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 |
valueGte | integer Return transfers with a |
valueLt | integer Return transfers with a |
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 |
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. |
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 |
wallet.transfers().then(function (transfers) { // print transfers console.dir(transfers); });
{- "transfers": [
- {
- "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": [
- {
- "date": "2019-08-24T14:15:22Z",
- "user": "59cd72485007a239fb00282ed480da1f",
- "action": "created",
- "comment": "string"
}
], - "comment": "string",
- "vSize": 0,
- "nSegwitInputs": 0,
- "coinSpecific": { },
- "sequenceId": "string",
- "entries": [
- {
- "address": "2NAUwNgXaoFj2VVnSEvNLGuez8CfdU2UCMZ",
- "wallet": "string",
- "value": 0,
- "valueString": "string",
- "isChange": true,
- "isPayGo": true,
- "token": "omg",
- "label": "string"
}
], - "usersNotified": true,
- "confirmations": 0,
- "inputs": [
- {
- "id": "003f688cc349f1fca8ac5ffa21671ca911b6ef351085c60733ed8c2ebf162cb8:2",
- "address": "2MsKxhhkDo5WaLaYRGA9Cr3iSQPyXsu6Fi2",
- "value": 0,
- "valueString": "2000000",
- "blockHeight": 0,
- "date": "2017-03-25T23:01:40.248Z",
- "coinbase": true,
- "wallet": "59cd72485007a239fb00282ed480da1f",
- "fromWallet": "59cd72485007a239fb00282ed480da1f",
- "chain": 0,
- "index": 0,
- "redeemScript": "522102f1e990044d2a8be43d5b500bbdcb36277b97a4b07e01c5101ae8ec1568bfd6532103dab7dc82f2fc8c28200c1bdeca9c4cf181e0ca257395829cbd599395048afb57210205422e711827d8356f2fb75334d863941dd7eb45bd5788fa231dc5fa755135b653ae",
- "witnessScript": "52210351311cd81144e6cbdba561d24dfc22644cb02d053339d4beace03231b3be4f372103a8d0c1a375b9ee1a2411f9f8e18373be7f228b18260f63bbfca48809170ed08b2103c3bd8bd074657bbe9ee6714b31a4a54b6fd5b5cda0e1030122f9bf46b5034f6b53ae",
- "isSegwit": true
}
], - "outputs": [
- {
- "id": "003f688cc349f1fca8ac5ffa21671ca911b6ef351085c60733ed8c2ebf162cb8:2",
- "address": "2MsKxhhkDo5WaLaYRGA9Cr3iSQPyXsu6Fi2",
- "value": 0,
- "valueString": "2000000",
- "blockHeight": 0,
- "date": "2017-03-25T23:01:40.248Z",
- "coinbase": true,
- "wallet": "59cd72485007a239fb00282ed480da1f",
- "fromWallet": "59cd72485007a239fb00282ed480da1f",
- "chain": 0,
- "index": 0,
- "redeemScript": "522102f1e990044d2a8be43d5b500bbdcb36277b97a4b07e01c5101ae8ec1568bfd6532103dab7dc82f2fc8c28200c1bdeca9c4cf181e0ca257395829cbd599395048afb57210205422e711827d8356f2fb75334d863941dd7eb45bd5788fa231dc5fa755135b653ae",
- "witnessScript": "52210351311cd81144e6cbdba561d24dfc22644cb02d053339d4beace03231b3be4f372103a8d0c1a375b9ee1a2411f9f8e18373be7f228b18260f63bbfca48809170ed08b2103c3bd8bd074657bbe9ee6714b31a4a54b6fd5b5cda0e1030122f9bf46b5034f6b53ae",
- "isSegwit": true
}
]
}
], - "coin": "btc",
- "nextBatchPrevId": "585951a5df8380e0e3063e9f"
}
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.
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 |
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 |
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 |
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); });
{- "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": [
- {
- "date": "2019-08-24T14:15:22Z",
- "user": "59cd72485007a239fb00282ed480da1f",
- "action": "created",
- "comment": "string"
}
], - "comment": "string",
- "vSize": 0,
- "nSegwitInputs": 0,
- "coinSpecific": { },
- "sequenceId": "string",
- "entries": [
- {
- "address": "2NAUwNgXaoFj2VVnSEvNLGuez8CfdU2UCMZ",
- "wallet": "string",
- "value": 0,
- "valueString": "string",
- "isChange": true,
- "isPayGo": true,
- "token": "omg",
- "label": "string"
}
], - "usersNotified": true,
- "confirmations": 0,
- "inputs": [
- {
- "id": "003f688cc349f1fca8ac5ffa21671ca911b6ef351085c60733ed8c2ebf162cb8:2",
- "address": "2MsKxhhkDo5WaLaYRGA9Cr3iSQPyXsu6Fi2",
- "value": 0,
- "valueString": "2000000",
- "blockHeight": 0,
- "date": "2017-03-25T23:01:40.248Z",
- "coinbase": true,
- "wallet": "59cd72485007a239fb00282ed480da1f",
- "fromWallet": "59cd72485007a239fb00282ed480da1f",
- "chain": 0,
- "index": 0,
- "redeemScript": "522102f1e990044d2a8be43d5b500bbdcb36277b97a4b07e01c5101ae8ec1568bfd6532103dab7dc82f2fc8c28200c1bdeca9c4cf181e0ca257395829cbd599395048afb57210205422e711827d8356f2fb75334d863941dd7eb45bd5788fa231dc5fa755135b653ae",
- "witnessScript": "52210351311cd81144e6cbdba561d24dfc22644cb02d053339d4beace03231b3be4f372103a8d0c1a375b9ee1a2411f9f8e18373be7f228b18260f63bbfca48809170ed08b2103c3bd8bd074657bbe9ee6714b31a4a54b6fd5b5cda0e1030122f9bf46b5034f6b53ae",
- "isSegwit": true
}
], - "outputs": [
- {
- "id": "003f688cc349f1fca8ac5ffa21671ca911b6ef351085c60733ed8c2ebf162cb8:2",
- "address": "2MsKxhhkDo5WaLaYRGA9Cr3iSQPyXsu6Fi2",
- "value": 0,
- "valueString": "2000000",
- "blockHeight": 0,
- "date": "2017-03-25T23:01:40.248Z",
- "coinbase": true,
- "wallet": "59cd72485007a239fb00282ed480da1f",
- "fromWallet": "59cd72485007a239fb00282ed480da1f",
- "chain": 0,
- "index": 0,
- "redeemScript": "522102f1e990044d2a8be43d5b500bbdcb36277b97a4b07e01c5101ae8ec1568bfd6532103dab7dc82f2fc8c28200c1bdeca9c4cf181e0ca257395829cbd599395048afb57210205422e711827d8356f2fb75334d863941dd7eb45bd5788fa231dc5fa755135b653ae",
- "witnessScript": "52210351311cd81144e6cbdba561d24dfc22644cb02d053339d4beace03231b3be4f372103a8d0c1a375b9ee1a2411f9f8e18373be7f228b18260f63bbfca48809170ed08b2103c3bd8bd074657bbe9ee6714b31a4a54b6fd5b5cda0e1030122f9bf46b5034f6b53ae",
- "isSegwit": true
}
]
}
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 |
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 |
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 |
{- "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": [
- {
- "date": "2019-08-24T14:15:22Z",
- "user": "59cd72485007a239fb00282ed480da1f",
- "action": "created",
- "comment": "string"
}
], - "comment": "string",
- "vSize": 0,
- "nSegwitInputs": 0,
- "coinSpecific": { },
- "sequenceId": "string",
- "entries": [
- {
- "address": "2NAUwNgXaoFj2VVnSEvNLGuez8CfdU2UCMZ",
- "wallet": "string",
- "value": 0,
- "valueString": "string",
- "isChange": true,
- "isPayGo": true,
- "token": "omg",
- "label": "string"
}
], - "usersNotified": true,
- "confirmations": 0,
- "inputs": [
- {
- "id": "003f688cc349f1fca8ac5ffa21671ca911b6ef351085c60733ed8c2ebf162cb8:2",
- "address": "2MsKxhhkDo5WaLaYRGA9Cr3iSQPyXsu6Fi2",
- "value": 0,
- "valueString": "2000000",
- "blockHeight": 0,
- "date": "2017-03-25T23:01:40.248Z",
- "coinbase": true,
- "wallet": "59cd72485007a239fb00282ed480da1f",
- "fromWallet": "59cd72485007a239fb00282ed480da1f",
- "chain": 0,
- "index": 0,
- "redeemScript": "522102f1e990044d2a8be43d5b500bbdcb36277b97a4b07e01c5101ae8ec1568bfd6532103dab7dc82f2fc8c28200c1bdeca9c4cf181e0ca257395829cbd599395048afb57210205422e711827d8356f2fb75334d863941dd7eb45bd5788fa231dc5fa755135b653ae",
- "witnessScript": "52210351311cd81144e6cbdba561d24dfc22644cb02d053339d4beace03231b3be4f372103a8d0c1a375b9ee1a2411f9f8e18373be7f228b18260f63bbfca48809170ed08b2103c3bd8bd074657bbe9ee6714b31a4a54b6fd5b5cda0e1030122f9bf46b5034f6b53ae",
- "isSegwit": true
}
], - "outputs": [
- {
- "id": "003f688cc349f1fca8ac5ffa21671ca911b6ef351085c60733ed8c2ebf162cb8:2",
- "address": "2MsKxhhkDo5WaLaYRGA9Cr3iSQPyXsu6Fi2",
- "value": 0,
- "valueString": "2000000",
- "blockHeight": 0,
- "date": "2017-03-25T23:01:40.248Z",
- "coinbase": true,
- "wallet": "59cd72485007a239fb00282ed480da1f",
- "fromWallet": "59cd72485007a239fb00282ed480da1f",
- "chain": 0,
- "index": 0,
- "redeemScript": "522102f1e990044d2a8be43d5b500bbdcb36277b97a4b07e01c5101ae8ec1568bfd6532103dab7dc82f2fc8c28200c1bdeca9c4cf181e0ca257395829cbd599395048afb57210205422e711827d8356f2fb75334d863941dd7eb45bd5788fa231dc5fa755135b653ae",
- "witnessScript": "52210351311cd81144e6cbdba561d24dfc22644cb02d053339d4beace03231b3be4f372103a8d0c1a375b9ee1a2411f9f8e18373be7f228b18260f63bbfca48809170ed08b2103c3bd8bd074657bbe9ee6714b31a4a54b6fd5b5cda0e1030122f9bf46b5034f6b53ae",
- "isSegwit": true
}
]
}
Update the comment of a transfer Requirements:
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 |
comment | string The new comment for the transfer. |
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 |
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 |
{- "comment": "string"
}
{- "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": [
- {
- "date": "2019-08-24T14:15:22Z",
- "user": "59cd72485007a239fb00282ed480da1f",
- "action": "created",
- "comment": "string"
}
], - "comment": "string",
- "vSize": 0,
- "nSegwitInputs": 0,
- "coinSpecific": { },
- "sequenceId": "string",
- "entries": [
- {
- "address": "2NAUwNgXaoFj2VVnSEvNLGuez8CfdU2UCMZ",
- "wallet": "string",
- "value": 0,
- "valueString": "string",
- "isChange": true,
- "isPayGo": true,
- "token": "omg"
}
], - "usersNotified": true
}
Change the fee rate of a transaction in an attempt to accelerate its confirmation. Supported by: ETH, ERC20 tokens, CELO, RSK, ETC Requirements:
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
txid | string (Id) ^[0-9a-f]{32}$ |
fee | integer The new fee for the transaction. |
object |
txid | string (Id) ^[0-9a-f]{32}$ |
{- "txid": "59cd72485007a239fb00282ed480da1f",
- "fee": 0,
- "eip1559": {
- "maxPriorityFeePerGas": "string",
- "maxFeePerGas": "string"
}
}
{- "txid": "59cd72485007a239fb00282ed480da1f"
}
Get a paginated list of transaction requests filtered by enterprise.
enterpriseId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
prevId | string (Id) ^[0-9a-f]{32}$ Example: prevId=59cd72485007a239fb00282ed480da1f Return the next batch of results, based on the |
limit | integer [ 1 .. 500 ] Default: 25 Maximum number of results to return. If the result set is truncated, use the |
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. |
required | Array of TransactionRequestLite (object) or TransactionRequestFull (object) (TransactionRequest) [ items ] |
nextBatchPrevId | string |
{- "txRequests": [
- {
- "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": {
- "value": "100",
- "symbol": "usdc"
}
}, - "intents": [
- {
- "nonce": "string",
- "memo": "string",
- "intentType": "claim",
- "sequenceId": "abc123",
- "comment": "string",
- "stakingRequestId": "string",
- "stakingAddress": "string",
- "amount": {
- "value": "100",
- "symbol": "usdc"
}
}
], - "pendingApprovalId": "string",
- "unsignedTxs": [
- {
- "serializedTxHex": "string",
- "signableHex": "string",
- "derivationPath": "string",
- "feeInfo": {
- "feeString": "string",
- "fee": 0
}
}
], - "signatureShares": [
- {
- "from": "user",
- "to": "user",
- "share": "string"
}
], - "txHashes": [
- "string"
]
}
], - "nextBatchPrevId": "string"
}
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.
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
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. |
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. |
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 |
{- "idempotencyKey": "string",
- "intent": {
- "nonce": "string",
- "memo": "string",
- "intentType": "claim",
- "sequenceId": "abc123",
- "comment": "string",
- "stakingRequestId": "string",
- "stakingAddress": "string",
- "amount": {
- "value": "100",
- "symbol": "usdc"
}
}, - "videoApprovers": [
- "585951a5df8380e0e3063e9f",
- "585951a5df8380e0e304a553"
], - "apiVersion": "lite",
- "preview": false
}
{- "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": {
- "value": "100",
- "symbol": "usdc"
}
}, - "intents": [
- {
- "nonce": "string",
- "memo": "string",
- "intentType": "claim",
- "sequenceId": "abc123",
- "comment": "string",
- "stakingRequestId": "string",
- "stakingAddress": "string",
- "amount": {
- "value": "100",
- "symbol": "usdc"
}
}
], - "pendingApprovalId": "string",
- "unsignedTxs": [
- {
- "serializedTxHex": "string",
- "signableHex": "string",
- "derivationPath": "string",
- "feeInfo": {
- "feeString": "string",
- "fee": 0
}
}
], - "signatureShares": [
- {
- "from": "user",
- "to": "user",
- "share": "string"
}
], - "txHashes": [
- "string"
]
}
Get a paginated list of transaction requests filtered by wallet. Use only with TSS wallets.
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
prevId | string (Id) ^[0-9a-f]{32}$ Example: prevId=59cd72485007a239fb00282ed480da1f Return the next batch of results, based on the |
limit | integer [ 1 .. 500 ] Default: 25 Maximum number of results to return. If the result set is truncated, use the |
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. |
required | Array of TransactionRequestLite (object) or TransactionRequestFull (object) (TransactionRequest) [ items ] |
nextBatchPrevId | string |
{- "txRequests": [
- {
- "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": {
- "value": "100",
- "symbol": "usdc"
}
}, - "intents": [
- {
- "nonce": "string",
- "memo": "string",
- "intentType": "claim",
- "sequenceId": "abc123",
- "comment": "string",
- "stakingRequestId": "string",
- "stakingAddress": "string",
- "amount": {
- "value": "100",
- "symbol": "usdc"
}
}
], - "pendingApprovalId": "string",
- "unsignedTxs": [
- {
- "serializedTxHex": "string",
- "signableHex": "string",
- "derivationPath": "string",
- "feeInfo": {
- "feeString": "string",
- "fee": 0
}
}
], - "signatureShares": [
- {
- "from": "user",
- "to": "user",
- "share": "string"
}
], - "txHashes": [
- "string"
]
}
], - "nextBatchPrevId": "string"
}
Allows users to update an existing transaction request given they have spender permissions on the wallet. Use only with TSS wallets.
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
id required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
state required | string Value: "canceled"
|
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. |
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 |
{- "state": "canceled"
}
{- "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": {
- "value": "100",
- "symbol": "usdc"
}
}, - "intents": [
- {
- "nonce": "string",
- "memo": "string",
- "intentType": "claim",
- "sequenceId": "abc123",
- "comment": "string",
- "stakingRequestId": "string",
- "stakingAddress": "string",
- "amount": {
- "value": "100",
- "symbol": "usdc"
}
}
], - "pendingApprovalId": "string",
- "unsignedTxs": [
- {
- "serializedTxHex": "string",
- "signableHex": "string",
- "derivationPath": "string",
- "feeInfo": {
- "feeString": "string",
- "fee": 0
}
}
], - "signatureShares": [
- {
- "from": "user",
- "to": "user",
- "share": "string"
}
], - "txHashes": [
- "string"
]
}
Create a transfer for a transaction request and return that transfer. Use only with TSS wallets.
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
id required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
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 |
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 |
{- "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": [
- {
- "date": "2019-08-24T14:15:22Z",
- "user": "59cd72485007a239fb00282ed480da1f",
- "action": "created",
- "comment": "string"
}
], - "comment": "string",
- "vSize": 0,
- "nSegwitInputs": 0,
- "coinSpecific": { },
- "sequenceId": "string",
- "entries": [
- {
- "address": "2NAUwNgXaoFj2VVnSEvNLGuez8CfdU2UCMZ",
- "wallet": "string",
- "value": 0,
- "valueString": "string",
- "isChange": true,
- "isPayGo": true,
- "token": "omg"
}
], - "usersNotified": true
}
Returns the associated user
id required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f The user ID, email address, or |
id | string (Id) ^[0-9a-f]{32}$ |
isActive | boolean |
object (Name) | |
username | string <email> (Email) |
object | |
object | |
country | string |
state | string |
bitgo.me({}, function callback(err, user) { if (err) { // handle error } // etc });
{- "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"
}
email required | string <email> (Email) |
id | string (Id) ^[0-9a-f]{32}$ |
isActive | boolean |
object (Name) | |
username | string <email> (Email) |
object | |
object | |
country | string |
state | string |
{- "email": "user@example.com"
}
{- "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"
}
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).
email required | string <email> (Email) |
extensible | boolean
|
otp | string (Otp) Second factor authentication token |
password required | string |
access_token required | string |
expires_at required | integer Unix timestamp |
scope required | Array of strings (Scope) |
required | object (User) |
{- "email": "user@example.com",
- "extensible": false,
- "otp": "123456",
- "password": "secret"
}
{- "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": {
- "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"
}
}
Returns the session associated with access token passed via the Authorization
header.
object (Session) |
bitgo.session({}, function callback(err, session) { if (err) { // handle error } console.dir(session); });
{- "session": {
- "created": "2019-08-24T14:15:22Z",
- "expires": "2019-08-24T14:15:22Z",
- "id": "59cd72485007a239fb00282ed480da1f",
- "ip": "127.0.0.1",
- "ipRestrict": [
- "192.168.0.1"
], - "origin": "test.bitgo.com",
- "scope": [
- "crypto_compare",
- "user_manage",
- "openid",
- "profile",
- "wallet_create",
- "wallet_manage_all",
- "wallet_approve_all",
- "wallet_spend_all",
- "wallet_edit_all",
- "wallet_view_all"
], - "unlock": {
- "time": "2019-08-24T14:15:22Z",
- "expires": "2019-08-24T14:15:22Z",
- "txCount": 0,
- "txValue": 0
}, - "user": "59cd72485007a239fb00282ed480da1f"
}
}
Locks the current user session. This disallows operations that require an unlocked token, such as sending a transaction.
object (LockedSession) |
bitgo.lock({}).then(function (lockResponse) { // … });
{- "session": {
- "created": "2019-08-24T14:15:22Z",
- "expires": "2019-08-24T14:15:22Z",
- "id": "59cd72485007a239fb00282ed480da1f",
- "ip": "127.0.0.1",
- "ipRestrict": [
- "192.168.0.1"
], - "origin": "test.bitgo.com",
- "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": "59cd72485007a239fb00282ed480da1f"
}
}
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
.
duration | integer [ 1 .. 3600 ] Default: 600 Number of seconds that the session will stay unlocked |
otp | string (Otp) Second factor authentication token |
object (Session) |
{- "duration": 600,
- "otp": "123456"
}
{- "session": {
- "created": "2019-08-24T14:15:22Z",
- "expires": "2019-08-24T14:15:22Z",
- "id": "59cd72485007a239fb00282ed480da1f",
- "ip": "127.0.0.1",
- "ipRestrict": [
- "192.168.0.1"
], - "origin": "test.bitgo.com",
- "scope": [
- "crypto_compare",
- "user_manage",
- "openid",
- "profile",
- "wallet_create",
- "wallet_manage_all",
- "wallet_approve_all",
- "wallet_spend_all",
- "wallet_edit_all",
- "wallet_view_all"
], - "unlock": {
- "time": "2019-08-24T14:15:22Z",
- "expires": "2019-08-24T14:15:22Z",
- "txCount": 0,
- "txValue": 0
}, - "user": "59cd72485007a239fb00282ed480da1f"
}
}
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.
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
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 |
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" |
{- "chain": 1,
- "label": "Bob's Hot Wallet Address",
- "lowPriority": false,
- "gasPrice": 0,
- "eip1559": {
- "maxPriorityFeePerGas": "string",
- "maxFeePerGas": "string"
}, - "forwarderVersion": 2,
- "onToken": "ofcbtc",
- "format": "cashaddr"
}
{- "id": "59cd72485007a239fb00282ed480da1f",
- "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
- "chain": 1,
- "index": 0,
- "coin": "string",
- "lastNonce": -1,
- "wallet": "59cd72485007a239fb00282ed480da1f",
- "coinSpecific": {
- "xlm": {
- "memoId": "2000000",
- "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM"
}, - "txlm": {
- "memoId": "2000000",
- "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM"
}
}, - "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"
}
Gets a list of potentially problematic transactions, their nonces, the reason they are stuck, and possible solutions for a given wallet
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
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. |
[- {
- "nonce": 0,
- "cause": "string",
- "message": "string"
}
]
Returns the average fee for a specific number of blocks. Only for ETH and TETH.
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
numBlocks | integer target number of blocks |
averageFee required | number Calculated by summing the fees of the blocks over the number of blocks. |
{- "averageFee": 16000000
}
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.
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
allTokens | boolean Example: allTokens=true Include data for all subtokens (i.e. ERC20 Tokens, Stellar Tokens) |
dateGte | string <date-time> Return transfers with a |
dateLt | string <date-time> Return transfers with a |
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 |
prevId | string (Id) ^[0-9a-f]{32}$ Example: prevId=59cd72485007a239fb00282ed480da1f Return the next batch of results, based on the |
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 |
valueGte | integer Return transfers with a |
valueLt | integer Return transfers with a |
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 |
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. |
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 |
wallet.transfers().then(function (transfers) { // print transfers console.dir(transfers); });
{- "transfers": [
- {
- "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": [
- {
- "date": "2019-08-24T14:15:22Z",
- "user": "59cd72485007a239fb00282ed480da1f",
- "action": "created",
- "comment": "string"
}
], - "comment": "string",
- "vSize": 0,
- "nSegwitInputs": 0,
- "coinSpecific": { },
- "sequenceId": "string",
- "entries": [
- {
- "address": "2NAUwNgXaoFj2VVnSEvNLGuez8CfdU2UCMZ",
- "wallet": "string",
- "value": 0,
- "valueString": "string",
- "isChange": true,
- "isPayGo": true,
- "token": "omg",
- "label": "string"
}
], - "usersNotified": true,
- "confirmations": 0,
- "inputs": [
- {
- "id": "003f688cc349f1fca8ac5ffa21671ca911b6ef351085c60733ed8c2ebf162cb8:2",
- "address": "2MsKxhhkDo5WaLaYRGA9Cr3iSQPyXsu6Fi2",
- "value": 0,
- "valueString": "2000000",
- "blockHeight": 0,
- "date": "2017-03-25T23:01:40.248Z",
- "coinbase": true,
- "wallet": "59cd72485007a239fb00282ed480da1f",
- "fromWallet": "59cd72485007a239fb00282ed480da1f",
- "chain": 0,
- "index": 0,
- "redeemScript": "522102f1e990044d2a8be43d5b500bbdcb36277b97a4b07e01c5101ae8ec1568bfd6532103dab7dc82f2fc8c28200c1bdeca9c4cf181e0ca257395829cbd599395048afb57210205422e711827d8356f2fb75334d863941dd7eb45bd5788fa231dc5fa755135b653ae",
- "witnessScript": "52210351311cd81144e6cbdba561d24dfc22644cb02d053339d4beace03231b3be4f372103a8d0c1a375b9ee1a2411f9f8e18373be7f228b18260f63bbfca48809170ed08b2103c3bd8bd074657bbe9ee6714b31a4a54b6fd5b5cda0e1030122f9bf46b5034f6b53ae",
- "isSegwit": true
}
], - "outputs": [
- {
- "id": "003f688cc349f1fca8ac5ffa21671ca911b6ef351085c60733ed8c2ebf162cb8:2",
- "address": "2MsKxhhkDo5WaLaYRGA9Cr3iSQPyXsu6Fi2",
- "value": 0,
- "valueString": "2000000",
- "blockHeight": 0,
- "date": "2017-03-25T23:01:40.248Z",
- "coinbase": true,
- "wallet": "59cd72485007a239fb00282ed480da1f",
- "fromWallet": "59cd72485007a239fb00282ed480da1f",
- "chain": 0,
- "index": 0,
- "redeemScript": "522102f1e990044d2a8be43d5b500bbdcb36277b97a4b07e01c5101ae8ec1568bfd6532103dab7dc82f2fc8c28200c1bdeca9c4cf181e0ca257395829cbd599395048afb57210205422e711827d8356f2fb75334d863941dd7eb45bd5788fa231dc5fa755135b653ae",
- "witnessScript": "52210351311cd81144e6cbdba561d24dfc22644cb02d053339d4beace03231b3be4f372103a8d0c1a375b9ee1a2411f9f8e18373be7f228b18260f63bbfca48809170ed08b2103c3bd8bd074657bbe9ee6714b31a4a54b6fd5b5cda0e1030122f9bf46b5034f6b53ae",
- "isSegwit": true
}
]
}
], - "coin": "btc",
- "nextBatchPrevId": "585951a5df8380e0e3063e9f"
}
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.
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
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. |
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. |
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. |
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" |
{- "coinSpecific": {
- "xlm": {
- "stellarUsername": "foo_bar@baz.com"
}, - "txlm": {
- "stellarUsername": "foo_bar@baz.com"
}
}, - "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"
}
}
{- "admin": {
- "policy": {
- "id": "59cd72485007a239fb00282ed480da1f",
- "date": "2019-08-24T14:15:22Z",
- "label": "string",
- "latest": true,
- "rules": [
- {
- "id": "string",
- "lockDate": "2019-08-24T14:15:22Z",
- "mutabilityConstraint": "managed",
- "coin": "btc",
- "type": "advancedWhitelist",
- "condition": {
- "amountString": "2000000",
- "timeWindow": 2678400,
- "groupTags": [
- "59cd72485007a239fb00282ed480da1f"
], - "excludeTags": [
- "59cd72485007a239fb00282ed480da1f"
]
}, - "action": {
- "type": "deny",
- "approvalsRequired": 1,
- "userIds": [
- "59cd72485007a239fb00282ed480da1f"
]
}
}
], - "version": 0
}
}, - "allowBackupKeySigning": true,
- "approvalsRequired": 1,
- "balanceString": "string",
- "buildDefaults": {
- "minFeeRate": 12000
}, - "coin": "btc",
- "coinSpecific": {
- "creationFailure": [
- "b8a828b98dbf32d9fd1875cbace9640ceb8c82626716b4a64203fdc79bb46d26"
], - "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": {
- "xlm": {
- "memoId": "2000000",
- "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM"
}, - "txlm": {
- "memoId": "2000000",
- "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM"
}
}, - "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"
}, - "recoverable": true,
- "tags": [
- "59cd72485007a239fb00282ed480da1f"
], - "spendableBalanceString": "string",
- "startDate": "string",
- "type": "cold",
- "users": [
- {
- "user": "55e8a1a5df8380e0e30e20c6",
- "permissions": [
- "admin",
- "view",
- "spend"
]
}
], - "customChangeKeySignatures": {
- "user": "string",
- "backup": "string",
- "bitgo": "string"
}, - "multisigType": "onchain"
}
Get a list of all wallets per coin, for example, all Bitcoin wallets in your enterprise.
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
prevId | string (Id) ^[0-9a-f]{32}$ Example: prevId=59cd72485007a239fb00282ed480da1f Return the next batch of results, based on the |
limit | integer [ 1 .. 500 ] Default: 25 Maximum number of results to return. If the result set is truncated, use the |
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 |
showAllWallets | boolean Include wallets that have |
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 |
coin required | string (Coin) A cryptocurrency or token ticker symbol. |
bitgo .coin('tbtc') .wallets() .list({}) .then(function (wallets) { // print the wallets console.dir(wallets); });
{- "wallets": [
- {
- "admin": {
- "policy": {
- "id": "59cd72485007a239fb00282ed480da1f",
- "date": "2019-08-24T14:15:22Z",
- "label": "string",
- "latest": true,
- "rules": [
- {
- "id": "string",
- "lockDate": "2019-08-24T14:15:22Z",
- "mutabilityConstraint": "managed",
- "coin": "btc",
- "type": "advancedWhitelist",
- "condition": {
- "amountString": "2000000",
- "timeWindow": 2678400,
- "groupTags": [
- "59cd72485007a239fb00282ed480da1f"
], - "excludeTags": [
- "59cd72485007a239fb00282ed480da1f"
]
}, - "action": {
- "type": "deny",
- "approvalsRequired": 1,
- "userIds": [
- "59cd72485007a239fb00282ed480da1f"
]
}
}
], - "version": 0
}
}, - "allowBackupKeySigning": true,
- "approvalsRequired": 1,
- "balanceString": "string",
- "buildDefaults": {
- "minFeeRate": 12000
}, - "coin": "btc",
- "coinSpecific": {
- "creationFailure": [
- "b8a828b98dbf32d9fd1875cbace9640ceb8c82626716b4a64203fdc79bb46d26"
], - "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": {
- "xlm": {
- "memoId": "2000000",
- "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM"
}, - "txlm": {
- "memoId": "2000000",
- "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM"
}
}, - "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"
}, - "recoverable": true,
- "tags": [
- "59cd72485007a239fb00282ed480da1f"
], - "spendableBalanceString": "string",
- "startDate": "string",
- "type": "cold",
- "users": [
- {
- "user": "55e8a1a5df8380e0e30e20c6",
- "permissions": [
- "admin",
- "view",
- "spend"
]
}
], - "customChangeKeySignatures": {
- "user": "string",
- "backup": "string",
- "bitgo": "string"
}, - "multisigType": "onchain"
}
], - "nextBatchPrevId": "585951a5df8380e0e3063e9f",
- "coin": "btc"
}
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:
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} |
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 |
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 |
prevId | string (Id) ^[0-9a-f]{32}$ Example: prevId=59cd72485007a239fb00282ed480da1f Return the next batch of results, based on the |
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 |
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 |
{- "wallets": [
- {
- "admin": {
- "policy": {
- "id": "59cd72485007a239fb00282ed480da1f",
- "date": "2019-08-24T14:15:22Z",
- "label": "string",
- "latest": true,
- "rules": [
- {
- "id": "string",
- "lockDate": "2019-08-24T14:15:22Z",
- "mutabilityConstraint": "managed",
- "coin": "btc",
- "type": "advancedWhitelist",
- "condition": {
- "amountString": "2000000",
- "timeWindow": 2678400,
- "groupTags": [
- "59cd72485007a239fb00282ed480da1f"
], - "excludeTags": [
- "59cd72485007a239fb00282ed480da1f"
]
}, - "action": {
- "type": "deny",
- "approvalsRequired": 1,
- "userIds": [
- "59cd72485007a239fb00282ed480da1f"
]
}
}
], - "version": 0
}
}, - "allowBackupKeySigning": true,
- "approvalsRequired": 1,
- "balanceString": "string",
- "buildDefaults": {
- "minFeeRate": 12000
}, - "coin": "btc",
- "coinSpecific": {
- "creationFailure": [
- "b8a828b98dbf32d9fd1875cbace9640ceb8c82626716b4a64203fdc79bb46d26"
], - "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": {
- "xlm": {
- "memoId": "2000000",
- "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM"
}, - "txlm": {
- "memoId": "2000000",
- "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM"
}
}, - "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"
}, - "recoverable": true,
- "tags": [
- "59cd72485007a239fb00282ed480da1f"
], - "spendableBalanceString": "string",
- "startDate": "string",
- "type": "cold",
- "users": [
- {
- "user": "55e8a1a5df8380e0e30e20c6",
- "permissions": [
- "admin",
- "view",
- "spend"
]
}
], - "customChangeKeySignatures": {
- "user": "string",
- "backup": "string",
- "bitgo": "string"
}, - "multisigType": "onchain"
}
], - "nextBatchPrevId": "585951a5df8380e0e3063e9f"
}
Get one wallet by its coin
and receive address
. Multiple receive addresses can map to one walletId
.
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
address required | string (AddressString) <= 250 characters Example: 2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS |
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. |
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" |
let address = '2MyzG53Z6nF7UdNt7otEMtGNiEAEe2t2eSY'; bitgo .coin('tbtc') .wallets() .getWalletByAddress({ address: address }) .then(function (wallet) { // print the wallet console.dir(wallet._wallet); });
{- "admin": {
- "policy": {
- "id": "59cd72485007a239fb00282ed480da1f",
- "date": "2019-08-24T14:15:22Z",
- "label": "string",
- "latest": true,
- "rules": [
- {
- "id": "string",
- "lockDate": "2019-08-24T14:15:22Z",
- "mutabilityConstraint": "managed",
- "coin": "btc",
- "type": "advancedWhitelist",
- "condition": {
- "amountString": "2000000",
- "timeWindow": 2678400,
- "groupTags": [
- "59cd72485007a239fb00282ed480da1f"
], - "excludeTags": [
- "59cd72485007a239fb00282ed480da1f"
]
}, - "action": {
- "type": "deny",
- "approvalsRequired": 1,
- "userIds": [
- "59cd72485007a239fb00282ed480da1f"
]
}
}
], - "version": 0
}
}, - "allowBackupKeySigning": true,
- "approvalsRequired": 1,
- "balanceString": "string",
- "buildDefaults": {
- "minFeeRate": 12000
}, - "coin": "btc",
- "coinSpecific": {
- "creationFailure": [
- "b8a828b98dbf32d9fd1875cbace9640ceb8c82626716b4a64203fdc79bb46d26"
], - "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": {
- "xlm": {
- "memoId": "2000000",
- "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM"
}, - "txlm": {
- "memoId": "2000000",
- "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM"
}
}, - "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"
}, - "recoverable": true,
- "tags": [
- "59cd72485007a239fb00282ed480da1f"
], - "spendableBalanceString": "string",
- "startDate": "string",
- "type": "cold",
- "users": [
- {
- "user": "55e8a1a5df8380e0e30e20c6",
- "permissions": [
- "admin",
- "view",
- "spend"
]
}
], - "customChangeKeySignatures": {
- "user": "string",
- "backup": "string",
- "bitgo": "string"
}, - "multisigType": "onchain"
}
Get one wallet by its coin
and walletId
. One walletId
can map to multiple receive addresses.
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
allTokens | boolean Example: allTokens=true Include data for all subtokens (i.e. ERC20 Tokens, Stellar Tokens) |
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. |
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 |
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 |
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 |
let walletId = '585c51a5df8380e0e3082e46'; bitgo .coin('tbtc') .wallets() .get({ id: walletId }) .then(function (wallet) { // print the wallet console.dir(wallet._wallet); });
{- "admin": {
- "policy": {
- "id": "59cd72485007a239fb00282ed480da1f",
- "date": "2019-08-24T14:15:22Z",
- "label": "string",
- "latest": true,
- "rules": [
- {
- "id": "string",
- "lockDate": "2019-08-24T14:15:22Z",
- "mutabilityConstraint": "managed",
- "coin": "btc",
- "type": "advancedWhitelist",
- "condition": {
- "amountString": "2000000",
- "timeWindow": 2678400,
- "groupTags": [
- "59cd72485007a239fb00282ed480da1f"
], - "excludeTags": [
- "59cd72485007a239fb00282ed480da1f"
]
}, - "action": {
- "type": "deny",
- "approvalsRequired": 1,
- "userIds": [
- "59cd72485007a239fb00282ed480da1f"
]
}
}
], - "version": 0
}
}, - "allowBackupKeySigning": true,
- "approvalsRequired": 1,
- "balanceString": "50000",
- "buildDefaults": {
- "minFeeRate": 12000
}, - "coin": "btc",
- "coinSpecific": {
- "creationFailure": [
- "b8a828b98dbf32d9fd1875cbace9640ceb8c82626716b4a64203fdc79bb46d26"
], - "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": {
- "xlm": {
- "memoId": "2000000",
- "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM"
}, - "txlm": {
- "memoId": "2000000",
- "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM"
}
}, - "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"
}, - "recoverable": true,
- "tags": [
- "59cd72485007a239fb00282ed480da1f"
], - "spendableBalanceString": "40000",
- "startDate": "string",
- "type": "cold",
- "users": [
- {
- "user": "55e8a1a5df8380e0e30e20c6",
- "permissions": [
- "admin",
- "view",
- "spend"
]
}
], - "customChangeKeySignatures": {
- "user": "string",
- "backup": "string",
- "bitgo": "string"
}, - "multisigType": "onchain",
- "balance": 50000,
- "confirmedBalance": 40000,
- "confirmedBalanceString": "40000",
- "spendableBalance": 40000,
- "stakedBalance": 40000,
- "stakedBalanceString": "40000",
- "tokens": {
- "property1": {
- "balanceString": "30000",
- "confirmedBalanceString": "20000",
- "heldBalanceString": "10000",
- "spendableBalanceString": "20000",
- "stakedBalanceString": "20000",
- "transferCount": 100
}, - "property2": {
- "balanceString": "30000",
- "confirmedBalanceString": "20000",
- "heldBalanceString": "10000",
- "spendableBalanceString": "20000",
- "stakedBalanceString": "20000",
- "transferCount": 100
}
}, - "unsupportedTokens": {
- "property1": {
- "balanceString": "30000",
- "confirmedBalanceString": "20000",
- "heldBalanceString": "10000",
- "spendableBalanceString": "20000",
- "stakedBalanceString": "20000",
- "transferCount": 100
}, - "property2": {
- "balanceString": "30000",
- "confirmedBalanceString": "20000",
- "heldBalanceString": "10000",
- "spendableBalanceString": "20000",
- "stakedBalanceString": "20000",
- "transferCount": 100
}
}
}
Update a wallet by its coin
and walletId
.
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
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) |
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. |
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" |
{- "approvalsRequired": 1,
- "buildDefaults": {
- "minFeeRate": 12000
}, - "disableTransactionNotifications": true,
- "label": "My Wallet",
- "customChangeKeySignatures": {
- "user": "string",
- "backup": "string",
- "bitgo": "string"
}, - "coinSpecific": {
- "eth": {
- "deployForwardersManually": true,
- "flushForwardersManually": true
}, - "teth": {
- "deployForwardersManually": true,
- "flushForwardersManually": true
}
}
}
{- "admin": {
- "policy": {
- "id": "59cd72485007a239fb00282ed480da1f",
- "date": "2019-08-24T14:15:22Z",
- "label": "string",
- "latest": true,
- "rules": [
- {
- "id": "string",
- "lockDate": "2019-08-24T14:15:22Z",
- "mutabilityConstraint": "managed",
- "coin": "btc",
- "type": "advancedWhitelist",
- "condition": {
- "amountString": "2000000",
- "timeWindow": 2678400,
- "groupTags": [
- "59cd72485007a239fb00282ed480da1f"
], - "excludeTags": [
- "59cd72485007a239fb00282ed480da1f"
]
}, - "action": {
- "type": "deny",
- "approvalsRequired": 1,
- "userIds": [
- "59cd72485007a239fb00282ed480da1f"
]
}
}
], - "version": 0
}
}, - "allowBackupKeySigning": true,
- "approvalsRequired": 1,
- "balanceString": "string",
- "buildDefaults": {
- "minFeeRate": 12000
}, - "coin": "btc",
- "coinSpecific": {
- "creationFailure": [
- "b8a828b98dbf32d9fd1875cbace9640ceb8c82626716b4a64203fdc79bb46d26"
], - "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": {
- "xlm": {
- "memoId": "2000000",
- "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM"
}, - "txlm": {
- "memoId": "2000000",
- "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM"
}
}, - "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"
}, - "recoverable": true,
- "tags": [
- "59cd72485007a239fb00282ed480da1f"
], - "spendableBalanceString": "string",
- "startDate": "string",
- "type": "cold",
- "users": [
- {
- "user": "55e8a1a5df8380e0e30e20c6",
- "permissions": [
- "admin",
- "view",
- "spend"
]
}
], - "customChangeKeySignatures": {
- "user": "string",
- "backup": "string",
- "bitgo": "string"
}, - "multisigType": "onchain"
}
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.
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
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. |
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" |
{- "admin": {
- "policy": {
- "id": "59cd72485007a239fb00282ed480da1f",
- "date": "2019-08-24T14:15:22Z",
- "label": "string",
- "latest": true,
- "rules": [
- {
- "id": "string",
- "lockDate": "2019-08-24T14:15:22Z",
- "mutabilityConstraint": "managed",
- "coin": "btc",
- "type": "advancedWhitelist",
- "condition": {
- "amountString": "2000000",
- "timeWindow": 2678400,
- "groupTags": [
- "59cd72485007a239fb00282ed480da1f"
], - "excludeTags": [
- "59cd72485007a239fb00282ed480da1f"
]
}, - "action": {
- "type": "deny",
- "approvalsRequired": 1,
- "userIds": [
- "59cd72485007a239fb00282ed480da1f"
]
}
}
], - "version": 0
}
}, - "allowBackupKeySigning": true,
- "approvalsRequired": 1,
- "balanceString": "string",
- "buildDefaults": {
- "minFeeRate": 12000
}, - "coin": "btc",
- "coinSpecific": {
- "creationFailure": [
- "b8a828b98dbf32d9fd1875cbace9640ceb8c82626716b4a64203fdc79bb46d26"
], - "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": {
- "xlm": {
- "memoId": "2000000",
- "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM"
}, - "txlm": {
- "memoId": "2000000",
- "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM"
}
}, - "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"
}, - "recoverable": true,
- "tags": [
- "59cd72485007a239fb00282ed480da1f"
], - "spendableBalanceString": "string",
- "startDate": "string",
- "type": "cold",
- "users": [
- {
- "user": "55e8a1a5df8380e0e30e20c6",
- "permissions": [
- "admin",
- "view",
- "spend"
]
}
], - "customChangeKeySignatures": {
- "user": "string",
- "backup": "string",
- "bitgo": "string"
}, - "multisigType": "onchain"
}
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.
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 |
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. |
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" |
bitgo .coin('tbtc') .wallets() .get({ id: walletId }) .then(function (wallet) { wallet.removeUser({ user: userId }).then(function (wallet) { console.dir(wallet); }); });
{- "admin": {
- "policy": {
- "id": "59cd72485007a239fb00282ed480da1f",
- "date": "2019-08-24T14:15:22Z",
- "label": "string",
- "latest": true,
- "rules": [
- {
- "id": "string",
- "lockDate": "2019-08-24T14:15:22Z",
- "mutabilityConstraint": "managed",
- "coin": "btc",
- "type": "advancedWhitelist",
- "condition": {
- "amountString": "2000000",
- "timeWindow": 2678400,
- "groupTags": [
- "59cd72485007a239fb00282ed480da1f"
], - "excludeTags": [
- "59cd72485007a239fb00282ed480da1f"
]
}, - "action": {
- "type": "deny",
- "approvalsRequired": 1,
- "userIds": [
- "59cd72485007a239fb00282ed480da1f"
]
}
}
], - "version": 0
}
}, - "allowBackupKeySigning": true,
- "approvalsRequired": 1,
- "balanceString": "string",
- "buildDefaults": {
- "minFeeRate": 12000
}, - "coin": "btc",
- "coinSpecific": {
- "creationFailure": [
- "b8a828b98dbf32d9fd1875cbace9640ceb8c82626716b4a64203fdc79bb46d26"
], - "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": {
- "xlm": {
- "memoId": "2000000",
- "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM"
}, - "txlm": {
- "memoId": "2000000",
- "rootAddress": "GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM"
}
}, - "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"
}, - "recoverable": true,
- "tags": [
- "59cd72485007a239fb00282ed480da1f"
], - "spendableBalanceString": "string",
- "startDate": "string",
- "type": "cold",
- "users": [
- {
- "user": "55e8a1a5df8380e0e30e20c6",
- "permissions": [
- "admin",
- "view",
- "spend"
]
}
], - "customChangeKeySignatures": {
- "user": "string",
- "backup": "string",
- "bitgo": "string"
}, - "multisigType": "onchain"
}
Lock the wallet, preventing any outgoing transactions for a specified number of seconds
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
duration | number time in seconds |
time | string <date-time> When the freeze started |
expires | string <date-time> When the freeze will end |
{- "duration": 0
}
{- "time": "2019-08-24T14:15:22Z",
- "expires": "2019-08-24T14:15:22Z"
}
Returns unspent transaction outputs for a wallet
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
limit | integer [ 1 .. 500 ] Default: 25 Maximum number of results to return. If the result set is truncated, use the |
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 | boolean Enforces |
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 |
segwit | boolean DEPRECATED. Mutually exclusive with |
coin | string (Coin) A cryptocurrency or token ticker symbol. |
Array of objects (Unspent) [ items ] |
wallet.unspents().then(function (unspents) { // print unspents console.dir(unspents); });
{- "coin": "btc",
- "unspents": [
- {
- "id": "003f688cc349f1fca8ac5ffa21671ca911b6ef351085c60733ed8c2ebf162cb8:2",
- "address": "2MsKxhhkDo5WaLaYRGA9Cr3iSQPyXsu6Fi2",
- "value": 0,
- "valueString": "2000000",
- "blockHeight": 0,
- "date": "2017-03-25T23:01:40.248Z",
- "coinbase": true,
- "wallet": "59cd72485007a239fb00282ed480da1f",
- "fromWallet": "59cd72485007a239fb00282ed480da1f",
- "chain": 0,
- "index": 0,
- "redeemScript": "522102f1e990044d2a8be43d5b500bbdcb36277b97a4b07e01c5101ae8ec1568bfd6532103dab7dc82f2fc8c28200c1bdeca9c4cf181e0ca257395829cbd599395048afb57210205422e711827d8356f2fb75334d863941dd7eb45bd5788fa231dc5fa755135b653ae",
- "witnessScript": "52210351311cd81144e6cbdba561d24dfc22644cb02d053339d4beace03231b3be4f372103a8d0c1a375b9ee1a2411f9f8e18373be7f228b18260f63bbfca48809170ed08b2103c3bd8bd074657bbe9ee6714b31a4a54b6fd5b5cda0e1030122f9bf46b5034f6b53ae",
- "isSegwit": true
}
]
}
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.
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
allTokens | boolean Example: allTokens=true Include data for all subtokens (i.e. ERC20 Tokens, Stellar Tokens) |
enforceMinConfirmsForChange | boolean Enforces |
feeRate | integer >= 0 |
limit | integer [ 1 .. 500 ] Default: 25 Maximum number of results to return. If the result set is truncated, use the |
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 |
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 |
coin | string (Coin) A cryptocurrency or token ticker symbol. |
maximumSpendable | string |
wallet.maximumSpendable(params).then(function (amount) { // print maximum spendable amount console.dir(amount); });
{- "coin": "btc",
- "maximumSpendable": "19948310"
}
Returns the wallet's currently configured spending limits and the current amount spent during the periods defined by the spending limits.
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
Array of objects[ items ] |
{- "velocityLimitSpending": [
- {
- "coin": "btc",
- "timeWindow": "3600",
- "limitAmountString": "1000000",
- "amountSpentString": "148310"
}
]
}
Mark the unspents as reserved and cannot be used in transactions until the given expire time.
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
unspentIds required | Array of strings (UnspentId) non-empty |
expireTime required | string <date-time> |
Array of objects (ReservedUnspent) [ items ] |
{- "unspentIds": [
- "003f688cc349f1fca8ac5ffa21671ca911b6ef351085c60733ed8c2ebf162cb8:2"
], - "expireTime": "2019-08-24T14:15:22Z"
}
{- "unspents": [
- {
- "id": "003f688cc349f1fca8ac5ffa21671ca911b6ef351085c60733ed8c2ebf162cb8:2",
- "walletId": "59cd72485007a239fb00282ed480da1f",
- "expireTime": "2019-08-24T14:15:22Z",
- "userId": "59cd72485007a239fb00282ed480da1f"
}
]
}
Release unspents from reservation to be accessible for transactions.
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
id required | Array of strings (UnspentId) Example: id=003f688cc349f1fca8ac5ffa21671ca911b6ef351085c60733ed8c2ebf162cb8:2 |
Array of objects (ReservedUnspent) [ items ] |
{- "unspents": [
- {
- "id": "003f688cc349f1fca8ac5ffa21671ca911b6ef351085c60733ed8c2ebf162cb8:2",
- "walletId": "59cd72485007a239fb00282ed480da1f",
- "expireTime": "2019-08-24T14:15:22Z",
- "userId": "59cd72485007a239fb00282ed480da1f"
}
]
}
Query reserved unspents in the wallet.
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
prevId | string |
limit | integer [ 1 .. 500 ] Default: 25 Maximum number of results to return. If the result set is truncated, use the |
expireTimeGt | string <date-time> |
expireTimeLte | string <date-time> |
Array of objects (ReservedUnspent) [ items ] | |
nextBatchPrevId | string |
{- "unspents": [
- {
- "id": "003f688cc349f1fca8ac5ffa21671ca911b6ef351085c60733ed8c2ebf162cb8:2",
- "walletId": "59cd72485007a239fb00282ed480da1f",
- "expireTime": "2019-08-24T14:15:22Z",
- "userId": "59cd72485007a239fb00282ed480da1f"
}
], - "nextBatchPrevId": "string"
}
Modify expire time of reserved unspents.
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
unspentIds required | Array of strings (UnspentId) non-empty |
required | object |
Array of objects (ReservedUnspent) [ items ] |
{- "unspentIds": [
- "003f688cc349f1fca8ac5ffa21671ca911b6ef351085c60733ed8c2ebf162cb8:2"
], - "changes": {
- "expireTime": "2019-08-24T14:15:22Z"
}
}
{- "unspents": [
- {
- "id": "003f688cc349f1fca8ac5ffa21671ca911b6ef351085c60733ed8c2ebf162cb8:2",
- "walletId": "59cd72485007a239fb00282ed480da1f",
- "expireTime": "2019-08-24T14:15:22Z",
- "userId": "59cd72485007a239fb00282ed480da1f"
}
]
}
Selects wallets based on the given filter parameters. Gets all balances for the selected wallets and sums up the balances by coin.
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 |
Array of objects[ items ] |
{- "balances": [
- {
- "balanceString": "string",
- "coin": "btc"
}
]
}
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.
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
numBlocks | integer [ 2 .. 1000 ] (BTC only) Used to estimate the fee rate by targeting confirmation within the given number of blocks. If neither |
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 | |
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. | |
string or number Custom multiplier for fee rate. Suggested to be used in conjunction with | |
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 | 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 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 |
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 |
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 Also see: |
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 |
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 |
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. |
strategy | string <= 20 characters Optional unspent selection strategy to use. One of |
validFromBlock | integer Optional block this transaction is valid from |
validToBlock | integer Optional block this transaction is valid until |
type | string transaction type (e.g., |
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 |
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. |
keyDerivationPath | 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": [
- {
- "token": "txlm:BST-GBQTIOS3XGHB7LVYGBKQVJGCZ3R4JL5E4CBSWJ5ALIJUHBKS6263644L",
- "action": "add",
- "limit": "2000000"
}
], - "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": [
- {
- "amount": "string",
- "address": "string",
- "memo": "string"
}
]
}
{- "keyDerivationPath": "string"
}
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.
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
numBlocks | integer [ 2 .. 1000 ] (BTC only) Used to estimate the fee rate by targeting confirmation within the given number of blocks. If neither |
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 | |
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. | |
string or number Custom multiplier for fee rate. Suggested to be used in conjunction with | |
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 | 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 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 |
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 |
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 Also see: |
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 |
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 |
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. |
strategy | string <= 20 characters Optional unspent selection strategy to use. One of |
validFromBlock | integer Optional block this transaction is valid from |
validToBlock | integer Optional block this transaction is valid until |
type | string transaction type (e.g., |
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 |
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. |
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 |
{- "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": [
- {
- "token": "txlm:BST-GBQTIOS3XGHB7LVYGBKQVJGCZ3R4JL5E4CBSWJ5ALIJUHBKS6263644L",
- "action": "add",
- "limit": "2000000"
}
], - "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": [
- {
- "amount": "string",
- "address": "string",
- "memo": "string"
}
], - "videoApprovers": [
- "59cd72485007a239fb00282ed480da1f"
]
}
{- "id": "59cd72485007a239fb00282ed480da1f",
- "coin": "btc",
- "wallet": "59cd72485007a239fb00282ed480da1f",
- "enterprise": "59cd72485007a239fb00282ed480da1f",
- "creator": "59cd72485007a239fb00282ed480da1f",
- "createDate": "2019-08-24T14:15:22Z",
- "info": {
- "transactionRequest": {
- "buildParams": { },
- "coinSpecific": { },
- "comment": "string",
- "fee": "2000000",
- "isUnsigned": true,
- "recipients": [
- {
- "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
- "amount": "2000000",
- "data": "string"
}
], - "requestedAmount": "2000000",
- "sourceWallet": "59cd72485007a239fb00282ed480da1f",
- "triggeredPolicy": "59cd72485007a239fb00282ed480da1f",
- "validTransaction": "string",
- "validTransactionHash": "string"
}, - "type": "transactionRequest"
}, - "state": "pending",
- "scope": "enterprise",
- "userIds": [
- "59cd72485007a239fb00282ed480da1f"
], - "approvalsRequired": 1,
- "walletLabel": "string"
}
Send a half-signed transaction from the specified wallet. Instead of this endpoint, you likely want to use send transaction in the SDK.
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
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 |
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 | |
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. | |
string or number Custom multiplier for fee rate. Suggested to be used in conjunction with | |
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 | 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 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 |
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 Also see: |
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 |
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 |
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. |
strategy | string <= 20 characters Optional unspent selection strategy to use. One of |
validFromBlock | integer Optional block this transaction is valid from |
validToBlock | integer Optional block this transaction is valid until |
type | string transaction type (e.g., |
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 |
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. |
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 |
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 |
{- "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": [
- {
- "token": "txlm:BST-GBQTIOS3XGHB7LVYGBKQVJGCZ3R4JL5E4CBSWJ5ALIJUHBKS6263644L",
- "action": "add",
- "limit": "2000000"
}
], - "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"
}
}
{- "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": [
- "59cd72485007a239fb00282ed480da1f"
], - "history": [
- {
- "date": "2019-08-24T14:15:22Z",
- "user": "59cd72485007a239fb00282ed480da1f",
- "action": "created",
- "comment": "string"
}
], - "comment": "string",
- "vSize": 0,
- "nSegwitInputs": 0,
- "coinSpecific": { },
- "sequenceId": "string",
- "entries": [
- {
- "address": "2NAUwNgXaoFj2VVnSEvNLGuez8CfdU2UCMZ",
- "wallet": "string",
- "value": 0,
- "valueString": "string",
- "isChange": true,
- "isPayGo": true,
- "token": "omg"
}
], - "usersNotified": true
}, - "txid": "string",
- "tx": "string",
- "status": "confirmed"
}
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.
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
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. |
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 |
{- "memo": {
- "type": "string",
- "value": "string"
}, - "comment": "string",
- "trustlines": [
- {
- "token": "txlm:BST-GBQTIOS3XGHB7LVYGBKQVJGCZ3R4JL5E4CBSWJ5ALIJUHBKS6263644L",
- "action": "add",
- "limit": "2000000"
}
]
}
{- "id": "59cd72485007a239fb00282ed480da1f",
- "coin": "btc",
- "wallet": "59cd72485007a239fb00282ed480da1f",
- "enterprise": "59cd72485007a239fb00282ed480da1f",
- "creator": "59cd72485007a239fb00282ed480da1f",
- "createDate": "2019-08-24T14:15:22Z",
- "info": {
- "transactionRequest": {
- "buildParams": { },
- "coinSpecific": { },
- "comment": "string",
- "fee": "2000000",
- "isUnsigned": true,
- "recipients": [
- {
- "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
- "amount": "2000000",
- "data": "string"
}
], - "requestedAmount": "2000000",
- "sourceWallet": "59cd72485007a239fb00282ed480da1f",
- "triggeredPolicy": "59cd72485007a239fb00282ed480da1f",
- "validTransaction": "string",
- "validTransactionHash": "string"
}, - "type": "transactionRequest"
}, - "state": "pending",
- "scope": "enterprise",
- "userIds": [
- "59cd72485007a239fb00282ed480da1f"
], - "approvalsRequired": 1,
- "walletLabel": "string"
}
Returns information about reserve requirements for an account. Currently only available for Stellar.
coin required | string Enum: "txlm" "xlm" "tcspr" "cspr" |
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 |
{- "baseFee": "100",
- "baseReserve": "5000000",
- "reserve": "25000000",
- "minimumFunding": "25000500",
- "height": 11228504
}
Returns staking information about validator and staked amount for the current wallet. Currently only available for Casper and Stacks.
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
address | string (AddressString) <= 250 characters |
Array of objects[ items ] |
[- {
- "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
- "balances": [
- {
- "validator": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
- "staked_amount": "5000000000"
}
]
}
]
Returns staking information receiving address and the total rewards received for the current wallet. Currently only available for Stacks.
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
address | string (AddressString) <= 250 characters |
Array of objects[ items ] |
[- {
- "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
- "rewards": [
- {
- "reward_recipient": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS",
- "reward_amount": "5000000000"
}
]
}
]
Resends the wallet share invitation to the share recipient. The wallet share must not have been accepted yet.
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
shareId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
resent | boolean |
bitgo .coin('tbtc') .wallets() .resendShareInvite({ walletShareId: shareId }) .then(function (share) { console.dir(share); });
{- "resent": true
}
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 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:
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.
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
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. |
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 |
{- "type": "transfer",
- "allToken": false,
- "label": "string",
- "numConfirmations": 6,
- "listenToFailureStates": true
}
{- "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 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.
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
Array of objects[ items ] |
var walletId = '58d99…39604'; bitgo .coin('tbtc') .wallets() .get({ id: walletId }) .then(function (wallet) { return wallet.listWebhooks(); }) .then(function (webhooks) { console.dir(webhooks); });
{- "webhooks": [
- {
- "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,
- "walletId": "59cd72485007a239fb00282ed480da1f",
- "allToken": false
}
]
}
Removing a webhook will cause new events of the specified type to no longer trigger HTTP callbacks to your URLs
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
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}$ |
removed | integer Number of wallet webhooks removed. |
{- "type": "transfer",
- "id": "59cd72485007a239fb00282ed480da1f"
}
{- "removed": 1
}
Simulates and tests a webhook so you can view its response. A
transferId
or pendingApprovalId
is required.
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 |
transferId | string (Id) ^[0-9a-f]{32}$ |
pendingApprovalId | string (Id) ^[0-9a-f]{32}$ |
Array of objects[ items ] |
{- "transferId": "59cd72485007a239fb00282ed480da1f",
- "pendingApprovalId": "59cd72485007a239fb00282ed480da1f"
}
{- "webhookNotifications": [
- {
- "wallet": "59cd72485007a239fb00282ed480da1f",
- "transfer": "59cd72485007a239fb00282ed480da1f",
- "hash": "b8a828b98dbf32d9fd1875cbace9640ceb8c82626716b4a64203fdc79bb46d26",
- "id": "59cd72485007a239fb00282ed480da1f",
- "webhook": "59cd72485007a239fb00282ed480da1f",
- "updateAt": "2018-05-05T19:46:22.019Z",
- "coin": "btc",
- "type": "transfer",
- "version": 2,
- "state": "new"
}
]
}
Adds a webhook that will result in an HTTP callback at the specified URL from BitGo when events are triggered.
Types of block webhooks:
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
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. |
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 |
{- "type": "block",
- "label": "string",
- "numConfirmations": 6
}
{- "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
}
Returns block webhooks. The types of webhooks are block
and
wallet_confirmation
notifications.
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
Array of objects[ items ] |
var baseCoin = bitgo.coin('tbtc'); var webhooks = baseCoin.webhooks(); webhooks.list().then(function (result) { console.dir(result); });
{- "webhooks": [
- {
- "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
}
]
}
Removing a webhook will cause new events of the specified type to no longer trigger HTTP callbacks to your URLs.
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
type required | string (WebhookTypeBlock) Enum: "block" "wallet_confirmation" |
url required | string <uri> |
id | string (Id) ^[0-9a-f]{32}$ |
removed | integer Number of block webhooks removed. |
{- "type": "block",
- "id": "59cd72485007a239fb00282ed480da1f"
}
{- "removed": 1
}
Simulates and tests a block webhook so you can view its response.
coin required | string (Coin) Example: btc A cryptocurrency or token ticker symbol. |
webhookId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
blockId | string (BlockHash) |
Array of objects[ items ] |
{- "blockId": "0000000000000296ed56abee6cb78e40b00c47a03d92e71dd92c4862ca636b95"
}
{- "webhookNotifications": [
- {
- "hash": "0000000000000296ed56abee6cb78e40b00c47a03d92e71dd92c4862ca636b95",
- "id": "59cd72485007a239fb00282ed480da1f",
- "webhook": "59cd72485007a239fb00282ed480da1f",
- "updateAt": "2018-05-05T19:46:22.019Z",
- "coin": "btc",
- "type": "transfer",
- "version": 2,
- "state": "new"
}
]
}
API to create, retrieve staking requests, and retrieve staking request transactions. A staking request can be of type STAKE or UNSTAKE
Create a Staking Request of type STAKE or UNSTAKE.
coin required | string The coin to be staked (ETH, NEAR, SOL). |
walletId required | string The wallet id |
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' |
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 |
{- "clientId": "e055adbc-66a3-4ccd-9a9d-726a05bca0cf",
- "amount": 64000000000000000000,
- "gasPrice": 1000000000000000,
- "type": "STAKE"
}
{- "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.
coin required | string The coin to be staked (ETH, NEAR, SOL). |
walletId required | string The wallet id |
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 |
{- "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": [
- {
- "id": "e0225adbc-66a3-4ccd-9a9d-726a05bca0cf",
- "delegationAddress": "0x5a6406c9710f588ca733360bfa8033d0ef9ecdy5",
- "withdrawalAddress": "0x5a6406c9710f588ca733360bfa8033d0ef9ecd7c",
- "delegated": 3200000000000000000,
- "status": "PENDING",
- "rewards": 0,
- "pendingUnstake": 3200000000000000000,
- "apy": 8.3,
- "coin": "eth",
- "walletId": "2032e75g451052000636831abd797bd3",
- "unstakingFee": 100000000000000,
- "unstakingMin": 0
}, - {
- "id": "e0225adbc-55b43-5tta-9a9d-726a05bca0ai",
- "delegationAddress": "0x3b6406c9710f588ca733360bfa8033d0ef9ecre4",
- "withdrawalAddress": "0x5a6406c9710f588ca733360bfa8033d0ef9ecd7c",
- "delegated": 3200000000000000000,
- "status": "PENDING",
- "rewards": 0,
- "pendingUnstake": 3200000000000000000,
- "apy": 8.3,
- "coin": "eth",
- "walletId": "2032e75g451052000636831abd797bd3",
- "unstakingFee": 1000000000000000,
- "unstakingMin": 0
}
], - "transactions": [
- {
- "id": "d0355adbc-55b43-5tta-9a9d-726a05bca0ai",
- "stakingRequestId": "e055adbc-66a3-4ccd-9a9d-726a05bca0cf",
- "createdDate": "2022-01-10T14:32:28Z",
- "statusModifiedDate": "2022-01-10T14:32:28Z",
- "status": "PENDING",
- "amount": 3200000000000000000,
- "transactionType": "delegate",
- "delegationId": "e0225adbc-66a3-4ccd-9a9d-726a05bca0cf",
- "buildParams": {
- "recipients": {
- "amount": 3200000000000000000,
- "address": "0xff50ed3d0ec03aC01D4C79aAd74928BFF48a7b2b",
- "data": "fds0934rnnio390nw"
}, - "stakingParams": {
- "requestId": "e055adbc-66a3-4ccd-9a9d-726a05bca0cf",
- "amount": 3200000000000000000,
- "validator": "0x5a6406c9710f588ca733360bfa8033d0ef9ecdy5",
- "actionType": "delegate"
}, - "gasPrice": 1000000000000000,
- "gasLimit": 3000000000000000
}
}, - {
- "id": "i0500adbc-55b43-5tta-9a9d-726a05bca0op",
- "stakingRequestId": "e055adbc-66a3-4ccd-9a9d-726a05bca0cf",
- "createdDate": "2022-01-10T14:32:28Z",
- "statusModifiedDate": "2022-01-10T14:32:28Z",
- "status": "PENDING",
- "amount": 3200000000000000000,
- "transactionType": "delegate",
- "delegationId": "e0225adbc-55b43-5tta-9a9d-726a05bca0ai",
- "buildParams": {
- "recipients": {
- "amount": 3200000000000000000,
- "address": "0xff50ed3d0ec03aC01D4C79aAd74928BFF48a7b2b",
- "data": "fds0934rnnio390nw"
}, - "stakingParams": {
- "requestId": "e055adbc-66a3-4ccd-9a9d-726a05bca0cf",
- "amount": 3200000000000000000,
- "validator": "0x3b6406c9710f588ca733360bfa8033d0ef9ecre4",
- "actionType": "delegate"
}, - "gasPrice": 1000000000000000,
- "gasLimit": 3000000000000000
}
}
], - "amount": 6400000000000000000,
- "gasPrice": 1000000000000000
}
Retrieve A Specific Staking Request.
stakingRequestId required | string The id for the staking request |
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 |
{- "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": [
- {
- "id": "e0225adbc-66a3-4ccd-9a9d-726a05bca0cf",
- "delegationAddress": "0x5a6406c9710f588ca733360bfa8033d0ef9ecdy5",
- "withdrawalAddress": "0x5a6406c9710f588ca733360bfa8033d0ef9ecd7c",
- "delegated": 3200000000000000000,
- "status": "PENDING",
- "rewards": 0,
- "pendingUnstake": 3200000000000000000,
- "apy": 8.3,
- "coin": "eth",
- "walletId": "2032e75g451052000636831abd797bd3",
- "unstakingFee": 100000000000000,
- "unstakingMin": 0
}, - {
- "id": "e0225adbc-55b43-5tta-9a9d-726a05bca0ai",
- "delegationAddress": "0x3b6406c9710f588ca733360bfa8033d0ef9ecre4",
- "withdrawalAddress": "0x5a6406c9710f588ca733360bfa8033d0ef9ecd7c",
- "delegated": 3200000000000000000,
- "status": "PENDING",
- "rewards": 0,
- "pendingUnstake": 3200000000000000000,
- "apy": 8.3,
- "coin": "eth",
- "walletId": "2032e75g451052000636831abd797bd3",
- "unstakingFee": 1000000000000000,
- "unstakingMin": 0
}
], - "transactions": [
- {
- "id": "d0355adbc-55b43-5tta-9a9d-726a05bca0ai",
- "stakingRequestId": "e055adbc-66a3-4ccd-9a9d-726a05bca0cf",
- "createdDate": "2022-01-10T14:32:28Z",
- "statusModifiedDate": "2022-01-10T14:32:28Z",
- "status": "PENDING",
- "amount": 3200000000000000000,
- "transactionType": "delegate",
- "delegationId": "e0225adbc-66a3-4ccd-9a9d-726a05bca0cf",
- "buildParams": {
- "recipients": {
- "amount": 3200000000000000000,
- "address": "0xff50ed3d0ec03aC01D4C79aAd74928BFF48a7b2b",
- "data": "fds0934rnnio390nw"
}, - "stakingParams": {
- "requestId": "e055adbc-66a3-4ccd-9a9d-726a05bca0cf",
- "amount": 3200000000000000000,
- "validator": "0x5a6406c9710f588ca733360bfa8033d0ef9ecdy5",
- "actionType": "delegate"
}, - "gasPrice": 1000000000000000,
- "gasLimit": 3000000000000000
}
}, - {
- "id": "i0500adbc-55b43-5tta-9a9d-726a05bca0op",
- "stakingRequestId": "e055adbc-66a3-4ccd-9a9d-726a05bca0cf",
- "createdDate": "2022-01-10T14:32:28Z",
- "statusModifiedDate": "2022-01-10T14:32:28Z",
- "status": "PENDING",
- "amount": 3200000000000000000,
- "transactionType": "delegate",
- "delegationId": "e0225adbc-55b43-5tta-9a9d-726a05bca0ai",
- "buildParams": {
- "recipients": {
- "amount": 3200000000000000000,
- "address": "0xff50ed3d0ec03aC01D4C79aAd74928BFF48a7b2b",
- "data": "fds0934rnnio390nw"
}, - "stakingParams": {
- "requestId": "e055adbc-66a3-4ccd-9a9d-726a05bca0cf",
- "amount": 3200000000000000000,
- "validator": "0x3b6406c9710f588ca733360bfa8033d0ef9ecre4",
- "actionType": "delegate"
}, - "gasPrice": 1000000000000000,
- "gasLimit": 3000000000000000
}
}
], - "amount": 6400000000000000000,
- "gasPrice": 1000000000000000
}
Retrieve staking requests and staking transactions for a given enterprise and query params.
enterpriseId required | string The enterprise id |
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) |
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 |
{- "page": 1,
- "totalPages": 1,
- "totalElements": 1,
- "requests": [
- {
- "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": [
- {
- "id": "e0225adbc-66a3-4ccd-9a9d-726a05bca0cf",
- "delegationAddress": "0x5a6406c9710f588ca733360bfa8033d0ef9ecdy5",
- "withdrawalAddress": "0x5a6406c9710f588ca733360bfa8033d0ef9ecd7c",
- "delegated": 3200000000000000000,
- "status": "PENDING",
- "rewards": 0,
- "pendingUnstake": 3200000000000000000,
- "apy": 8.3,
- "coin": "eth",
- "walletId": "2032e75g451052000636831abd797bd3",
- "unstakingFee": 100000000000000,
- "unstakingMin": 0
}, - {
- "id": "e0225adbc-55b43-5tta-9a9d-726a05bca0ai",
- "delegationAddress": "0x3b6406c9710f588ca733360bfa8033d0ef9ecre4",
- "withdrawalAddress": "0x5a6406c9710f588ca733360bfa8033d0ef9ecd7c",
- "delegated": 3200000000000000000,
- "status": "PENDING",
- "rewards": 0,
- "pendingUnstake": 3200000000000000000,
- "apy": 8.3,
- "coin": "eth",
- "walletId": "2032e75g451052000636831abd797bd3",
- "unstakingFee": 1000000000000000,
- "unstakingMin": 0
}
], - "transactions": [
- {
- "id": "d0355adbc-55b43-5tta-9a9d-726a05bca0ai",
- "stakingRequestId": "e055adbc-66a3-4ccd-9a9d-726a05bca0cf",
- "createdDate": "2022-01-10T14:32:28Z",
- "statusModifiedDate": "2022-01-10T14:32:28Z",
- "status": "PENDING",
- "amount": 3200000000000000000,
- "transactionType": "delegate",
- "delegationId": "e0225adbc-66a3-4ccd-9a9d-726a05bca0cf",
- "buildParams": {
- "recipients": {
- "amount": 3200000000000000000,
- "address": "0xff50ed3d0ec03aC01D4C79aAd74928BFF48a7b2b",
- "data": "fds0934rnnio390nw"
}, - "stakingParams": {
- "requestId": "e055adbc-66a3-4ccd-9a9d-726a05bca0cf",
- "amount": 3200000000000000000,
- "validator": "0x5a6406c9710f588ca733360bfa8033d0ef9ecdy5",
- "actionType": "delegate"
}, - "gasPrice": 1000000000000000,
- "gasLimit": 3000000000000000
}
}, - {
- "id": "i0500adbc-55b43-5tta-9a9d-726a05bca0op",
- "stakingRequestId": "e055adbc-66a3-4ccd-9a9d-726a05bca0cf",
- "createdDate": "2022-01-10T14:32:28Z",
- "statusModifiedDate": "2022-01-10T14:32:28Z",
- "status": "PENDING",
- "amount": 3200000000000000000,
- "transactionType": "delegate",
- "delegationId": "e0225adbc-55b43-5tta-9a9d-726a05bca0ai",
- "buildParams": {
- "recipients": {
- "amount": 3200000000000000000,
- "address": "0xff50ed3d0ec03aC01D4C79aAd74928BFF48a7b2b",
- "data": "fds0934rnnio390nw"
}, - "stakingParams": {
- "requestId": "e055adbc-66a3-4ccd-9a9d-726a05bca0cf",
- "amount": 3200000000000000000,
- "validator": "0x3b6406c9710f588ca733360bfa8033d0ef9ecre4",
- "actionType": "delegate"
}, - "gasPrice": 1000000000000000,
- "gasLimit": 3000000000000000
}
}
], - "amount": 6400000000000000000,
- "gasPrice": 1000000000000000
}
]
}
Use to act on a transaction like sending a transaction
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 |
object Half signed transaction object | |
comment | string |
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 |
{- "halfSigned": {
- "contractSequenceId": 0,
- "eip1559": {
- "maxPriorityFeePerGas": 0,
- "maxFeePerGas": 0
}, - "operationHash": "string",
- "expireTime": 0,
- "signature": "string"
}, - "comment": "string"
}
[- {
- "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": {
- "recipients": {
- "amount": 3200000000000000000,
- "address": "0xff50ed3d0ec03aC01D4C79aAd74928BFF48a7b2b",
- "data": "fds0934rnnio390nw"
}, - "stakingParams": {
- "requestId": "e055adbc-66a3-4ccd-9a9d-726a05bca0cf",
- "amount": 3200000000000000000,
- "validator": "0x5a6406c9710f588ca733360bfa8033d0ef9ecd7c",
- "actionType": "delegate"
}, - "gasPrice": 1000000000000000,
- "gasLimit": 3000000000000000
}
}
]
Retrieve staking wallet information like staking delegated balance, rewards accrued, and rewards accrual annual percentage rate.
coin required | string The coin to be staked (ETH, NEAR, SOL). |
walletId required | string The wallet id |
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 |
{- "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 delegation information.
coin required | string The coin to be staked (ETH, NEAR, SOL). |
walletId required | string The wallet id |
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) |
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 |
{- "page": 1,
- "totalPages": 1,
- "totalElements": 2,
- "delegations": [
- {
- "id": "e0225adbc-66a3-4ccd-9a9d-726a05bca0cf",
- "delegationAddress": "0x5a6406c9710f588ca733360bfa8033d0ef9ecdy5",
- "withdrawalAddress": "0x5a6406c9710f588ca733360bfa8033d0ef9ecd7c",
- "delegated": 3200000000000000000,
- "status": "ACTIVE",
- "rewards": 0,
- "pendingUnstake": 3200000000000000000,
- "apy": 8.3,
- "coin": "eth",
- "walletId": "2032e75g451052000636831abd797bd3",
- "unstakingFee": 100000000000000,
- "unstakingMin": 0
}, - {
- "id": "e0225adbc-55b43-5tta-9a9d-726a05bca0ai",
- "delegationAddress": "0x3b6406c9710f588ca733360bfa8033d0ef9ecre4",
- "withdrawalAddress": "0x5a6406c9710f588ca733360bfa8033d0ef9ecd7c",
- "delegated": 3200000000000000000,
- "status": "ACTIVE",
- "rewards": 0,
- "pendingUnstake": 0,
- "apy": 8.3,
- "coin": "eth",
- "walletId": "2032e75g451052000636831abd797bd3",
- "unstakingFee": 1000000000000000,
- "unstakingMin": 0
}
]
}
Retrieve staking staking information like staking delegated balance, rewards accrued, and rewards accrual annual percentage rate.
coin required | string The coin to be staked (ETH, NEAR, SOL). |
enterpriseId required | string The enterprise id representing the enterprise a user staked from |
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) |
{- "enterpriseId": "1032e75c451052000436831deb797af1",
- "coin": "eth",
- "delegated": 6400000000000000000,
- "rewards": 1000000000000000,
- "apy": 8.2
}
Retrieve Staking Wallet State Attribute Information.
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. |
object (WalletStakingSpendableAttributes) | |
object (WalletStakingPermissionAttributes) | |
object (WalletStakingDisclaimerAttributes) |
{- "spendableAttributes": {
- "stakingSpendableAttributes": {
- "max": 0,
- "min": 0,
- "fee": 0,
- "netMax": 0,
- "netMin": null
}, - "unstakingSpendableAttributes": {
- "max": 0,
- "min": 0,
- "fee": 0,
- "multipleDelegations": true
}
}, - "permissionAttributes": {
- "walletPermissionAttributes": {
- "hasEnoughAdmins": true,
- "numberOfRequiredAdmin": 0
}, - "stakingPermissionAttributes": {
- "enabled": "string",
- "disabledReason": "string"
}, - "unstakingPermissionAttributes": {
- "enabled": "string",
- "disabledReason": "string"
}
}, - "disclaimerAttributes": {
- "stakingDisclaimerAttributes": {
- "info": "string",
- "transactionsNeeded": 0
}, - "unstakingDisclaimerAttributes": {
- "info": "string",
- "transactionsNeeded": 0
}
}
}
Retrieve staking staking reward history.
coin required | string The coin to be staked (ETH, NEAR, SOL). |
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) |
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 |
{- "rewards": [
- {
- "reward": 1000000000000000,
- "enterpriseId": "1032e75c451052000436831deb797af1",
- "date": "2022-01-10T14:32:28Z"
}
], - "nextBatchPrevDate": "2022-01-11T14:32:28Z"
}
Retrieve staking delegation accrual history.
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. |
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) |
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 |
{- "accruals": [
- {
- "rewardsReceived": 0,
- "delegated": 0,
- "pendingDelegated": 0,
- "pendingUndelegated": 0,
- "spendable": 0,
- "locked": 0,
- "delegationId": "string",
- "delegationAddress": "string",
- "withdrawalAddress": "string",
- "walletId": "string",
- "enterpriseId": "string",
- "coin": "string",
- "date": "2019-08-24T14:15:22Z"
}
], - "page": 0,
- "totalPages": 0,
- "totalElements": 0
}
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.
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
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. |
object (Transfer) | |
status | string (TransferState) Enum: "signed" "unconfirmed" "confirmed" "pendingApproval" "removed" "failed" "rejected" The status of this Transfer |
{- "value": 50000000,
- "destination": "bc1q2la002q4rylgx9luzlv7dyr5ykeh0n46xnf02w",
- "sequenceId": "string"
}
{- "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": [
- "59cd72485007a239fb00282ed480da1f"
], - "history": [
- {
- "date": "2019-08-24T14:15:22Z",
- "user": "59cd72485007a239fb00282ed480da1f",
- "action": "created",
- "comment": "string"
}
], - "comment": "string",
- "vSize": 0,
- "nSegwitInputs": 0,
- "coinSpecific": { },
- "sequenceId": "string",
- "entries": [
- {
- "address": "2NAUwNgXaoFj2VVnSEvNLGuez8CfdU2UCMZ",
- "wallet": "string",
- "value": 0,
- "valueString": "string",
- "isChange": true,
- "isPayGo": true,
- "token": "omg"
}
], - "usersNotified": true
}, - "status": "confirmed"
}
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.
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
address | string (AddressString) <= 250 characters |
{- "address": "2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS"
}
This API call is used to fetch previously created lightning invoices associated with a given walletId.
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
status | string The status of lightning invoices to search for |
limit | number [ 1 .. 500 ] Limit the number of search results. Default 25 |
Array of objects[ items ] |
{- "invoices": [
- {
- "paymentHash": "63d9ce82e09d16761a85116ed8b65407db4fb22f85d03573de09c480f2c6d175",
- "value": 50000,
- "expiresAt": "2022-04-01T18:46:24.677Z",
- "createdAt": "2022-04-01T17:46:24.677Z",
- "updatedAt": "2022-04-01T18:16:24.677Z",
- "status": "open",
- "walletId": "59cd72485007a239fb00282ed480da1f",
- "amtPaidSats": 50000
}
]
}
This API call is used to create a new lightning invoice which can be used for requesting and receiving payments over the lightning network.
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
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 |
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}$ |
{- "value": 50000,
- "memo": "Latte macchiato",
- "expiry": 3600
}
{- "invoice": "lnbc500n1p3zv5vkpp5x0thcaz8wep54clc2xt5895azjdzmthyskzzh9yslggy74qtvl6sdpdg3hkuct5d9hkugrxdaezqjn0dphk2fmnypkk2mtsdahkccqzpgxqyz5vqsp5v80q4vq4pwakq2l0hcqgtelgajsymv4ud4jdcrqtnzhvet55qlus9qyyssquqh2wl2m866qs5n72c5vg6wmqx9vzwhs5ypualq4mcu76h2tdkcq3jtjwtggfff7xwtdqxlnwqk8cxpzryjghrmmq3syraswp9vjr7cqry9l96",
- "paymentHash": "63d9ce82e09d16761a85116ed8b65407db4fb22f85d03573de09c480f2c6d175",
- "value": 50000,
- "memo": "Latte macchiato",
- "expiresAt": "2022-04-01T18:46:24.677Z",
- "status": "open",
- "walletId": "59cd72485007a239fb00282ed480da1f"
}
Get the custodial lightning balance for the wallet.
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
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. |
{- "balance": 25000000,
- "availableBalance": 24000000
}
Send a lightning payment that pays a provided payment request using the wallet's custodial lightning balance.
walletId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
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. |
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.. |
{- "comment": "string",
- "sequenceId": "string",
- "feeLimitRatio": 0.03,
- "feeLimit": 200,
- "invoice": "lnbc500n1p3zv5vkpp5x0thcaz8wep54clc2xt5895azjdzmthyskzzh9yslggy74qtvl6sdpdg3hkuct5d9hkugrxdaezqjn0dphk2fmnypkk2mtsdahkccqzpgxqyz5vqsp5v80q4vq4pwakq2l0hcqgtelgajsymv4ud4jdcrqtnzhvet55qlus9qyyssquqh2wl2m866qs5n72c5vg6wmqx9vzwhs5ypualq4mcu76h2tdkcq3jtjwtggfff7xwtdqxlnwqk8cxpzryjghrmmq3syraswp9vjr7cqry9l96",
- "amount": 0
}
{- "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": [
- "59cd72485007a239fb00282ed480da1f"
], - "history": [
- {
- "date": "2019-08-24T14:15:22Z",
- "user": "59cd72485007a239fb00282ed480da1f",
- "action": "created",
- "comment": "string"
}
], - "comment": "string",
- "vSize": 0,
- "nSegwitInputs": 0,
- "coinSpecific": { },
- "sequenceId": "string",
- "entries": [
- {
- "address": "2NAUwNgXaoFj2VVnSEvNLGuez8CfdU2UCMZ",
- "wallet": "string",
- "value": 0,
- "valueString": "string",
- "isChange": true,
- "isPayGo": true,
- "token": "omg"
}
], - "usersNotified": true
}, - "status": "confirmed",
- "paymentHash": "63d9ce82e09d16761a85116ed8b65407db4fb22f85d03573de09c480f2c6d175"
}
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 |
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" |
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 |
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" |
{- "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"
}
{- "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"
}
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
).
enterpriseId | Array of strings (Id) Example: enterpriseId=59cd72485007a239fb00282ed480da1f Filter by enterprise |
verificationState | string (BankAccountVerificationState) Enum: "pending" "approved" "rejected" |
Array of objects (BankAccount) [ items ] |
{- "bankAccounts": [
- {
- "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"
}
]
}
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
).
bankAccountId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
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 |
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" |
{- "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"
}
bankAccountId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
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 |
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 |
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" |
{- "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"
}
{- "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"
}
Removes a bank account if not already verified
bankAccountId required | string (Id) ^[0-9a-f]{32}$ Example: 59cd72485007a239fb00282ed480da1f |
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 |
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" |
{- "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"
}
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.
BitGo uses a hierarchical deterministic (HD) wallet scheme for:
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 can be accessed with the following coin types:
Environment | Coin Type | Faucet |
---|---|---|
Algorand Production | algo | |
Algorand Testnet | talgo | https://bank.testnet.algorand.network/ |
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 :
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.
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.
Algo (ALGO) is the native asset of the Algorand blockchain. The base unit of Algo is microAlgo:
10-6
) or 0.000001 Algo.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
.
Algorand supports tokens transactions. This means you can now make transactions with other tokens apart from native algo coin.
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,
})
});
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.
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,
})
});
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.
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.
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 can be accessed with the following coin types:
Environment | Coin Type | Faucet |
---|---|---|
BSC Production | bsc | |
BSC Testnet | tbsc | https://testnet.binance.org/faucet-smart |
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);
});
BNB is the native asset of the Binance Smart Chain blockchain. The base unit of BNB is jager:
10-8
) or 0.00000001 BNB.108
) or 100000000 jager (100 million).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.
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.
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.
Bitcoin (BTC) is the native asset of the Bitcoin blockchain. The base unit of Bitcoin is satoshi (or "sat"):
10-8
) or 0.00000001 Bitcoin.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
.
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 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.
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.
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.
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.
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 can be accessed with the following coin types:
Environment | Coin Type | Faucet |
---|---|---|
Bitcoin Gold Production | btg |
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.
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.
Note: See section Address Derivation (BIP-32) for a table of address types. Bitcoin Gold defaults to chain 10.
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 |
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.
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.
GET /api/v2/:coin/requiredReserve
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. |
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.
Casper (CSPR) the native asset of the Casper blockchain. The base unit of Casper is the mote:
10-9
or 0.000000001 Casper.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.
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.
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 can be accessed with the following coin types:
Environment | Coin Type | Faucet |
---|---|---|
Celo Production | celo | |
Celo Testnet | tcelo | https://celo.org/developers/faucet |
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.
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.
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.
CELO (CELO) is the native asset of the Celo blockchain. The base unit of CELO is wei:
10-18
) or 0.000000000000000001 CELO.1018
) or 1000000000000000000 wei (1 quintillion).Balances are supported in string format: balanceString
, confirmedBalanceString
, and spendableBalanceString
.
BitGo's Celo multisig contract currently only supports one sender and one recipient so the sendMany
is not supported.
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 can be accessed with the following coin types:
Environment | Coin Type | Faucet |
---|---|---|
Dash Production | dash | |
Dash Testnet | tdash | http://test.faucet.masternode.io/ |
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.
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).
Dash (DASH) is the native asset of the Dash blockchain. The base unit of Dash is duff:
10-8
) or 0.00000001 Dash.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 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 can be accessed with the following coin types:
Environment | Coin Type | Faucet |
---|---|---|
EOS Production | eos | |
EOS Jungle Testnet | teos | https://monitor.jungletestnet.io/#faucet |
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.
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).
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.
10-4
) or 0.0001 EOS.104
) or 10000 base units of EOS (10 thousand).Balances are supported in string format: balanceString
, confirmedBalanceString
, and spendableBalanceString
.
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.
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.
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.
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
Ether (ETH) is the native asset of the Ethereum blockchain. The base unit is wei (and gas fees are denoted in gwei):
10-18
) or 0.000000000000000001 Ether.10-9
) or 0.000000001 Ether (or 1000000000 wei).1018
) or 1000000000000000000 wei (1 quintillion).Balances are supported in string format: balanceString
, confirmedBalanceString
, and spendableBalanceString
.
BitGo's Ethereum multisig contract currently only supports one sender and one recipient. That means that the sendMany
call only accepts one recipient.
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:
TERC20 tokens can be accessed on different Testnets with the following identifiers.
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:
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.
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
.
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.
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 (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 |
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
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.
HBAR (HBAR) is the native asset of the Hedera blockchain. The base unit of HBAR is tinybar:
10-8
) or 0.00000001 HBAR.108
) or 100000000 tinybars (100 million).Balances are supported in string format: balanceString
, confirmedBalanceString
, and spendableBalanceString
.
Litecoin can be accessed with the following coin types:
Environment | Coin Type | Faucet |
---|---|---|
Litecoin Production | ltc | |
Litecoin Testnet | tltc | http://testnet.litecointools.com/ |
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.
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.
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 between2MsFGJvxH1kCoRp3XEYvKduAjY6eYz9PJHz
andQLc2RwpX2rFtZzoZrexLibcAgV6Nsg74Jn
.
bitgo.coin('ltc').canonicalAddress(address, scriptHashVersion)
bitgo.coin('tltc').canonicalAddress(address, scriptHashVersion)
POST /api/v2/:coin/canonicaladdress
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 . |
Litecoin (LTC) is the native asset of the Litecoin blockchain. The base unit of Litecoin is microlitecoin:
10-8
) or 0.00000001 Litecoin.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
.
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/ |
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.
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.
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.
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:
10-18
) or 0.000000000000000001 RSK.1018
) or 1000000000000000000 wei (1 quintillion).Balances are supported in string format: balanceString
, confirmedBalanceString
, and spendableBalanceString
.
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 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 |
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
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
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:
10-6
) or 0.000001 STX.106
) or 1000000 micro-STX (1 million).Balances are supported in string format: balanceString
, confirmedBalanceString
, and spendableBalanceString
.
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.
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
}
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
}],
}
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:
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.
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
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
},
],
},
},
],
};
}
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 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/ |
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.
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.
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
.
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 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 |
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.
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.
GET /api/v2/:coin/requiredReserve
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. |
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.
Lumen (XLM) is the native asset of the Stellar blockchain. The base unit of Lumen is stroop:
10 -7
or 0.0000001 Lumen.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.
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.
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.
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 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 |
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:
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.
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.
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
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.
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 (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/ |
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.
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.
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.
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 ꜩ.
tez (ꜩ) (XTZ) is the native asset of the Tezos blockchain. The base unit of tez is micro tez (or "mutez"):
10-6
) or 0.000001 tez.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 (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 |
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.
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.
Tronix (TRX) is the native asset of the TRON blockchain. The base unit of Tronix is sun:
10-6
) or 0.000001 Tronix.106
) or 1000000 sun (1 million).Balances are supported in string format: balanceString
, confirmedBalanceString
, and spendableBalanceString
.
XRP can be accessed with the following coin types:
Environment | Coin Type | Faucet |
---|---|---|
XRP Production | xrp | |
XRP Altnet | txrp |
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.
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.
XRP (XRP) is the native asset of the XRP ledger. The base unit of XRP is drop:
10-6
) or 0.000001 XRP.106
) or 1000000 drops (1 million).Balances are supported in string format: balanceString
, confirmedBalanceString
, and spendableBalanceString
.
XRP is formerly known as Ripple.
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/ |
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.
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
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).
Zec (ZEC) is the native asset of the Zcash blockchain. The base unit of ZEC is zatoshi:
10-8
) or 0.00000001 Zec.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
.
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.
BitGo uses a hierarchical deterministic (HD) wallet scheme for:
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 can be accessed with the following coin types:
Environment | Coin Type | Faucet |
---|---|---|
Algorand Production | algo | |
Algorand Testnet | talgo | https://bank.testnet.algorand.network/ |
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 :
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.
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.
Algo (ALGO) is the native asset of the Algorand blockchain. The base unit of Algo is microAlgo:
10-6
) or 0.000001 Algo.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
.
Algorand supports tokens transactions. This means you can now make transactions with other tokens apart from native algo coin.
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,
})
});
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.
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,
})
});
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.
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.
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 can be accessed with the following coin types:
Environment | Coin Type | Faucet |
---|---|---|
BSC Production | bsc | |
BSC Testnet | tbsc | https://testnet.binance.org/faucet-smart |
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);
});
BNB is the native asset of the Binance Smart Chain blockchain. The base unit of BNB is jager:
10-8
) or 0.00000001 BNB.108
) or 100000000 jager (100 million).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.
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.
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.
Bitcoin (BTC) is the native asset of the Bitcoin blockchain. The base unit of Bitcoin is satoshi (or "sat"):
10-8
) or 0.00000001 Bitcoin.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
.
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 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.
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.
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.
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.
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 can be accessed with the following coin types:
Environment | Coin Type | Faucet |
---|---|---|
Bitcoin Gold Production | btg |
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.
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.
Note: See section Address Derivation (BIP-32) for a table of address types. Bitcoin Gold defaults to chain 10.
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 |
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.
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.
GET /api/v2/:coin/requiredReserve
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. |
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.
Casper (CSPR) the native asset of the Casper blockchain. The base unit of Casper is the mote:
10-9
or 0.000000001 Casper.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.
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.
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 can be accessed with the following coin types:
Environment | Coin Type | Faucet |
---|---|---|
Celo Production | celo | |
Celo Testnet | tcelo | https://celo.org/developers/faucet |
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.
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.
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.
CELO (CELO) is the native asset of the Celo blockchain. The base unit of CELO is wei:
10-18
) or 0.000000000000000001 CELO.1018
) or 1000000000000000000 wei (1 quintillion).Balances are supported in string format: balanceString
, confirmedBalanceString
, and spendableBalanceString
.
BitGo's Celo multisig contract currently only supports one sender and one recipient so the sendMany
is not supported.
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 can be accessed with the following coin types:
Environment | Coin Type | Faucet |
---|---|---|
Dash Production | dash | |
Dash Testnet | tdash | http://test.faucet.masternode.io/ |
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.
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).
Dash (DASH) is the native asset of the Dash blockchain. The base unit of Dash is duff:
10-8
) or 0.00000001 Dash.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 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 can be accessed with the following coin types:
Environment | Coin Type | Faucet |
---|---|---|
EOS Production | eos | |
EOS Jungle Testnet | teos | https://monitor.jungletestnet.io/#faucet |
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.
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).
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.
10-4
) or 0.0001 EOS.104
) or 10000 base units of EOS (10 thousand).Balances are supported in string format: balanceString
, confirmedBalanceString
, and spendableBalanceString
.
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.
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.
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.
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
Ether (ETH) is the native asset of the Ethereum blockchain. The base unit is wei (and gas fees are denoted in gwei):
10-18
) or 0.000000000000000001 Ether.10-9
) or 0.000000001 Ether (or 1000000000 wei).1018
) or 1000000000000000000 wei (1 quintillion).Balances are supported in string format: balanceString
, confirmedBalanceString
, and spendableBalanceString
.
BitGo's Ethereum multisig contract currently only supports one sender and one recipient. That means that the sendMany
call only accepts one recipient.
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:
TERC20 tokens can be accessed on different Testnets with the following identifiers.
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:
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.
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
.
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.
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 (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 |
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
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.
HBAR (HBAR) is the native asset of the Hedera blockchain. The base unit of HBAR is tinybar:
10-8
) or 0.00000001 HBAR.108
) or 100000000 tinybars (100 million).Balances are supported in string format: balanceString
, confirmedBalanceString
, and spendableBalanceString
.
Litecoin can be accessed with the following coin types:
Environment | Coin Type | Faucet |
---|---|---|
Litecoin Production | ltc | |
Litecoin Testnet | tltc | http://testnet.litecointools.com/ |
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.
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.
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 between2MsFGJvxH1kCoRp3XEYvKduAjY6eYz9PJHz
andQLc2RwpX2rFtZzoZrexLibcAgV6Nsg74Jn
.
bitgo.coin('ltc').canonicalAddress(address, scriptHashVersion)
bitgo.coin('tltc').canonicalAddress(address, scriptHashVersion)
POST /api/v2/:coin/canonicaladdress
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 . |
Litecoin (LTC) is the native asset of the Litecoin blockchain. The base unit of Litecoin is microlitecoin:
10-8
) or 0.00000001 Litecoin.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
.
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/ |
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.
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.
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.
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:
10-18
) or 0.000000000000000001 RSK.1018
) or 1000000000000000000 wei (1 quintillion).Balances are supported in string format: balanceString
, confirmedBalanceString
, and spendableBalanceString
.
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 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 |
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
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
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:
10-6
) or 0.000001 STX.106
) or 1000000 micro-STX (1 million).Balances are supported in string format: balanceString
, confirmedBalanceString
, and spendableBalanceString
.
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.
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
}
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
}],
}
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:
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.
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
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
},
],
},
},
],
};
}
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 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/ |
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.
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.
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
.
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 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 |
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.
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.
GET /api/v2/:coin/requiredReserve
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. |
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.
Lumen (XLM) is the native asset of the Stellar blockchain. The base unit of Lumen is stroop:
10 -7
or 0.0000001 Lumen.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.
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.
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.
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 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 |
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:
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.
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.
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
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.
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 (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/ |
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.
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.
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.
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 ꜩ.
tez (ꜩ) (XTZ) is the native asset of the Tezos blockchain. The base unit of tez is micro tez (or "mutez"):
10-6
) or 0.000001 tez.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 (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 |
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.
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.
Tronix (TRX) is the native asset of the TRON blockchain. The base unit of Tronix is sun:
10-6
) or 0.000001 Tronix.106
) or 1000000 sun (1 million).Balances are supported in string format: balanceString
, confirmedBalanceString
, and spendableBalanceString
.
XRP can be accessed with the following coin types:
Environment | Coin Type | Faucet |
---|---|---|
XRP Production | xrp | |
XRP Altnet | txrp |
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.
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.
XRP (XRP) is the native asset of the XRP ledger. The base unit of XRP is drop:
10-6
) or 0.000001 XRP.106
) or 1000000 drops (1 million).Balances are supported in string format: balanceString
, confirmedBalanceString
, and spendableBalanceString
.
XRP is formerly known as Ripple.
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/ |
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.
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
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).
Zec (ZEC) is the native asset of the Zcash blockchain. The base unit of ZEC is zatoshi:
10-8
) or 0.00000001 Zec.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
.
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.