---
title: "Encode submission"
method: POST
path: "/transactions/encode_submission"
tags: ["Transactions"]
---

# Encode submission

`POST /transactions/encode_submission`

This endpoint accepts an EncodeSubmissionRequest, which internally is a
UserTransactionRequestInner (and optionally secondary signers) encoded
as JSON, validates the request format, and then returns that request
encoded in BCS. The client can then use this to create a transaction
signature to be used in a SubmitTransactionRequest, which it then
passes to the /transactions POST endpoint.

To be clear, this endpoint makes it possible to submit transaction
requests to the API from languages that do not have library support for
BCS. If you are using an SDK that has BCS support, such as the official
Rust, TypeScript, or Python SDKs, you do not need to use this endpoint.

To sign a message using the response from this endpoint:
- Decode the hex encoded string in the response to bytes.
- Sign the bytes to create the signature.
- Use that as the signature field in something like Ed25519Signature, which you then use to build a TransactionSignature.

## Request body

- EncodeSubmissionRequest
  - `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
  - `secondary_signers` Address[]

## Response `200`

- string, hex — 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`
- `500`

---

[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)
