---
name: "account_add_approval_rule"
area: "account"
title: "Hold a tool for approval"
price: "$0.001"
method: "POST"
url: "https://api.conecto.chat/v1/tools/account_add_approval_rule"
mcp_server: "https://api.conecto.chat/mcp/account"
auth: "Authorization: Bearer <conecto_sk_ key>"
docs_url: "https://conecto.chat/tools/account/account_add_approval_rule"
---

# Hold a tool for approval (`account_add_approval_rule`)

Makes a tool wait for a person's approval: every call, or calls over a limit, approved by an email, a channel or a team's managers.

Make a tool wait for a person: every call of it, those whose argument is over a number (like invoices_create_credit_note when amount is over 500), or those whose argument is one of some values (like connect_call when method is POST, PUT, PATCH or DELETE). A held call answers approval_required with an approval_id and asks the approver; when they approve, call again with the same arguments and the approval (header X-Conecto-Approval, or _meta.approvalId over MCP), once. The approver is an email, a saved channel, or a team (its managers, or everyone in it); each approver gets a link of their own, and the person whose call it is never approves it. With two_people_over, calls whose argument is over it need two people. Bills like Xero's bill approval: purchasing_create_bill with argument total holds bills over an amount, tax included; a rule on purchasing_pay_bill also holds batches with such a payment. Removing a rule is the owner's, on their account page, when the account has an owner email. $0.001.

Price: $0.001 a call. A call that fails costs nothing.

## Use it when

Some actions should never happen without a person saying yes: big refunds, credit notes, deletions, mass emails.

- For asking a person once, without a standing rule, use [notify_request_approval](https://conecto.chat/tools/notify/notify_request_approval.md).

## Say this to your agent

> From now on, any credit note over 500 euros needs my OK first.

## Inputs

| Name | Type | Required | Description | Allowed values | Default |
|---|---|---|---|---|---|
| `tool` | string | yes | 1 to 80 characters. |  |  |
| `argument` | string | no | An argument of the tool (or total, for purchasing_create_bill). Up to 60 characters. |  |  |
| `over` | number | no | Calls with argument over this are held. |  |  |
| `values` | array of strings | no | Calls with argument equal to one of these (any case) are held. 1 to 20 items. |  |  |
| `approver_email` | string | no | Up to 254 characters. |  |  |
| `approver_channel` | string | no | A saved notify channel. Up to 80 characters. |  |  |
| `approver_team` | string | no | A team (account_list_teams). Up to 80 characters. |  |  |
| `approvers` | string | no | Who in approver_team approves. | `"managers"`, `"everyone"` | `"managers"` |
| `two_people_over` | number | no | Calls whose argument is over this need two people; higher than over. |  |  |

## Example

Written for Hansen & Voss, a restaurant-equipment wholesaler in Hamburg with 60 staff.

MCP: call `account_add_approval_rule` on the MCP server `https://api.conecto.chat/mcp/account` with these arguments:

```json
{
  "tool": "invoices_create_credit_note",
  "argument": "amount",
  "over": 500,
  "approver_email": "henrik.voss@hansenvoss.example"
}
```

REST:

```bash
curl https://api.conecto.chat/v1/tools/account_add_approval_rule \
  -H "Authorization: Bearer $CONECTO_KEY" \
  -H "Content-Type: application/json" \
  -d '{"tool": "invoices_create_credit_note", "argument": "amount", "over": 500, "approver_email": "henrik.voss@hansenvoss.example"}'
```

## Response

```json
{
  "call_id": "5f0c8a2e-3b7d-4c1e-9a64-2d8e1f7b0c93",
  "tool": "account_add_approval_rule",
  "status": "succeeded",
  "replayed": false,
  "cost_usd": "$0.001",
  "balance_usd": "$19.75",
  "result": {
    "rule": {
      "rule_id": 4101,
      "tool": "invoices_create_credit_note",
      "argument": "amount",
      "over": "500",
      "values": null,
      "approver": "henrik.voss@hansenvoss.example",
      "approver_team": null,
      "approvers": null,
      "two_people_over": null,
      "created_at": "2026-10-14T08:00:00+00:00"
    }
  }
}
```

`result`: rule: its rule_id, tool, argument and threshold, approver (and approver_team), the amount over which two people approve, and when it was made.

## Errors

| Code | Status | When | Fix |
|---|---|---|---|
| `not_found` | 404 | No tool has that name, or no saved channel has that name. | GET /v1/tools lists the tools; notify_list_channels lists the channels. |
| `invalid_input` | 400 | Not exactly one approver was named, argument came without over (or the other way round), the tool has no such argument, or two_people_over is not above over or came with a channel. | Name one approver, give argument and over together, and two_people_over above over with an email or a team. |
| `payment_required_for_outbound` | 402 | The balance is still free credit, which cannot email people outside the business. | Top up once (POST /v1/topups); after that email to outsiders works. |
| `new_recipient_limit` | 429 | The business has emailed as many new addresses today as it may. | Send to these people tomorrow. Replies and people who wrote first are not limited. |
| `sending_paused` | 403 | Email from the business is paused after bounces, complaints or emails refused as cold outreach. | Tell the owner; Conecto reviews the pause before sending resumes. |
| `suppressed` | 422 | An address bounced, complained or unsubscribed before. | Remove the addresses the message lists and send again. |
| `found_by_lookup` | 422 | An address was found or checked with Conecto's lookups; a Conecto inbox never writes to it first. | Write from the business's own mailbox (google_mail_send or m365_mail_send). |
| `cold_email` | 422 | The email looks like cold outreach, a pitch or a request to people who never wrote to the business, so it wasn't sent. The third within 7 days pauses the account's email. | Email only people who wrote first or asked to hear from the business. |
| `check_unavailable` | 503 | The check an email to someone new goes through couldn't run just now. | Try again in a minute. |

The refusals every tool can give (401 key, 402 balance, 429 limits) are on the errors page: https://conecto.chat/docs/errors.md

## Related

- [account_balance](https://conecto.chat/tools/account/account_balance.md): The balance, this key's daily budget, auto-reload, and how much of the month's free reads and downloads is used. Free.
- [account_refund_topup](https://conecto.chat/tools/account/account_refund_topup.md): Refunds a top-up from the last 24 hours that none of has been used: the credit, with its tax, goes back to the card, and the service fee is kept. Free.
- [account_owner_link](https://conecto.chat/tools/account/account_owner_link.md): A one-time link that signs the business owner into their Conecto page, without a password. Free.
- [account_get_limits](https://conecto.chat/tools/account/account_get_limits.md): The limits Conecto raises on request, each with its standard and current value, and the business's requests with their answers. Free.
- [account_request_limit](https://conecto.chat/tools/account/account_request_limit.md): Ask Conecto to raise a limit: which one, the number the business needs, and why. Free.
- [account_events](https://conecto.chat/tools/account/account_events.md): What happened lately, oldest first: applications, bookings, form responses, signatures, replies, emails, website goals and the agents' own events. Free up to 1,000,000 reads a month.
- [account_emit_event](https://conecto.chat/tools/account/account_emit_event.md): Sends an event the agent names, custom.<name>, to the channels subscribed to it and to account_events. $0.005 per channel it goes to.
- [account_search](https://conecto.chat/tools/account/account_search.md): One search across the business's files, table rows, help articles, CRM, emails, tickets, invoices, books, stock and tasks. Free up to 1,000,000 reads a month.
- [account_list_calls](https://conecto.chat/tools/account/account_list_calls.md): The business's recent calls, newest first, optionally only the failed or the succeeded ones, or one area's. Free.
- [account_dashboard_link](https://conecto.chat/tools/account/account_dashboard_link.md): A one-time link to a page showing one area at a glance, made when it opens from what this key may read. Free up to 1,000,000 reads a month.
- [account_get_call](https://conecto.chat/tools/account/account_get_call.md): One call by its call_id, with its status, cost and result. Free.
- [account_get_brand](https://conecto.chat/tools/account/account_get_brand.md): The name, logo, colour and footer line the business's emails and published pages carry. Free up to 1,000,000 reads a month.
- [account_set_brand](https://conecto.chat/tools/account/account_set_brand.md): Sets the sender name, logo, colour and footer on every email to customers and on the business's published pages. $0.001 a call.
- [account_list_email_templates](https://conecto.chat/tools/account/account_list_email_templates.md): Every automatic email to the business's customers, with its subject, headline, opening words and {variables}. Free up to 1,000,000 reads a month.
- [account_set_email_template](https://conecto.chat/tools/account/account_set_email_template.md): Rewrites an email's subject, headline or opening words in the business's voice; the times, amounts and links below them stay. $0.001 a call.
- [account_export_all](https://conecto.chat/tools/account/account_export_all.md): Everything the account holds, as ZIP files in its file store: every record as JSON Lines and the stored files, credentials left out. Free.
- [account_audit_log](https://conecto.chat/tools/account/account_audit_log.md): The account's admin and security actions, newest first, with a check that none was changed or removed. Free up to 1,000,000 reads a month.
- [account_save_team](https://conecto.chat/tools/account/account_save_team.md): Makes or changes a team: the areas its keys may use, a monthly budget that refuses or warns, and its ERP cost center code. $0.001 a call.
- [account_list_teams](https://conecto.chat/tools/account/account_list_teams.md): The account's teams with their areas, budgets, this month's spend, ERP codes, keys and people. Free up to 1,000,000 reads a month.
- [account_pause_team](https://conecto.chat/tools/account/account_pause_team.md): Stops every key of a team at once, until the owner starts it again. Free.
- [account_assign_team](https://conecto.chat/tools/account/account_assign_team.md): Gives a form, a number, an inbox or another thing to a team, so its charges land there. $0.001 a call.
- [account_set_owner_email](https://conecto.chat/tools/account/account_set_owner_email.md): Sends the business's owner a link to confirm they own the account, when it has no owner email yet. Free.
- [account_list_approval_rules](https://conecto.chat/tools/account/account_list_approval_rules.md): The tools that wait for a person's approval, with their thresholds and approvers. Free up to 1,000,000 reads a month.
- [account_find_person](https://conecto.chat/tools/account/account_find_person.md): Every record the account holds about one person, by email or phone, with each kind's count and ids. Free.
- [account_export_person](https://conecto.chat/tools/account/account_export_person.md): One person's records and files in one ZIP in the file store, with a download link to give them. Free.
- [account_erase_person](https://conecto.chat/tools/account/account_erase_person.md): Erases one person across every area and says what it kept and why, like invoices the law keeps. Free.
- [account_data_locations](https://conecto.chat/tools/account/account_data_locations.md): Where each area's data is stored and processed: the company, the country or region, and what it holds. Free up to 1,000,000 reads a month.
