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

# Inbound callbacks

> Receive inbound user replies from MOJA session messages at your callback URL.

When you send a [session message](/guides/moja/send-session-message) with a `callback_url`, Beem POSTs inbound user replies to that URL.

This is separate from [template delivery reports](/guides/moja/delivery-reports), which track WhatsApp template message status.

***

## Callback flow

```text theme={null}
You send session message (with callback_url)
        │
        ▼
User replies on WhatsApp / Facebook / etc.
        │
        ▼
Beem POSTs JSON to your callback_url
        │
        ▼
Your server responds HTTP 200
```

***

## Callback payload fields

| Field                                             | Description                                                                                 |
| ------------------------------------------------- | ------------------------------------------------------------------------------------------- |
| `from`                                            | User address (sender)                                                                       |
| `to`                                              | Your channel number                                                                         |
| `channel`                                         | Channel type (e.g. `whatsapp`)                                                              |
| `transaction_id`                                  | Reference from your outbound message, if provided                                           |
| `user_name`                                       | Display name when available                                                                 |
| `message_type`                                    | `text`, `image`, `document`, `video`, `location`, `audio`, `contact`, `quick_reply`, `list` |
| `text`                                            | Text body when `message_type` is `text`                                                     |
| `image`, `video`, `document`, `location`, `audio` | Media objects when applicable                                                               |
| `contacts`                                        | Contact cards when `message_type` is `contact`                                              |

***

## Sample payloads

<Tabs>
  <Tab title="Text reply">
    ```json theme={null}
    {
      "from": "255701000001",
      "to": "255701000000",
      "channel": "whatsapp",
      "user_name": "James",
      "transaction_id": "12345",
      "message_type": "text",
      "text": "Yes, I'd like more info"
    }
    ```
  </Tab>

  <Tab title="Image reply">
    ```json theme={null}
    {
      "from": "255701000001",
      "to": "255701000000",
      "channel": "whatsapp",
      "user_name": "James",
      "transaction_id": "12345",
      "message_type": "image",
      "image": {
        "mime_type": "image/jpeg",
        "url": "https://www.example.com/photo.jpeg"
      }
    }
    ```
  </Tab>

  <Tab title="Quick reply">
    ```json theme={null}
    {
      "from": "255701000001",
      "to": "255701000000",
      "channel": "whatsapp",
      "user_name": "James",
      "message_type": "quick_reply",
      "text": "Account Balance"
    }
    ```
  </Tab>
</Tabs>

***

## Your server requirements

* Expose a public **HTTPS** endpoint.
* Accept `POST` with `Content-Type: application/json`.
* Return **HTTP 200** to acknowledge receipt.

See the [Receive a message API reference](/api-reference/moja/receive-a-message) for the full webhook schema.
