Zernio | Developer News
707 subscribers
1 photo
1 video
522 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
Instagram Analytics now supports account-level insights and audience demographics.

Fetch account performance totals or daily reach via GET /v1/analytics/instagram/account-insights.
Key params: accountId (required), metrics, since, until, metricType (time_series | total_value), breakdown (total_value only). Note: time_series only works with reach. Max range: 90 days (default last 30). Data may be delayed up to 48 hours. Requires Analytics add-on.

Fetch audience breakdowns via GET /v1/analytics/instagram/demographics.
Key params: accountId (required), metric (follower_demographics | engaged_audience_demographics), breakdown (age, city, country, gender), timeframe (this_week | this_month). Requires 100+ followers, returns top 45 per dimension, and may be delayed up to 48 hours. Requires Analytics add-on.

View documentation
πŸ”₯4
You can now send inbox attachments by URL when calling POST /v1/inbox/conversations/{conversationId}/messages (JSON body), without using multipart upload.

Provide attachmentUrl (publicly accessible) and optionally attachmentType (image, video, audio, file).

Twitter posts now support polls via TwitterPlatformData.poll.

Set poll.options (2-4 items, max 25 chars each) and poll.duration_minutes (5-10080). Polls are mutually exclusive with media attachments and threads.

View documentation
❀1πŸ”₯1
Analytics endpoints now support filtering by social account via accountId.

This lets you scope results to a specific connected account (useful when a profileId contains multiple accounts).

New query parameter:
β€’ GET /v1/analytics: accountId
β€’ GET /v1/analytics/daily-metrics: accountId

View documentation
πŸ”₯4
Threads posts now support an explicit topic tag via platformSpecificData.topic_tag.

Use this to categorize posts for discoverability on Threads; when provided, it overrides auto-extraction from content hashtags.

Set topic_tag (string):
β€’ 1–50 characters
β€’ cannot contain . or &

View documentation
πŸ‘1πŸ”₯1
Zernio now supports WhatsApp Business 😎

Build full WhatsApp integrations in 2 minutes.

Messaging
β€’ Send text, images, video, audio, documents, stickers, contacts, and locations
β€’ Interactive messages with buttons, lists, and CTA URLs
β€’ Reactions and read receipts
β€’ 24-hour conversation window handled automatically: freeform messages when open, template messages when not

Campaigns & Broadcasts
β€’ Create and schedule broadcast campaigns to contact lists
β€’ Per-recipient variable substitution for personalized templates
β€’ Drip sequences with configurable delays between steps
β€’ Real-time delivery stats: sent, delivered, read, failed

Template Management
β€’ Create custom templates or use Meta's pre-approved library templates
β€’ Full CRUD: create, update, delete, list
β€’ Support for header media (image, video, document), body variables, buttons, and footers

Contact Management
β€’ Import, group, and manage contacts via API
β€’ Bulk operations for large lists

Phone Numbers
β€’ Purchase and provision numbers directly through the API ($2/mo)
β€’ Pre-verified number pool (skip OTP entirely)
β€’ Manage business profile, display name, and profile photo


Requires de Inbox add-on. No markup on Meta's per-conversation pricing.

Docs: docs.zernio.com/platforms/whatsapp
πŸ”₯4❀1
New endpoint: POST /v1/posts/{postId}/update-metadata to update metadata on an already-published post without re-uploading media.

Currently supported for YouTube videos only; the post must be published on the target platform and you must provide at least one updatable field.

Request body: platform (youtube) plus any of title, description, tags, categoryId, privacyStatus (public | private | unlisted).

View documentation
❀1πŸ”₯1
POST /v1/posts/{postId}/update-metadata now supports updating YouTube video metadata even if the video was uploaded outside Zernio.

Use one of two modes:
β€’ Post-based: call with the real {postId} and platform
β€’ Direct video ID: set {postId} to _ and include videoId + accountId + platform

Key params:
β€’ platform: youtube
β€’ videoId (direct mode)
β€’ accountId (direct mode)

In direct mode, the 200 response may include videoId.

View documentation
πŸ”₯1
πŸ“‘ New API Endpoints

POST /v1/inbox/conversations/{id}/typing
β†’ Typing indicators (Facebook Messenger, Telegram)

DELETE /v1/inbox/conversations/{id}/messages/{msgId}
β†’ Delete messages (Telegram, X, Bluesky, Reddit)

POST/DELETE /v1/inbox/conversations/{id}/messages/{msgId}/reactions
β†’ Emoji reactions (Telegram, WhatsApp)

docs.zernio.com
πŸ‘1πŸ”₯1
YouTube posts now support adding a video to a playlist via playlistId in YouTubePlatformData.

Use the new playlist endpoints to discover playlist IDs and (optionally) store a client-side default for an account.

New endpoints:
β€’ GET /v1/accounts/{accountId}/youtube-playlists β†’ returns playlists[] and defaultPlaylistId
β€’ PUT /v1/accounts/{accountId}/youtube-playlists with defaultPlaylistId (optional defaultPlaylistName)

New field:
β€’ platformSpecificData.youtube.playlistId (string) β€” optional playlist to add the video to after upload

View documentation
πŸ”₯2❀1
YouTube metadata updates now support setting a custom thumbnail via POST /v1/posts/{postId}/update-metadata.

You can update the thumbnail without re-uploading, including for existing videos not published through Zernio (direct video ID mode).

Use thumbnailUrl (public image URL) with platform youtube. In direct mode also include videoId + accountId.

Key params: platform (youtube), thumbnailUrl, videoId, accountId

View documentation
πŸ”₯2πŸ₯°1
YouTube metadata updates now support additional fields on POST /v1/posts/{postId}/update-metadata.

You can now set COPPA compliance, disclose AI/synthetic media, and add a video to a playlist without re-uploading.

New optional properties:
β€’ madeForKids (boolean)
β€’ containsSyntheticMedia (boolean)
β€’ playlistId (string)

View documentation
πŸ”₯2
4 new Inbox APIs just shipped

1. Contacts
Auto-created from every DM across all your connected accounts. Add tags, custom fields, bulk import.

POST /v1/contacts Β· POST /v1/contacts/bulk Β· GET /v1/contacts Β· GET /v1/contacts/:id Β· PATCH /v1/contacts/:id Β· DELETE /v1/contacts/:id

2. Broadcasts
Send one message to thousands of contacts. Segment by tag or custom field. Supports Instagram, Facebook, Telegram, WhatsApp, Twitter, Bluesky, Reddit. Schedule or send immediately. Real-time delivery + read tracking.

POST /v1/broadcasts Β· POST /v1/broadcasts/:id/send Β· POST /v1/broadcasts/:id/schedule Β· POST /v1/broadcasts/:id/cancel Β· POST /v1/broadcasts/:id/recipients

3. Sequences
Drip campaigns for social DMs. Set delays between steps (hours, days). Auto-exit on reply or unsubscribe.

POST /v1/sequences Β· POST /v1/sequences/:id/activate Β· POST /v1/sequences/:id/pause Β· POST /v1/sequences/:id/enroll Β· GET /v1/sequences/:id/enrollments

4. Comment Automations
Set a keyword on any Instagram or Facebook post. When someone comments it, they get a DM instantly. Add an optional public reply too.

POST /v1/comment-automations Β· GET /v1/comment-automations/:id/logs

All official platform APIs. Requires the Inbox add-on.

https://docs.zernio.com/
❀3πŸ”₯3πŸ‘Ž1πŸ‘1😁1
YouTube analytics now supports audience demographics via GET /v1/analytics/youtube/demographics.

Fetch demographic insights for a YouTube channel broken down by age/gender (percentages) and country (view counts). Requires the Analytics add-on and YouTube Analytics scope.

Key params:
β€’ accountId (required)
β€’ breakdown = age, gender, country (comma-separated; defaults to all)
β€’ startDate, endDate

WhatsApp now supports Flows (create/manage/publish and send interactive flow messages).

Manage flows:
β€’ GET /v1/whatsapp/flows (accountId)
β€’ POST /v1/whatsapp/flows (accountId, name, categories, optional cloneFlowId)
β€’ GET /v1/whatsapp/flows/{flowId} (accountId, optional fields)
β€’ PATCH /v1/whatsapp/flows/{flowId} (accountId, name/categories; DRAFT only)
β€’ DELETE /v1/whatsapp/flows/{flowId} (accountId; DRAFT only)

Flow JSON asset:
β€’ GET /v1/whatsapp/flows/{flowId}/json (accountId)
β€’ PUT /v1/whatsapp/flows/{flowId}/json (accountId, flow_json; DRAFT only)

Lifecycle:
β€’ POST /v1/whatsapp/flows/{flowId}/publish (accountId; irreversible)
β€’ POST /v1/whatsapp/flows/{flowId}/deprecate (accountId; irreversible)

Send a flow message:
β€’ POST /v1/whatsapp/flows/send with accountId, to, flow_id, flow_cta, body
β€’ Optional flow_action = navigate | data_exchange, flow_token, flow_action_payload, draft

View documentation
❀2πŸ‘Ž1πŸ”₯1πŸ‘1
New Google Business Profile analytics endpoints are available.

Fetch daily performance metrics (impressions, clicks, calls, directions, etc.) via GET /v1/analytics/googlebusiness/performance. Requires accountId and the Analytics add-on; data may be delayed 2–3 days; up to 18 months history.

Key params:
β€’ accountId (required)
β€’ metrics (comma-separated; defaults to all): BUSINESS_IMPRESSIONS_DESKTOP_MAPS, BUSINESS_IMPRESSIONS_DESKTOP_SEARCH, BUSINESS_IMPRESSIONS_MOBILE_MAPS, BUSINESS_IMPRESSIONS_MOBILE_SEARCH, BUSINESS_CONVERSATIONS, BUSINESS_DIRECTION_REQUESTS, CALL_CLICKS, WEBSITE_CLICKS, BUSINESS_BOOKINGS, BUSINESS_FOOD_ORDERS, BUSINESS_FOOD_MENU_CLICKS
β€’ startDate, endDate (YYYY-MM-DD)

Fetch monthly search keywords via GET /v1/analytics/googlebusiness/search-keywords. Requires accountId and the Analytics add-on; up to 18 months history.

Key params:
β€’ accountId (required)
β€’ startMonth, endMonth (YYYY-MM)

Note: keywords below Google’s minimum impression threshold are excluded.

View documentation
πŸ”₯2❀1
You can now edit a published X (Twitter) post via POST /v1/posts/{postId}/edit.

This updates the post on X and stores edit history in Zernio. X constraints apply (Premium required, 1-hour edit window, max 5 edits, text-only).

Request body:
β€’ platform: twitter
β€’ content: new text

Response includes:
β€’ id (new tweet ID after edit)
β€’ url

You can now start/send X DMs via POST /v1/inbox/conversations.

If a thread already exists, the message is appended. If the recipient doesn’t accept DMs, you’ll get 422 with code=DM_NOT_ALLOWED (or bypass the pre-check with skipDmCheck).

Key fields:
β€’ accountId
β€’ participantId or participantUsername
β€’ message (or attachment via multipart/form-data)
β€’ skipDmCheck

Also added:
β€’ Root-level facebookSettings on POST /v1/posts and PUT /v1/posts/{postId} (e.g. facebookSettings.draft=true to create an unpublished draft in Facebook Publishing Tools)
β€’ TwitterPlatformData.longVideo=true to enable long video uploads (requires X Premium; may require allowlisting).

View documentation
❀2πŸ”₯2πŸ’―1
Facebook now supports posting an optional first comment for Reels as well as feed posts.

Use platformSpecificData.facebook.firstComment to add a comment immediately after publishing (not supported for contentType=story). Skipped when draft is true.

Applies when contentType is reel (or omitted for feed posts).

View documentation
πŸ”₯3
Webhooks now support message sent events via message.sent.

Use this to get notified when a message is sent via the API, including message + conversation context.

Subscribe by adding message.sent to Webhook.events.

You can also filter/view deliveries in logs with GET /v1/webhooks/logs using event=message.sent.

Payload schema: WebhookPayloadMessageSent (includes message, conversation, account, timestamp).

View documentation
❀2πŸ‘2πŸ‘1
Discord is now supported as a platform in several endpoints and response schemas.

You can now use platform=discord to connect accounts, validate content, and filter account health.

Updated enums:
β€’ GET /v1/connect/{platform}: {platform} includes discord
β€’ POST /v1/tools/validate/post: platforms[].platform includes discord
β€’ GET /v1/accounts/health: query platform includes discord
β€’ Schemas: SocialAccount.platform, PostLog.platform, ConnectionLog.platform include discord

View documentation
❀2
Meta ads now return additional campaign/ad set details in ad reporting responses.

You can use these fields to display objective/optimization/bidding context and conversion event setup alongside metrics.

New fields:
β€’ On Ad: platformObjective, optimizationGoal, bidStrategy, promotedObject
β€’ On AdTreeCampaign and AdCampaign: platformObjective, optimizationGoal (can be string or string[]), bidStrategy, promotedObject
β€’ On AdTreeAdSet: optimizationGoal, bidStrategy, promotedObject

promotedObject may include custom_event_type, pixel_id, page_id (and on Ad also application_id, product_set_id). Fields are null when not applicable and are only present for Meta ads.

View documentation
❀3πŸ”₯2
Campaign-level optimizationGoal is now always a string in ads campaign responses.

If ad sets have different optimization goals, the API now returns a comma-separated string instead of an array.

Applies to:
β€’ GET /v1/ads/campaigns (AdCampaign.optimizationGoal)
β€’ GET /v1/ads/tree (AdTreeCampaign.optimizationGoal)

Example: "OFFSITE_CONVERSIONS, VALUE, LEAD_GENERATION"

View documentation
❀2