Zernio | Developer News
692 subscribers
1 photo
1 video
487 links
This channel is for recurrent updates and announcements on https://zernio.com.

Zernio is a Social API for Posting and Analytics on 14 platforms.
Download Telegram
WhatsApp phone number provisioning now supports creating a hosted KYC link via POST /v1/whatsapp/phone-numbers/kyc/share.

This generates a single-use, 7-day link your end customer can complete without a Zernio login; once submitted, the number provisions under your account (only for regulated/KYC countries).

Request fields:
profileId (required)
country (required, ISO-2; non-KYC countries return 400)
branding (optional: companyName, logoUrl, brandColor)
redirect_url (optional; on success appends kyc=submitted and country=<ISO-2>)

Response fields:
url
token
expiresAt

To react when the form is completed, subscribe webhooks to the new event: whatsapp.number.kyc_submitted (available in POST/PUT /v1/webhooks/settings).

View documentation
1
POST /v1/whatsapp/phone-numbers/kyc now supports provisioning multiple same-country numbers in a single KYC submission via quantity.

Set quantity (default 1, min 1, max 5) to request several numbers; the same verification covers all of them and each number is billed only when it activates (best-effort if some orders fail).

Response now includes numbers (array) with all provisioned numbers. phoneNumber remains and represents the first/primary number for backward compatibility.

status remains: kyc_submitted | kyc_reused | kyc_already_submitted

View documentation
1
Instagram posts now support AI-generated media self-disclosure via isAiGenerated in platformSpecificData.

When isAiGenerated is true, Instagram labels the post as containing AI-generated media (this is for media, not AI-written captions).

Set:
isAiGenerated (boolean, default false)

Applies to feed posts, Reels, Stories, and carousels.

View documentation
4
Instagram Trial Reels are now identifiable per platform target in post responses.

When an Instagram reel is created as a Trial (via platformSpecificData.trialParams), the corresponding PlatformTarget may include:
isTrialReel (boolean) — present and true only for trial reels
trialGraduationStrategyMANUAL | SS_PERFORMANCE (present only when isTrialReel is true)

Use these fields to segment trial reels in analytics; note this reflects creation-time intent (Instagram doesn’t expose a readable trial flag).

View documentation
👍42
New endpoint GET /v1/ads/campaigns/{campaignId}/analytics returns campaign-level analytics in one call (summary metrics, daily[] timeline, and optional Meta demographic breakdowns).

Use query params fromDate, toDate (defaults to last 90 days; max 730 days) and optional platform to disambiguate IDs. For Meta-only breakdowns, pass breakdowns as a comma-separated list: age, gender, country, publisher_platform, device_platform, region, platform_position, impression_device, video_asset, image_asset, body_asset, title_asset.

GET /v1/ads/tree now supports daily trends in the same response: set timeIncrement=1 to add daily[] metrics series, and control where it appears with dailyLevel = campaign (default) | adset | ad.

View documentation
New endpoint GET /v1/inbox/mentions is available to list mentions of your connected organization accounts delivered via platform webhooks.

Currently supports LinkedIn organization mentions and requires the Inbox addon.

Key query params:
accountId (filter by social account ID)
profileId (filter by profile ID)
sortOrder (asc | desc, default desc)
limit (1–100, default 25)
cursor (pagination)

Response includes data items with id, platform (linkedin), content, permalink, authorUrn, organizationalEntity, publishedAt, plus pagination (hasMore, cursor).

View documentation
1
WhatsApp Business Profile now supports managing business usernames via new endpoints.

You can fetch the current username + approval state, claim/transfer a username, release it, and retrieve available suggestions.

New endpoints:
GET /v1/whatsapp/business-profile/username (accountId query) → returns username (nullable) and status (approved/reserved/none)
POST /v1/whatsapp/business-profile/username body: accountId, username, optional transferAction (none/force_transfer)
DELETE /v1/whatsapp/business-profile/username body: accountId
GET /v1/whatsapp/business-profile/username/suggestions (accountId query) → returns suggestions[]

On username claim failures, expect error codes like whatsapp_username_unavailable, whatsapp_username_ineligible, or whatsapp_username_transfer_required.

View documentation
1👍1🔥1
New endpoint 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 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.pdf

Applies 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 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 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 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 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.accountId

Added 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 InboxWebhookAccount

View documentation
Webhooks now support TikTok URL backfill via the new event 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 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: 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), cursor

Response 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 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
videoAvgTimeWatchedActions

Note: 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 /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 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, carousel

Webhook 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