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

# Consent and passwords

> How a person lets agents walk your own site each week, how anyone can withdraw it, and why a password typed into a chat is never stored.

Some agent work needs your recorded yes before it starts. Today that is the **weekly walk of your own site**: once a week an agent visits your domain and uses it the way a visitor would, to check that its pages, links and forms work for people and for AI assistants. It only browses. It does not sign in, buy anything, or submit a form that sends or changes something. What it checks, and what it files when something stops it, is on [Signup check](https://docs.attensira.com/agent-readiness/signup-check.md).

## Who can give consent

Only a person signed in to the app. An API key or an MCP connection is refused, whatever its scopes, with a `403` that says:

> consent is given by a person in the app

That holds on every door. An agent that tries is told where consent is given; it can never give it on your behalf.

## What a consent records

Each consent is one row in your workspace's ledger. Rows are never edited, except to mark one withdrawn, so the history of who agreed to what stays readable.

| Field | What it is |
| - | - |
| `granted_by` | The person who agreed (their user id). Never a key. |
| `domain` | Your workspace's own domain. A consent never covers another site. |
| `text` and `text_sha256` | The exact words the person read, and their SHA-256 hash. The app shows the text the server will store, hashes the words it put on screen, and sends that hash with the grant. If it does not match the stored text, the grant is refused (`409`) and nothing is recorded, so a row only ever holds words that were on screen. |
| `granted_at`, `expires_at` | A consent lasts **90 days**. |
| `revoked_at` | When it was withdrawn, if it was. |
| `status` | `live`, `expired` or `revoked`. |

## Giving consent in the app

Under **Settings › Autonomy** (at `/settings/autonomy`), below the autonomy levels and the approval settings, is a row for your own domain, **Agents on** your domain. It says whether agents may visit it, and until when.

* **Read and agree** opens the consent's full text, word for word. Nothing is recorded until you click **I agree**; **Not now** records nothing.
* **Withdraw** ends a live consent at once.

When a consent expires, the walk does not run. Renew it from the same row. The Scoreboard's [Site health](https://docs.attensira.com/tracking/scoreboard.md#site-health) view shows the walk as **Needs you** meanwhile, with a **Give consent** button that brings you to this page. That is your step; nobody at Attensira does it for you.

## Withdrawing consent

Anyone in the workspace can withdraw a consent in the app. So can an API key or connection that may **steer**, because taking a permission away is always safe. No walk starts after that: consent is checked before each walk opens a browser. To end a walk that is already running, [stop it](https://docs.attensira.com/agent/browser-agents.md#stopping-it).

The walk is the only browser work agents do, and it is priced in credits: see [Browser agents](https://docs.attensira.com/agent/browser-agents.md#what-it-costs).

## API

| Call | Who | What it does |
| - | - | - |
| `GET /v1/consents` | Any key or connection | The ledger, newest first, and the `offer`: the text a person would agree to today, its hash, and the domain. |
| `POST /v1/consents` | Nobody with a key | Always `403`. Consent is given in the app. |
| `DELETE /v1/consents/{id}` | A key or connection with `steer` | Withdraws one consent. |

On MCP, `list` with type `consent` reads the ledger and `act` with `revoke` on `attensira://{workspace}/consent/{id}` withdraws one. `grant` is not an `act` action on MCP, and over REST `POST /v1/actions` with `grant` is `403` for every key and connection, whatever its scopes. There is no way to grant consent except a person in the app, and there never will be.

## Passwords in a chat

Attensira never needs your password. Accounts are connected in the app under **Customize › Connectors**, where you sign in to the other service yourself.

If you type a password into a chat, by any door (the app, email or Slack), it is removed before the message is stored. The message keeps the rest of what you wrote, and the password is replaced by a note that points to the connect flow. The agent never sees it, and it never appears in the chat's title, its history or a run replay.


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