# Approvals

Source: https://finchreach.com/docs/approvals

When approval is on, a write tool does not touch LinkedIn: it stores the exact action and returns `{ status: "pending_approval", action }`. A person approves or rejects it in the dashboard, and exactly what was approved runs.

## How it works

1. The agent calls a write tool (a post, a comment, a DM, an invitation…).
2. Finchreach stores the operation, the account and the input, and hashes them. Identical pending proposals are deduplicated, so a retried tool call does not queue the same DM twice.
3. You review it under [Approvals](https://finchreach.com/approvals) and approve or reject it. The key that proposed an action cannot approve it.
4. On approval the stored payload is re-hashed and run, so what runs is exactly what you saw.

Approval is set per account, then per API key, then per workspace: the first one that is set wins.

## Action statuses

An action is one of: `pending_approval`, `approved`, `rejected`, `executed`, `failed`, `expired`. A proposal expires after 7 days if nobody approves it.

## Following an action from the agent

Call `linkedin_get_action` with the `actionId` from the write result. Once run, the action carries its result. Over HTTP, use the actions endpoints in the [API reference](https://finchreach.com/docs/api).

A queued write:
```json
{
  "status": "pending_approval",
  "action": { "id": "…", "operation": "send_dm", "status": "pending_approval", "expiresAt": "…" }
}
```

## Related

- [MCP tools reference](https://finchreach.com/docs/tools)
- [Rate limits](https://finchreach.com/docs/rate-limits)
