---
name: "notify_request_approval"
area: "notify"
title: "Ask a person to approve"
price: "$0.01 a request, $0.02 more by email, up to $0.03"
method: "POST"
url: "https://api.conecto.chat/v1/tools/notify_request_approval"
mcp_server: "https://api.conecto.chat/mcp/notify"
auth: "Authorization: Bearer <conecto_sk_ key>"
docs_url: "https://conecto.chat/tools/notify/notify_request_approval"
---

# Ask a person to approve (`notify_request_approval`)

Asks a person to approve or decline (or pick an option) before the agent acts, on a one-time page sent through a channel or by email.

Ask a person before you act: approve or decline (or pick one of up to 5 options), with an optional comment, on a one-time page sent through a saved channel or by email. The first answer reaches you as the event notify.answered (subscribe a webhook, or check notify_get_approval). For refunds, big orders, offers and posts. Anyone holding the link can answer, so send it only to the person who decides. Email follows the account's rules (free credit emails only the owner). $0.01 a request, $0.02 more by email; the answer is free.

Price: $0.01 a request, $0.02 more by email, up to $0.03. A call that fails costs nothing.

## Use it when

Before a refund, a big purchase order, an offer or a post that a person should decide on.

- For telling someone without asking, use [notify_send](https://conecto.chat/tools/notify/notify_send.md).

## Say this to your agent

> Before you refund anything over $200, ask me on my phone first.

## Inputs

| Name | Type | Required | Description | Allowed values | Default |
|---|---|---|---|---|---|
| `question` | string | yes | What to decide, e.g. "Refund order 1042 in full ($849)?" (1 to 300 characters) |  |  |
| `details` | string | no | What the person should know first. Up to 4,000 characters. |  |  |
| `options` | array of strings | no | The answers to pick from. Default: Approve, Decline. 2 to 5 items. |  |  |
| `comment` | boolean | no | Offer a comment box. |  | `true` |
| `channel` | string | no | A saved channel to send it to (notify_list_channels). Matches ^[a-z0-9][a-z0-9-]{0,39}$. |  |  |
| `email` | string | no | Or an email address to send it to. Up to 254 characters. |  |  |
| `expires_in_hours` | integer | no | 1 to 720. |  | `72` |
| `reference` | string | no | Your own reference, sent back with the answer (an order number, a refund). Up to 120 characters. |  |  |

## Example

Written for Halverson Cycle & Repair, a bike shop with a repair workshop in Portland, Oregon.

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

```json
{
  "question": "Refund order 1042 in full ($849)?",
  "details": "The buyer says the Tabor arrived with a bent derailleur hanger and sent two photos.",
  "email": "dana@halversoncycle.example",
  "reference": "order-1042"
}
```

REST:

```bash
curl https://api.conecto.chat/v1/tools/notify_request_approval \
  -H "Authorization: Bearer $CONECTO_KEY" \
  -H "Content-Type: application/json" \
  -d '{"question": "Refund order 1042 in full ($849)?", "details": "The buyer says the Tabor arrived with a bent derailleur hanger and sent two photos.", "email": "dana@halversoncycle.example", "reference": "order-1042"}'
```

## Response

```json
{
  "call_id": "5f0c8a2e-3b7d-4c1e-9a64-2d8e1f7b0c93",
  "tool": "notify_request_approval",
  "status": "succeeded",
  "replayed": false,
  "cost_usd": "$0.03",
  "balance_usd": "$19.75",
  "result": {
    "request": {
      "request_id": "ebf2c688-8e31-4dec-ac59-565712394424",
      "question": "Refund order 1042 in full ($849)?",
      "details": "The buyer says the Tabor arrived with a bent derailleur hanger and sent two photos.",
      "options": [
        "Approve",
        "Decline"
      ],
      "status": "waiting",
      "answer": null,
      "comment": null,
      "answered_at": null,
      "reference": "order-1042",
      "sent_to": "dana@halversoncycle.example",
      "via": "email",
      "expires_at": "2026-10-17T08:00:00+00:00",
      "created_at": "2026-10-14T08:00:00+00:00"
    },
    "link": "https://cncto.co/q/j1mybbdGe4Vol7DZGBg9bnkwRd2KnlePhno5x7TyZwE"
  }
}
```

`result`: request: its request_id, question, options, status (waiting) and when it expires; link: the page the person answers on. The answer comes as notify.answered.

## Errors

| Code | Status | When | Fix |
|---|---|---|---|
| `invalid_input` | 400 | Neither or both of channel and email were given, or two options say the same. | Give one channel or one email address, and options with their own words. |
| `not_found` | 404 | The channel name is not saved. | Call notify_list_channels for the names. |
| `payment_required_for_outbound` | 402 | The balance is still free credit, which emails only the owner. | Ask the owner, or top up once (POST /v1/topups). |
| `new_recipient_limit` | 429 | Too many new addresses were emailed today. | Ask through a channel instead. |
| `delivery_failed` | 502 | The question reached no one; nothing was charged. | Try again, or use another channel. |

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

## Related

- [notify_add_channel](https://conecto.chat/tools/notify/notify_add_channel.md): Saves a place to send messages by name: Slack, Teams, Discord or Google Chat, a Telegram chat, ntfy, Pushover, or the business's own webhook. $0.001 a call.
- [notify_list_channels](https://conecto.chat/tools/notify/notify_list_channels.md): The saved channels: where each goes (never its token), the events it gets, and whether the last message arrived. Free up to 1,000,000 reads a month.
- [notify_send](https://conecto.chat/tools/notify/notify_send.md): Sends a message to one or more saved channels, with a title, a link or high priority; only the channels it reached are charged. $0.005 per channel reached.
- [notify_get_approval](https://conecto.chat/tools/notify/notify_get_approval.md): Where a question asked with notify_request_approval stands, with the answer and comment once it has one. Free up to 1,000,000 reads a month.
- [notify_list_events](https://conecto.chat/tools/notify/notify_list_events.md): Every event a channel can get on its own: a job application, a booking, a form response, a signed document, a site going down and more. Free up to 1,000,000 reads a month.
- [notify_subscribe](https://conecto.chat/tools/notify/notify_subscribe.md): Sends chosen events to a saved channel as they happen, replacing the channel's list. $0.001 a call.
- [notify_unsubscribe](https://conecto.chat/tools/notify/notify_unsubscribe.md): Stops every event to a channel; the channel stays for notify_send. Free.
- [notify_remove_channel](https://conecto.chat/tools/notify/notify_remove_channel.md): Deletes a saved channel, with the events it got. Free.
