---
title: "Create a transaction"
method: POST
path: "/transactions"
tags: ["Transactions"]
---

# Create a transaction

`POST /transactions`

Create a transaction.

## Request body

- TransactionCreationDataLAM
  - `account_id` integer, nullable — The account's id
  - `account_name` string, required — The account's name.
  - `amount` string, nullable — The amount to be sent, in the currency's lowest unit. For Smart Contract interaction, use "0" instead of null
  - `coin_fields` union — coin specific data
    - BitcoinFieldsLAM
      - `utxo_picking_strategy` 'DEEP_OUTPUTS_FIRST' | 'MERGE_OUTPUTS' | 'OPTIMIZE_SIZE', required — When creating a Bitcoin transaction you can select which UTXOs should be used among these three options: * Merge outputs: To select UTXOs which have the lowest amounts. This strategy is used by default. * Optimize size: To select UTXOs which have the highest amounts. * Deep outputs first: To select UTXOs which have the highest amount of confirmations on the blockchain.
    - TezosFieldsLAM
      - `gas_limit` string, nullable
      - `storage_limit` string, nullable
      - `type` 'DELEGATE' | 'SEND' | 'UNDELEGATE', required
    - EthereumAndEvmFieldsLAM
      - `contract_deployment` EthereumContractDeploymentFieldsLAM
        - `creation_bytecode` string, nullable — The contract compiled bytecode
      - `contract_interaction` EthereumSmartContractFieldsLAM
        - `abi` unknown[], nullable — The array of function, event, and error descriptions in JSON format, representing the contract’s interface according to the ABI Specification. This field will be ignored if contract_data is not null
          - unknown
        - `contract_data` string, nullable — The data to provide to the smart contract, encoded in hex format according to the ABI specification
        - `function_arguments` object, nullable — The JSON object with the arguments for the smart contract function execution, according to the provided contract_abi.
        - `function_name` string, nullable — The name of the smart contract function to execute, as specified in the provided contract_abi.
      - `gas_limit` string, nullable — For Ethereum, specify a gas_limit, ignored if speed is not CUSTOM. The unit is wei. Decimal values are round down to integer
      - `gas_price` string, nullable — For Ethereum, specify a gas_price, ignored if speed is not CUSTOM. The unit is wei. Decimal values are round down to integer
    - RippleFieldsLAM
      - `destination_tag` integer, nullable — The corresponding destination tag (XRP only).
    - StellarFieldsLAM
      - `memo` union, required — A valid stellar memo (['MEMO_HASH', 'MEMO_ID', 'MEMO_RETURN', 'MEMO_TEXT'])
        - StellarMemoHashLAM
          - `MEMO_HASH` string, required — Transaction Hash Memo (64 bytes hexadecimal string)
        - StellarMemoIdLAM
          - `MEMO_ID` integer, required — Id Memo (unsigned 64 bits integer)
        - StellarMemoReturnLAM
          - `MEMO_RETURN` string, required — A 64 bytes hexadecimal string intended to be interpreted as the hash of the transaction the sender is refunding.
        - StellarMemoTextLAM
          - `MEMO_TEXT` string, required — Text Memo (at most a 28 bytes string)
    - SolanaStakeCreateAndDelegateFieldsLAM
      - `type` 'SEND' | 'STAKE_CREATE_DELEGATE' | 'STAKE_DEACTIVATE' | 'STAKE_DELEGATE' | 'STAKE_MERGE' | 'STAKE_SPLIT' | 'STAKE_SPLIT_DEACTIVATE' | 'STAKE_WITHDRAW', required
    - SolanaStakeActionFieldsLAM
      - `stake_account` string, required
      - `type` 'SEND' | 'STAKE_CREATE_DELEGATE' | 'STAKE_DEACTIVATE' | 'STAKE_DELEGATE' | 'STAKE_MERGE' | 'STAKE_SPLIT' | 'STAKE_SPLIT_DEACTIVATE' | 'STAKE_WITHDRAW', required
    - SolanaStakeMergeFieldsLAM
      - `merge_dst_account` string, required
      - `merge_src_account` string, required
      - `type` 'SEND' | 'STAKE_CREATE_DELEGATE' | 'STAKE_DEACTIVATE' | 'STAKE_DELEGATE' | 'STAKE_MERGE' | 'STAKE_SPLIT' | 'STAKE_SPLIT_DEACTIVATE' | 'STAKE_WITHDRAW', required
    - CardanoFieldsLAM
      - `type` 'SEND', required
    - PolkadotFieldsLAM
      - `is_proxy` boolean, required
      - `payee` 'null' | 'Staked' | 'Stash', nullable
      - `type` 'BOND' | 'BONDEXTRA' | 'CHILL' | 'REBOND' | 'SEND' | 'SETPAYEE' | 'UNBOND' | 'WITHDRAWUNBONDED', required
  - `max_fees` string, required — Max fees represent the highest possible fee amount you will pay to broadcast this transaction. The final fees, calculated once the transaction is approved by the last Operator, might be lower, but will never exceed that amount. We recommend estimating max fees through our fee estimation endpoint prior to creating the transaction request. See https://help.vault.ledger.com/developer-portal/content/transactions/tx/ for details.For Solana and Polkadot, `max_fees` field must be ignored.
  - `note` TransactionNoteLiteLAM
    - `content` string, required
    - `title` string, required
  - `recipient` string, required — The recipient's address.
  - `speed` 'CUSTOM' | 'FAST' | 'NORMAL' | 'SLOW', required — The transaction's processing speed.

## Response `200`

Transaction to approve

- Transaction
  - `account_id` integer, required
  - `account_index` integer, required
  - `amount` string, nullable — the transaction amount, in base units
  - `block` Block
    - `details` object, nullable — The block's details
    - `hash` string, required
    - `height` integer, required
    - `time` string, date-time, required
  - `broadcast_on` string, date-time, nullable
  - `coin_fields` union
    - BitcoinFields
      - `fees_per_byte` string, nullable — fees per bytes
      - `type` 'Bitcoin', required
      - `utxo_picking_strategy` 'null' | 'DEEP_OUTPUTS_FIRST' | 'MERGE_OUTPUTS' | 'OPTIMIZE_SIZE', nullable — UTXO strategy used for this transaction
    - CardanoCoinFields
      - `type` 'Cardano', required
    - EthereumAndEvmFieldsLegacy
      - `contract_deployment` EthereumContractDeploymentFields
        - `creation_bytecode` string, nullable — The contract compiled bytecode
      - `contract_interaction` EthereumSmartContractFields
        - `contract_data` string, required — The transaction data provided to the smart contract, encoded according to the ABI specification
        - `contract_name` string, nullable — The Etherscan name of the smart contract executed
        - `dapp` string, nullable — The name of the Ledger Enterprise DApp
        - `function_arguments` object, nullable — The JSON object with the arguments for the smart contract function execution, as per the contract's ABI specification.
        - `function_name` string, nullable — The name of the smart contract function executed, as per the contract's ABI specification.
        - `smart_contract_interaction_type` string, nullable — The internal Ledger Enterprise type for the contract interaction
      - `gas_limit` string, required — gas limit in wei
      - `gas_price` string, required — gas price in wei
      - `type` string
    - PolkadotFields1
      - `tx_parameters` union, required — Fields for specific transaction types
        - PolkadotBondFields
          - `controller` string, required — Address of controller account
          - `is_proxy` boolean, nullable — Is the transaction realized via proxy ?
          - `payee` string, required — Rewards destination
          - `real` string, nullable — In the case of a proxied transaction, address of the proxied account.
          - `type` string
        - PolkadotSetControllerFields
          - `controller` string, required — Address of controller account
          - `is_proxy` boolean, nullable — Is the transaction realized via proxy ?
          - `real` string, nullable — In the case of a proxied transaction, address of the proxied account.
          - `type` string
        - PolkadotSetPayeeFields
          - `is_proxy` boolean, nullable — Is the transaction realized via proxy ?
          - `payee` string, required — Rewards destination
          - `real` string, nullable — In the case of a proxied transaction, address of the proxied account.
          - `type` string
        - PolkadotAddProxyFields
          - `is_proxy` boolean, nullable — Is the transaction realized via proxy ?
          - `kind` 'Staking', required — Kind of proxy to add
          - `proxy` string, required — Address of the proxy to add
          - `real` string, nullable — In the case of a proxied transaction, address of the proxied account.
          - `type` string
        - PolkadotKillAnonymousFields
          - `ext_index` integer, required — Extrinsic index of the proxy creation extrinsic
          - `height` integer, required — Block height of the proxy creation extrinsic
          - `index` integer, required — Disambiguation index of the proxy, usually 0
          - `is_proxy` boolean, nullable — Is the transaction realized via proxy ?
          - `kind` string, required — Type of the proxy to kill
          - `real` string, nullable — In the case of a proxied transaction, address of the proxied account.
          - `type` string
        - PolkadotAnonymousProxyFields
          - `anonymousproxy_address` string, nullable — Address of the proxy created
          - `is_proxy` boolean, nullable — Is the transaction realized via proxy ?
          - `kind` string, required — Type of the proxy to create
          - `real` string, nullable — In the case of a proxied transaction, address of the proxied account.
          - `type` string
        - PolkadotCommonFields
          - `is_proxy` boolean, nullable — Is the transaction realized via proxy ?
          - `real` string, nullable — In the case of a proxied transaction, address of the proxied account.
      - `type` 'Polkadot', required
    - RippleFields
      - `destination_tag` integer, nullable — ripple destination tag
      - `type` 'Ripple', required
    - SolanaFields
      - `tx_parameters` union — Fields for specific transaction types
        - SolanaStakeActionFields
          - `stake_account` string, required — The account from which to withdraw
        - SolanaStakeMergeFields
          - `merge_dst_account` string, required — The account to merge in
          - `merge_src_account` string, required — The account to merge
        - SolanaCreateSPLTokenAccountFields
          - `token_mint` string, required — The token mint address of the token to create an account for
        - SolanaSendSPLTokenFields
          - `token_mint` string, required — The token mint address of the token to interact with
      - `type` 'Solana', required
    - StellarFields
      - `memo` union — A valid stellar memo
        - StellarMemoHash
          - `MEMO_HASH` string, required — Transaction Hash Memo (64 bytes hexadecimal string)
          - `type` string
        - StellarMemoId
          - `MEMO_ID` integer, required — Id Memo (unsigned 64 bits integer)
          - `type` string
        - StellarMemoReturn
          - `MEMO_RETURN` string, required — A 64 bytes hexadecimal string intended to be interpreted as the hash of the transaction the sender is refunding.
          - `type` string
        - StellarMemoText
          - `MEMO_TEXT` string, required — Text Memo (at most a 28 bytes string)
          - `type` string
      - `type` 'Stellar', required
    - TezosFields1
      - `gas_limit` string, nullable — gas limit
      - `storage_limit` string, nullable — storage limit
      - `type` 'Tezos', required
    - EthereumAndEvmFieldsEip1559
      - `contract_deployment` EthereumContractDeploymentFields
        - `creation_bytecode` string, nullable — The contract compiled bytecode
      - `contract_interaction` EthereumSmartContractFields
        - `contract_data` string, required — The transaction data provided to the smart contract, encoded according to the ABI specification
        - `contract_name` string, nullable — The Etherscan name of the smart contract executed
        - `dapp` string, nullable — The name of the Ledger Enterprise DApp
        - `function_arguments` object, nullable — The JSON object with the arguments for the smart contract function execution, as per the contract's ABI specification.
        - `function_name` string, nullable — The name of the smart contract function executed, as per the contract's ABI specification.
        - `smart_contract_interaction_type` string, nullable — The internal Ledger Enterprise type for the contract interaction
      - `gas_limit` string, required — gas limit in wei
      - `priority_fees` string, required — The maximum priority fee per gas for the Ethereum transaction, in the smallest currency unit.
      - `type` string
    - DefaultFields
      - `type` string, required
  - `compliance` TransactionCompliance
    - `registration_ids` ProviderRegistrationIds, required
      - `chainalysis` string, required — Chainalysis's transaction registration id
    - `risk` TransactionRisk
      - `provider_details` ProviderTransactionRiskDetails
        - `chainalysis` ChainalysisTransactionAlert[], nullable — Chainalysis's transaction risk scoring and details
          - `category_id` integer, nullable — The identifier of the entity category the alert rule is tracking
          - `exposure_type` 'DIRECT' | 'INDIRECT', required — Defines the exposure direction as DIRECT or INDIRECT
          - `provider_id` string, required — A unique identifier of the alert
          - `risk` 'High' | 'Low' | 'Medium' | 'Severe', required — Address risk as defined by Chainalysis
          - `service` string, nullable — The name of the service as defined by Chainalysis
          - `value` number, required — The USD amount that caused the alert to trigger
      - `risk` 'HIGH' | 'LOW' | 'MEDIUM', required — Transaction risk as defined by Ledger
  - `confirmations` integer, required
  - `created_by` integer, required
  - `created_on` string, date-time, required
  - `currency` 'Dollar' | 'Euro' | 'arbitrum' | 'arbitrum_goerli' | 'avalanche_c_chain' | 'avalanche_c_chain_fuji' | 'base' | 'base_goerli' | 'bitcoin' | 'bitcoin_cash' | 'bitcoin_gold' | 'bitcoin_testnet' | 'bsc' | 'cardano' | 'celo' | 'celo_alfajores' | 'cosmos' | 'cronos' | 'cronos_testnet' | 'dash' | 'digibyte' | 'dogecoin' | 'ethereum' | 'ethereum_goerli' | 'ethereum_holesky' | 'ethereum_pow' | 'ethereum_ropsten' | 'ethereum_sepolia' | 'fantom' | 'fantom_testnet' | 'filecoin' | 'filecoin_calibration' | 'flare' | 'flare_coston' | 'kava_evm' | 'kava_evm_testnet' | 'klaytn' | 'klaytn_baobab' | 'komodo' | 'litecoin' | 'near' | 'optimism' | 'optimism_goerli' | 'pivx' | 'polkadot' | 'polygon' | 'polygon_mumbai' | 'ripple' | 'solana' | 'solana_devnet' | 'solana_testnet' | 'stellar' | 'tezos' | 'tomo' | 'tomo_testnet' | 'tron' | 'vertcoin' | 'viacoin' | 'westend', required
  - `currency_family` 'bitcoin' | 'cardano' | 'cosmos' | 'ethereum' | 'near' | 'polkadot' | 'polygon' | 'ripple' | 'solana' | 'stellar' | 'tezos' | 'tron', required
  - `failure_reasons` TransactionFailureReasons
    - `client_reason` string, required
    - `reason` string, required
  - `fees` string, nullable — the transaction fee paid, in base units
  - `id` integer, required
  - `interaction_type` string, nullable
  - `labels` LiteLabel[] — labels of this transaction
    - `id` integer, required
    - `info` LabelInfo, required
      - `color` string, required — label's color
      - `description` string, required — label's description
    - `name` string, required — name of the tag
  - `last_request` integer, nullable
  - `max_fees` string, nullable — Max fees represent the highest possible fee amount you will pay to broadcast this transaction, in base units. The final fees, calculated once the transaction is approved by the last Operator, might be lower, but will never exceed that amount. See https://help.vault.ledger.com/Content/transactions/tx.html for details
  - `metadata` union
    - SolanaTxMetadata
      - `stake_pubkey` string, nullable
    - CardanoTxMetadata
      - `amount` integer, nullable
      - `change_path` string, nullable
      - `stake_path` string, nullable
  - `min_confirmations` integer, required
  - `notes` TransactionNote[], required
    - `content` string, required
    - `title` string, required
  - `recipient` string, nullable
  - `senders` string[], nullable — Only available once the transaction has been submitted to the blockchain
  - `speed` 'null' | 'CUSTOM' | 'FAST' | 'NORMAL' | 'SLOW', nullable
  - `status` 'APPROVED' | 'CONFIRMED' | 'DROPPED' | 'FAILED' | 'FAILED_TO_BROADCAST' | 'FAILED_TO_CRAFT' | 'FAILED_TO_SIGN' | 'PENDING_APPROVAL' | 'PENDING_CREATE_IN_HSM' | 'REJECTED' | 'REPLACED' | 'SIGNED' | 'SUBMITTED', required
  - `tx_hash` string, nullable
  - `type` 'ADDPROXY' | 'ANONYMOUSPROXY' | 'BOND' | 'BONDEXTRA' | 'CHILL' | 'CREATE_SPL_TOKEN_ACCOUNT' | 'DELEGATE' | 'DELEGATE_VOTE_TO_DREP' | 'DEPLOY_CONTRACT' | 'EXECUTE_CONTRACT' | 'KILLANONYMOUS' | 'PROXY' | 'REBOND' | 'RECEIVE' | 'RECEIVE_SPL_TOKEN_CHECKED' | 'RECEIVE_SPL_TOKEN_CHECKED_FUNDED' | 'REMOVEPROXY' | 'REVEAL' | 'REWARD' | 'SEND' | 'SEND_SPL_TOKEN_CHECKED' | 'SEND_SPL_TOKEN_CHECKED_FUNDED' | 'SETCONTROLLER' | 'SETPAYEE' | 'STAKE' | 'STAKE_CREATE_DELEGATE' | 'STAKE_DEACTIVATE' | 'STAKE_DELEGATE' | 'STAKE_MERGE' | 'STAKE_SPLIT' | 'STAKE_SPLIT_DEACTIVATE' | 'STAKE_WITHDRAW' | 'STAKING_DELEGATE' | 'STAKING_DEREGISTER' | 'STAKING_REGISTER' | 'STAKING_WITHDRAW' | 'UNBOND' | 'UNDELEGATE' | 'UNKNOWN' | 'WITHDRAWUNBONDED', required
  - `uid` string, nullable

## Other responses

- `400` — Invalid transaction parameters

---

[API](https://skmtc.net/ledgerhq/apis/vault-api.md) · [All operations](https://skmtc.net/ledgerhq/apis/vault-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/ledgerhq/vault-api/revisions/c88faa17bc25/schema)
