Off-Exchange Settlement: Allocate Assets to Partners
Allocate assets to a connected partner for trading. See the Guide.
-
You request a signing payload from BitGo for the allocation. This payload will be used to sign the allocation request and ensure its authenticity. This step is required before creating the allocation request.
-
You allocate assets to a connected partner platform. BitGo locks allocated assets and makes them available for trading on the partner platform. Allocations occur synchronously, and you can view your allocated balance from the BitGo web application or programmatically.
Prerequisites: You must first connect to a partner platform.
// 1. Get Allocation Payload
export ENTERPRISE_ID="<YOUR_ENTERPRISE_ID>"
export CONNECTION_ID="<YOUR_CONNECTION_ID>"
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"
curl -X POST \
https://app.bitgo-test.com/api/network/v1/enterprises/$ENTERPRISE_ID/clients/connections/$CONNECTION_ID/allocations/signing \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d '{
"amount": {
"currency": "string",
"quantity": "string"
},
"clientExternalId": "string",
"nonce": "string",
"notes": "string"
}'
// 2. Create Allocation Request
export ENTERPRISE_ID="<YOUR_ENTERPRISE_ID>"
export CONNECTION_ID="<YOUR_CONNECTION_ID>"
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"
curl -X POST \
https://app.bitgo-test.com/api/network/v1/enterprises/$ENTERPRISE_ID/clients/connections/$CONNECTION_ID/allocations \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d '{
"amount": {
"currency": "string",
"quantity": "string"
},
"clientExternalId": "string",
"payload": "string",
"signature": "string",
"nonce": "string",
"notes": "string"
}'
// 1. Get Allocation Payload
// Use the JavaScript SDK for signing (see JavaScript tab - prepareAllocation handles this)
// 2. Create Allocation Request
import { BitGoAPI } from '@bitgo/sdk-api';
import { TradingAccount } from '@bitgo/sdk-core/dist/src/bitgo/trading/trading';
import { coins } from '@bitgo/sdk-core';
import * as dotenv from 'dotenv';
const accessToken = process.env.ACCESS_TOKEN;
const walletId = process.env.TRADING_WALLET_ID;
const enterpriseId = process.env.ENTERPRISE_ID;
const walletPassphrase = process.env.WALLET_PASSPHRASE;
const connectionId = process.env.CONNECTION_ID;
const bitgo = new BitGoAPI({
accessToken: accessToken,
env: 'test',
customRootURI: 'https://app.bitgo-test.com',
});
const coin = 'ofc';
bitgo.register(coin, coins.Ofc.createInstance);
async function createAllocation() {
try {
console.log(`Fetching wallet: ${walletId}...`);
const wallet = await bitgo.coin(coin).wallets().get({ id: walletId });
const tradingAccount = new TradingAccount(enterpriseId, wallet, bitgo);
const network = tradingAccount.toNetwork();
console.log('Preparing allocation...');
const allocationParams = await network.prepareAllocation({
walletPassphrase,
connectionId,
amount: {
currency: 'ofctbtc',
quantity: '100000',
},
notes: 'Initial allocation for Project Phoenix',
});
console.log('Creating allocation...');
const allocation = await network.createAllocation(allocationParams);
console.log('Allocation created successfully:');
console.dir(allocation, { depth: null });
} catch (error) {
console.error('Failed to create allocation:', error);
}
}
createAllocation();
Response
// 1. Get Allocation Payload Response
{
"payload": "string"
}
// 2. Create Allocation Request Response
{
"allocation": {
"status": "cleared",
"id": "string",
"amount": {
"currency": "string",
"quantity": "string"
},
"connectionId": "string",
"clientExternalId": "string",
"partnerExternalId": "string",
"initiatedBy": "string",
"notes": "string",
"createdAt": "2019-08-24",
"updatedAt": "2019-08-24"
}
}