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

# Simulate transaction

`POST /transactions/simulate`

Simulate submitting a transaction. To use this, you must:
- Create a SignedTransaction with a zero-padded signature.
- Submit a SubmitTransactionRequest containing a UserTransactionRequest containing that signature.

To use this endpoint with 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 `200`

- UserTransaction[]
  - `version` 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.
  - `hash` string, required
  - `state_root_hash` string, required
  - `event_root_hash` string, required
  - `gas_used` 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.
  - `success` boolean, required
  - `vm_status` string, required
  - `accumulator_root_hash` string, required
  - `changes` WriteSetChange[], required
    - union
      - object
        - `type` string, required
        - `address` string, hex, required — Hex encoded 32 byte Aptos account address
        - `state_key_hash` string, required
        - `module` MoveModuleId, required
          - `address` string, hex, required — Hex encoded 32 byte Aptos account address
          - `name` string, required
      - object
        - `type` string, required
        - `address` string, hex, required — Hex encoded 32 byte Aptos account address
        - `state_key_hash` string, required
        - `resource` MoveStructTag, required
          - `address` string, hex, required — Hex encoded 32 byte Aptos account address
          - `module` string, required
          - `name` string, required
          - `generic_type_params` MoveType[], required
      - object
        - `type` string, required
        - `state_key_hash` string, required
        - `handle` 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.
        - `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.
        - `data` DeletedTableData
          - `key` unknown, required
          - `key_type` string, required
      - object
        - `type` string, required
        - `address` string, hex, required — Hex encoded 32 byte Aptos account address
        - `state_key_hash` string, required
        - `data` 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
              - …
            - `exposed_functions` MoveFunction[], required
              - …
            - `structs` MoveStruct[], required
              - …
      - object
        - `type` string, required
        - `address` string, hex, required — Hex encoded 32 byte Aptos account address
        - `state_key_hash` string, required
        - `data` MoveResource, required
          - `type` MoveStructTag, required
            - `address` string, hex, required — Hex encoded 32 byte Aptos account address
            - `module` string, required
            - `name` string, required
            - `generic_type_params` MoveType[], required
          - `data` MoveStructValue, required — This is a JSON representation of some data within an account resource. More specifically, it is a map of strings to arbitrary JSON values / objects, where the keys are top level fields within the given resource. To clarify, you might query for 0x1::account::Account and see the example data. Move `bool` type value is serialized into `boolean`. Move `u8` type value is serialized into `integer`. Move `u64` and `u128` type value is serialized into `string`. Move `address` type value (32 byte Aptos account address) is serialized into a HexEncodedBytes string. For example: - `0x1` - `0x1668f6be25668c1a17cd8caf6b8d2f25` Move `vector` type value is serialized into `array`, except `vector<u8>` which is serialized into a HexEncodedBytes string with `0x` prefix. For example: - `vector<u64>{255, 255}` => `["255", "255"]` - `vector<u8>{255, 255}` => `0xffff` Move `struct` type value is serialized into `object` that looks like this (except some Move stdlib types, see the following section): ```json { field1_name: field1_value, field2_name: field2_value, ...... } ``` For example: `{ "created": "0xa550c18", "role_id": "0" }` **Special serialization for Move stdlib types**: - [0x1::string::String](https://github.com/aptos-labs/aptos-core/blob/main/language/move-stdlib/docs/ascii.md) is serialized into `string`. For example, struct value `0x1::string::String{bytes: b"Hello World!"}` is serialized as `"Hello World!"` in JSON.
      - object
        - `type` string, required
        - `state_key_hash` string, required
        - `handle` 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.
        - `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.
        - `value` 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.
        - `data` DecodedTableData
          - `key` unknown, required
          - `key_type` string, required
          - `value` unknown, required
          - `value_type` 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.
  - `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
  - `timestamp` 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.

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