# Widget modes

> Invisible, managed and interactive: what each widget mode shows and when the check appears.

The mode decides what the widget shows. It never changes what the server
requires: every mode ends in the same single-use token, and your server
redeems it the same way.

| Mode | What people see | When the check appears |
| --- | --- | --- |
| `invisible` (default) | Nothing. The widget element is hidden. | Only when AgentGate asks for it, as a modal dialog. |
| `managed` | A small status chip: "Protected by AgentGate", then "Verifying…", then "Verified". | Only when AgentGate asks for it, inline under the chip. |
| `interactive` | The chip and a **Verify** button. | Always, inline. The form cannot be submitted until it passes. |

Set the mode with `data-mode` on the widget element, the `mode` option of
`AgentGate.render()`, or the `mode` option of `AgentGate.execute()`. An
unknown value falls back to `invisible`.

```html
<div class="agentgate" data-sitekey="site_…" data-action="submit" data-mode="managed"></div>
```

## Invisible

Best for most forms. The widget verifies when the form is submitted, so the
token is fresh when your server redeems it. If AgentGate asks for the
step-up check, a modal dialog opens over the page; Escape or **Cancel**
closes it and the submission does not go through (the error code is
`canceled`).

## Managed

Like invisible, with a visible sign that the form is protected. The chip is
a polite live region, so screen-reader users hear "Verifying…" and
"Verified". The check, when asked for, appears inline under the chip instead
of in a dialog.

## Interactive

For high-value actions where you want every visitor to act. The widget
shows a **Verify** button; pressing it starts verification and always shows
the press-and-hold check (the server asks for it even when the evidence
looks fine). Submitting before verifying shows "Please complete the
verification first." and moves focus to the button.

## States the chip shows

| State | Text (English) |
| --- | --- |
| idle | Protected by AgentGate |
| verifying | Verifying… |
| verified | Verified |
| failed | Verification failed. Please try again. |
| network error | The check could not be sent. Check your connection and try again. |
| expired | Verification expired. Please verify again. |

The chip carries `data-state` (`idle`, `verifying`, `verified`, `error`,
`expired`) and the class `agentgate-chip`, which you can use to style
around it. Strings exist in eight languages; see
[Widget configuration](/docs/widget-reference#languages).

## Tokens and timing

A widget clears its token five seconds before it expires (two minutes by
default) and, for managed and interactive widgets, shows "Verification
expired". After a successful submission the token is cleared, so the next
submission verifies again.
