Transact with NFTs - Multisig

Transfer NFTs (CryptoPunks, ERC-721, ERC-1155) from multisig Ethereum and Polygon wallets. See the Guide.

  1. Transfer a CryptoPunk NFT from a multisig wallet. You must set the amount to 0 for all NFT transactions. For CryptoPunks, use a block explorer such as Etherscan to create a transferPunk write contract and pass the resulting transaction data in the data field. The contract address should be the CryptoPunks contract address visible on the block explorer.

    Prerequisites: Have a CryptoPunk in your wallet. Do not send CryptoPunks to forwarder addresses -- they are nonstandard NFTs that must be sent to base addresses. CryptoPunks are not compatible with MPC wallets.

    API Reference

  2. Transfer an ERC-721 or ERC-1155 NFT from a multisig wallet. Use the tokenData object to specify the token contract address, token type (ERC721 or ERC1155), token ID, and token quantity. Set the amount to 0. Only V2 forwarder wallets can make outgoing NFT transactions -- do not send ERC NFTs to V1 forwarder wallets.

    API Reference

// 1. Send NFT Transaction (CryptoPunks)
export COIN="<ASSET_ID>"
export WALLET_ID="<YOUR_WALLET_ID>"
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"

curl -X POST \
  https://app.bitgo-test.com/api/v2/$COIN/wallet/$WALLET_ID/sendcoins \
  -H 'Content-Type: application/json' \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -d '{
  "address": "0xb47e3cd837dDF8e4c57F05d70Ab865de6e193BBB",
  "amount": "0",
  "data": "0x8b72a2ec000000000000000000000000e514ee5028934565c3f839429ea3c091efe4c7010000000000000000000000000000000000000000000000000000000000000017"
}'
// 2. Send NFT Transaction (ERC)
curl -X POST \
  https://app.bitgo-test.com/api/v2/$COIN/wallet/$WALLET_ID/sendcoins \
  -H 'Content-Type: application/json' \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -d '{
  "address": "0xb47e3cd837dDF8e4c57F05d70Ab865de6e193BBB",
  "amount": "0",
  "data": "0x8b72a2ec000000000000000000000000e514ee5028934565c3f839429ea3c091efe4c7010000000000000000000000000000000000000000000000000000000000000017"
}'
Response
// 1. Send NFT Transaction (CryptoPunks) Response
{
    "error": "triggered all transactions policy",
    "pendingApproval": {
      "id": "63727a81cdbc820007b27caa7b76016d",
      "coin": "hteth",
      "wallet": "63726fde0a3c94000758f2790536041d",
      "enterprise": "614a226f3da19200071b3d6a0180e87e",
      "creator": "60f084f8cce2d40006c97181e6230f3b",
      "createDate": "2022-11-14T17:27:29.128Z",
      "info": {
        "type": "transactionRequest",
        "transactionRequest": {
          "coinSpecific": {
            "hteth": {
              "eip1559": {
                "_id": "63727a81cdbc820007b27cab",
                "maxPriorityFeePerGas": 1500000000,
                "maxFeePerGas": 133302263906
              },
              "recipients": [
                {
                  "_id": "63727a81cdbc820007b27cac",
                  "amount": "0",
                  "address": "0xb47e3cd837dDF8e4c57F05d70Ab865de6e193BBB",
                  "data": "0x8b72a2ec000000000000000000000000e514ee5028934565c3f839429ea3c091efe4c7010000000000000000000000000000000000000000000000000000000000000017"
                }
              ],
              "expireTime": 1669051648,
              "contractSequenceId": 11,
              "operationHash": "0x1018f971f00b0ae51f011ae9338214d6a59627e2d9915537974d2a325c12be49",
              "signature": "0x8090aaf0fea7be5e723e68b531a4e60cd4d8e68ba2d12b3b622f9cc8173b6855241ecbb6aa9ddf8e1b6cef36eea698d463959330fff69b8c7068de5878381c4e1c"
            }
          },
          "verificationItems": [],
          "videoApprovers": [],
          "requestedAmount": "0",
          "fee": 0,
          "sourceWallet": "63726fde0a3c94000758f2790536041d",
          "recipients": [
            {
              "_id": "63727a81cdbc820007b27cad",
              "address": "0xb47e3cd837dDF8e4c57F05d70Ab865de6e193BBB",
              "amount": "0",
              "data": "0x8b72a2ec000000000000000000000000e514ee5028934565c3f839429ea3c091efe4c7010000000000000000000000000000000000000000000000000000000000000017"
            }
          ],
          "buildParams": {
            "recipients": [
              {
                "amount": "0",
                "address": "0xb47e3cd837dDF8e4c57F05d70Ab865de6e193BBB",
                "data": "0x8b72a2ec000000000000000000000000e514ee5028934565c3f839429ea3c091efe4c7010000000000000000000000000000000000000000000000000000000000000017"
              }
            ]
          },
          "policyUniqueId": "63726fe10a3c94000758f362"
        }
      },
      "state": "pendingFinalApproval",
      "scope": "wallet",
      "userIds": [
        "60f084f8cce2d40006c97181e6230f3b",
        "60f084f8cce2d40006c97181e6230f3b"
      ],
      "approvalsRequired": 1,
      "singleRunResults": [
        {
          "_id": "63727a81cdbc820007b27cae",
          "ruleId": "Custody Enterprise Transaction ID Verification",
          "triggered": false
        }
      ],
      "resolvers": []
    },
    "triggeredPolicy": "63726fe10a3c94000758f362a24fc3ba"
  }