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

# Shared Inbox

> Read and reply to WhatsApp conversations with your team

# Shared Inbox

Conversations group messages by contact and device so you can review inbound chats, assign owners, and reply without losing context.

## In the dashboard

1. In the sidebar, open **Messaging** and choose **Inbox**.
2. Filter by status, device, **Mine**, or **Unassigned**.
3. Open a thread to read the history, change status, assign a teammate, and reply.

New inbound WhatsApp messages create or update threads automatically when message logging is on for the device.

## How it works

* Each contact on a linked device gets a conversation thread.
* New inbound messages open or update that thread automatically.
* You can mark threads open, pending, or closed, assign a teammate, and mark them read.
* Replies send through the same messaging pipeline as normal API sends.

## Work with conversations from the API

| Action                          | Method  | Endpoint                              |
| :------------------------------ | :------ | :------------------------------------ |
| List conversations              | `GET`   | `/api/v1/conversations`               |
| Get a conversation              | `GET`   | `/api/v1/conversations/{id}`          |
| Update status / assignee / read | `PATCH` | `/api/v1/conversations/{id}`          |
| List messages in a thread       | `GET`   | `/api/v1/conversations/{id}/messages` |
| Reply with text or media        | `POST`  | `/api/v1/conversations/{id}/reply`    |

Useful list filters: `status`, `whatsapp_account_id`, `assignee_user_id`, `search` (phone).

### SDK example

```python theme={null}
from wazzapi import WazzapiClient

with WazzapiClient(api_key="YOUR_API_KEY") as client:
    inbox = client.conversations.list(status="open")
    if inbox.conversations:
        thread = inbox.conversations[0]
        client.conversations.reply(thread.id, {"content": "Thanks for your message!"})
        # Image reply (URL or media_base64)
        client.conversations.reply(thread.id, {
            "message_type": "image",
            "media_url": "https://example.com/photo.jpg",
            "caption": "Here is the photo",
        })
        client.conversations.update(thread.id, {"mark_read": True})
```

```ts theme={null}
import { WazzapiClient } from "@wazzapi/wazzapi";

const client = new WazzapiClient({ apiKey: process.env.WAZZAPI_API_KEY });
const inbox = await client.conversations.list({ status: "open" });
if (inbox.conversations[0]) {
  const thread = inbox.conversations[0];
  await client.conversations.reply(thread.id, {
    content: "Thanks for your message!",
  });
  await client.conversations.reply(thread.id, {
    message_type: "document",
    media_url: "https://example.com/invoice.pdf",
    filename: "invoice.pdf",
    caption: "Your invoice",
  });
  await client.conversations.update(thread.id, { mark_read: true });
}
```

### Media replies

In the dashboard composer you can attach a file or paste a media URL (image, document, video, voice).\
API replies accept `message_type`, `media_url` / `media_base64`, plus optional `caption`, `filename`, and `mimetype`.

Each conversation still sends from its linked device (shown as **Sending as …**).

Full field details are in the [API Reference](/api-reference).
