New endpoint
Use it to confirm a user-submitted post exists by sending
Request body:
•
•
•
Response:
•
• If
• If no locator provided:
Returned posts use
View documentation
POST /v1/posts/sync-external lets you sync/verify external (non-Zernio) posts on demand, so a just-published post can be retrieved within seconds instead of waiting for the background sync.Use it to confirm a user-submitted post exists by sending
accountId plus either url or postId.Request body:
•
accountId (required)•
url (optional)•
postId (optional)Response:
•
synced.postsFound, synced.postsSynced, synced.skipped• If
url/postId provided: found + post (or null)• If no locator provided:
posts (recent external posts)Returned posts use
ExternalPostSummary (includes platform, platformPostId, platformPostUrl, publishedAt, and basic analytics like likes/comments).View documentation
❤3
WhatsApp document sends via URL now support setting the displayed filename using
This lets you control the recipient-visible file name for
Use:
•
•
•
Applies to WhatsApp only; ignored for
View documentation
attachmentName on POST /v1/inbox/conversations/{conversationId}/messages.This lets you control the recipient-visible file name for
attachmentUrl document messages (otherwise WhatsApp derives it from the URL and may show “Untitled”).Use:
•
attachmentType: file•
attachmentUrl: (public URL)•
attachmentName: e.g. Report.pdfApplies to WhatsApp only; ignored for
image/video/audio and for multipart binary uploads.View documentation
❤2
POST /v1/invite/tokens now supports inviting users with the new admin role via role.Use
role=admin to grant team-management permissions (invite/remove members, change roles and access) without billing, ownership transfer, or account deletion permissions.role enum is now: admin, member, billing_admin, viewer.Note:
readOnly (deprecated) can’t be combined with role=billing_admin or role=admin.View documentation
❤1
Workflow send_message nodes now allow omitting
This makes interactive message configs simpler, but payloads with neither
Applies to
View documentation
interactive.type; it will be inferred from the interactive payload shape.This makes interactive message configs simpler, but payloads with neither
type nor an inferable shape are now rejected.Applies to
send_message.config with messageType = interactive (WhatsApp-only).View documentation
❤1
GET /v1/connect/pending-data now supports Pinterest board selection in headless OAuth flows.For Pinterest (in addition to LinkedIn orgs and Snapchat profiles), the OAuth redirect returns
pendingDataToken and you can fetch the full selection payload via token.Use
token (query) from the redirect, and read selectionType (enum: organizations, pages, boards, locations, profiles) to determine which selection array to consume (e.g. boards for Pinterest).View documentation
❤1
WhatsApp KYC form spec now returns an optional audience per requirement in
This lets you show/collect only the fields that apply to the end-user type (business vs individual) and avoid submitting both sets of requirements.
New field:
View documentation
GET /v1/whatsapp/phone-numbers/kyc.This lets you show/collect only the fields that apply to the end-user type (business vs individual) and avoid submitting both sets of requirements.
New field:
fields[].audience = business | individual | null (applies to both).View documentation
Webhook post events now include the connected social account per platform target via
This lets you route/attribute webhook deliveries by the specific SocialAccount used for each platform publish (useful when a single post spans multiple accounts).
New field:
•
•
View documentation
post.platforms[].accountId.This lets you route/attribute webhook deliveries by the specific SocialAccount used for each platform publish (useful when a single post spans multiple accounts).
New field:
•
WebhookPayloadPost.post.platforms[].accountId•
WebhookPayloadPostPlatform.post.platforms[].accountId (on post.platform.published / post.platform.failed; see also the top-level account block there)View documentation
❤1
Webhook payloads now include
This makes it easier to consistently filter all webhook events by a single field (e.g. route staging vs production by account) while keeping
New field:
•
Added to these webhook payloads:
•
•
•
•
•
• inbox webhook payloads via
View documentation
account.accountId (same value as account.id) as a canonical field for filtering/routing events.This makes it easier to consistently filter all webhook events by a single field (e.g. route staging vs production by account) while keeping
account.id for backward compatibility.New field:
•
account.accountIdAdded to these webhook payloads:
•
comment.received•
lead.received•
review.new•
review.updated•
post.external.created, post.external.updated, post.external.deleted• inbox webhook payloads via
InboxWebhookAccountView documentation
Webhooks now support TikTok URL backfill via the new event
This fires when a published TikTok post’s public URL is resolved/backfilled, using the same payload shape as
Subscribe by including
Also clarified for
View documentation
post.tiktok.url_resolved.This fires when a published TikTok post’s public URL is resolved/backfilled, using the same payload shape as
post.platform.published/post.platform.failed (see WebhookPayloadPostPlatform).Subscribe by including
post.tiktok.url_resolved in events when calling POST /v1/webhooks/settings or PUT /v1/webhooks/settings.Also clarified for
PUT /v1/posts/{postId}: to promote a draft to scheduled you must send isDraft: false together with scheduledFor (or publishNow: true / queuedFromProfile). If isDraft is omitted, the post keeps its current draft status.View documentation
❤1
Inbox webhook account context now includes optional
Use
View documentation
profileId in InboxWebhookAccount.Use
profileId (workspace/profile ID) to route or filter inbox webhooks by workspace. It may be omitted for the shared WhatsApp sandbox account or when the account has no resolvable profile.View documentation
❤1
New endpoint:
You can now search message text across stored inbox conversations and get back matching conversations with up to 3 most-recent matching messages per conversation (useful for finding threads by topic or filtering by sent/received).
Key params:
•
•
•
•
•
Response includes
Requires Inbox addon (
View documentation
GET /v1/inbox/conversations/search.You can now search message text across stored inbox conversations and get back matching conversations with up to 3 most-recent matching messages per conversation (useful for finding threads by topic or filtering by sent/received).
Key params:
•
query (required, 2–200 chars)•
direction: incoming | outgoing•
platform: facebook | instagram | telegram | whatsapp | sms•
profileId, accountId•
limit (1–50, default 20), cursorResponse includes
data[].conversation, matchCount, matches (up to 3), plus pagination and meta.accountsSkipped for connected accounts on live-fetched platforms that can’t be searched.Requires Inbox addon (
403 if missing).View documentation
❤1
Meta ad metrics now include video performance fields in
You can track video starts, thruplays, 30s views, completion percentiles, and average watch time for hook/hold/drop-off analysis. These fields are Meta video ads only (0 for non-video ads and other platforms).
New fields:
•
•
•
•
•
Note: in
View documentation
AdMetrics (and therefore AdDailyMetrics).You can track video starts, thruplays, 30s views, completion percentiles, and average watch time for hook/hold/drop-off analysis. These fields are Meta video ads only (0 for non-video ads and other platforms).
New fields:
•
videoPlayActions•
video30SecWatchedActions•
videoThruplayWatchedActions•
videoP25WatchedActions, videoP50WatchedActions, videoP75WatchedActions, videoP95WatchedActions, videoP100WatchedActions•
videoAvgTimeWatchedActionsNote: in
AdDailyMetrics, videoAvgTimeWatchedActions is recomputed per day; don’t sum or plain-average it across days (the range value is play-weighted).View documentation
❤2
GET
You can display richer mention attribution (when available) without extra profile resolution on your side.
New fields:
•
•
•
View documentation
/v1/inbox/mentions now returns additional LinkedIn author details in each mention.You can display richer mention attribution (when available) without extra profile resolution on your side.
New fields:
•
authorName - display name resolved from authorUrn (can be null)•
authorUsername - LinkedIn vanity name (can be null)•
authorPicture - author profile picture URL (can be null; CDN URLs may expire, so fetch promptly)View documentation
❤2
WhatsApp inbox messages now support commerce interactive messages (products, product lists, catalog messages, and carousels) via
This lets you send catalog-driven messages and receive cart submissions / product inquiries back in webhooks.
New
•
Webhook
•
•
Note: interactive messages are session messages (must be sent within WhatsApp’s 24-hour window).
View documentation
interactive on POST /v1/inbox/conversations/{conversationId}/messages.This lets you send catalog-driven messages and receive cart submissions / product inquiries back in webhooks.
New
interactive.type values:•
product, product_list, catalog_message, carouselWebhook
message.received metadata adds:•
metadata.order (cart submitted from commerce messages)•
metadata.referredProduct (product inquiry context)Note: interactive messages are session messages (must be sent within WhatsApp’s 24-hour window).
View documentation
❤2
Ads reporting endpoints may now return
When this happens, the response includes currently-available data plus
Applies to:
•
•
•
•
•
Also,
•
•
View documentation
202 when part of the requested date range isn’t ingested yet.When this happens, the response includes currently-available data plus
backfillPending: true, and a Retry-After header with the recommended poll interval. Repeat the same request until it returns 200 with the full range.Applies to:
•
GET /v1/ads•
GET /v1/ads/tree•
GET /v1/ads/timeline•
GET /v1/ads/campaigns/{campaignId}/analytics•
GET /v1/ads/{adId}/analyticsAlso,
POST /v1/posts 403 responses now include a stable code to distinguish causes:•
ACCOUNT_DISCONNECTED•
PROFILE_OVER_LIMITView documentation
❤4
You can now update saved_targeting audiences via
This lets you change an audience’s
Request body (send at least one):
Also:
View documentation
PUT /v1/ads/audiences/{audienceId}.This lets you change an audience’s
name, description, or fully replace its spec (no merge). Uploaded/derived audiences aren’t updatable and return 422.Request body (send at least one):
name, description, specAlso:
GET /v1/ads/audiences now returns accountId for type=saved_targeting items, and DELETE /v1/ads/audiences/{audienceId} clarifies that saved_targeting deletes only the local record (it exists only on Zernio).View documentation
❤2
GET /v1/ads/{adId}/analytics and GET /v1/ads/campaigns/{campaignId}/analytics now validate breakdown dimensions and will return 400 for unknown values.This prevents silent/partial breakdown results and makes invalid
breakdowns requests fail fast with a supported-values list.Updates:
•
breakdowns: unknown dimensions now return 400 (instead of being ignored)•
placement is accepted as an alias for publisher_platform•
breakdown (singular) is also acceptedNew Meta breakdown options include:
platform_position, impression_device, video_asset, image_asset, body_asset, title_asset.View documentation
GET /v1/analytics now supports a new metric: follows.You can read
analytics.follows in responses (Instagram feed posts and stories only: organic accounts that started following from this post; 0 for reels and other platforms).You can also sort analytics results by
sortBy = follows (enum now includes: date, engagement, impressions, reach, likes, comments, shares, saves, clicks, views, follows).View documentation
❤2
The supported
If you request breakdowns that are no longer supported, your call may fail (400) or no longer return those breakdowns.
Affected endpoints:
•
•
View documentation
breakdowns values were reduced on analytics endpoints.If you request breakdowns that are no longer supported, your call may fail (400) or no longer return those breakdowns.
Affected endpoints:
•
GET /v1/ads/{adId}/analytics: Meta breakdowns now limited to age, gender, country, publisher_platform, device_platform, region (removed: platform_position, impression_device, video_asset, image_asset, body_asset, title_asset; also removed aliases placement and singular breakdown)•
GET /v1/ads/campaigns/{campaignId}/analytics: Meta breakdowns now limited to age, gender, country, publisher_platform, device_platform, region, platform_position, impression_device, video_asset, image_asset, body_asset, title_asset (removed aliases placement and singular breakdown)View documentation
❤1
Google Business Profile posts:
If you were sending
•
•
•
View documentation
offer.offerType has been removed from GoogleBusinessPlatformData.If you were sending
offerType (previously OFFER or BUY_ONE_GET_ONE), remove it from your payloads and use the remaining offer fields instead:•
redeemOnlineUrl•
termsConditions•
couponCodeView documentation
❤1
POST
This can break existing integrations that submit
For
For
Webhook post events now echo back your post’s free-form
•
•
View documentation
/v1/sms/registrations now enforces additional required fields for 10DLC registrations.This can break existing integrations that submit
brand/campaign without the newly-required fields.For
brand, these fields are now required: website, street, city, state, postalCode (in addition to existing required fields).For
campaign, sample2 is now required and must be distinct from sample1.Webhook post events now echo back your post’s free-form
metadata (when provided at create time) in:•
WebhookPayloadPost.post.metadata•
WebhookPayloadPostPlatform.post.metadataView documentation
❤1