Skip to main content
The Facebook API in SocialAPI connects Facebook Pages. It publishes text, link, photo, video, album, Reel, and Story posts, reads and moderates comments, sends private replies and Messenger direct messages (DMs), and reads mentions. SocialAPI’s own Meta app connects the Pages, so you register nothing: see Platform apps. A Facebook profile is not supported: only Pages.

At a glance

Capabilities

An unsupported call returns 501 resource.not_supported. The cross-platform matrix is on Platforms.

Connect an account

Connect with POST /v1/accounts/connect and "platform": "facebook". The shared flow, request fields, and result are in Connect accounts, and the redirect parameters are in Redirect parameters.
Response (HTTP 202):
After the person authorizes, the redirect carries status=success and the brand’s Facebook account. That account holds every Page the login granted that none of your other brands already holds. A Page that another of your brands holds stays with that brand.
  • A login that grants no Page ends with status=error and error=platform.facebook.no_pages on your redirect_uri.
  • A login whose every Page belongs to another of your brands ends with status=error and error=platform.facebook.no_assignable_pages.
  • A brand whose Facebook account is connected through a different login ends with status=error and error=account.different_login. Disconnect the brand’s Facebook account first.
  • Reconnecting the same login refreshes the access for every brand that uses it, not only the brand you reconnected from.

Pages of an account

List the Pages of a connected account with GET /v1/accounts/{id}/pages. Each Page has at least an id (sapi_page_ prefix), platform_page_id, name, is_default, and is_active. A Page also carries profile_picture_url, category, followers_count, username, link, verification_status, cover_photo_url, about, and enriched_at, each omitted when it has no value. Publish to a Page with page_id on the post target: see Delivery. PATCH /v1/accounts/{id}/pages/{pageId} sets is_default or is_active.

One login, many brands

A Facebook login is a shared credential. One login can serve many brands, and each Page belongs to exactly one brand. List the Pages a login can manage, live from Facebook, with the brand that holds each:
Response (HTTP 200):
login_id is on each connected account. Move a Page to a brand with POST /v1/platforms/facebook/logins/{loginId}/pages/{pageId}/assign. A Page that another of your brands holds moves to the target brand. The call needs the accounts:manage scope.
Response (HTTP 201):

Comments

List comments on a post with GET /v1/inbox/comments/{postId}, where postId is the post’s platform ID. Reply, hide, unhide, delete, like, and unlike work as described in Comments.
  • Edited comments. Facebook sends an edited comment again, as another comment.received event. Automations ignore edits and answer new comments only.
  • Page admins. An Automation skips comments and messages from the Page itself. A Page admin who comments from a personal profile is a commenter like any other, so the comment triggers the Automation.

Private replies

A private reply sends a one-time DM to the person who commented. Send it with POST /v1/inbox/comments/{postId}/{commentId}/private-reply. Facebook allows one private reply per comment, within 7 days of the comment. A second reply, or a comment older than 7 days, returns 400 platform.facebook.private_reply_ineligible.

Direct messages and the messaging window

A Page can message a person only inside the 24-hour messaging window that the person’s last message opened. Outside it, the send returns 400 platform.facebook.window_closed.
  • Message types. Text and attachments. A DM send ignores quick_replies, buttons, and cards: it delivers only the text. Buttons work on a private reply. Each attachment in attachments[] has a source_type (url, media_id, or platform_attachment_id) and a type. type is required for platform_attachment_id, or the request returns 400 validation.attachment_type_required. Field rules are in Direct messages.
  • Reactions. POST /v1/inbox/conversations/{id}/messages/{messageId}/reaction reacts to a message, and DELETE on the same path removes the reaction.
  • Delivery status. dm.status.sent, dm.status.delivered, and dm.status.read events follow each DM you send.
  • No message tags. A message_tag on a Facebook DM, including HUMAN_AGENT, is not sent: the DM goes out untagged and the 24-hour window applies.

Mentions

GET /v1/accounts/{id}/mentions returns the posts that tag the Page. A mention inside a comment is not in that list: it arrives as a mention.received event. Reply to a mention with POST /v1/accounts/{id}/mentions/reply, which posts a public comment. Details are in Mentions.

Page insights

GET /v1/platforms/facebook/accounts/{id}/summary returns the Page’s followers, views, reach, post engagements, and net follower change over the trailing 30 days.
Response (HTTP 200):
interactions counts post engagements, and net_follows is new follows minus unfollows over the period. GET /v1/platforms/facebook/accounts/{id}/insights/daily returns one point per day, oldest first. days sets how many trailing days, from 1 to 365 (default 365). A day with no data is left out.
Response (HTTP 200):
followers is the count at the end of the day. views, reach, and interactions are that day’s totals. Both routes take an optional page_id, the id from GET /v1/accounts/{id}/pages. Without it they report on the account’s default Page. Both are free, need the accounts:read scope on a scoped API key, and have no MCP tool. Both need the read_insights scope, requested since 2026-10-17 with the analytics.read permission. Post metrics in Analytics do not need it.

Reviews

SocialAPI does not read Facebook reviews: Meta deprecated Page recommendations in Graph API v22.0. GET /v1/inbox/reviews/{account_id} for a Facebook account returns 422 account.platform_unsupported, and no other call replaces it.

Webhook events

Facebook Pages emit these events to your webhook endpoints. Payloads are in Webhook events. Every post.* event in Webhook events is emitted for this platform.

Limits

A Page access token does not expire on its own. Reconnect only when a call returns 401 platform.facebook.auth, for example after the person revoked access.

Scopes

SocialAPI’s Meta app requests these scopes at connect. You apply for no app review. Each scope belongs to the account permissions in the last column, and the consent screen asks for the scopes of the permissions you selected. The scopes marked Every account are always requested. Facebook asks for messages as 1 scope, covering both reading and writing, so the consent screen shows the broader scope. The account stays limited to the permissions you selected: an account connected with messages.read alone cannot send messages.
Last modified on October 19, 2026