# Simulate Transactions

> Documentation index: [llms.txt](https://namera.ai/llms.txt).

Source: https://namera.ai/docs/cli/guides/transactions/simulate-transactions

Check calls and permissions before submitting.

Install the CLI and [sign in](https://namera.ai/docs/cli/authentication). Replace the example
account ID, session-key ID, and recipient with your own. Use an active key
installed on **Base Sepolia** with permission for the operation.

## Run a Preview [#run-a-preview]

This checks a 0.001 ETH transfer without sending it:

```sh
namera execution simulate \
  --namespace evm \
  --wallet 0199dfe1-0000-7000-8000-000000000001 \
  --session-key 0199dfe1-0000-7000-8000-000000000002 \
  --network 'Base Sepolia' \
  --to 0x2222222222222222222222222222222222222222 \
  --value 1000000000000000 \
  --data 0x
```

<div className="docs-response">

```text
Transaction preview
-> Account: 👛 Example account
-> Network: Base Sepolia
-> Session key: Example session
-> Policy decision: Allowed
-> Calls: Succeeded

Simulation only. No transaction was submitted.
```

</div>

## Inspect the Full Result [#inspect-the-full-result]

Add `--output json` to read gas estimates, call results, asset changes, and
transfers:

```sh
namera --output json execution simulate \
  --namespace evm \
  --wallet 0199dfe1-0000-7000-8000-000000000001 \
  --session-key 0199dfe1-0000-7000-8000-000000000002 \
  --network 'Base Sepolia' \
  --to 0x2222222222222222222222222222222222222222 \
  --value 1000000000000000 \
  --data 0x
```

<div className="docs-response">

```json
{
  "namespace": "eip155",
  "walletId": "0199dfe1-0000-7000-8000-000000000001",
  "chainId": "eip155:84532",
  "account": "0x1111111111111111111111111111111111111111",
  "callsSucceeded": true,
  "simulation": {
    "userOperation": {
      "source": "eth_estimateUserOperationGas",
      "callGasLimit": "50000",
      "verificationGasLimit": "100000",
      "preVerificationGas": "50000",
      "maxFeePerGas": "1000000000",
      "maxPriorityFeePerGas": "1000000"
    },
    "calls": {
      "source": "viem.simulateCalls",
      "results": [{ "status": "success", "returnData": "0x", "gasUsed": "21000" }],
      "assetChanges": [],
      "transfers": [
        {
          "callIndex": 0,
          "from": "0x1111111111111111111111111111111111111111",
          "to": "0x2222222222222222222222222222222222222222",
          "value": "1000000000000000"
        }
      ]
    }
  },
  "allowed": true,
  "sessionKeyId": "0199dfe1-0000-7000-8000-000000000002"
}
```

</div>

Check both `allowed` and `callsSucceeded`. A denied policy or reverted call
can be returned in a successful CLI response; process exit code alone is not a
readiness check.

For batch simulation, supply the simulation request through `--params` with a
`calls` array. Do not include execution-only `sponsor` or gas-ceiling flags.

## Act on the Result [#act-on-the-result]

If permission is denied, adjust the request or update the session's permissions
in the dashboard. If a call fails, check its target, calldata, value, and account
balance. A successful preview does not reserve permissions or guarantee the same
chain state when you execute.

Example output uses fixture accounts and hashes, captured with the CLI's output
formatters. Plain-text output is shown without terminal colors; your values and
relative expiry dates will differ.
