# Allocate Assets

Source: https://developers.bitgo.com/docs/oes-client-allocate

## Overview

Allocate assets in your Go Network account to a connected-partner platform. BitGo locks allocated assets and makes them available for trading on the connected partner platform. Allocations occur synchronously. You can view your allocated balance from the BitGo web application or programmatically, as well as from your account on the connected-partner platform.

## Prerequisites

* [Get Started](/docs/get-started-intro)
* [Connect to Partners](/docs/oes-client-connect)

## Cookbook

Need just the steps? Expand the cookbook below to get started:

<Cookbook slug="oes-client-allocate" title="Allocate Assets" />

## 1. Get Allocation Payload

>Endpoint: [Get Signing Payload for Client Allocations](/reference/v1clientallocationssigninggetroute)

```shell cURL
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"
  }'
```

#### Step Result

```json JSON
{
  "payload": "string"
}
```

## 2. Create Allocation Request

>Endpoint: [Allocate Funds to Partner Connection](/reference/v1clientallocationspostroute)

```shell cURL
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", # The payload string received in the previous step
    "signature": "string",
    "nonce": "string",
    "notes": "string"
  }'
```
```js JavaScript
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';

// --- Required Constants ---
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 {
    // 1. Get the wallet and instantiate the trading account
    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();

    // 2. Prepare the allocation, which creates the payload and signature
    console.log('Preparing allocation...');
    const allocationParams = await network.prepareAllocation({
      walletPassphrase,
      connectionId,
      amount: {
        currency: 'ofctbtc',
        quantity: '100000',
      },
      notes: 'Initial allocation for Project Phoenix',
    });

    // 3. Create the allocation using the prepared parameters
    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();
```

#### Step Result

```json JSON
{
  "allocation": {
    "status": "cleared",
    "retriable": false,
    "id": "string",
    "amount": {
      "currency": "string",
      "quantity": "string"
    },
    "connectionId": "string",
    "clientExternalId": "string",
    "partnerExternalId": "string",
    "initiatedBy": "string",
    "notes": "string",
    "createdAt": "2019-08-24T00:00:00.000Z",
    "updatedAt": "2019-08-24T00:00:00.000Z"
  }
}
```

## Next

* You can trade your allocated assets on the connected partner platform.
* [Deallocate Assets](/docs/oes-client-deallocate)


## See Also

[API Reference: Allocate assets to Partner Connection](/reference/v1clientallocationspostroute)
