Anchorage Digital Transaction Construction API
Operations for constructing and signing transactions via the Construct API
Operations for constructing and signing transactions via the Construct API
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
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.curl "https://apis.io/api/v1/apis/anchorage-transaction-construction-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
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: 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