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

# Submit transaction

`POST /transactions`

This endpoint accepts transaction submissions in two formats.

To submit a transaction as JSON, you must submit a SubmitTransactionRequest.
To build this request, do the following:

1. Encode the transaction as BCS. If you are using a language that has
native BCS support, make sure of that library. If not, you may take
advantage of /transactions/encode_submission. When using this
endpoint, make sure you trust the node you're talking to, as it is
possible they could manipulate your request.
2. Sign the encoded transaction and use it to create a TransactionSignature.
3. Submit the request. Make sure to use the "application/json" Content-Type.

To submit a transaction as BCS, you must submit a SignedTransaction
encoded as BCS. See SignedTransaction in types/src/transaction/mod.rs.

## Request body

- SubmitTransactionRequest
  - `sender` string, hex, required — Hex encoded 32 byte Aptos account address
  - `sequence_number` string, uint64, required — A string containing a 64-bit unsigned integer. We represent u64 values as a string to ensure compatability with languages such as JavaScript that do not parse u64s in JSON natively.
  - `max_gas_amount` string, uint64, required — A string containing a 64-bit unsigned integer. We represent u64 values as a string to ensure compatability with languages such as JavaScript that do not parse u64s in JSON natively.
  - `gas_unit_price` string, uint64, required — A string containing a 64-bit unsigned integer. We represent u64 values as a string to ensure compatability with languages such as JavaScript that do not parse u64s in JSON natively.
  - `expiration_timestamp_secs` string, uint64, required — A string containing a 64-bit unsigned integer. We represent u64 values as a string to ensure compatability with languages such as JavaScript that do not parse u64s in JSON natively.
  - `payload` union, required
    - object
      - `type` string, required
      - `function` ScriptFunctionId, required
        - `module` MoveModuleId, required
          - `address` string, hex, required — Hex encoded 32 byte Aptos account address
          - `name` string, required
        - `name` string, required
      - `type_arguments` MoveType[], required
      - `arguments` unknown[], required
        - unknown
    - object
      - `type` string, required
      - `code` MoveScriptBytecode, required
        - `bytecode` string, hex, required — All bytes (Vec<u8>) data is represented as hex-encoded string prefixed with `0x` and fulfilled with two hex digits per byte. Unlike the `Address` type, HexEncodedBytes will not trim any zeros.
        - `abi` MoveFunction
          - `name` string, required
          - `visibility` 'private' | 'public' | 'friend', required
          - `is_entry` boolean, required
          - `generic_type_params` MoveFunctionGenericTypeParam[], required
            - `constraints` MoveAbility[], required
          - `params` MoveType[], required
          - `return` MoveType[], required
      - `type_arguments` MoveType[], required
      - `arguments` unknown[], required
        - unknown
    - object
      - `type` string, required
      - `modules` MoveModuleBytecode[], required
        - `bytecode` string, hex, required — All bytes (Vec<u8>) data is represented as hex-encoded string prefixed with `0x` and fulfilled with two hex digits per byte. Unlike the `Address` type, HexEncodedBytes will not trim any zeros.
        - `abi` MoveModule
          - `address` string, hex, required — Hex encoded 32 byte Aptos account address
          - `name` string, required
          - `friends` MoveModuleId[], required
            - `address` string, hex, required — Hex encoded 32 byte Aptos account address
            - `name` string, required
          - `exposed_functions` MoveFunction[], required
            - `name` string, required
            - `visibility` 'private' | 'public' | 'friend', required
            - `is_entry` boolean, required
            - `generic_type_params` MoveFunctionGenericTypeParam[], required
              - …
            - `params` MoveType[], required
            - `return` MoveType[], required
          - `structs` MoveStruct[], required
            - `name` string, required
            - `is_native` boolean, required
            - `abilities` MoveAbility[], required
            - `generic_type_params` MoveStructGenericTypeParam[], required
              - …
            - `fields` MoveStructField[], required
              - …
    - object
      - `type` string, required
      - `write_set` union, required
        - object
          - `type` string, required
          - `execute_as` string, hex, required — Hex encoded 32 byte Aptos account address
          - `script` ScriptPayload, required
            - `code` MoveScriptBytecode, required
              - …
            - `type_arguments` MoveType[], required
            - `arguments` unknown[], required
              - …
        - object
          - `type` string, required
          - `changes` WriteSetChange[], required
            - union
              - …
          - `events` Event[], required
            - `key` string, hex, required — Event key is a global index for an event stream. It is hex-encoded BCS bytes of `EventHandle` `guid` field value, which is a combination of a `uint64` creation number and account address (without trimming leading zeros). For example, event key `0x000000000000000088fbd33f54e1126269769780feb24480428179f552e2313fbe571b72e62a1ca1` is combined by the following 2 parts: 1. `0000000000000000`: `uint64` representation of `0`. 2. `88fbd33f54e1126269769780feb24480428179f552e2313fbe571b72e62a1ca1`: 32 bytes of account address.
            - `sequence_number` string, uint64, required — A string containing a 64-bit unsigned integer. We represent u64 values as a string to ensure compatability with languages such as JavaScript that do not parse u64s in JSON natively.
            - `type` string, required — String representation of an on-chain Move type tag that is exposed in transaction payload. Values: - bool - u8 - u64 - u128 - address - signer - vector: `vector<{non-reference MoveTypeId}>` - struct: `{address}::{module_name}::{struct_name}::<{generic types}>` Vector type value examples: - `vector<u8>` - `vector<vector<u64>>` - `vector<0x1::coin::CoinStore<0x1::aptos_coin::AptosCoin>>` Struct type value examples: - `0x1::coin::CoinStore<0x1::aptos_coin::AptosCoin> - `0x1::account::Account` Note: 1. Empty chars should be ignored when comparing 2 struct tag ids. 2. When used in an URL path, should be encoded by url-encoding (AKA percent-encoding).
            - `data` unknown, required
  - `signature` union, required
    - object
      - `type` string, required
      - `public_key` string, hex, required — All bytes (Vec<u8>) data is represented as hex-encoded string prefixed with `0x` and fulfilled with two hex digits per byte. Unlike the `Address` type, HexEncodedBytes will not trim any zeros.
      - `signature` string, hex, required — All bytes (Vec<u8>) data is represented as hex-encoded string prefixed with `0x` and fulfilled with two hex digits per byte. Unlike the `Address` type, HexEncodedBytes will not trim any zeros.
    - object
      - `type` string, required
      - `public_keys` HexEncodedBytes[], required
      - `signatures` HexEncodedBytes[], required
      - `threshold` integer, required
      - `bitmap` string, hex, required — All bytes (Vec<u8>) data is represented as hex-encoded string prefixed with `0x` and fulfilled with two hex digits per byte. Unlike the `Address` type, HexEncodedBytes will not trim any zeros.
    - object
      - `type` string, required
      - `sender` union, required
        - object
          - `type` string, required
          - `public_key` string, hex, required — All bytes (Vec<u8>) data is represented as hex-encoded string prefixed with `0x` and fulfilled with two hex digits per byte. Unlike the `Address` type, HexEncodedBytes will not trim any zeros.
          - `signature` string, hex, required — All bytes (Vec<u8>) data is represented as hex-encoded string prefixed with `0x` and fulfilled with two hex digits per byte. Unlike the `Address` type, HexEncodedBytes will not trim any zeros.
        - object
          - `type` string, required
          - `public_keys` HexEncodedBytes[], required
          - `signatures` HexEncodedBytes[], required
          - `threshold` integer, required
          - `bitmap` string, hex, required — All bytes (Vec<u8>) data is represented as hex-encoded string prefixed with `0x` and fulfilled with two hex digits per byte. Unlike the `Address` type, HexEncodedBytes will not trim any zeros.
      - `secondary_signer_addresses` Address[], required
      - `secondary_signers` AccountSignature[], required
        - union
          - object
            - `type` string, required
            - `public_key` string, hex, required — All bytes (Vec<u8>) data is represented as hex-encoded string prefixed with `0x` and fulfilled with two hex digits per byte. Unlike the `Address` type, HexEncodedBytes will not trim any zeros.
            - `signature` string, hex, required — All bytes (Vec<u8>) data is represented as hex-encoded string prefixed with `0x` and fulfilled with two hex digits per byte. Unlike the `Address` type, HexEncodedBytes will not trim any zeros.
          - object
            - `type` string, required
            - `public_keys` HexEncodedBytes[], required
            - `signatures` HexEncodedBytes[], required
            - `threshold` integer, required
            - `bitmap` string, hex, required — All bytes (Vec<u8>) data is represented as hex-encoded string prefixed with `0x` and fulfilled with two hex digits per byte. Unlike the `Address` type, HexEncodedBytes will not trim any zeros.

## Response `202`

- PendingTransaction
  - `hash` string, required
  - `sender` string, hex, required — Hex encoded 32 byte Aptos account address
  - `sequence_number` string, uint64, required — A string containing a 64-bit unsigned integer. We represent u64 values as a string to ensure compatability with languages such as JavaScript that do not parse u64s in JSON natively.
  - `max_gas_amount` string, uint64, required — A string containing a 64-bit unsigned integer. We represent u64 values as a string to ensure compatability with languages such as JavaScript that do not parse u64s in JSON natively.
  - `gas_unit_price` string, uint64, required — A string containing a 64-bit unsigned integer. We represent u64 values as a string to ensure compatability with languages such as JavaScript that do not parse u64s in JSON natively.
  - `expiration_timestamp_secs` string, uint64, required — A string containing a 64-bit unsigned integer. We represent u64 values as a string to ensure compatability with languages such as JavaScript that do not parse u64s in JSON natively.
  - `payload` union, required
    - object
      - `type` string, required
      - `function` ScriptFunctionId, required
        - `module` MoveModuleId, required
          - `address` string, hex, required — Hex encoded 32 byte Aptos account address
          - `name` string, required
        - `name` string, required
      - `type_arguments` MoveType[], required
      - `arguments` unknown[], required
        - unknown
    - object
      - `type` string, required
      - `code` MoveScriptBytecode, required
        - `bytecode` string, hex, required — All bytes (Vec<u8>) data is represented as hex-encoded string prefixed with `0x` and fulfilled with two hex digits per byte. Unlike the `Address` type, HexEncodedBytes will not trim any zeros.
        - `abi` MoveFunction
          - `name` string, required
          - `visibility` 'private' | 'public' | 'friend', required
          - `is_entry` boolean, required
          - `generic_type_params` MoveFunctionGenericTypeParam[], required
            - `constraints` MoveAbility[], required
          - `params` MoveType[], required
          - `return` MoveType[], required
      - `type_arguments` MoveType[], required
      - `arguments` unknown[], required
        - unknown
    - object
      - `type` string, required
      - `modules` MoveModuleBytecode[], required
        - `bytecode` string, hex, required — All bytes (Vec<u8>) data is represented as hex-encoded string prefixed with `0x` and fulfilled with two hex digits per byte. Unlike the `Address` type, HexEncodedBytes will not trim any zeros.
        - `abi` MoveModule
          - `address` string, hex, required — Hex encoded 32 byte Aptos account address
          - `name` string, required
          - `friends` MoveModuleId[], required
            - `address` string, hex, required — Hex encoded 32 byte Aptos account address
            - `name` string, required
          - `exposed_functions` MoveFunction[], required
            - `name` string, required
            - `visibility` 'private' | 'public' | 'friend', required
            - `is_entry` boolean, required
            - `generic_type_params` MoveFunctionGenericTypeParam[], required
              - …
            - `params` MoveType[], required
            - `return` MoveType[], required
          - `structs` MoveStruct[], required
            - `name` string, required
            - `is_native` boolean, required
            - `abilities` MoveAbility[], required
            - `generic_type_params` MoveStructGenericTypeParam[], required
              - …
            - `fields` MoveStructField[], required
              - …
    - object
      - `type` string, required
      - `write_set` union, required
        - object
          - `type` string, required
          - `execute_as` string, hex, required — Hex encoded 32 byte Aptos account address
          - `script` ScriptPayload, required
            - `code` MoveScriptBytecode, required
              - …
            - `type_arguments` MoveType[], required
            - `arguments` unknown[], required
              - …
        - object
          - `type` string, required
          - `changes` WriteSetChange[], required
            - union
              - …
          - `events` Event[], required
            - `key` string, hex, required — Event key is a global index for an event stream. It is hex-encoded BCS bytes of `EventHandle` `guid` field value, which is a combination of a `uint64` creation number and account address (without trimming leading zeros). For example, event key `0x000000000000000088fbd33f54e1126269769780feb24480428179f552e2313fbe571b72e62a1ca1` is combined by the following 2 parts: 1. `0000000000000000`: `uint64` representation of `0`. 2. `88fbd33f54e1126269769780feb24480428179f552e2313fbe571b72e62a1ca1`: 32 bytes of account address.
            - `sequence_number` string, uint64, required — A string containing a 64-bit unsigned integer. We represent u64 values as a string to ensure compatability with languages such as JavaScript that do not parse u64s in JSON natively.
            - `type` string, required — String representation of an on-chain Move type tag that is exposed in transaction payload. Values: - bool - u8 - u64 - u128 - address - signer - vector: `vector<{non-reference MoveTypeId}>` - struct: `{address}::{module_name}::{struct_name}::<{generic types}>` Vector type value examples: - `vector<u8>` - `vector<vector<u64>>` - `vector<0x1::coin::CoinStore<0x1::aptos_coin::AptosCoin>>` Struct type value examples: - `0x1::coin::CoinStore<0x1::aptos_coin::AptosCoin> - `0x1::account::Account` Note: 1. Empty chars should be ignored when comparing 2 struct tag ids. 2. When used in an URL path, should be encoded by url-encoding (AKA percent-encoding).
            - `data` unknown, required
  - `signature` union
    - object
      - `type` string, required
      - `public_key` string, hex, required — All bytes (Vec<u8>) data is represented as hex-encoded string prefixed with `0x` and fulfilled with two hex digits per byte. Unlike the `Address` type, HexEncodedBytes will not trim any zeros.
      - `signature` string, hex, required — All bytes (Vec<u8>) data is represented as hex-encoded string prefixed with `0x` and fulfilled with two hex digits per byte. Unlike the `Address` type, HexEncodedBytes will not trim any zeros.
    - object
      - `type` string, required
      - `public_keys` HexEncodedBytes[], required
      - `signatures` HexEncodedBytes[], required
      - `threshold` integer, required
      - `bitmap` string, hex, required — All bytes (Vec<u8>) data is represented as hex-encoded string prefixed with `0x` and fulfilled with two hex digits per byte. Unlike the `Address` type, HexEncodedBytes will not trim any zeros.
    - object
      - `type` string, required
      - `sender` union, required
        - object
          - `type` string, required
          - `public_key` string, hex, required — All bytes (Vec<u8>) data is represented as hex-encoded string prefixed with `0x` and fulfilled with two hex digits per byte. Unlike the `Address` type, HexEncodedBytes will not trim any zeros.
          - `signature` string, hex, required — All bytes (Vec<u8>) data is represented as hex-encoded string prefixed with `0x` and fulfilled with two hex digits per byte. Unlike the `Address` type, HexEncodedBytes will not trim any zeros.
        - object
          - `type` string, required
          - `public_keys` HexEncodedBytes[], required
          - `signatures` HexEncodedBytes[], required
          - `threshold` integer, required
          - `bitmap` string, hex, required — All bytes (Vec<u8>) data is represented as hex-encoded string prefixed with `0x` and fulfilled with two hex digits per byte. Unlike the `Address` type, HexEncodedBytes will not trim any zeros.
      - `secondary_signer_addresses` Address[], required
      - `secondary_signers` AccountSignature[], required
        - union
          - object
            - `type` string, required
            - `public_key` string, hex, required — All bytes (Vec<u8>) data is represented as hex-encoded string prefixed with `0x` and fulfilled with two hex digits per byte. Unlike the `Address` type, HexEncodedBytes will not trim any zeros.
            - `signature` string, hex, required — All bytes (Vec<u8>) data is represented as hex-encoded string prefixed with `0x` and fulfilled with two hex digits per byte. Unlike the `Address` type, HexEncodedBytes will not trim any zeros.
          - object
            - `type` string, required
            - `public_keys` HexEncodedBytes[], required
            - `signatures` HexEncodedBytes[], required
            - `threshold` integer, required
            - `bitmap` string, hex, required — All bytes (Vec<u8>) data is represented as hex-encoded string prefixed with `0x` and fulfilled with two hex digits per byte. Unlike the `Address` type, HexEncodedBytes will not trim any zeros.

## Other responses

- `400`
- `413`
- `500`
- `507`

---

[API](https://skmtc.net/apscan/apis/aptos-node-api.md) · [All operations](https://skmtc.net/apscan/apis/aptos-node-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/apscan/aptos-node-api/revisions/2953a57ebb77/schema)
