Anchorage Digital Transaction Construction API

Operations for constructing and signing transactions via the Construct API

Operations 5

GET /wallet-operations/construct/asset-types List Construct Asset Types #
POST /wallet-operations/construct/transfer Construct Transfer Transaction #
POST /wallet-operations/construct/propose-transfer Propose Construct Transfer Transaction #
POST /wallet-operations/construct/transaction Construct Transaction #
POST /wallet-operations/construct/propose-transaction Propose Construct Transaction #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/anchorage-transaction-construction-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

anchorage-transaction-construction-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  version: 2.0.0
  title: Anchorage Digital API Reference Transaction Construction API
  contact:
    email: api@anchorage.com
  description: '# Introduction

    *CONFIDENTIAL: Please do not distribute this documentation externally without prior Anchorage Digital approval.*


    The Anchorage Digital REST API v2.0 provides a set of operations and resources that allow Anchorage Digital clients and partners to:

    - Programmatically transfer funds from an Anchorage Digital vault or wallet without human intervention

    - Create and list deposit addresses in a vault

    - Read and monitor vault balances

    - Query transaction history including deposits

    …'
servers:
- url: https://api.anchorage-staging.com/v3
security:
- Api-Access-Key: []
tags:
- description: Operations for constructing and signing transactions via the Construct API
  name: Transaction Construction
paths:
  /wallet-operations/construct/asset-types:
    get:
      operationId: listConstructAssetTypes
      summary: List Construct Asset Types
      description: 'Permissions required: **None**


        List asset types supported for transaction construction.'
      parameters:
      - name: networkId
        in: query
        description: Filter by specific network ID. Returns only assets on the specified network.
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListAssetTypesResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
      - Transaction Construction
  /wallet-operations/construct/transfer:
    post:
      operationId: constructTransferTransaction
      summary: Construct Transfer Transaction
      description: 'Permissions required: **Construct and sign transactions**


        Construct and sign a transfer transaction immediately.


        This endpoint signs the transaction right away. Use Propose Construct Transfer Transaction instead if you need

        an approval workflow before signing.


        Use Construct Transaction instead to construct another type of transaction.


        > Note: This endpoint does NOT broadcast the transaction to the blockchain.

        After construction and signing, the caller is responsible for broadcasting the transaction.


        This endpoint returns immediately with a `walletOperationId`. Poll `GET /wallet-operations/{walletOperationId}` to check

        the status and retrieve the signed transaction data once construction is complete. Use the signedTransaction

        field from the response to broadcast to the blockchain.'
      parameters: []
      requestBody:
        description: Transfer transaction construction request
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ConstructTransferRequest'
      responses:
        '202':
          description: Transfer transaction construction request accepted for processing
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConstructWalletOperationResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
      - Transaction Construction
  /wallet-operations/construct/propose-transfer:
    post:
      operationId: proposeConstructTransferTransaction
      summary: Propose Construct Transfer Transaction
      description: 'Permissions required: **Propose constructed transactions**


        Construct a transfer transaction for approval workflow. The transaction will not be signed until it receives

        the required endorsements.


        This endpoint constructs the transaction but defers signing. The operation will enter PENDING_ENDORSEMENT status

        and require approval through your organization''s workflow before signing occurs.


        Use Construct Transfer Transaction instead if you want to sign immediately without an approval workflow.


        Use Propose Construct Transaction instead to construct another type of transaction with deferred signing.


        > Note: This endpoint does NOT broadcast the transaction to the blockchain.

        After construction and signing, the caller is responsible for broadcasting the transaction.


        This endpoint returns immediately with a `walletOperationId` in `PENDING_ENDORSEMENT` status. The transaction

        will not be signed until it receives the required endorsements through your approval workflow. Poll

        `GET /wallet-operations/{walletOperationId}` to check the status. Once endorsed and signed, use the

        signedTransaction field from the response to broadcast to the blockchain.'
      parameters: []
      requestBody:
        description: Transfer transaction construction request for approval workflow
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ConstructTransferRequest'
      responses:
        '202':
          description: Transfer transaction construction request accepted for approval workflow
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConstructWalletOperationResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
      - Transaction Construction
  /wallet-operations/construct/transaction:
    post:
      operationId: constructTransaction
      summary: Construct Transaction
      description: 'Permissions required: **Construct and sign transactions**


        Construct and sign a specialized transaction immediately.


        This endpoint signs the transaction right away. Use Propose Construct Transaction instead if you need

        an approval workflow before signing.


        Use Construct Transfer Transaction instead to construct a transfer transaction.


        > Note: This endpoint does NOT broadcast the transaction to the blockchain.

        After construction and signing, the caller is responsible for broadcasting the transaction.


        This endpoint returns immediately with a `walletOperationId`. Poll `GET /wallet-operations/{walletOperationId}` to check

        the status and retrieve the signed transaction data once construction is complete. Use the signedTransaction

        field from the response to broadcast to the blockchain.'
      parameters: []
      requestBody:
        description: Transaction construction request
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ConstructTransactionRequest'
      responses:
        '202':
          description: Transaction construction request accepted for processing
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConstructWalletOperationResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
      - Transaction Construction
  /wallet-operations/construct/propose-transaction:
    post:
      operationId: proposeConstructTransaction
      summary: Propose Construct Transaction
      description: 'Permissions required: **Propose constructed transactions**


        Construct a specialized transaction for approval workflow. The transaction will not be signed until it receives

        the required endorsements.


        This endpoint constructs the transaction but defers signing. The operation will enter PENDING_ENDORSEMENT status

        and require approval through your organization''s workflow before signing occurs.


        Use Construct Transaction instead if you want to sign immediately without an approval workflow.


        Use Propose Construct Transfer Transaction instead to construct a transfer transaction with deferred signing.


        > Note: This endpoint does NOT broadcast the transaction to the blockchain.

        After construction and signing, the caller is responsible for broadcasting the transaction.


        This endpoint returns immediately with a `walletOperationId` in `PENDING_ENDORSEMENT` status. The transaction

        will not be signed until it receives the required endorsements through your approval workflow. Poll

        `GET /wallet-operations/{walletOperationId}` to check the status. Once endorsed and signed, use the

        signedTransaction field from the response to broadcast to the blockchain.'
      parameters: []
      requestBody:
        description: Transaction construction request for approval workflow
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ConstructTransactionRequest'
      responses:
        '202':
          description: Transaction construction request accepted for approval workflow
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConstructWalletOperationResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
      - Transaction Construction
components:
  schemas:
    DOTNetworkSpecific:
      description: Polkadot-specific network parameters for transaction construction. Transactions are immortal by default. Provide mortalEra to make the transaction expire after a certain number of blocks.
      type: object
      properties:
        mainnetNetworkId:
          description: Discriminator field. Always set to the mainnet network ID, even when constructing transactions for testnets.
          type: string
          default: POLKADOT
          enum:
          - POLKADOT
        mortalEra:
          description: If provided, the transaction expires after a certain number of blocks. If omitted, the transaction is immortal (never expires).
          type: object
          additionalProperties: false
          properties:
            blockHash:
              description: Checkpoint block hash for the mortal era
              type: string
            blockNumber:
              description: Block number corresponding to the checkpoint block hash, used to compute the mortal era phase
              type: integer
              format: uint64
            period:
              description: Number of blocks the transaction is valid for (must be a power of 2, between 4 and 65536)
              type: integer
          required:
          - period
          - blockNumber
          - blockHash
        nonce:
          description: Account nonce for replay protection
          type: string
        specVersion:
          description: Runtime specification version. Query from the Polkadot node using state_getRuntimeVersion().
          type: integer
          format: uint32
        tip:
          description: Priority fee in DOT to incentivize inclusion
          type: string
      additionalProperties: false
      required:
      - mainnetNetworkId
      - nonce
      - specVersion
      title: Polkadot Network Specific
    APTNetworkSpecific:
      description: Aptos-specific network parameters for transaction construction
      type: object
      properties:
        expirationTimestampSecs:
          description: Unix timestamp in seconds after which the transaction expires and will be rejected by the network.
          type: string
        gasUnitPrice:
          description: Price per gas unit in APT. Higher values prioritize the transaction.
          type: string
        mainnetNetworkId:
          description: Discriminator field. Always set to the mainnet network ID, even when constructing transactions for testnets.
          type: string
          default: APT
          enum:
          - APT
        maxGasAmount:
          description: Maximum gas units the transaction can consume. The transaction fails if it exceeds this limit.
          type: string
        sequenceNumber:
          description: Sequence number for the source account. Each transaction from an account must have a unique, incrementing sequence number.
          type: string
      additionalProperties: false
      required:
      - mainnetNetworkId
      - sequenceNumber
      - gasUnitPrice
      - maxGasAmount
      - expirationTimestampSecs
      title: Aptos Network Specific
    CryptoDestination:
      description: Identifies the target of a transfer. Use the 'type' field to discriminate between variants.
      discriminator:
        propertyName: type
        mapping:
          BLOCKCHAIN: '#/components/schemas/BlockchainDestination'
          WALLET: '#/components/schemas/WalletDestination'
      oneOf:
      - $ref: '#/components/schemas/BlockchainDestination'
      - $ref: '#/components/schemas/WalletDestination'
    HBARNetworkSpecific:
      description: 'Hedera-specific network parameters for transaction construction. Note: Transaction validity duration is hardcoded to 180 seconds (the maximum allowed by the Hedera network).'
      type: object
      properties:
        mainnetNetworkId:
          description: Discriminator field. Always set to the mainnet network ID, even when constructing transactions for testnets.
          type: string
          default: HBAR
          enum:
          - HBAR
        maxTransactionFee:
          description: Maximum transaction fee in HBAR
          type: string
        nodeAccountId:
          description: Node account to submit the transaction to (e.g., "0.0.3")
          type: string
          example: 0.0.3
        validStartTimestampNanos:
          description: Nanoseconds component (0-999999999) of the valid start timestamp.
          type: integer
          format: int32
          example: 123456789
        validStartTimestampSecs:
          description: Unix epoch seconds from which the transaction is valid. Must be greater than 0.
          type: integer
          format: int64
          example: 1234567890
      additionalProperties: false
      required:
      - mainnetNetworkId
      - validStartTimestampSecs
      - validStartTimestampNanos
      - maxTransactionFee
      - nodeAccountId
      title: Hedera Network Specific
    SOLBlockhashReplayProtection:
      description: Solana blockhash-based replay protection for standard transactions
      type: object
      properties:
        recentBlockhash:
          description: Recent blockhash from the Solana network. Transaction must be submitted within approximately 2 minutes.
          type: string
        replayProtection:
          type: string
          default: BLOCKHASH
          enum:
          - BLOCKHASH
      additionalProperties: false
      required:
      - replayProtection
      - recentBlockhash
      title: Blockhash-based Replay Protection
    TRXNetworkSpecific:
      description: Tron-specific network parameters for transaction construction. Tron uses block references and timestamps instead of nonces and gas fees.
      type: object
      properties:
        expiration:
          description: Transaction expiration timestamp in milliseconds since Unix epoch. Must be within 24 hours of the timestamp.
          type: integer
          format: int64
        mainnetNetworkId:
          description: Discriminator field. Always set to the mainnet network ID, even when constructing transactions for testnets.
          type: string
          default: TRON
          enum:
          - TRON
        refBlockBytes:
          description: Reference block bytes (2 bytes, hex encoded) derived from the latest solidified block height. Extract bytes 6-8 of the block height.
          type: string
        refBlockHash:
          description: Reference block hash (8 bytes, hex encoded) derived from the latest solidified block hash. Extract bytes 8-16 of the block hash.
          type: string
        timestamp:
          description: Transaction creation timestamp in milliseconds since Unix epoch.
          type: integer
          format: int64
      additionalProperties: false
      required:
      - mainnetNetworkId
      - refBlockBytes
      - refBlockHash
      - expiration
      - timestamp
      title: Tron Network Specific
    CryptoDestinationAmount:
      description: Specifies a destination and the amount to send to it
      type: object
      properties:
        amount:
          $ref: '#/components/schemas/Amount'
        clientReferenceId:
          description: Client-provided reference ID to track this transaction in their internal systems
          type:
          - string
          - 'null'
          example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
        destination:
          $ref: '#/components/schemas/CryptoDestination'
      additionalProperties: false
      required:
      - destination
      - amount
    WalletDestination:
      description: Transfer destination specified by Anchorage wallet identifier
      type: object
      properties:
        type:
          description: Discriminator field indicating this is a wallet destination
          type: string
          default: WALLET
          enum:
          - WALLET
        walletId:
          description: Globally unique wallet identifier
          type: string
      additionalProperties: false
      required:
      - type
      - walletId
      title: Wallet Destination
    ADANetworkSpecific:
      description: Cardano-specific network parameters for transaction construction
      type: object
      properties:
        changeAddress:
          description: Address to send change to. If specified, any remainder after subtracting outputs and fee from UTXO inputs will be sent as change to this address.
          type: string
        changeAddressClientReferenceId:
          description: Client-provided reference ID to track the change output in their internal systems
          type: string
          example: 7c9e6679-7425-40de-944b-e07fc1f90ae7
        fee:
          description: Transaction fee in ADA
          type: string
        mainnetNetworkId:
          description: Discriminator field. Always set to the mainnet network ID, even when constructing transactions for testnets.
          type: string
          default: CARDANO
          enum:
          - CARDANO
        ttl:
          description: Time to live as an absolute slot number. The transaction is invalid after this slot.
          type: integer
          format: int64
        utxos:
          description: Unspent transaction outputs to use as inputs for the transaction
          type: array
          items:
            $ref: '#/components/schemas/UTXO'
      additionalProperties: false
      required:
      - mainnetNetworkId
      - utxos
      - fee
      - ttl
      title: Cardano Network Specific
    ConstructTransactionRequest:
      description: Request to construct a transaction
      type: object
      properties:
        clientReferenceId:
          description: Client-provided reference ID to track this transaction in their internal systems
          type:
          - string
          - 'null'
          example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
        idempotencyKey:
          description: Client-provided idempotency key to ensure request is processed only once
          type: string
          example: e763a50d-aa82-4ec7-b5a3-89ad0462d248
          maxLength: 128
        sourceWalletId:
          description: Globally unique wallet identifier for the wallet that will pay transaction fees and sign the transaction
          type: string
        template:
          description: The transaction template specifying what transaction to construct. Use the 'type' field to discriminate between different transaction types.
          discriminator:
            propertyName: type
            mapping:
              SOLANA_CREATE_NONCE_ACCOUNT: '#/components/schemas/SolanaCreateNonceAccountTemplate'
              STELLAR_CHANGE_TRUST: '#/components/schemas/StellarChangeTrustTemplate'
              RIPPLE_TRUST_SET: '#/components/schemas/RippleTrustSetTemplate'
              RIPPLE_REQUIRE_DESTINATION_TAG: '#/components/schemas/RippleRequireDestinationTagTemplate'
          oneOf:
          - $ref: '#/components/schemas/SolanaCreateNonceAccountTemplate'
          - $ref: '#/components/schemas/StellarChangeTrustTemplate'
          - $ref: '#/components/schemas/RippleTrustSetTemplate'
          - $ref: '#/components/schemas/RippleRequireDestinationTagTemplate'
      additionalProperties: false
      required:
      - template
      - sourceWalletId
    RippleRequireDestinationTagTemplate:
      description: 'Template for an AccountSet transaction that sets or clears the asfRequireDest flag.


        When enabled (asfRequireDest set), the account rejects incoming payments that do not specify a destination tag.

        When disabled (asfRequireDest cleared), the account accepts incoming payments regardless of whether a destination tag is present.'
      type: object
      properties:
        enable:
          description: True to set the asfRequireDest flag (require destination tags on incoming payments). False to clear the flag (allow payments without destination tags).
          type: boolean
        fee:
          description: Transaction fee in XRP
          type: string
        sequence:
          description: Sequence number for the source account
          type: string
        type:
          description: Discriminator field indicating this is a Ripple Require Destination Tag template
          type: string
          default: RIPPLE_REQUIRE_DESTINATION_TAG
          enum:
          - RIPPLE_REQUIRE_DESTINATION_TAG
      additionalProperties: false
      required:
      - type
      - enable
      - sequence
      - fee
      title: Ripple Require Destination Tag Template
    AssetType:
      description: Details about a supported asset type, including its identifier, name, decimal precision, and blockchain network
      type: object
      properties:
        assetType:
          description: A unique string identifying a specific asset on a specific blockchain and environment (testnet, mainnet).
          type: string
          example: BTC
        decimals:
          description: Number of decimal places used to represent amounts of this asset. For example, Bitcoin has 8 decimals, so 1 BTC = 100000000 satoshis.
          type: integer
          example: 8
        name:
          description: Human-readable name of the asset
          type: string
          example: Bitcoin
        networkId:
          description: A unique string identifying a combination of blockchain and environment (testnet, mainnet).
          type: string
          example: BTC
        onchainIdentifier:
          description: On-chain identifier for the asset. For Ethereum, this is the contract address for token contracts (e.g., ERC-20 tokens). For Tendermint-based networks, this represents the denomination or asset identifier used on-chain. Omitted for native blockchain assets like BTC or ETH.
          type:
          - string
          - 'null'
          example: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'
      required:
      - assetType
      - name
      - decimals
      - networkId
    SolanaCreateNonceAccountTemplate:
      description: Template for creating a Solana nonce account transaction
      type: object
      properties:
        authorityAddress:
          description: The public key address that will have authority over the nonce account
          type: string
          example: 3z9vL1zjN6qyAFHhHQdWYRTFAcy69pJydkZmSFBKHg1R
        computeUnitLimit:
          description: Maximum compute units the transaction can consume. If not specified, the runtime will compute a default value.
          type:
          - integer
          - 'null'
        computeUnitPrice:
          description: Price per compute unit in SOL. Used to prioritize transactions.
          type:
          - string
          - 'null'
        nonceAccountAddress:
          description: The public key address of the nonce account to be created
          type: string
          example: 9aE476sH92Vz7DMPyq5WLPkrKWivxeuTKEFKd2sZZcde
        rent:
          description: Amount of SOL for rent exemption
          type: string
          example: '0.0015'
        replayProtectionParams:
          $ref: '#/components/schemas/SOLReplayProtectionParams'
        type:
          description: Discriminator field indicating this is a Solana nonce account creation template
          type: string
          default: SOLANA_CREATE_NONCE_ACCOUNT
          enum:
          - SOLANA_CREATE_NONCE_ACCOUNT
      additionalProperties: false
      required:
      - type
      - nonceAccountAddress
      - authorityAddress
      - rent
      - replayProtectionParams
      title: Solana Create Nonce Account Template
    SOLNonceReplayProtection:
      description: Solana nonce-based replay protection for durable transactions
      type: object
      properties:
        nonceAccount:
          description: Nonce account address
          type: string
        nonceValue:
          description: Current nonce value
          type: string
        replayProtection:
          type: string
          default: NONCE
          enum:
          - NONCE
      additionalProperties: false
      required:
      - replayProtection
      - nonceAccount
      - nonceValue
      title: Nonce-based Replay Protection
    ListAssetTypesResponse:
      description: Response containing a list of supported asset types
      type: object
      properties:
        data:
          description: Array of asset type details
          type: array
          items:
            $ref: '#/components/schemas/AssetType'
      required:
      - data
    SUINetworkSpecific:
      description: 'Sui-specific network parameters for transaction construction. Exactly one principal source must be specified: either payPrincipalFromBalance=true or a non-empty objectsForPrincipal array. Exactly one fee source must be specified: payFeeFromBalance=true, payFeeFromPrincipalObjects=true, or a non-empty objectsForFee array.'
      type: object
      properties:
        epoch:
          description: First epoch for the transaction validity window. Required when payFeeFromBalance is true.
          type: integer
          format: uint64
        gasBudget:
          description: Maximum gas budget in SUI. The transaction fails if execution cost exceeds this.
          type: string
        gasPrice:
          description: Gas price in SUI. Query the network for the current reference gas price.
          type: string
        mainnetNetworkId:
          description: Discriminator field. Always set to the mainnet network ID, even when constructing transactions for testnets.
          type: string
          default: SUI
          enum:
          - SUI
          x-go-type: apimodels.Network
          x-go-type-import:
            path: github.com/anchorlabsinc/anchorage/source/go/lib/restapi/apimodels
            name: apimodels
        nonce:
          description: Nonce for transaction replay protection. Required when payFeeFromBalance is true.
          type: integer
          format: uint32
        objectsForFee:
          description: Coin objects to use for fee payment. Must be empty when payFeeFromBalance or payFeeFromPrincipalObjects is true.
          type: array
          items:
            $ref: '#/components/schemas/SUICoin'
        objectsForPrincipal:
          description: Coin objects whose value funds the transfer principal. Must be empty when payPrincipalFromBalance is true. Required when payPrincipalFromBalance is false.
          type: array
          items:
            $ref: '#/components/schemas/SUICoin'
        payFeeFromBalance:
          description: When true, the transaction fee is paid from the sender's address balance. Mutually exclusive with payFeeFromPrincipalObjects and objectsForFee.
          type: boolean
        payFeeFromPrincipalObjects:
          description: When true, the principal coin objects are merged into the gas coin and the fee is paid from that merged coin. Requires objectsForPrincipal to be non-empty. Mutually exclusive with payFeeFromBalance and objectsForFee.
          type: boolean
        payPrincipalFromBalance:
          description: When true, the principal amount is paid from the sender's address balance. Mutually exclusive with objectsForPrincipal.
          type: boolean
        sender:
          description: Addr

# --- truncated at 32 KB (55 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/anchorage/refs/heads/main/openapi/anchorage-transaction-construction-api-openapi.yml