# Action events

> action.requires_approval — an AI Action is waiting for a person to approve it.

Source: https://www.hey.support/docs/webhooks/events/action

---

## `action.requires_approval`

Fires when the agent wants to run an [AI Action](/docs/capabilities/ai-actions) that is marked **requires approval**. Nothing runs until someone approves it in the Inbox, and the visitor is told their request is being checked.

```json
{
  "actionId": 91,
  "actionName": "issue_refund",
  "actionDescription": "Refund an order",
  "executionId": 4471,
  "conversationId": 8214,
  "chatbotId": 17,
  "inputArgs": { "order_id": "1042", "amount": 39.0 },
  "requestedAt": "2026-08-26T10:12:00.000Z"
}
```

<Callout type="warn">
  This payload is **camelCase**, while every other event on this page is snake\_case. That is a real inconsistency in the current API version, not a typo in these docs — parse it as written. It will be aligned in a future `api_version`, and the version field on the envelope is how you will know.
</Callout>

`inputArgs` is exactly what the model wants to call the action with. It is the useful part: it lets you show an approver the actual arguments — which order, which amount — rather than just the action's name.

## What to do with it

The approval itself happens in the Inbox; this event exists so it does not have to be *noticed* there. Typical use is routing it somewhere a human already is:

* post it to the channel that owns that decision,
* page whoever is on shift when `actionName` is one of the expensive ones,
* record every request for audit, approved or not.

## Approvals are not delivered

There is deliberately no `action.approved` or `action.denied` event. The outcome is written to the action's execution log and, when it succeeds, shows up in the conversation itself.

If you need the outcome, read it from the conversation — the approval decision is an operator action, and echoing it back as a webhook would let an integration mistake its own effect for a customer event.
