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

# FAQ: Web3 Actions

> Answers on Web3 Actions execution modes, storage types, triggers, rate limits, runtime libraries, secrets, local testing, and project size limits.

<div className="flex flex-col gap-4 mt-8">
  <Card>
    <div className="flex flex-col gap-2">
      <h2 id="do-i-need-a-paid-plan-to-use-web3-actions" className="text-xl font-semibold">Do I need a paid plan to use Web3 Actions?</h2>

      <hr className="dark:border-neutral-800" />

      <div>
        Yes. Web3 Actions are available on the paid plan. To enable them for your account, [contact our sales team](https://tenderly.co/contact-us) to schedule a call and discuss upgrading your plan.
      </div>
    </div>
  </Card>

  <Card>
    <div className="flex flex-col gap-2">
      <h2 id="what-s-the-difference-between-parallel-and-sequent" className="text-xl font-semibold">What's the difference between parallel and sequential execution?</h2>

      <hr className="dark:border-neutral-800" />

      <div>
        During configuration of your Web3 Action, you can choose between the two modes of execution.

        When there's several triggered Web3 Actions (e.g. transactions from the same block), these two modes behave in the following way:

        * **sequential**: execution will respect the order in which the triggers have happened; until completion of trigger `N-1`, trigger `N` is awaiting for execution. The order of execution is guaranteed.
        * **parallel**: all triggers will be submitted for execution, and the execution order can not be guaranteed.

        The choice between sequential and parallel applies only to **block** and **transaction** triggers. **Periodic** and **webhook** triggers always run in parallel, regardless of `execution_type`.

        Strict ordering is best-effort under sustained load: if a sequential action keeps lagging behind its triggers, Tenderly may switch it to parallel execution to catch up and notifies you by email when that happens.

        Different [rate limits](#whats-the-rate-limit-for-web3-actions) apply.
      </div>
    </div>
  </Card>

  <Card>
    <div className="flex flex-col gap-2">
      <h2 id="what-s-the-difference-between-write-copy-on-write" className="text-xl font-semibold">What’s the difference between WRITE, COPY ON WRITE, and EMPTY storage types?</h2>

      <hr className="dark:border-neutral-800" />

      <div>
        * **Write**: This type is selected by default. It’s always used in automatic triggers and writes data on the
          main storage. Please note that this type can potentially overwrite data on the main storage.
          * **Copy on write**: This type creates a copy of the main storage as temporary storage. It can be selected for
            manual triggers. Once a trigger stops running, everything that was written in the temporary storage won’t be
            saved.
          * **Empty**: This type creates temporary empty storage. It can be selected for manual triggers. The empty
            storage type doesn’t have any reference to the main storage. Once a trigger stops running, everything that was
            written on this type of storage will disappear.
      </div>
    </div>
  </Card>

  <Card>
    <div className="flex flex-col gap-2">
      <h2 id="do-contracts-need-to-be-verified-to-be-used-in-web" className="text-xl font-semibold">Do contracts need to be verified to be used in Web3 Actions?</h2>

      <hr className="dark:border-neutral-800" />

      <div>
        It depends on the trigger filter:

        * **Publishing** an action requires the contract to be added to your Tenderly project. Verification is not checked at publish time.
        * **`function` and `eventEmitted` filters** need the contract's ABI to match at runtime, so the contract must also be verified. A trigger on a contract without an ABI deploys successfully but never executes.
        * **`logEmitted` filters** match raw log topics and work on unverified contracts.
        * **Periodic, block, webhook, and alert triggers** don't involve a contract, so verification doesn't apply.

        Inside your action code, you can read any contract (verified or not) by supplying the ABI yourself and calling it through [Node RPC access](/monitoring/web3-actions/references/node-rpc-access).

        Learn more about [triggers and how they work
        here](/monitoring/web3-actions/references/functions-events-triggers).
      </div>
    </div>
  </Card>

  <Card>
    <div className="flex flex-col gap-2">
      <h2 id="what-is-the-allowed-number-of-web3-actions-per-pro" className="text-xl font-semibold">What is the allowed number of Web3 Actions per project?</h2>

      <hr className="dark:border-neutral-800" />

      <div>
        The number of Web3 Actions you can run depends on your plan capacity. [Contact our sales team](https://tenderly.co/contact-us) to discuss the capacity your project needs.
      </div>
    </div>
  </Card>

  <Card>
    <div className="flex flex-col gap-2">
      <h2 id="what-is-the-storage-limit" className="text-xl font-semibold">What is the storage limit?</h2>

      <hr className="dark:border-neutral-800" />

      <div>
        Storage allows up to 1,000 keys per project, with a maximum key size of 1 KB and a maximum value size of 100 KB. Exceeding a limit returns a `400 Bad Request` error stating which limit was violated. See [Storage limits](/monitoring/web3-actions/references/context#storage-limits).
      </div>
    </div>
  </Card>

  <Card>
    <div className="flex flex-col gap-2">
      <h2 id="can-the-web3-actions-storage-limits-be-increased" className="text-xl font-semibold">Can the Web3 Actions storage limits be increased?</h2>

      <hr className="dark:border-neutral-800" />

      <div>
        The 100 KB per-value limit is a hard limit of the underlying storage engine and cannot be raised. If a single item needs more space, split it across multiple keys, or keep it in an external database and store its credentials in [Secrets](/monitoring/web3-actions/references/context#secrets). If you're approaching the 1,000-key project limit, contact [support@tenderly.co](mailto:support@tenderly.co).
      </div>
    </div>
  </Card>

  <Card>
    <div className="flex flex-col gap-2">
      <h2 id="what-s-the-size-limit-to-the-web3-action-project" className="text-xl font-semibold">What's the size limit to the Web3 Action project?</h2>

      <hr className="dark:border-neutral-800" />

      <div>
        When you create a Web3 Action using the CLI, the entire NPM project will be zipped and uploaded to Tenderly.
        The maximum size of the zipped archive, including `node_modules` is **40 MB**.
      </div>
    </div>
  </Card>

  <Card>
    <div className="flex flex-col gap-2">
      <h2 id="what-is-the-execution-timeout-for-web3-actions" className="text-xl font-semibold">What is the execution timeout for Web3 Actions?</h2>

      <hr className="dark:border-neutral-800" />

      <div>
        Execution is limited to 30 seconds by default, at which point it's terminated. If more time is needed, contact our support team at [support@tenderly.co](mailto:support@tenderly.co) to discuss your use case. Extended time limits apply only to parallel actions; sequential executions keep the 30-second limit. Get more [information on the execution status types](/monitoring/web3-actions/references/execution).
      </div>
    </div>
  </Card>

  <Card>
    <div className="flex flex-col gap-2">
      <h2 id="i-have-a-tenderly-yaml-file-with-two-web3-actions" className="text-xl font-semibold">I have a `tenderly.yaml` file with two Web3 Actions with the same trigger (a certain contract event). Will the first action declared in the manifest file always be invoked before the second one?</h2>

      <hr className="dark:border-neutral-800" />

      <div>
        Two separate Web3 Actions with the same trigger are executed in parallel since they’re isolated entities unaware
        of one another.
      </div>
    </div>
  </Card>

  <Card>
    <div className="flex flex-col gap-2">
      <h2 id="what-s-available-in-web3-actions-runtime" className="text-xl font-semibold">What's available in Web3 Actions Runtime?</h2>

      <hr className="dark:border-neutral-800" />

      <div>
        [//]: # "https://docs.tenderly.co/monitoring/web3-actions/references/functions-events-triggers#available-libraries-for-dashboard-based-actions"

        The following libraries are available:

        * Ethers.js
        * Bignumber.js
        * Axios
        * Luxon

        [Learn more →](/monitoring/web3-actions/references/functions-events-triggers#available-libraries-for-dashboard-based-actions)
      </div>
    </div>
  </Card>

  <Card>
    <div className="flex flex-col gap-2">
      <h2 id="how-do-web3-actions-interact-with-blockchain-data" className="text-xl font-semibold">How do Web3 Actions interact with blockchain data?</h2>

      <hr className="dark:border-neutral-800" />

      <div>
        [//]: # "https://docs.tenderly.co/monitoring/web3-actions/introduction"

        Web3 Actions can interact with blockchain data by reading blocks, transactions, and logs, enabling smart contract monitoring.
        Example:

        ```js theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
        const { ethers } = require("ethers");
        const provider = new ethers.providers.JsonRpcProvider(RPC_URL);
        const latestBlock = await provider.getBlockNumber();
        ```

        [Learn more →](/monitoring/web3-actions/introduction)
      </div>
    </div>
  </Card>

  <Card>
    <div className="flex flex-col gap-2">
      <h2 id="what-are-the-trigger-types-available-for-web3-acti" className="text-xl font-semibold">What are the trigger types available for Web3 Actions?</h2>

      <hr className="dark:border-neutral-800" />

      <div>
        [//]: # "https://docs.tenderly.co/monitoring/web3-actions/references/functions-events-triggers#external-events-and-trigger-types"

        Web3 Actions support four trigger types, which define when the action should be executed:

        * **Block**: triggered by new blocks on the blockchain, ideal for block-level monitoring.
        * **Transaction**: triggered by specific blockchain transactions, enabling monitoring and custom reactions.
        * **Webhook**: triggered by incoming HTTP requests, allowing Web3 Actions to act as backends for dapps or other services.
        * **Periodic (CRON)**: runs at specific intervals, automating recurring tasks. Example:

        ```yaml theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
        cron:
          interval: "*/15 * * * *"
        ```

        [Learn more →](/monitoring/web3-actions/references/functions-events-triggers#external-events-and-trigger-types)
      </div>
    </div>
  </Card>

  <Card>
    <div className="flex flex-col gap-2">
      <h2 id="how-do-i-deploy-web3-actions" className="text-xl font-semibold">How do I deploy Web3 Actions?</h2>

      <hr className="dark:border-neutral-800" />

      <div>
        [//]: # "https://docs.tenderly.co/monitoring/web3-actions/introduction"

        Web3 Actions can be deployed via the Tenderly Dashboard or using the CLI. The CLI provides more advanced configuration options. Actions and their triggers are configured in the `tenderly.yaml` file; the deploy command takes no flags:

        ```bash theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
        tenderly actions deploy
        ```

        [Learn more →](/monitoring/web3-actions/introduction)
      </div>
    </div>
  </Card>

  <Card>
    <div className="flex flex-col gap-2">
      <h2 id="how-are-errors-handled-in-web3-actions" className="text-xl font-semibold">How are errors handled in Web3 Actions?</h2>

      <hr className="dark:border-neutral-800" />

      <div>
        [//]: # "https://docs.tenderly.co/monitoring/web3-actions/references/error-reporting"

        Errors in Web3 Actions are logged and can be viewed in the Tenderly Dashboard. Failed actions can be re-executed for further debugging.

        [Learn more →](/monitoring/web3-actions/references/error-reporting)
      </div>
    </div>
  </Card>

  <Card>
    <div className="flex flex-col gap-2">
      <h2 id="why-didnt-i-get-an-email-when-my-web3-action-failed" className="text-xl font-semibold">Why didn't I get an email when my Web3 Action failed?</h2>

      <hr className="dark:border-neutral-800" />

      <div>
        Failure emails are sent only when a new incident is created: the first time a given error occurs for the current version of your Action, on a trigger-based run. Check the following:

        * Repeated occurrences of the same error are grouped under the existing incident and don't send additional emails until the incident is resolved in [Error Reporting](/monitoring/web3-actions/references/error-reporting).
        * Manual runs and re-runs never send failure emails or create incidents, regardless of outcome.
        * Executions ending in `TIMED_OUT`, `RATE_LIMITED`, or `TU_QUOTA_REACHED` don't send failure emails.
        * The destination email must be verified and switched on in the Action's Destinations section.

        [Learn more →](/monitoring/web3-actions/references/notifications#when-failure-emails-are-sent)
      </div>
    </div>
  </Card>

  <Card>
    <div className="flex flex-col gap-2">
      <h2 id="what-s-the-rate-limit-for-web3-actions" className="text-xl font-semibold">What’s the rate limit for Web3 Actions?</h2>

      <hr className="dark:border-neutral-800" />

      <div>
        [//]: # "https://docs.tenderly.co/monitoring/web3-actions/usage-rate-limits"

        Rate limits apply per action: 400 executions per 5 minutes for sequential actions and 2000 executions per 5 minutes for parallel actions, customizable per quote.

        [Learn more →](/monitoring/web3-actions/usage-rate-limits)
      </div>
    </div>
  </Card>

  <Card>
    <div className="flex flex-col gap-2">
      <h2 id="i-received-an-action-reached-a-rate-limit-email-what-does-it-mean" className="text-xl font-semibold">I received an "action reached a rate limit" email. What does it mean?</h2>

      <hr className="dark:border-neutral-800" />

      <div>
        The action was triggered more often than its per-action execution rate limit allows. Executions above the limit were skipped: they appear as `RATE_LIMITED` in the [execution history](/monitoring/web3-actions/references/execution#web3-action-execution-status-types) and are not retried. The notification is batched, so you receive at most one such email per action per 24 hours. If your workload needs a higher rate, contact [support@tenderly.co](mailto:support@tenderly.co).
      </div>
    </div>
  </Card>

  <Card>
    <div className="flex flex-col gap-2">
      <h2 id="what-is-key-value-storage-in-web3-actions" className="text-xl font-semibold">What is key-value storage in Web3 Actions?</h2>

      <hr className="dark:border-neutral-800" />

      <div>
        [//]: # "https://docs.tenderly.co/monitoring/web3-actions/references/context#storage"

        Key-value storage allows Web3 Actions to persist state and data between executions. For sensitive information like API keys, use [secrets](#how-can-i-manage-secrets-in-web3-actions) instead.
        Example:

        ```js theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
        await context.storage.putStr("myKey", "value");
        const value = await context.storage.getStr("myKey");
        ```

        [Learn more →](/monitoring/web3-actions/references/context#storage)
      </div>
    </div>
  </Card>

  <Card>
    <div className="flex flex-col gap-2">
      <h2 id="what-are-common-use-cases-for-web3-actions" className="text-xl font-semibold">What are common use cases for Web3 Actions?</h2>

      <hr className="dark:border-neutral-800" />

      <div>
        [//]: # "https://docs.tenderly.co/monitoring/web3-actions/introduction#use-cases-for-web3-actions-and-different-events"

        Common use cases include monitoring blockchain transactions, automating tasks, and building webhook backends for dapps.

        [Learn more →](/monitoring/web3-actions/introduction#use-cases-for-web3-actions-and-different-events)
      </div>
    </div>
  </Card>

  <Card>
    <div className="flex flex-col gap-2">
      <h2 id="can-web3-actions-be-tested-locally" className="text-xl font-semibold">Can Web3 Actions be tested locally?</h2>

      <hr className="dark:border-neutral-800" />

      <div>
        [//]: # "https://docs.tenderly.co/monitoring/web3-actions/references/local-development"

        Yes, using the `@tenderly/actions-test` npm package, Web3 Actions can be tested locally. Install it with `npm install --save-dev @tenderly/actions-test`, then execute your action function through the `TestRuntime`:

        ```ts theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
        import { TestRuntime, TestBlockEvent } from '@tenderly/actions-test';

        const runtime = new TestRuntime();
        await runtime.execute(actionFn, new TestBlockEvent());
        ```

        [Learn more →](/monitoring/web3-actions/references/local-development)
      </div>
    </div>
  </Card>

  <Card>
    <div className="flex flex-col gap-2">
      <h2 id="what-are-the-supported-programming-languages-for-w" className="text-xl font-semibold">What are the supported programming languages for Web3 Actions?</h2>

      <hr className="dark:border-neutral-800" />

      <div>
        Web3 Actions are written in JavaScript or TypeScript.
        Example:

        ```ts theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
        async function main() {
          console.log("Running Web3 Action");
        }
        ```
      </div>
    </div>
  </Card>

  <Card>
    <div className="flex flex-col gap-2">
      <h2 id="how-can-i-manage-secrets-in-web3-actions" className="text-xl font-semibold">How can I manage secrets in Web3 Actions?</h2>

      <hr className="dark:border-neutral-800" />

      <div>
        [//]: # "https://docs.tenderly.co/monitoring/web3-actions/references/context#secrets"

        You can securely store and retrieve sensitive data, such as API keys, using the secrets management feature.
        Example:

        ```js theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
        const apiKey = await context.secrets.get("API_KEY");
        ```

        [Learn more →](/monitoring/web3-actions/references/context#secrets)
      </div>
    </div>
  </Card>

  <Card>
    <div className="flex flex-col gap-2">
      <h2 id="can-web3-actions-interact-with-external-apis" className="text-xl font-semibold">Can Web3 Actions interact with external APIs?</h2>

      <hr className="dark:border-neutral-800" />

      <div>
        [//]: # "https://docs.tenderly.co/monitoring/web3-actions/introduction"

        Yes, you can interact with external APIs using libraries such as Axios for HTTP requests.
        Example:

        ```js theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
        const axios = require("axios");
        const response = await axios.get("https://api.example.com/data");
        ```

        [Learn more →](/monitoring/web3-actions/introduction)
      </div>
    </div>
  </Card>

  <Card>
    <div className="flex flex-col gap-2">
      <h2 id="what-is-the-purpose-of-simulations-in-web3-actions" className="text-xl font-semibold">What is the purpose of simulations in Web3 Actions?</h2>

      <hr className="dark:border-neutral-800" />

      <div>
        [//]: # "source: https://docs.tenderly.co/monitoring/web3-actions/introduction#use-cases "

        Web3 Actions can run transaction simulations to test and verify outcomes before broadcasting transactions.
        Example:

        ```js theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
        const simulationResult = await simulateTransaction(txData);
        ```

        [Learn more →](/monitoring/web3-actions/introduction#use-cases)
      </div>
    </div>
  </Card>

  <Card>
    <div className="flex flex-col gap-2">
      <h2 id="how-does-tenderly-handle-logs-for-web3-actions" className="text-xl font-semibold">How does Tenderly handle logs for Web3 Actions?</h2>

      <hr className="dark:border-neutral-800" />

      <div>
        Tenderly logs every execution of Web3 Actions. Logs can be accessed and reviewed on the Tenderly Dashboard for debugging.
      </div>
    </div>
  </Card>
</div>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.