Skip to main content
Scoped keysInboxBilling
Scoped keys

inbox:write on comment delete, like, and YouTube moderation

Deleting, liking, and unliking a comment, and moderating or editing a YouTube comment, now need inbox:write, in the REST API and in the MCP tools. A scoped key without it gets 403 auth.insufficient_scope. A brand-restricted key can run these calls and reply to a review only on accounts in its brands: another brand’s account returns 404. Full-access keys are unaffected. A reply to a mention refused with 403 account.permission_missing no longer costs an interaction credit. See Scoped API keys.
Webhooks
Webhooks

brand_id on webhook events

Webhook events now carry brand_id next to account_id, so one endpoint serving more than one customer can route each event by brand. post.scheduled carries it on each item of targets[], and post.published, post.partial, and post.failed on each item of results[]. dm.status.* events now also carry account_id. See Route events by brand.
ThreadsInboxAnalyticsPublishing
Threads

Threads mentions, insights, reply moderation, and reply_control

Threads mentions, insights, and hiding or unhiding replies are no longer in beta, and reply_control in a Threads target’s platform_data now sets who can reply. A Threads connect requests threads_manage_mentions, threads_manage_replies, and threads_manage_insights, each with its permission: see Scopes. An account connected before 2026-10-17 does not hold them, and those calls return 403 with a platform.threads.<code> error code until the account is reconnected. reply_control applies only on an account whose last connect was on or after 2026-10-17 with comments.write or with no permissions selection: on any other account it is not sent and comes back as a validation warning. Profile discovery stays in beta. See Threads.
FacebookAnalytics
Facebook

Facebook Page insights

GET /v1/platforms/facebook/accounts/{id}/summary and GET /v1/platforms/facebook/accounts/{id}/insights/daily are open to every key and no longer return 403 platform.facebook.beta_required. A connect with the analytics.read permission requests read_insights. A Page connected before 2026-10-17 returns 403 platform.facebook.insights_scope_missing until the account is reconnected. Facebook DMs still send no message_tag. See Page insights.
AccountsInstagram
Instagram

Instagram through Facebook Login

POST /v1/accounts/connect for instagram accepts "metadata": {"connection_type": "facebook_login"} for every key, which connects the account through Facebook Login for Business and its linked Facebook Page. It publishes the same posts as Instagram Login, including carousels and Stories, sends and reads the same DMs, including attachments, interactive messages, and reactions, handles collaboration invites, and also deletes published posts, likes comments, and sets the paid-partnership label. It sends no message_tag, and content_type is optional on it. See Connect through Facebook Login.
Publishing
Publishing

Stagger post targets

POST /v1/posts and social_api_create_post accept stagger with min_seconds and max_seconds. The targets publish one after another in the order listed, each a random delay in that range after the previous one, starting at scheduled_at or immediately with publish_now. The post is returned as scheduled, and each target’s planned time is in targets[].scheduled_at. stagger on a draft, or outside 0 <= min_seconds <= max_seconds <= 86400, returns 400 validation.field_invalid. See Stagger targets.
AccountsTikTok
TikTok

TikTok creator connection

POST /v1/accounts/connect for tiktok accepts "metadata": {"connection_type": "creator"}, which connects the account through TikTok’s Content Posting API instead of TikTok API for Business, so a personal or creator account does not need to be a TikTok Business Account. A creator connection publishes posts and drafts, lists posts, and reads creator info and the account summary. It has no comments or mentions. Connects without connection_type are unchanged. See Creator connection.
InboxYouTube
YouTube

YouTube comments turned off, and rate-limit status

Listing the comments of a YouTube video with comments turned off returns 422 platform.youtube.comments_disabled instead of 501 resource.not_supported. Stop polling that video until the channel owner turns comments back on. When the YouTube daily quota is used up, calls return 429 platform.youtube.rate_limit as documented, instead of 502 platform.youtube.api_error. See YouTube.
AccountsLinkedInBeta
LinkedIn

LinkedIn profile analytics (beta)

GET /v1/platforms/linkedin/insights now returns kind (organization or member). A LinkedIn personal profile connected with connection_type profile returns its follower count and counts for its 5 most recent posts published through SocialAPI, and GET /v1/accounts returns connection_type on these accounts. The profile connection requires beta access: an account without it gets 403 billing.platform_not_available. See Profile analytics.
Publishing
Publishing

Platform options on post targets

Each post target returns platform_data with the platform-specific options you set when the post was created or last updated, so a saved post reopens with its options. Chain continuation posts are returned in segments, not in platform_data. See Publishing.
Accounts
Accounts

Account permissions

Send permissions on POST /v1/accounts/connect or POST /v1/invites to give a connected account only the permissions you need. GET /v1/accounts returns permissions and effective_permissions, and PATCH /v1/accounts/{id} changes them. A call the account lacks a permission for returns 403 account.permission_missing, except publishing, which reports it on the target, and the other calls listed in Account permissions.
Documentation
Documentation

Documentation restructure

The documentation has new URLs, grouped into Guides, Platforms, AI agents, and API reference. Old URLs redirect to the new pages. Start at Supported platforms.
Pinterest
Pinterest

Pinterest boards

AI agents can list a Pinterest account’s boards with social_api_list_pinterest_boards. See MCP tools reference.
InboxMentionsTikTok
TikTok

TikTok comments and mentions

TikTok accounts support comments: list comments and replies on the account’s posts, reply to them, like them, hide comments other people wrote, and delete comments the connected account wrote. A comment.received event fires when someone else comments, and a TikTok Business Account can list the posts and comments that mention it and reply to a mention made in a comment. On a TikTok account connected before 2026-10-13, comment and mention calls return 501 resource.not_supported until you reconnect the account. See TikTok comments and TikTok mentions.
AccountsTikTok
Accounts

TikTok connects through TikTok API for Business

TikTok connects, invites, and reconnects authorize the account through TikTok API for Business. Accounts that were already connected keep working until their owner reconnects. See TikTok.
PublishingTikTok
Publishing

TikTok posts capped at 13 per 24 hours

SocialAPI caps each TikTok account at 13 posts per 24 hours, below TikTok’s limit of 15 per day. A post beyond the cap returns 429 publishing.velocity_limit with a Retry-After header. See Posting velocity caps.
BillingPublishing
Billing

Refused publishes and retries use no post credit

A publish or retry that returns 429 publishing.velocity_limit does not use a post credit. See Posting velocity caps and Plans.
AnalyticsInstagram
Instagram

Per-post Instagram insights

GET /v1/posts/{pid}/metrics now returns insights for an Instagram post, such as views, reach, interactions, and saves. See Instagram live metrics.
PublishingLinkedIn
LinkedIn

LinkedIn escapes reserved characters

Characters LinkedIn reserves for formatting are escaped, so plain text appears as typed. Hashtags and mentions still use the syntax in Text formatting.
Analytics
Accounts

Sync cooldown per account

POST /v1/accounts/{id}/sync allows 1 request per account every 5 minutes. A second request inside the window returns 429 accounts.sync_rate_limited. See Refresh an account’s posts.
PublishingInstagramFacebook
Instagram and Facebook

Photos and videos on post targets

Instagram and Facebook post targets return platform_media, the images and videos of the published post, including posts published outside SocialAPI. See Instagram publishing.
AccountsInstagramFacebook
Instagram and Facebook

Up to 500 posts per Instagram account and Facebook Page

Connecting an Instagram or Facebook account, and POST /v1/accounts/{id}/sync, cover up to the 500 most recent posts of an Instagram account and of each Facebook Page. See Refresh an account’s posts.
AccountsThreads
Threads

Threads connect fixed in some regions

Connecting a Threads account from some regions ended on the Threads home page instead of the authorization screen. Connect now opens the authorization screen from every region. See Threads.
AccountsWhatsApp
WhatsApp

Banned WhatsApp numbers cannot be connected

Connecting a WhatsApp number that Meta has banned fails with 403 whatsapp.number_banned. Reconnecting does not lift the ban. See Errors.
AccountsWhatsApp
WhatsApp

Numbers Meta no longer serves are flagged for reconnection

When Meta stops serving a WhatsApp number for a connection, the account is marked reconnect_recommended with the reason whatsapp_number_unavailable, and an account.disconnected webhook fires once. See Account status.
Automations
Automations

Multi-step Automations, buttons, and the Follow gate

Automations run multi-step flows with postback buttons, and Instagram Automations can send a link only to people who follow the account. See The Follow gate.
AccountsDirect messagesWhatsApp
WhatsApp

WhatsApp numbers that stay in the WhatsApp Business app

A number that stays registered in the WhatsApp Business app can connect through Embedded Signup. Messages you send from the app appear in your inbox as outgoing messages, and imported message history arrives without firing webhooks. See Keep using the WhatsApp Business app.
MentionsThreads
Mentions

Reply to Threads mentions

POST /v1/accounts/{id}/mentions/reply now replies to a mention on Threads. Threads support is in beta. See Reply to a mention.
Automations
Automations

Keyword Automations

An Automation on an Instagram or Facebook account can react only to comments or messages that contain your keywords. See Automations.
AnalyticsThreads
Threads

Full Threads account insights

Account insights on Threads now include likes, clicks, replies, reposts, quotes, and follower counts, along with follower demographics. Those values were missing from responses before. See Threads insights.
PublishingInstagram
Instagram

Instagram Reels require a video

Validation reports an error for a Reel draft that has no video. Use content_type feed for an image. See Supported media.
PublishingInstagramFacebook
Instagram and Facebook

More platform_data options on Instagram and Facebook

Instagram posts accept AI-generated labels, paid partnership, user tags, audio name, and thumbnail offset in platform_data. Facebook posts accept place, country targeting, link carousels, and video options. Validation reports a warning for any key the platform does not accept. See Platform data fields.
Analytics
Analytics

Stored analytics history

SocialAPI stores daily history for accounts, brands, and posts, and returns it from the account, brand, and post analytics endpoints. See Analytics.
Billing
Billing

Billing block fields on /v1/users/me

GET /v1/users/me returns billing_blocked, billing_blocked_at, and billing_block_reason. Use them to tell a customer why calls are refused and whether paying lifts the block. See Past-due accounts.
Accounts
Accounts

Last used time for API keys

API key responses include last_used_at, the time of the key’s latest request, up to 1 minute out of date. The field is absent when the key has never been used. See List keys.
PublishingPinterest
Pinterest

Pinterest posting limits

A Pinterest publish target allows 1,000 posts per 24 hours and has no hourly cap. See Posting velocity caps.
PublishingGoogle Business Profile
Google Business Profile

Google platform_data keys

Google Business Profile posts send only the platform_data fields that Google accepts. Other keys are dropped, so a key meant for another platform no longer fails the whole post. See Platform data fields.
InboxInstagram
Inbox

Comments report liked_by_viewer

Each comment includes liked_by_viewer, which is true when the connected account liked it through SocialAPI. Instagram accounts connected with Facebook Login can like comments too. See Like and unlike a comment.
MCP
MCP

Output schemas for MCP tools

Every MCP tool declares an output schema, so a client can read the shape of each result before it calls the tool. See MCP tools reference.
Direct messages
Direct messages

Reply to a specific message

Messages carry reply_to.platform_id when they reply to an earlier message. See Read messages.
Accounts
Accounts

Team role on /v1/users/me

GET /v1/users/me returns role: admin, developer, or an empty string for the account Owner. See Account permissions.
AccountsPublishingPinterest
Pinterest

Pinterest

Connect a Pinterest account to publish Pins to a board, and to list, create, rename, and delete its boards with /v1/accounts/{id}/boards. GET /v1/platforms/pinterest/accounts/{id}/pins lists the account’s Pins, and GET /v1/platforms/pinterest/accounts/{id}/summary returns its follower, Pin, board, and view counts. See Pinterest.
Billing
Billing

Profile packs on Empire

Business (Empire) accounts add Profile packs automatically when their brand count reaches the scale threshold, 90% of the allowance by default, as Pro (Full Send) accounts do. See Profile packs.
MCP
MCP

Write tools declare readOnlyHint false

MCP write tools send readOnlyHint: false, so a client knows which tools change data. See MCP tools reference.
Direct messagesInstagram
Instagram

Instagram story replies arrive as DMs

A reply to one of your Instagram stories arrives as a dm.received event, with the story in the story field. See Webhook events.
Billing
Billing

Automatic Profile packs on Full Send

Pro (Full Send) accounts add a Profile pack of 50 brands automatically when brands reach the scale threshold, 90% of the allowance by default. See Profile packs.
AccountsWhatsApp
WhatsApp

Register Cloud API numbers

Register a WhatsApp Cloud API number with POST /v1/platforms/whatsapp/phone-numbers/{id}/request-code, verify-code, and register. Registration handles the two-step verification PIN. See Connecting.
AccountsFacebook
Facebook

Move a Page between brands

Assigning a Facebook Page to a brand moves it from the brand that holds it now. See One login, many brands.
InboxInstagramFacebook
Inbox

Private reply eligibility errors

A private reply that Instagram or Facebook refuses returns platform.instagram.private_reply_ineligible or platform.facebook.private_reply_ineligible. Examples are a comment older than the 7-day window, or a second private reply to the same comment. See Send a private reply.
ErrorsYouTube
YouTube

YouTube suspended accounts

When YouTube suspends or closes the account or its channel, every call for that account returns 403 with platform.youtube.account_suspended. See Errors.
Direct messagesInstagramFacebook
Instagram and Facebook

Button taps are saved as messages

When someone taps a button in an Instagram or Facebook conversation, the tap is saved as an inbox message and raises dm.postback. See Read messages.
WebhooksInstagramFacebook
Instagram and Facebook

platform_id on DM webhook events

dm.received, dm.sent, and dm.postback carry platform_id in data. The value matches the platform_id of the same message in the API. See Webhook events.
Direct messagesInstagramFacebook
Direct messages

Closed messaging windows return the same error

After Instagram or Facebook refuses a DM because the 24-hour messaging window has closed, later sends to that conversation return the same 400 error code as the first refusal, with meta.blocked_locally set to true. The block lifts when the person messages you again, or 24 hours after the refusal, whichever comes first. Sends that carry a message_tag are never blocked this way. See The messaging window.
AccountsWhatsApp
WhatsApp

Connect WhatsApp from your own page

WhatsApp Embedded Signup runs in three legs: your backend starts the connection, Meta’s popup collects the number, and your backend completes it. See Connecting.
Publishing
Publishing

Posting velocity caps

Each publish target can publish 25 posts per hour, and each platform has a 24-hour cap. Publishing past a cap returns 429 publishing.velocity_limit with Retry-After, and creates nothing. A scheduled post is held until the window clears, not failed. See Posting velocity caps.
AccountsAnalytics
Accounts

Re-sync an account’s posts

POST /v1/accounts/{id}/sync re-reads up to 100 of an account’s most recent posts from the platform. See Refresh an account’s posts.
PublishingThreads
Threads

Threads platform_data warnings

Threads draft validation reports a warning for each platform_data key it will ignore, so you can see which settings will not apply before you publish. See Platform data fields.
Google Business Profile
Google

Update a Google Business Profile location

PUT /v1/platforms/google/accounts/{id} changes a location’s public profile: name, description, phone numbers, address, website, categories, opening hours, and service area. Only the fields you send are changed, and sending an empty value clears that field. Google moderates each edit, so a successful response means the edit was accepted for review. See Update a location.
Google Business ProfilePublishing
Google

Photos and videos on Google locations

GET, POST, and DELETE on /v1/platforms/google/accounts/{id}/media manage the photos and videos on a location’s public profile. Photos customers contributed can be read with contributed=true, but they cannot be deleted through the API. See Profile media.
Google Business ProfileAnalytics
Google

Google performance metrics and search keywords

GET /v1/platforms/google/accounts/{id}/insights returns daily counts of how people found a location on Search and Maps and what they did next. GET /v1/platforms/google/accounts/{id}/search-keywords returns the monthly keywords that surfaced it. Google withholds exact counts for low-volume keywords, which come back as a threshold instead of a value. See Performance metrics.
Google Business ProfileWebhooks
Google

Review reply moderation events

Google moderates review replies. review.updated is sent when a reply is approved or rejected, with change set to reply_approved or reply_rejected. See Review events.
Bluesky
Bluesky

Bluesky

Connect a Bluesky account with an app password to publish posts and read comments, mentions, and direct messages. Direct messages need an app password with direct message access. See Bluesky.
WhatsAppPublishing
WhatsApp

Send media with a caption and filename

Messages can include media with an optional caption and filename. See Sending media.
WhatsAppDirect messages
WhatsApp

Interactive messages

Send a message with up to 3 reply buttons, or with a list menu. When a contact taps an option, it arrives as an inbound message in the same messages array as text and media. See Interactive messages.
WhatsAppDirect messages
WhatsApp

Inbound WhatsApp media

Media that contacts send is available from GET /v1/inbox/media/{id}, which returns the file. If the file is not ready yet, the call returns 504, so retry it. See Inbound media.
WhatsAppPublishing
WhatsApp

Template sends return a message ID

A template send returns message_id, the SocialAPI ID of the message. See Send a template.
Google Business ProfileReviews
Google

Review replies show their moderation state

A reply you send to a Google review returns state, which is PENDING until Google approves it. A reply is not published at the moment you send it. See Replies are moderated.
WhatsAppWebhooks
WhatsApp

WhatsApp webhooks include account and conversation IDs

Breaking: dm.received for WhatsApp now sets account_id to the SocialAPI account ID, and sets conversation_id. Before, account_id held the WhatsApp phone number ID, so update code that read it as one. See dm.received.
FacebookDirect messages
Facebook

Private replies reject buttons

A private reply that includes buttons returns 400 validation.field_not_supported with field set to buttons, and the message asks you to send text only. Before, the buttons were dropped without an error. See Private replies.
Google Business ProfileAccounts
Google

Google logins show their account email

GET /v1/platforms/google/logins/{loginId}/locations returns login_name and login_email, so you can tell Google logins apart. See Connect another location to a brand.
Google Business ProfileAccounts
Google

Assign new locations without reconnecting

After a Google login is connected, its Business Profile locations can be assigned to brands without repeating OAuth. Locations added in Business Profile later appear in GET /v1/platforms/google/logins/{loginId}/locations. See Connect another location to a brand.
WhatsAppErrors
WhatsApp

WhatsApp replies inside the 24-hour window send

Replies to a contact inside the 24-hour service window are no longer rejected by SocialAPI with whatsapp.window_closed. WhatsApp decides whether a send is allowed. See The 24-hour service window.
Direct messagesInstagramFacebook
Instagram and Facebook

React to direct messages

POST /v1/inbox/conversations/{id}/messages/{messageId}/reaction adds your account’s emoji reaction to a message, and DELETE on the same path removes it. Send the emoji character itself. Supported on Instagram and Facebook Messenger. See React to a message.
YouTubePublishing
YouTube

Studio tags on published videos

PATCH /v1/platforms/youtube/accounts/{id}/videos/{videoId} accepts tags, which sets the video’s tags in YouTube Studio. See Update post.
Inbox
Inbox

Refresh an account’s inbox on demand

POST /v1/inbox/sync refreshes one account’s conversations, or one conversation when you send conversation_id. The call returns right away: poll GET /v1/inbox/sync until state is no longer syncing. Repeating a sync for the same target before its wait is over returns 429, and Retry-After gives the seconds left. See Refresh the inbox manually.
ThreadsAnalytics
Threads

Threads insights and profile lookup (beta)

GET /v1/platforms/threads/insights returns engagement for one Threads post or for the account. GET /v1/platforms/threads/profile-lookup resolves a public profile by exact username. See Insights.
Zalo
Zalo

Zalo is open to every account

Zalo no longer needs a beta flag or an allowlist entry. See Zalo.
PublishingThreadsInstagramGoogle Business Profile
Publishing

A publish without an ID fails

If Threads or Instagram accepts a publish without returning a media ID, or Google accepts a local post without returning its resource name, the target now fails instead of reporting success. See Errors on a failed target.
YouTubeDirect messages
YouTube

YouTube daily reply limit

Each YouTube channel can post 5 comment replies per day, counted in Pacific time. A reply over the limit returns validation.youtube_daily_reply_limit. See Comments.
FacebookAnalytics
Facebook

Reel metrics on post metrics

GET /v1/posts/{pid}/metrics returns metrics for Facebook Reels. Before, Reel targets were dropped from the response without an error. See Retrieve posts.
PublishingMedia
Publishing

One media list on posts

Post requests accept a single media array that mixes url, media_id, and platform_attachment_id items, in the order you send them. platform_attachment_id publishes only on Instagram, Threads, LinkedIn, LinkedIn Page, and X. media_ids still works but is ignored when media is set. See Publish a platform attachment ID.
InstagramDirect messages
Instagram

Messaging participant profiles

GET /v1/platforms/instagram/accounts/{id}/participants/{participantId}/profile returns a messaging participant’s profile, with follow status in both directions. Instagram returns it only for users who messaged the account or tapped an icebreaker or persistent menu item. For anyone else the call returns 403 platform.instagram.230: Instagram did not disclose the relationship, which does not mean the user does not follow the account. See Participant profile.
Inbox
Inbox

Comment and review endpoints accept SocialAPI IDs

Comment and review endpoints accept a SocialAPI interaction ID, such as sapi_cmt_... or sapi_rev_..., in place of the platform ID. See What each endpoint accepts.
AnalyticsInstagram
Instagram

Instagram account summary

GET /v1/platforms/instagram/accounts/{id}/summary returns profile counts and trailing 30-day insight totals for an Instagram account, such as reach, views, interactions, engaged accounts, and net follower change. Accounts connected before the insights permission was requested return 403 until they are reconnected. See Account summary.
TikTokErrors
TikTok

TikTok refusals return 4xx

Some TikTok refusals now return 403, and daily post limits return 429 so you know to back off. Before, these returned 502. The platform.tiktok.<code> error code is unchanged. See Errors on a failed target.
WhatsApp
WhatsApp

WhatsApp Business is open to every account

WhatsApp Business no longer needs a beta flag or an allowlist entry. See WhatsApp.
Accounts
Accounts

Redirect URIs keep their query string

A redirect URI you register can include a query string. SocialAPI keeps it and adds its own callback parameters. If your URI has a parameter with the same name as a callback parameter, SocialAPI’s value replaces yours. See Connect accounts.
AccountsBilling
Accounts

Deleting an account cancels its subscription

DELETE /v1/users/me cancels the account’s paid subscription before the account is deleted. If the cancellation fails, the deletion still goes through. See Change or cancel your plan.
InstagramPublishing
Instagram

Instagram collaboration invites

Collaborators are invited when you publish, through collaborators in the platform data, and GET /v1/platforms/instagram/accounts/{id}/media/{mediaId}/collaborators lists them for the publishing account only. The invited account accepts or declines with POST on collab/accept or collab/decline. Invites expire 14 days after they are sent. See Collaboration invites.
Billing
Billing

Plan catalog and use case

GET /v1/billing/plans returns the plan catalog: names, taglines, prices, limits, and which plan is marked popular. GET /v1/users/me returns use_case. See The plan catalog.
WebhooksInstagram
Webhooks

Instagram comment events include the post permalink

Instagram comment.received events include permalink, the public URL of the post. The field is optional and set only for Instagram comments. See comment.received.
Publishing
Publishing

Look up a post by its platform ID

GET /v1/posts/{pid} and GET /v1/posts/{pid}/metrics accept a platform post ID as well as a SocialAPI post ID. See Publishing.
TikTokPublishing
TikTok

Send a TikTok video to the creator’s inbox

Set post_mode to inbox in the TikTok platform data to upload a video to the creator’s TikTok inbox as a draft instead of publishing it. The video.upload scope is required. See Draft in the TikTok app.
Webhooks
Webhooks

Replay protection headers

Each webhook delivery includes X-SocialAPI-Timestamp, X-SocialAPI-Delivery, and X-SocialAPI-Signature-V2. The V2 signature is an HMAC-SHA256 over the timestamp, a . character, and the raw request body. Use them to reject replayed deliveries. See Replay protection.
LinkedInPublishing
LinkedIn
LinkedIn and LinkedIn Page posts return permalink, the URL of the published post. It was empty before. See Retrieve posts.
ThreadsPublishing
Threads

Threads publishes retry when the media is not ready

A Threads publish that fails because its media container is not ready yet is retried before it is reported as failed. See Errors on a failed target.
FacebookDirect messages
Facebook

Ineligible private replies return a stable error

A private reply that Meta rejects because the comment is not eligible returns platform.facebook.private_reply_ineligible. The message explains that the 7-day window has passed or that the comment already received a private reply. See Private replies.
FacebookAccounts
Facebook

List every Facebook Page

Listing a user’s Facebook Pages returns every Page. Accounts with more than 25 Pages were cut off at 25. See Pages of an account.
TikTokAccounts
TikTok

TikTok profile fields in the account summary

GET /v1/platforms/tiktok/accounts/{id}/summary returns the creator’s display name, username, avatar, follower, following, likes, and video counts, and bio. See Account summary.
Direct messagesErrorsFacebookInstagram
Facebook and Instagram

Specific error codes for Facebook messaging and Meta throttling

Sending a Facebook message after the 24-hour messaging window closes returns 400 platform.facebook.window_closed. Other refusals with Meta error code 10 return 403 platform.facebook.permission_denied. See The messaging window and Errors.
AnalyticsTikTok
TikTok

TikTok account summary and video sync

GET /v1/platforms/tiktok/accounts/{id}/summary returns the profile and video statistics of a TikTok account. POST /v1/platforms/tiktok/accounts/{id}/sync re-syncs the account’s videos. See Account summary and Sync videos.
Announcements
Announcements

Service announcements

GET /v1/announcements lists current service announcements, newest first, with a seen flag for the calling user. POST /v1/announcements/{id}/seen marks one as seen, and repeating the call is safe. Both calls are free and work with restricted API keys. See Announcements.
PublishingX / Twitter
X / Twitter

Images and video on X posts

Posts to X accept up to 4 images, 1 video, or 1 GIF. Uploads need the media.write scope, so an account connected before this change must reconnect before its first upload. A failed upload fails the whole post; the text is not published alone. See Supported media.
InboxX / Twitter
X / Twitter

Hide X replies

X comments report can_hide: true, so you can hide them through the inbox moderation calls. Deleting X replies is still not offered, because X only allows deleting posts the account wrote. See X comments.
InboxX / Twitter
X / Twitter

X comment lists

A post’s X comments no longer include the post itself as its first comment. A limit below X’s minimum no longer returns 400; the list is trimmed to the number you asked for. See X comments.
Direct messagesX / Twitter
X / Twitter

X DM replies go to the other person

When the newest message in an X conversation was sent by your account, the conversation now resolves to the other participant. Before this fix, a reply in that case went to your own account. See Direct messages.
AccountsX / Twitter
X / Twitter

X accounts stay connected after an unexplained 401

A 401 from X that does not name an invalid or expired token no longer marks the account as needing a reconnect. A token that X reports as invalid or expired still does. See Account status.
ErrorsThreads
Threads

Threads error details from Meta

A bare error code 10 from Threads returns 422 platform.threads.10 with Meta’s message, subcode, and trace ID. Before, it returned “Operation not supported for this platform” and dropped those details. See Errors.
AccountsDirect messagesWhatsApp
WhatsApp

WhatsApp Business (beta)

WhatsApp Business is available in beta. Request access from the dashboard, then connect a phone number through Meta’s signup flow to read and reply to messages, send message templates, and check the phone number status. See Connecting.
AccountsGoogle Business Profile
Google Business Profile

Google 403 responses do not require a reconnect

A 403 from Google, such as posting disabled by a policy, returns 403 platform.google.access_denied with Google’s message. The account no longer needs a reconnect for it. Only a 401 from Google requires one. See Account status.
Accounts
API keys

Edit and rotate API keys

PATCH /v1/keys/{id} changes a key’s name, scopes, and brand restrictions, and the key value stays the same. POST /v1/keys/{id}/rotate issues a new secret and stops the old one working immediately. The new secret is shown once. See Scoped keys.
Accounts
API keys

Scoped and brand-restricted API keys

POST /v1/keys accepts scopes and brand_ids to limit a key to the actions and brands you choose. GET /v1/keys/scopes lists the scopes you can assign. A call outside a key’s scopes returns 403 auth.insufficient_scope. See Scoped keys.
Direct messages
Direct messages

Stable DM conversation IDs

A direct message conversation keeps the conversation_id first delivered for it. The ID no longer changes partway through a thread. See Conversations.
AccountsX / Twitter
X / Twitter

X accounts stay connected after a duplicate post is refused

When X refuses a post as duplicate content, the account keeps working and does not need a reconnect. See Account status.
InboxPublishing
Inbox

brand_id filters on posts, comments, and conversations

GET /v1/posts, GET /v1/inbox/comments, and GET /v1/inbox/conversations now honor the brand_id parameter. Before, it was ignored and the results covered every brand. See Concepts.
ReviewsGoogle Business Profile
Reviews

Reviews are listed per account

Breaking: GET /v1/inbox/reviews now returns your connected Google Business Profile accounts, each with its rating summary, including accounts with no reviews. To list reviews, call GET /v1/inbox/reviews/{account_id} for one account. See The two list endpoints.
AccountsGoogle Business Profile
Google Business Profile

Choose one Google Business Profile

When a Google login manages more than one Business Profile, the connection stays in selection_required status until you choose one. GET /v1/accounts/pending/{connection_id} lists the candidates, and POST /v1/accounts/pending/{connection_id}/select connects the one you pick. The MCP tools social_api_list_pending_profiles and social_api_select_pending_profile do the same. See Choose a Google Business Profile.
AccountsGoogle Business Profile
Google Business Profile

Every Google account and location is listed

Listing Google Business Profile accounts and locations now follows every page of results. Before, a long list was cut short, and the profiles past the cut could not be connected. See Choose a Google Business Profile.
Direct messagesPublishingZalo
Zalo

Zalo Official Account (beta)

Zalo Official Account is available in beta. Connect an Official Account to read and send direct messages, and to create, update, list, and delete article posts. See Zalo.
MentionsInstagramFacebook
Mentions

Reply to a mention as a public comment

POST /v1/accounts/{id}/mentions/reply posts a public comment in reply to a mention on Instagram or Facebook, including on a third-party post where a normal comment reply is not allowed. Each reply uses 1 interaction credit. See Mentions.
Publishing
Publishing

Post type on each target

Each target in a post response includes media_type, one of feed, reel, stories, or carousel. See Publishing.
Publishing
Publishing

Platform settings on the post

POST /v1/posts, PATCH /v1/posts/{pid}, and POST /v1/posts/validate accept platform_data at the top level, keyed by platform name, for example {"instagram": {"content_type": "feed"}}. A target’s own platform_data takes precedence over the top-level value. See Publishing.
WebhooksInstagramFacebook
Instagram and Facebook

Mention events include the mention content

mention.received events for Instagram and Facebook include the text, media, permalink, and author of the mention when the platform returns them. Any field can be empty. See Webhook events.
PublishingLinkedIn
LinkedIn

LinkedIn post options

LinkedIn posts accept platform_data for visibility, disable_reshare, alt text for each image (alt_text or alt_texts), and media_title. Invalid values fail validation before the post is published. See LinkedIn publishing.
PublishingLinkedIn
LinkedIn

LinkedIn article and link posts

LinkedIn article posts accept article_url, article_title, article_description, and a thumbnail image in platform_data. Posts can add a call-to-action button with cta_label and cta_url. See LinkedIn publishing.
Direct messagesWebhooksInstagram
Instagram

Quick replies, buttons, and carousels in DMs

POST /v1/inbox/conversations/{id}/messages accepts quick_replies, buttons, and cards for Instagram conversations. When a person taps a postback button on Instagram, SocialAPI sends a dm.postback webhook event. See Direct messages.
Direct messagesInstagramFacebook
Instagram and Facebook

Multiple attachments and replies in DMs

A DM request can send more than one attachment, each as its own message, using attachments with a source_type of url, media_id, or platform_attachment_id. reply_to_message_id sends the first message as a reply to an earlier message. attachment_url is deprecated in favor of attachments. See Direct messages.
PublishingInstagram
Instagram

Read Instagram stories

GET /v1/platforms/instagram/accounts/{id}/stories lists the account’s active stories. It supports limit and cursor. See Instagram.
Publishing
Publishing

Posts are validated before they are scheduled or published

Scheduling or publishing a post runs the same checks as POST /v1/posts/validate. If the checks find errors, the request returns 400 with publishing.validation_failed and the list of issues. Send skip_validation: true to schedule or publish anyway. See Publishing.
WebhooksAccountsFacebook
Facebook

Removed Facebook Pages are reported

When a Facebook Page is removed or its access is revoked, SocialAPI sends a page.removed webhook event. If the account has no Pages left, its status becomes reconnect_recommended. See Webhook events.
InboxLinkedIn
LinkedIn
Comments on LinkedIn Page posts include author_headline and author_profile_url when LinkedIn returns them. See Comments.
Accounts
Accounts

Connect without a registered redirect URI

POST /v1/accounts/connect accepts any valid https redirect_uri, or http on localhost, until you register at least one in the dashboard. After that, only registered URIs are accepted, and others return 400 validation.redirect_uri_not_whitelisted. See Connect accounts.
PublishingTikTok
TikTok

Choose the cover photo for TikTok photo posts

Set platform_data.photo_cover_index on a TikTok photo post to choose which photo is the cover. The default is the first photo, index 0. See TikTok publishing.
Direct messagesInstagramFacebook
Instagram and Facebook

Message tags on DMs

message_tag on a DM request sends a message outside the standard 24-hour window on Instagram and Facebook. Instagram accepts only HUMAN_AGENT, which requires Meta’s Human Agent access, and Facebook also accepts ACCOUNT_UPDATE, CONFIRMED_EVENT_UPDATE, CUSTOMER_FEEDBACK, and POST_PURCHASE_UPDATE. See Direct messages.
PublishingThreadsX / Twitter
Threads and X

Thread chains on Threads and X

segments on POST /v1/posts adds up to 25 follow-up posts that publish as a native thread on Threads and X. Each segment takes text, plus media_ids on Threads (X publishes segment text only). The response lists the published segment IDs in thread_post_ids. See Threads publishing and X publishing.
InboxYouTube
YouTube

YouTube comments in the inbox list

GET /v1/inbox/comments includes YouTube posts only when the request includes account_id. The YouTube list returns a single page with no cursor. See Comments.
InboxYouTube
YouTube

Moderate and edit YouTube comments

POST /v1/platforms/youtube/comments/{commentId}/moderate sets a comment to published, held_for_review, or rejected. Set ban_author to true to ban the author when the status is rejected. PATCH /v1/platforms/youtube/comments/{commentId} changes the comment text. Both calls require account_id and post_id. See YouTube.
Inbox
Comments

Filter comments by status, order, and keyword

GET /v1/inbox/comments/{postId} accepts moderation_status (published, held_for_review, or likely_spam), order (recent or relevance), and q to search comment text. Other platforms ignore these parameters. See Comments.
Direct messagesTelegram
Telegram

Telegram direct messages

Telegram is available to all accounts. Connect a Telegram bot to read and send direct messages. See Telegram.
AnalyticsYouTube
YouTube

YouTube channel summary, re-sync, and video edits

GET /v1/platforms/youtube/accounts/{id}/summary returns the channel summary. POST /v1/platforms/youtube/accounts/{id}/sync re-syncs the channel’s videos. PATCH /v1/platforms/youtube/accounts/{id}/videos/{videoId} edits a published video. See YouTube.
Accounts
Accounts

Page IDs accept platform IDs

Requests that take a page ID accept either the SocialAPI page ID (sapi_page_...) or the platform’s own page ID. See IDs.
AccountsFacebook
Facebook

Facebook Page details

Facebook Page responses from GET /v1/accounts/{id}/pages include followers_count, category, username, link, about, cover_photo_url, verification_status, and enriched_at. SocialAPI fills these when a Page is connected and refreshes them over time. See Connect accounts.
PublishingX / Twitter
X

X post settings in platform_data

X posts accept platform_data for reply_settings, community_id, geo and geo_place_id, for_super_followers_only, and nullcast. See X publishing.
PublishingFacebook
Facebook

Publish Facebook Reels

Set content_type to reel in the Facebook platform_data to publish a Reel. A Reel takes a single video. A Reel fails with 422 when Facebook reports that processing failed, and with 504 when processing does not finish in time. See Facebook publishing.
PublishingLinkedIn
LinkedIn

LinkedIn member accounts

Connect a LinkedIn member account to publish text, images, and videos as that member, with multi-image posts limited to images. Comments, reactions, and reading the member’s posts are not supported, and the member reconnects every 60 days when LinkedIn access expires. See LinkedIn publishing.
Errors
Errors

Send your own X-Request-ID

Send an X-Request-ID header to name a request. A valid value comes back on the response, and SocialAPI generates one when you send none. Log it with each call so you can match a request to a support ticket. See Debugging.
WebhooksPublishing
Webhooks

Post lifecycle webhook events

Subscribe to post.scheduled, post.published, post.partial, post.failed, post.updated, post.deleted, post.unpublished, and post.retried to follow posts you create. Each event carries the post’s SocialAPI ID. See Webhook events.
WebhooksDirect messages
Direct messages

Direct message status events

dm.status.sent, dm.status.delivered, dm.status.read, and dm.status.failed report the delivery state of a message you sent. Which statuses arrive depends on the platform. See Webhook events.
PublishingFacebook
Facebook

Facebook multi-photo posts

A Facebook post with 2 to 10 images publishes as one multi-photo album. Images and videos cannot be mixed in one album: the request fails with media_mixed, and more than 10 images fail with media_too_many. See Facebook publishing.
Inbox
Inbox

Mention list pagination

GET /v1/accounts/{id}/mentions returns next_cursor when more mentions exist. Pass it back to get the next page, and stop when the field is absent. See Mentions.
InboxWebhooks
Inbox

Author usernames

Authors in interactions and webhook events include a username when the platform provides one, next to name and avatar_url. See Webhook events.
PublishingThreads
Threads
A Threads post with more than one media item publishes as a carousel. See Threads publishing.
AnalyticsThreads
Threads

Threads like and reply counts

Threads posts report like and reply counts taken from the platform. A count the platform does not return reads as 0. See Threads publishing.
InboxThreads
Threads

Threads reply deletion

A Threads reply can be deleted only when the connected account wrote it, and the reply’s capability flags now say so. Replies to your own posts can still be hidden. See Comments.
WebhooksAccounts
Webhooks

account.connected and account.disconnected events

Subscribe to account.connected to hear when an account finishes connecting, and to account.disconnected when one is disconnected. Each event carries the account’s details. See Webhook events.
AccountsFacebook
Facebook

Facebook connect requests business management access

Connecting a Facebook account asks for the business_management permission, which lets SocialAPI list Pages owned through a Meta Business Portfolio. See Facebook publishing.
Publishing
Publishing

Post text can live on each target

text on POST /v1/posts is optional when every entry in targets sets its own text. Otherwise the top-level text is still required. See Publishing.
Publishing
Publishing

Post deletion reports each platform

DELETE /v1/posts/{pid} returns deleted and a results list with one outcome per platform: deleted, not_supported, or failed. A platform that cannot delete a published post keeps its copy live. See Publishing.
PublishingTikTok
TikTok

TikTok comment, duet, and stitch are off unless you turn them on

Set disable_comment, disable_duet, or disable_stitch to false in platform_data to allow an interaction. An omitted flag disables that interaction, and an interaction the creator’s TikTok account has turned off stays off whatever you send. See TikTok publishing.
ErrorsThreads
Errors

Threads reconnect_required error

When Threads rejects a write because the connected account lacks a permission, the call returns 403 with platform.threads.reconnect_required. Reconnect the Threads account to grant the permission. See Errors.
Direct messagesInstagram
Instagram

Instagram DM attachments and shared posts

Instagram direct messages now carry their attachments, including shared posts and shared stories, in direct message events and message lists. See Direct messages.
PublishingTikTok
TikTok

Breaking: TikTok privacy level is required

Breaking: platform_data.privacy_level must now be set on every TikTok post. SocialAPI no longer picks a default, so a post without it fails with validation.privacy_level_required. Send one of the values TikTok lists for the creator. See TikTok publishing.
AccountsYouTube
YouTube

YouTube open to every account

YouTube no longer requires beta access, so any account can connect a YouTube channel. See YouTube publishing.
WebhooksDirect messages
Direct messages

Direct message events include conversation and recipient

DM events include conversation_id, the SocialAPI ID of the conversation, and recipient, the person who received the message. See Webhook events.
WebhooksDirect messagesFacebook
Facebook

dm.sent and dm.referral events on Facebook

dm.sent and dm.referral now fire for Facebook Page conversations too. See Webhook events.
WebhooksDirect messagesInstagram
Instagram

dm.sent and dm.referral events

dm.sent fires for messages the connected Instagram account sends. dm.referral fires when an Instagram conversation starts from an ad or link click. See Webhook events.
MCP
MCP

Token endpoint accepts HTTP Basic client credentials

POST /oauth/token accepts the client ID and secret in an Authorization: Basic header, as RFC 6749 allows. A client_secret in the body still works. See OAuth.
MCP
MCP

Token endpoint errors use OAuth error fields

Errors from POST /oauth/token return error and error_description with the codes OAuth defines, such as invalid_request, unsupported_grant_type, and invalid_client. See OAuth.
MCP
MCP

Client registration returns expiry fields

POST /oauth/register returns client_id_issued_at and client_secret_expires_at. A client_secret_expires_at of 0 means the secret does not expire. See OAuth.
Accounts
Accounts

Send users back to your app after connecting

Pass redirect_uri and state on POST /v1/accounts/connect to send the user to your own URL when the connection finishes. The URL receives status, platform, account_id or account_ids, and your state as query parameters, or status=error with an error code on failure. The redirect_uri must be on your allowed list in the dashboard, or the call returns 400 validation.redirect_uri_not_whitelisted. See Redirect parameters.
AccountsX / Twitter
X / Twitter

Connect X with your own developer app

X connections can use your own X developer app. Save its client ID and secret in the dashboard, for your account or for one brand. If X rejects the saved credentials, the call returns byok.credentials_invalid. See Use your own X app.
AccountsInstagramFacebook
Instagram and Facebook

Connect Instagram and Facebook without an access request

Any account can connect Instagram and Facebook now. Neither platform needs an access request first. See Instagram and Facebook.
MCPWebhooks
MCP

Webhook tools for AI agents

AI agents can read and test webhooks with social_api_get_webhook and social_api_test_webhook, and inspect deliveries with social_api_list_webhook_deliveries, social_api_get_webhook_delivery, and social_api_retry_webhook_delivery. See MCP tools reference.
PublishingTikTok
TikTok

TikTok privacy level is optional

privacy_level is optional on TikTok posts. When you leave it out, SocialAPI uses SELF_ONLY if TikTok allows it for the account, and otherwise the first option TikTok returns. Validation reports the default as a warning. Before this change, a missing privacy_level returned 400 validation.privacy_level_required. See Platform data fields.
Webhooks
Webhooks

Webhook delivery history and retries

GET /v1/webhooks/{id}/deliveries lists the deliveries of a webhook endpoint, and GET /v1/webhooks/{id}/deliveries/{did} returns one. POST /v1/webhooks/{id}/deliveries/{did}/retry sends a delivery again, and POST /v1/webhooks/{id}/test sends a test event. Delivery history is kept for 3 days on Free, 7 days on Starter, 30 days on Pro, and 90 days on Business and Enterprise. See Monitor deliveries and Test an endpoint.
Webhooks
Events

Event summary counts

GET /v1/events/summary returns event totals, failure counts, and breakdowns by category and error category for a time window. Pass from and to as RFC 3339 timestamps. The social_api_events_summary MCP tool returns the same counts. See Events, usage, and your SocialAPI account.
PublishingFacebook
Facebook

Facebook post targets report their Page

A Facebook post target includes metadata with the page_id and page_name of the Page that published it. See Facebook publishing.
PublishingInstagram
Instagram

Instagram content types and validation

Instagram posts take a content_type of feed, reel, carousel, or stories, and POST /v1/posts/validate checks it along with the media, alt_text, collaborators, and cover settings for each Instagram target. See Instagram publishing.
AccountsFacebook
Facebook

Pages on Facebook accounts

A Facebook account can manage more than one Page: GET /v1/accounts/{id}/pages lists them, and PATCH /v1/accounts/{id}/pages/{pageId} sets is_default or is_active. Pass page_id to choose the Page on post targets, on GET /v1/posts, and on the inbox endpoints. The MCP tools are social_api_list_account_pages and social_api_update_account_page. See Facebook Pages.
Errors
Errors

Breaking: error responses have an error object

Error responses now put the details in an error object: {"error": {"code": "...", "message": "...", "meta": {}}}. Before, error was a string and code sat at the top level. Read error.code for the machine-readable code and error.message for the text; meta appears only when there are extra details, such as the name of the field that failed. See Handling errors.
Publishing
Publishing

Breaking: a post where every target fails returns 422

POST /v1/posts returns 422 when every target fails, instead of 502. Partial failures still return 207. If your code treats 502 as a failed publish, check for 422 instead. See Publishing errors.
AccountsTikTok
TikTok

Creator info for TikTok accounts

GET /v1/accounts/{id}/creator-info returns the privacy levels, interaction settings, and posting availability for a TikTok account. Read it before you publish. Other platforms return 501. See Creator info and validation.
Publishing
Publishing

Validation checks TikTok targets

POST /v1/posts/validate checks each TikTok target against TikTok’s own rules for the account. Errors set valid to false, and warnings are returned without blocking the post. See Validate before you publish.
PublishingTikTok
TikTok

Choose the TikTok video cover frame

TikTok video posts accept video_cover_timestamp_ms in platform_data to pick the frame used as the cover. See Platform data fields.
AccountsPublishingInboxYouTube
YouTube

YouTube (beta)

Connect a YouTube channel to publish, update, and delete videos, and to read, reply to, moderate, hide, and delete comments. Request access from the dashboard. See YouTube.
PublishingYouTube
YouTube

More YouTube publishing options

YouTube posts now apply these platform_data fields: made_for_kids, license, embeddable, public_stats_viewable, publish_at, notify_subscribers, recording_date, default_language, playlist_id, and contains_synthetic_media. The first comment is posted after upload, and playlist_id adds the video to that playlist. See Platform data fields.
InboxLinkedIn
LinkedIn

LinkedIn comment replies, likes, and deletes

Replies, likes, and deletes work on LinkedIn comments, through the same endpoints as the other platforms. See Comments and LinkedIn.
Inbox
Comments

Replies to a comment

GET /v1/inbox/comments/{postId}/{commentId}/replies returns the replies to a comment, with cursor pagination. The response has the same shape as the top-level comment list. See List comments and replies.
AnalyticsMCP
Analytics

MCP tools for exports

AI agents can create, list, and read analytics exports with social_api_create_export, social_api_list_exports, social_api_get_export, and social_api_get_export_videos. See MCP tools reference.
Analytics
Analytics

Videos of an export

GET /v1/exports/{id}/videos returns the videos of a completed export. See Exports.
Analytics
Analytics

Analytics exports

POST /v1/accounts/{id}/export starts an Excel export of an account’s analytics. Fetch an export with GET /v1/exports/{id} or list them with GET /v1/exports. The number of exports per billing period depends on your plan. See Analytics.
Webhooks
Webhooks

Event history

GET /v1/events returns events for your account, such as account connections and disconnections. How far back you can query depends on your plan.
Publishing
Publishing

Post logs replaced by events

Breaking: GET /v1/posts/logs and GET /v1/posts/{pid}/logs are removed. Read event history from GET /v1/events instead.
Accounts
Accounts
POST /v1/invites creates a single-use link that lets someone connect an account to a brand. List a brand’s links with GET /v1/invites and revoke one with DELETE /v1/invites/{id}. The same actions are available as MCP tools. See Connect accounts.
Accounts
Accounts

Platform access requests

Some platforms need access approval before an account can connect to them. A connect call for a platform you have no access to returns 403 with the error code platform_not_available. Request access from the dashboard; TikTok is open to every account. See Platforms.
Authentication
Authentication

Authorization header without Bearer

The Authorization header accepts a raw API key as well as Bearer <key>. See Authentication.
InboxInstagram
Instagram

Comment replies include parent_id

Instagram comment replies include parent_id, the ID of the comment they answer. See Comments.
Accounts
Accounts

Brands

A brand groups connected accounts. Manage brands with GET /v1/brands, POST /v1/brands, PATCH /v1/brands/{id}, and DELETE /v1/brands/{id}. Pass brand_id when you connect an account. See Concepts.
Billing
Billing

Usage reports brands

Breaking: GET /v1/usage returns brands_used and brands_limit in place of accounts_used and accounts_limit. Update clients that read the old names. See Plans.
Inbox
Inbox

Per-account inbox routes removed

Breaking: these routes are removed: GET /v1/accounts/{id}/dms, GET /v1/accounts/{id}/reviews, GET /v1/accounts/{id}/posts/{pid}/comments, POST /v1/accounts/{id}/dms/{tid}/send, POST /v1/accounts/{id}/interactions/{iid}/reply, and the moderation and reply-thread routes beside them. Use the /v1/inbox routes instead. GET /v1/accounts/{id}/mentions still works. See Inbox.
InboxDirect messages
Inbox

Unified inbox

GET /v1/inbox/conversations lists direct message threads, and GET /v1/inbox/comments lists posts that have comments. Reply, hide, delete, like, and send private replies to comments from the same routes. Reviews are at /v1/inbox/reviews. See Inbox and Direct messages.
Publishing
Publishing

Post targets, validation, and import

POST /v1/posts takes a targets list with one entry per account. Each entry can set its own text, title, media_ids, first_comment, visibility, scheduled_at, and platform_data. Check a draft with POST /v1/posts/validate, read platform limits with GET /v1/posts/validate, import many posts with POST /v1/posts/import, and unpublish a post with POST /v1/posts/{pid}/unpublish. See Publishing.
Publishing
Publishing

Platform options replaced by targets

Breaking: platform_options is removed from post requests. Send title, visibility, first_comment, and platform_data on each entry in targets instead. See Publishing.
FacebookInbox
Facebook

Facebook Pages inbox (beta)

Comments and direct messages on Facebook Pages appear in the inbox, and you can reply to them from the same routes. Facebook is available to beta testers. See Facebook.
Publishing
Publishing

Media library

GET /v1/media lists your media, up to 100 items per page. DELETE /v1/media/{id} removes an item, and GET /v1/media/storage shows your storage use. Upload with POST /v1/media/upload. See Media.
Billing
Billing

Unlimited posts and interactions on paid plans

Paid plans no longer cap posts or interactions per billing period. The Free plan keeps its limits. See Plans.
Publishing
Publishing

Publish right away

POST /v1/posts without scheduled_at publishes right away and returns the post: 201 when it is published, 207 when some accounts fail, and 502 when it fails. Publishing that runs longer than 90 seconds reports a timeout error. See Publishing.
Publishing
Publishing

Reschedule and filter scheduled posts

PATCH /v1/posts/{pid} changes the scheduled time and accounts of a scheduled post. GET /v1/posts supports filters and pagination. See Scheduling.
Accounts
Accounts

Disconnect an account

DELETE /v1/accounts/{id} disconnects an account. See Connect accounts.
Publishing
Publishing

Retry a failed post

POST /v1/accounts/{id}/posts/{pid}/retry publishes a post again after its publish failed. See Publishing.
PublishingTikTok
TikTok

TikTok (beta)

Connect TikTok accounts and publish videos and photo carousels. TikTok is available to beta testers. See TikTok.
PublishingLinkedIn
LinkedIn

LinkedIn (beta)

Connect LinkedIn accounts, read and moderate comments, and publish text and media posts. LinkedIn is available to beta testers. See LinkedIn.
PublishingThreads
Threads

Threads (beta)

Connect Threads accounts, read mentions and replies, and publish posts. Threads is available to beta testers. See Threads.
Google Business Profile
Google

Google Business Profile (beta)

Connect Google Business Profile locations. Google is available to beta testers. See Google.
Billing
Billing

Usage reports limits instead of credits

Breaking: GET /v1/usage no longer returns credits_used and credits_limit. It returns usage and limits for accounts, posts, and interactions in the current billing period. See Plans.
PublishingFacebook
Facebook

Facebook Pages publishing

Create, update, and delete posts on Facebook Pages with POST /v1/accounts/{id}/posts, PATCH /v1/accounts/{id}/posts/{pid}, and DELETE /v1/accounts/{id}/posts/{pid}. See Facebook publishing.
MCPPublishing
MCP

Publishing from MCP

MCP clients can create, update, delete, and retry posts, and upload media. See MCP tools.
PublishingInstagram
Instagram

Instagram publishing

Publish to Instagram accounts with POST /v1/accounts/{id}/posts, and delete a published post with DELETE /v1/accounts/{id}/posts/{pid}. Media for a post starts with GET /v1/media/upload-url. See Instagram publishing.
Facebook
Facebook

Facebook Pages

Facebook Pages are available to connect. See Facebook.
MCP
MCP

Hosted MCP server

The API hosts an MCP server at /mcp. MCP clients register and sign in with OAuth 2.1, and a consent page confirms access. See OAuth.
Billing
Billing

Annual billing

Paid plans can be billed yearly at a 20% discount. See Plans.
Inbox
Comments

Comments are scoped to a post

Breaking: GET /v1/accounts/{id}/comments is replaced by GET /v1/accounts/{id}/posts/{pid}/comments. Use GET /v1/accounts/{id}/posts to find post IDs. See Comments.
AccountsInboxInstagramWebhooksBilling
Initial release

Initial release

SocialAPI is open to public signups, with:
  • Instagram: connect accounts with POST /v1/accounts/connect, read comments, direct messages, and mentions, reply to comments, send direct messages, and moderate comments.
  • API keys: create, list, and revoke keys with /v1/keys.
  • Webhooks: create, list, update, and delete endpoints with /v1/webhooks.
  • Usage: GET /v1/usage, and account deletion with DELETE /v1/users/me.
  • Plans: paid plans with checkout and a billing portal in the dashboard.
See Quickstart.
Last modified on October 19, 2026