> ## Documentation Index
> Fetch the complete documentation index at: https://docs.minimo.it/llms.txt
> Use this file to discover all available pages before exploring further.

# Inbound & Webhooks

> How Minimo receives WhatsApp replies, delivery events, and template-status updates

## Overview

WhatsApp is **two-way**. Beyond the outbound send endpoints, Minimo receives events
from Meta (WhatsApp Cloud API / 360dialog) through a single webhook and turns them into
things you can see and act on:

* **Inbound messages** — replies your customers send back — appear in the **Inbox** and
  in the contact's chat history.
* **Template-status updates** — when Meta approves or rejects a template you submitted —
  automatically flip the template's `status` (visible via
  [List WhatsApp Templates](/api-reference/messaging-channels/whatsapp/list-templates)).

<Info>
  This webhook is **managed by Minimo** and is **Meta-facing**, not part of the API-key surface. You do not call it and
  you do not need to configure it — connecting a number in [Channels](https://app.minimo.it/channels) wires up the Meta
  subscription for you. It is documented here so you understand where inbound data and template-status changes come
  from.
</Info>

## Endpoint

Minimo exposes the webhook at:

```
GET  https://api.minimo.it/public/v1/webhooks/whatsapp
POST https://api.minimo.it/public/v1/webhooks/whatsapp
```

### Verification (`GET`)

Meta verifies the subscription with a challenge handshake. Minimo replies with the
`hub.challenge` value when `hub.mode=subscribe` and `hub.verify_token` matches the
configured verify token.

| Query parameter    | Description                                           |
| ------------------ | ----------------------------------------------------- |
| `hub.mode`         | `subscribe` for the verification handshake.           |
| `hub.verify_token` | Shared token Minimo checks against its configuration. |
| `hub.challenge`    | Echoed back verbatim when the token matches.          |

### Events (`POST`)

Meta delivers events to the `POST` route. Minimo always answers `200` quickly, then
processes the payload:

* The company is identified from the inbound `phone_number_id` (multi-sender safe — the
  event is routed to the number that received it).
* `message_template_status_update` changes (contained in `entry[].changes[]`) update the
  matching template's approval status.
* Other events (inbound customer messages) are recorded against the contact and surfaced
  in the Inbox.

<Note>
  Because processing is asynchronous and authentication is via Meta's verify token (not a Minimo API key), this route is
  not shown in the interactive API playground. Consume the results through the **Inbox** and the template-list endpoint
  instead.
</Note>

## What to poll instead

If you need to react programmatically to template approvals, poll
[List WhatsApp Templates](/api-reference/messaging-channels/whatsapp/list-templates) and
watch the `status` field flip to `APPROVED` — the webhook keeps that value up to date for
you.

## Related Endpoints

* [Send WhatsApp Template](/api-reference/messaging-channels/whatsapp/send-template) - Outbound sends
* [List WhatsApp Templates](/api-reference/messaging-channels/whatsapp/list-templates) - Template approval status
* [List WhatsApp Senders](/api-reference/messaging-channels/whatsapp/list-senders) - Connected numbers
