> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tenderly.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Simulation Modes

> Choose full mode for complete decoding, abi mode for partial decoding, or quick mode for faster raw transaction outputs.

The `simulation_type` API parameter allows you to control the level of detail returned in the [Simulation API](/simulations/overview) result. It applies to both [single simulations](/simulations/single-simulations) and bundled requests.

## Types of simulations

* `full` (default): Detailed raw and decoded information with call trace, function inputs and outputs, state diffs, etc.
* `quick`: Minimal, raw values
* `abi`: Minimal information with decoded inputs, outputs, and logs

<Note>
  Full simulations take more time, depending on the depth of the call trace. Use quick simulations when decoded
  information isn't necessary.
</Note>

## Full simulation mode

* The **call trace** containing the function name, position in the source file, caller's address, and balance
* Decoded **function inputs and outputs**, with **soltype** for all arguments. This applies to all function calls, including the direct call to the smart contract from EOA, internal calls between smart contracts, and function calls within each smart contract.
* Decoded **state diff** (changes to the state) enriched with **soltype** for the modified fields
* Decoded **logs (events)** consisting of the Solidity **event** that produced them and the event arguments' **value**, enriched with **type** for each.

```ts title="request.ts" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}

dotenv.config();

const approveDai = async () => {
  // assuming environment variables TENDERLY_ACCOUNT_SLUG, TENDERLY_PROJECT_SLUG and TENDERLY_ACCESS_KEY are set
  // https://docs.tenderly.co/platform/account/projects/slug
  // https://docs.tenderly.co/platform/account/projects/api-tokens
  const { TENDERLY_ACCOUNT_SLUG, TENDERLY_PROJECT_SLUG, TENDERLY_ACCESS_KEY } = process.env;

  console.time('Simulation');

  const resp = await axios.post(
    `https://api.tenderly.co/api/v1/account/${TENDERLY_ACCOUNT_SLUG}/project/${TENDERLY_PROJECT_SLUG}/simulate`,
    // the transaction
    {
      /* Simulation Configuration */
      save: false, // if true simulation is saved and shows up in the dashboard
      save_if_fails: false, // if true, reverting simulations show up in the dashboard
      simulation_type: 'full', // full, abi or quick (full is default)
      network_id: '1', // network to simulate on
      /* Standard EVM Transaction object */
      from: '0xdc6bdc37b2714ee601734cf55a05625c9e512461',
      to: '0x6b175474e89094c44da98b954eedeac495271d0f',
      input: '0x095ea7b3000000000000000000000000f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1000000000000000000000000000000000000000000000000000000000000012b',
      gas: 8000000,
      value: 0,
    },
    {
      headers: {
        'X-Access-Key': TENDERLY_ACCESS_KEY as string,
      },
    },
  );
  console.timeEnd('Simulation');

  const transaction = resp.data.transaction;
  console.log(JSON.stringify(transaction, null, 2));
};

approveDai();
```

## Quick simulation mode

Offers raw data without additional decoding. This mode is best when you only need the fundamental details of a transaction.

```ts title="request.ts" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}

dotenv.config();

const approveDai = async () => {
  // assuming environment variables TENDERLY_ACCOUNT_SLUG, TENDERLY_PROJECT_SLUG and TENDERLY_ACCESS_KEY are set
  // https://docs.tenderly.co/platform/account/projects/slug
  // https://docs.tenderly.co/platform/account/projects/api-tokens
  const { TENDERLY_ACCOUNT_SLUG, TENDERLY_PROJECT_SLUG, TENDERLY_ACCESS_KEY } = process.env;

  console.time('Simulation');

  const resp = await axios.post(
    `https://api.tenderly.co/api/v1/account/${TENDERLY_ACCOUNT_SLUG}/project/${TENDERLY_PROJECT_SLUG}/simulate`,
    // the transaction
    {
      /* Simulation Configuration */
      save: false, // if true simulation is saved and shows up in the dashboard
      save_if_fails: false, // if true, reverting simulations show up in the dashboard
      simulation_type: 'quick', // full, abi or quick (full is default)
      network_id: '1', // network to simulate on
      /* Standard EVM Transaction object */
      from: '0xdc6bdc37b2714ee601734cf55a05625c9e512461',
      to: '0x6b175474e89094c44da98b954eedeac495271d0f',
      input: '0x095ea7b3000000000000000000000000f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1000000000000000000000000000000000000000000000000000000000000012b',
      gas: 8000000,
      value: 0,
    },
    {
      headers: {
        'X-Access-Key': TENDERLY_ACCESS_KEY as string,
      },
    },
  );
  console.timeEnd('Simulation');

  const transaction = resp.data.transaction;
  console.log(JSON.stringify(transaction, null, 2));
};

approveDai();
```

## ABI simulation mode

The **call trace** containing the function name, decoded input and output variables

Decoded **logs (events)** consisting of the Solidity **event** that produced them and the event arguments' **value**, enriched with **type** description for each.

```ts title="request.ts" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}

dotenv.config();

const approveDai = async () => {
  // assuming environment variables TENDERLY_ACCOUNT_SLUG, TENDERLY_PROJECT_SLUG and TENDERLY_ACCESS_KEY are set
  // https://docs.tenderly.co/platform/account/projects/slug
  // https://docs.tenderly.co/platform/account/projects/api-tokens
  const { TENDERLY_ACCOUNT_SLUG, TENDERLY_PROJECT_SLUG, TENDERLY_ACCESS_KEY } = process.env;

  console.time('Simulation');

  const resp = await axios.post(
    `https://api.tenderly.co/api/v1/account/${TENDERLY_ACCOUNT_SLUG}/project/${TENDERLY_PROJECT_SLUG}/simulate`,
    // the transaction
    {
      /* Simulation Configuration */
      save: false, // if true simulation is saved and shows up in the dashboard
      save_if_fails: false, // if true, reverting simulations show up in the dashboard
      simulation_type: 'abi', // full, abi or quick (full is default)
      network_id: '1', // network to simulate on
      /* Standard EVM Transaction object */
      from: '0xdc6bdc37b2714ee601734cf55a05625c9e512461',
      to: '0x6b175474e89094c44da98b954eedeac495271d0f',
      input: '0x095ea7b3000000000000000000000000f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1000000000000000000000000000000000000000000000000000000000000012b',
      gas: 8000000,
      value: 0,
    },
    {
      headers: {
        'X-Access-Key': TENDERLY_ACCESS_KEY as string,
      },
    },
  );
  console.timeEnd('Simulation');

  const transaction = resp.data.transaction;
  console.log(JSON.stringify(transaction, null, 2));
};

approveDai();
```
