Inbox
One inbox for DMs, comments, reviews and mentions across every connected account, fed by webhooks and answered through the API.
The inbox gathers every conversation and every public reaction to your content into one model. DMs from Instagram, Facebook, X, WhatsApp and the rest become conversations with messages. Replies under your posts become comments. Google and Facebook ratings become reviews. Tags of your account elsewhere become mentions. You read and answer all of them with the same endpoints, whatever the platform.
#What each platform supports
| Platform | DMs | Comments | Reviews | Mentions |
|---|---|---|---|---|
| Send and receive, media, quick replies, buttons, cards, reactions | Reply, hide, delete, private reply. Liking is in limited release | – | Comment and caption mentions | |
| Send and receive, media, quick replies, buttons, cards, reactions, message requests | Reply, like, hide, delete, private reply | List and reply | Post and comment mentions (read only) | |
| X | Send and receive | Reply, like, hide, delete | – | – |
| Threads | – | Reply, hide, delete | – | – |
| TikTok | Reply only, business accounts | Reply, like, hide, pin, delete your own | – | – |
| YouTube | – | Reply, delete, moderate | – | – |
| – | Reply, react, delete (company pages) | – | Company page mentions | |
| Bluesky | Text only | Reply, like, delete | – | – |
| Telegram (coming soon) | Send and receive, media, keyboards, edits | – | – | – |
| Send and receive, templates, interactive messages | – | – | – | |
| Slack | DMs and bot mentions | – | – | – |
| SMS, iMessage, RCS | Send and receive | – | – | – |
| Google Business Profile | – | – | List, reply, delete reply | – |
| Paused | Paused | – | – |
Reddit closed its API to third-party apps, so Reddit messages and comments stop syncing until access returns. Telegram and Discord are coming soon and cannot be connected yet; once Discord opens, its bot will send DMs but not read replies (see Discord). Platform pages list the exact limits, for example Instagram and WhatsApp.
#How the pieces fit
- A conversation belongs to one connected account, and the account belongs to a profile. Filter by
profileIdto get one customer's inbox, or byaccountIdfor one account. - A contact is the person behind one or more conversations, with tags and custom fields. See Contacts.
- Every send from automations is attributed:
message.sentwebhooks carrysentVia(human,api,broadcast,sequence,workflow,comment_automation,bulk-api) plus the ids of what sent it.
#Build on webhooks, not polling
The fastest and cheapest inbox is written by webhooks and read from your own database. Polling every conversation burns through your rate limit and still lags.
#Subscribe once
Create one webhook endpoint for conversation.started, message.received, message.sent, message.delivered, message.read, message.failed, comment.received and the review.* events. See Set up webhooks.
#Write each event to your store
Dedupe on the event id (X-Pozy-Event-Id), acknowledge with a 2xx within 5 seconds and process the event on a worker. profiles[0].externalId tells you which of your customers it belongs to when you use one profile per customer.
#Backfill and reconcile
When accounts connect, page through GET /v1/inbox/conversations with cursor, then fetch messages per conversation. Run the same sweep on a schedule to catch anything a missed delivery left behind.
#Send through the API
Replies, comments and review answers go out with the endpoints on the following pages. Delivery status comes back on the same webhook stream.
When an Instagram or Facebook account connects, Pozy replays the DM history the platform already holds: up to 500 conversations per account and the newest 500 messages in each. The replay runs in the background, arrives already marked as read and fires no webhooks, so read it from the list endpoint. Run your onboarding sweep again about an hour later to pick it up.
#Account errors inside list responses
List endpoints aggregate many accounts at once. When one account fails (an expired token, a platform outage), the rest still return. Check meta:
{
"meta": {
"accountsQueried": 3,
"accountsFailed": 1,
"failedAccounts": [{ "accountId": "6650c1e2a3b4c5d6e7f80a22", "platform": "instagram", "error": "The account needs to be reconnected", "code": null, "retryAfter": null }]
}
}An account in failedAccounts usually needs to be reconnected. See Account health.
#In this section
#Webhook events
| Event | When it fires |
|---|---|
message.received |
Message received. |
conversation.control_changed |
Conversation control changed. |
conversation.started |
Conversation started. |
message.sent |
Message sent. |
message.edited |
Message edited. |
message.deleted |
Message deleted. |
message.delivered |
Message delivered. |
message.read |
Message read. |
message.played |
Message played. |
message.failed |
Message delivery failed. |
reaction.received |
Reaction received. |
referral.received |
Referral received. |
comment.received |
Comment received. |
review.new |
Review new. |
review.updated |
Review updated. |
review.deleted |
Review deleted. |
review.restored |
Review restored. |