Zernio
APIFor you
Zernio
APIFor you
Platforms

Facebook

Overview

Publish

Posts, Stories & ReelsMedia Requirements

Engage

AnalyticsInbox

Reference

Limits & Errors
Dashboard
OverviewPlatformsAPI ReferenceResources
Facebook

Inbox

Messenger direct messages, the welcome screen, the persistent menu, comments, Page reviews and inbox webhooks.


Facebook supports DMs, comments and Page reviews.

Direct messages

FeatureSupported
List conversations
Fetch messages
Send text messages
Send attachments (images, videos, audio, files)
Quick replies (up to 13, Meta quick_replies)
Buttons (up to 3; with message, sent as Meta's button template, text up to 640 characters)
Carousels (generic template, up to 10 elements; imageAspectRatio: "square" for 1:1 card images, default 1.91:1)
React to a message (any emoji) via Add message reaction and Remove message reaction
Message tags (4 types)
Archive and unarchive
Message requests (list and accept)
Handover (thread control)

Reactions a customer adds or removes arrive on the reaction.received webhook.

Pages connected before August 2026 need their webhook subscription refreshed before inbound reactions arrive. Sending is unaffected.

Outside the 24-hour window. Send messagingType: "MESSAGE_TAG" with messageTag set to one of:

  • CONFIRMED_EVENT_UPDATE
  • POST_PURCHASE_UPDATE
  • ACCOUNT_UPDATE
  • HUMAN_AGENT

A broadcast takes the same tag as message.messageTag and sends it with every recipient message.

Buttons. buttons with message go out as one button-template bubble: the text and up to 3 buttons under it.

The text must be 640 characters or less when buttons are attached. A longer message answers 400 Text must be 640 characters or less when buttons are attached.

This replaced the earlier shape, a one-card template whose title was the text cut at 80 characters.

Message requests

DMs from people the Page has not accepted wait in Meta's Message Requests folder.

GET /v1/inbox/conversations?folder=requests lists them live from Meta (first page only), each item with folder: "requests".

Meta has no accept call. Replying moves a thread into the inbox, which is what Accept a message request does with your accountId and message.

When Meta will not list the folder for the one account asked, the list answers 400 PLATFORM_LIMITATION.

Handover with another app

Meta's handover protocol lets another app on the Page, such as Page Inbox, own a thread. While it does:

  • Inbound messages arrive on message.received with metadata.standby: true.
  • No Zernio automation answers them.
  • A send answers 409 with code not_thread_owner. details.ownerAppId names the owner when Meta reports it.

Change who answers a conversation moves the thread with one of these actions:

  • pass, with targetAppId (Page Inbox is 263902037430900)
  • take (Meta allows it only to the Page's primary receiver)
  • request
  • release

conversation.control_changed fires when Meta reports a change, with control.ownerAppId naming the new owner.

Welcome screen: greeting, Get Started and ice breakers

The Messenger welcome screen has three settings, each with GET, PUT and DELETE:

SettingEndpointLimits
Greeting text/v1/accounts/{accountId}/messenger-greetingOne entry per locale, one with locale default; text up to 160 characters. Meta fills {{user_first_name}}, {{user_last_name}} and {{user_full_name}}.
Get Started button/v1/accounts/{accountId}/messenger-get-startedOne payload. Required before a persistent menu shows.
Ice breakers/v1/accounts/{accountId}/messenger-ice-breakersUp to 4 questions per locale (80 characters each), one locale default.

A PUT replaces every locale already set.

A Get Started or ice breaker tap sends a postback that arrives as message.received with metadata.postbackPayload.

A payload of zernio:workflow:<workflowId> starts that workflow. The workflow must be active on this account and profile.

{
  "ice_breakers": [
    {
      "locale": "default",
      "call_to_actions": [
        { "question": "Book a table", "payload": "zernio:workflow:5190ac0343606395fce014b0" }
      ]
    }
  ]
}

Persistent menu

The persistent menu shown in Messenger conversations takes at most 3 top-level items and 5 nested items.

Manage it with GET, PUT and DELETE /v1/accounts/{accountId}/messenger-menu (Account settings).

Meta only shows it on a Page that has a Get Started button.

A postback item whose payload is zernio:workflow:<workflowId> starts that workflow when tapped.

Comments

FeatureSupported
List comments on posts
Reply to comments
Delete comments
Like comments
Hide and unhide comments
Send a private reply (DM after a comment) (text plus up to 13 quick replies or 1 to 3 inline buttons, 7-day window, one per comment)

Comment-to-DM automations

Keyword-triggered auto-DMs, created with Create comment automation.

A template sends a product card instead of the plain dmMessage. The card has:

  • an image
  • a title
  • a subtitle for the description or price
  • up to 3 url or postback buttons

Up to 10 elements render as a carousel.

Phone buttons are not supported inside a card. The card and dmMessage plus buttons are mutually exclusive.

imageAspectRatio: "square" renders the card images at 1:1 instead of Messenger's default 1.91:1. It is Facebook only: Instagram rejects it with a 400.

The Instagram page has the full field shape. audience rules and the live_comment, story_reply and story_mention triggers are Instagram only.

Comments arrive by webhook. Every 10 minutes, Zernio also reads the latest comments and runs any the webhook missed.

actions.likeComment and actions.hideComment like or hide the matched comment.

ManyChat-style automations covers repeatPolicy, publicReplyPolicy and the other behaviour fields.

Reviews

FeatureSupported
List reviews
Reply to reviews

Webhooks

Messenger emits every message lifecycle event except unsend:

EventWhen it fires
message.receivedNew incoming DM
message.sentOutgoing DM is sent
message.editedThe sender edits a sent message (up to 5 edits per Meta)
message.deliveredAn outgoing DM is delivered
message.readThe recipient reads an outgoing DM

Messenger does not expose an incoming-message unsend, so message.deleted never fires for Facebook.

Messages are stored locally. Live messages arrive through webhooks, and on connect Zernio replays the DM history the account already has on Meta.

The webhooks page has the payloads.

The replay covers conversations that began before the account was connected. It takes up to 500 conversations per account and the newest 500 messages per conversation.

It runs in the background, so it can take a while to appear. It fires no webhooks; read it from List inbox conversations.

Replayed messages arrive already read, so they never affect unread counts.

Was this page helpful?

Analytics

Which analytics metrics Facebook returns for Page posts.

Limits & Errors

What Facebook's API does not expose and the common errors when publishing.

On this page

Direct messagesMessage requestsHandover with another appWelcome screen: greeting, Get Started and ice breakersPersistent menuCommentsComment-to-DM automationsReviewsWebhooks