# Approvals

> Which actions your agent can't take without you, how an approval card reaches you, and how the agent waits and retries after you decide.

Last updated: October 15, 2026

Source: https://www.willo.ai/docs/ai-agents/approvals

Your agent works under the rules Willo's chat follows. Most work runs at once: editing site files, creating a table, adding a column, deploying an edge function. Actions that can't be undone, or that reach other people, stop and wait for a person. Over MCP that wait is an **approval card** on the dashboard.

## What stops for approval

The same actions that stop in Willo's chat, including:

- Writing, updating or deleting rows in the database, and running any SQL your agent wrote.
- Destructive schema changes: dropping or retyping a column, dropping or rewriting an access rule, triggers.
- Granting or revoking what the site's visitors and members can read or change.
- Deleting a site file, an edge function or a member account.
- Changing `package.json` or a lockfile.
- Publishing the draft, and publishing, unpublishing or deleting a CMS item.
- Setting or removing a redirect, and creating or changing a storage bucket.

Each tool's [reference page](https://www.willo.ai/docs/reference/mcp-tools) says whether it needs approval always, sometimes, or never.

## How it works

> **Needs approval.**
>
> 1. The agent calls a tool. Willo checks it exactly as chat would and decides it needs a person.
> 2. Instead of running, the call returns `pending_approval` with a link to the card and a request id. Nothing has changed yet.
> 3. The agent gives you the link. The card also appears in the business's chat thread, marked as raised by the agent, with the same preview chat would show: the statements, the files, the security findings.
> 4. You approve or deny it on the dashboard.
> 5. The agent calls the **same tool with the same arguments** again. That second call runs under your approval.

The retry has to match exactly. A different argument is a different action and raises a new card. The agent has one hour after you approve to retry; after that the approval lapses, so nothing runs against a draft that has moved on since.

### When the approved run takes a while

Some approved actions take longer than an agent's client waits, for example SQL that first has to create the draft backend. If the run is still going after 45 seconds, the retry returns status `running`. The work continues on Willo's side. The agent then calls `willo_get_approval` with the request id until the result is ready. It must not call the tool again, because that would ask for a second run.

## Card statuses

`willo_get_approval` reports one of these:

| Status | Meaning |
| --- | --- |
| `pending` | Waiting for a person. |
| `approved` | Approved. Call the same tool with the same arguments to run it. |
| `running` | Approved and still running on Willo's side. Check again shortly. |
| `consumed` | It ran. The result is included; check it, because a run can also fail or end in a state Willo can't confirm. |
| `denied` | A person said no, with their note if they left one. |
| `lapsed` | Nobody answered within seven days, or nobody retried within an hour of approval. Call the tool again for a new card. |
| `cancelled` | The card was withdrawn before anyone decided. |
| `superseded` | A newer card replaced it. |

A token sees only the cards it raised. One token can have five cards waiting at once; past that, new calls are refused until someone answers.

## Who can approve

The person who created the token can approve its cards, and so can an owner or admin of the business. A viewer can't approve anything.

## No "Always allow" for agents

In Willo's chat, many cards offer **Always allow**, which stops that tool asking again. Agent cards never offer it, and an Always allow you granted in chat does not apply to an agent's calls. Each call an agent makes is its own decision.

## Inside a task

[`willo_task`](https://www.willo.ai/docs/ai-agents/handing-willo-a-task) hands Willo's chat a whole job. Anything that turn would stop on becomes a normal card on the dashboard, and the task's result lists the cards and their links.

Related: [Draft and live](https://www.willo.ai/docs/ai-agents/draft-and-live), [Error codes](https://www.willo.ai/docs/reference/errors).

## Questions

### Can my agent approve its own cards?

No. A card is decided by a person on the Willo dashboard. The agent only learns the outcome when it retries or calls willo_get_approval.

### What happens if nobody answers a card?

The card stays open for seven days, then lapses. The agent can call the tool again to raise a new one.
