# approval_required

> A human needs to approve this. This action is outside what your agent token may do on its own, or it touches a protected environment.

**A human needs to approve this.** This action is outside what your agent token may do on its own, or it touches a protected environment. Guv has stored the request and asked a human to approve it with a passkey. Nothing has happened yet.

- **HTTP status:** `403 Forbidden`
- **CLI exit code:** `4` (approval required)
- **Retry:** do not resend; Guv runs the stored request itself once a human approves

## How to fix it

Ask the token owner to approve at {approval_url}, then wait: guv approvals wait {approval_id}

1. Share the `approval_url` with the human, or let the push notification reach them.
2. Wait with `guv approvals wait <id>` or poll `GET /v1/approvals/{id}`.
3. Once approved, Guv runs the stored request itself. You do not need to send it again.

Words in `{braces}` are filled in from the error response, which names the exact resource.

## If you are an AI agent

Exit code 4 means approval required. Do not retry with a different token or look for a workaround; wait for the human.

## What the response looks like

```json
{
  "type": "https://guv.dev/errors/approval_required",
  "title": "A human needs to approve this",
  "status": 403,
  "code": "approval_required",
  "detail": "This action is outside what your agent token may do on its own, or it touches a protected environment.",
  "fix": "Ask the token owner to approve at {approval_url}, then wait: guv approvals wait {approval_id}",
  "docs_url": "https://guv.dev/errors/approval_required",
  "request_id": "req_01jbx2m9k7q4r8t5v6w3y0z1rq"
}
```

The `code` field is stable: match on it, not on `title` or `detail`, which may be reworded.
