Stake from Go Account

Overview

To stake assets from Go Accounts, you create a staking request. BitGo uses your request to generate staking transactions that delegate your assets to a validator on-chain.

Manual or Simple

For Go Account staking, you can use the BitGo JavaScript SDK to build, sign, and send the staking request, all in one call. However, if your use case needs more control and granularity, BitGo provides additional REST endpoints for more granular transactions, enabling you to manually construct each step. See below for more details.

Prerequisites

1. Build, Sign, and Send Staking Request

Using the JavaScript SDK, you can build, sign, and send the staking request to BitGo all in one call.

const goStakingWallet = wallet.toGoStakingWallet();
const goStakingRequest = await goStakingWallet.stake({
  amount: '<AMOUNT_IN_BASE_UNITS>',
  walletPassphrase: '<PASSPHRASE>',
});

Step Result

If your staking request doesn't require approval, BitGo applies the final signature using the BitGo key and broadcasts the transaction to the blockchain, transferring assets on-chain from your Go Account to the validator. If you Create Policy Rules to require approvals, the staking request remains in a PENDING_APPROVAL status until an admin approves it.

{
  "id": "5bdeed2f-a173-4ca1-936b-a36399af8152",
  "type": "STAKE",
  "coin": "tsol",
  "status": "NEW",
  "goSpecificStatus": "NEW",
  "statusModifiedDate": "2025-07-25T20:30:57.046379144Z",
  "createdDate": "2025-07-25T20:30:57.046365Z",
  "amount": 1000000,
  "frontTransferSendRequest": {
    "halfSigned": {
      "payload": "{\"coin\":\"ofctsol\",\"recipients\":[{\"address\":\"BpkMFStkryPDkVYqTbEGLqWD3FLoPLCwTV4sdN1XKBPF\",\"amount\":\"1000000\"}],\"fromAccount\":\"62182dc6685f820007002502234b4dfc\",\"nonce\":\"8d819cce-a7e1-4e24-a29d-22f4b003130f\",\"timestamp\":\"2025-07-25T20:26:52.574Z\",\"feeString\":\"0\",\"shortCircuitBlockchainTransfer\":false,\"isIntraJXTransfer\":false}",
      "signature": "1f8e22206d9c95cff29154679f9d0b03bbb33e38b1f801090d0fb4f2e9464b969c263497689af974d13915dc72e00ffb3dfdac05c312ba9711e77014ffe2431c75"
    }
  }
}

2. Approve Request (Optional)

If you have a policy that requires approval, you must approve the staking request before BitGo adds the final signature with the BitGo key.

Note: If you configure an approval requirement for staking requests, you can't approve your own transactions - another admin must approve them.

Endpoint: Update Pending Approval

export APPROVAL_ID="<APPROVAL_ID>"
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"
export OTP="<YOUR_OTP>"

curl -X PUT \
  https://app.bitgo-test.com/api/v2/pendingApprovals/$APPROVAL_ID \
  -H 'Content-Type: application/json' \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -d '{
    "state": "approved",
    "otp": "'"$OTP"'"
  }'
const baseCoin = this.bitgoSDK.coin(initialPendingApproval.coin);
const pendingApproval = await baseCoin.pendingApprovals().get({ id: initialPendingApproval.id });
const result = await pendingApproval.approve(params);

Step Result

{
    "id": "e055adbc-66a3-4ccd-9a9d-726a05bca0cf",
    "coin": "hteth",
    "wallet": "2032e75g451052000636831abd797bd3",
    "enterprise": "1032e75c451052000436831deb797af1",
    "creator": "62ab90e06dfda30007974f0a52a12995",
    "createDate": "2022-01-10T14:32:28Z",
    "info": {
        "type": "transactionRequest",
        "transactionRequest": {
            "requestedAmount": "3200000000000000000",
            "fee": 20451,
            "sourceWallet": "2032e75g451052000636831abd797bd3",
            "policyUniqueId": "654ec786c07fe8dc0dcfe03f",
            "recipients": [
                {
                    "address": "0x5a6406c9710f588ca733360bfa8033d0ef9ecdy5",
                    "amount": "3200000000000000000",
                    "_id": "65529448bd87efe59c3b0158"
                }
            ],
            "coinSpecific": {}
        }
    },
    "state": "approved",
    "scope": "wallet",
    "userIds": [
        "62ab90e06dfda30007974f0a52a12995",
        "621d08a634ad8a0007fcddffd7c429cc"
    ],
    "approvalsRequired": 1,
    "singleRunResults": [
        {
            "ruleId": "Custody Enterprise Transaction ID Verification",
            "triggered": false,
            "_id": "65529448bd87efe59c3b0157"
        }
    ],
    "resolvers": [
        {
            "user": "621d08a634ad8a0007fcddffd7c429cc",
            "date": "2022-01-11T13:30:14Z",
            "resolutionType": "pending"
        }
    ]
}

Next

You can view all staking requests associated with your Go Account.

Endpoint: List staking requests by asset for Go Account

export COIN="<ASSET_ID>"
export GO_ACCOUNT_ID="<YOUR_GO_ACCOUNT_ID>"
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"
export AMOUNT="<AMOUNT_IN_BASE_UNITS>"

curl -X GET \
  https://app.bitgo-test.com/api/go-staking/v1/$COIN/accounts/$GO_ACCOUNT_ID/requests \
  -H 'Content-Type: application/json' \
  -H "Authorization: Bearer $ACCESS_TOKEN"
const goStakingWallet = wallet.toGoStakingWallet();
const goStakingRequest = goStakingWallet.getGoStakingRequests();

Step Result

{
  "requests": [
    {
      "id": "cabc544c-6441-4c97-a809-e2fc77558748",
      "status": "CONFIRMED",
      "goAccountId": "68f93cd87913feb58b5020a0dc481175",
      "amount": 3000000,
      "createdDate": "2025-10-22T21:34:01.644063Z",
      "properties": {
        "amount": 3000000,
        "frontTransferSendRequest": {
          "halfSigned": {
            "payload": "{\"coin\":\"ofctsol\",\"recipients\":[{\"address\":\"6DBzhSbjWFM2r2mqNTFYC1HHBuiS6vsAYSWEHBq4UbMw\",\"amount\":\"3000000\"}],\"fromAccount\":\"68f93cd87913feb58b5020a0dc481175\",\"nonce\":\"fb03699e-55a7-41b2-b19e-7f144ec3560f\",\"timestamp\":\"2025-10-22T20:34:39.511Z\",\"feeString\":\"0\",\"shortCircuitBlockchainTransfer\":false,\"isIntraJXTransfer\":false}",
            "signature": "20b68bf9465f81b67952deb9259b18c6097c5daf7117730f9afc291744454c64011c64acce1b20cde23437f7ae585c51f194aacf0ea3e7a2478b467aef057120c0"
          },
          "sequenceId": "fb03699e-55a7-41b2-b19e-7f144ec3560f",
          "goStakingRequestId": "cabc544c-6441-4c97-a809-e2fc77558748",
          "stakingParams": {
            "requestId": "cabc544c-6441-4c97-a809-e2fc77558748",
            "actionType": "delegate"
          }
        }
      }
    }
  ],
  "page": 1,
  "totalPages": 1,
  "totalElements": 1
}

See Also