Zernio | Developer News
708 subscribers
1 photo
1 video
534 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
New: Interactive messaging across Instagram, Facebook, and Telegram

You can now send buttons, quick replies, and carousels through the Inbox API. Same endpoint, all three platforms.

What's new:
• Quick replies on Instagram, Facebook, and Telegram
• Buttons (URL, postback) on Instagram, Facebook, and Telegram
• Generic templates (carousels) on Instagram, Facebook, and Telegram
• Reply markup and message editing on Telegram
• File attachments on Instagram DMs (images, videos, audio)
• Webhook events for button taps, quick replies, and postbacks

Two new Telegram-specific endpoints:
• Manage bot menu commands
• Edit sent messages and reply markup

View documentation
🔥2👍1
Instagram conversations now include optional participant profile context via instagramProfile.

This lets you show follower/verification info (and follower count) alongside DMs, and use it in routing/automation.

Added to:
GET /v1/inbox/conversationsdata[].instagramProfile
GET /v1/inbox/conversations/{conversationId}data.instagramProfile

Fields:
isFollower, isFollowing, followerCount, isVerified, fetchedAt

Webhook update:
WebhookPayloadMessage.message.sender.instagramProfile (Instagram only) with isFollower, isFollowing, followerCount, isVerified.

View documentation
4
Reddit posting now supports post flairs via flairId in platformSpecificData.

Some subreddits require a flair; you can now fetch available flairs and set the one you want on the post.

New endpoint: GET /v1/accounts/{accountId}/reddit-flairs
Required query: subreddit (without r/)

New field: platformSpecificData.reddit.flairId (string)
If omitted, the API will attempt to use the first available flair as a fallback.

View documentation
3🔥1
Google Business Profile posts now support explicitly setting the content language via languageCode in GoogleBusinessPlatformData.

If omitted, the language is auto-detected from the post text; set it when auto-detection may be unreliable (short posts, mixed languages, transliteration).

New field: languageCode (BCP 47, e.g. en, de, es, fr).

View documentation
🔥2
POST /v1/inbox/comments/{postId}/{commentId}/private-reply now supports Facebook in addition to Instagram.

You can send a private reply to a Facebook post comment, which opens a Messenger conversation with the commenter (text-only; still limited to 1 private reply per comment within 7 days).

Use accountId (Instagram or Facebook) and message in the JSON body. The response platform is now instagram or facebook.

View documentation
🔥2
Instagram photo tagging now supports tagging specific slides in carousel posts via mediaIndex in platformSpecificData.userTags.

This lets you place tags on any image within a carousel. Tags without mediaIndex still default to the first image (index 0).

Use:
userTags[].mediaIndex (integer, 0-based)

Notes:
• Not supported for stories or videos; tags targeting video items (or out-of-range indices) are ignored.

View documentation
1
New endpoint: POST /v1/posts/{postId}/unpublish.

You can now delete a previously published post from a specific social platform while keeping the Late post record (platform status becomes cancelled).

Request body: platform = threads | facebook | twitter | linkedin | youtube | pinterest | reddit | bluesky | googlebusiness | telegram.

Notes: Instagram/TikTok/Snapchat deletion isn’t supported. Telegram deletions may fail for messages older than 48h. YouTube deletion permanently removes the video.

View documentation
🔥4
Facebook publishing now supports Reels via FacebookPlatformData.contentType.

Set contentType to story or reel (omit for a feed post). Reels require a single vertical video (9:16, 3–60s).

New field for reels:
title — Reel title (only when contentType=reel)

Note: firstComment applies to feed posts only (not stories or reels).

View documentation
🔥31
API keys can now be created with restricted access using scope, profileIds, and permission on POST /v1/api-keys.

This lets you issue keys limited to specific profiles and/or make keys read-only for safer analytics/integration use.

New request fields:
scope: full | profiles (default full)
profileIds: required when scope=profiles
permission: read-write | read (default read-write)

Key responses now include scope, profileIds (populated profile objects when scoped), and permission (e.g., in GET /v1/api-keys and create responses).

View documentation
🔥2😍1
LinkedIn document (PDF/carousel) posts now let you control the displayed document title via platformSpecificData.linkedin.documentTitle.

LinkedIn requires a title for document posts; if omitted, Late will fall back to the media item title, then the filename.

Use:
platformSpecificData.linkedin.documentTitle
media[].title (used as the LinkedIn document title if documentTitle is not set; otherwise falls back to filename)

View documentation
5
Real-time Webhooks are live 🚀

Get notified instantly when someone comments on your posts or sends you a DM.

New events:
message.received — Instagram, Facebook, WhatsApp, Twitter, Bluesky, Reddit

comment.received — Instagram, Facebook, Threads, Twitter, YouTube, Bluesky, Reddit, LinkedIn

View documentation
4
New Analytics endpoints are available for aggregated reporting and scheduling optimization (requires the Analytics add-on).

Daily aggregated metrics: GET /v1/analytics/daily-metrics
• Filters: platform, profileId, fromDate, toDate
• Returns: dailyData + platformBreakdown with summed metrics (impressions, reach, likes, comments, shares, saves, clicks, views)

Best times to post: GET /v1/analytics/best-time
• Filters: platform, profileId
• Returns: slots grouped by day_of_week (0=Monday..6=Sunday) and hour (UTC 0-23) with avg_engagement

Content performance decay: GET /v1/analytics/content-decay
• Filters: platform, profileId
• Returns: buckets with bucket_label and avg_pct_of_final

Posting frequency vs engagement: GET /v1/analytics/posting-frequency
• Filters: platform, profileId
• Returns: frequency rows with posts_per_week, avg_engagement_rate, weeks_count

View documentation
6🔥3
New validation endpoints are available under /v1/tools/validate to preflight-check content before publishing.

Validate weighted character counts per platform with POST /v1/tools/validate/post-length (body: { text }) and get per-platform { count, limit, valid }.

Dry-run the full post validation pipeline (same body as POST /v1/posts) with POST /v1/tools/validate/post. Target platforms via platforms[].platform: twitter, instagram, tiktok, youtube, facebook, linkedin, bluesky, threads, reddit, pinterest, telegram, snapchat, googlebusiness. Returns valid plus errors[] and/or warnings[].

Validate a public media URL and compare against per-platform size limits with POST /v1/tools/validate/media (body: { url }). Returns contentType, size, type (image/video/unknown), and platformLimits when available.

Check subreddit existence/info with GET /v1/tools/validate/subreddit using query name.

View documentation
3🔥1
Late CLI is now available.

npm install -g late

Docs: https://docs.getlate.dev/resources/cli
Source: https://github.com/getlate-dev/late-cli
🔥31👀1
New endpoint GET /v1/analytics/post-timeline returns a daily analytics timeline for a specific post (per platform for multi-platform Late posts), showing how metrics evolve day-by-day since publishing. Requires the Analytics add-on.

Query params:
postId (required) — accepts ExternalPost ID, platformPostId, or Late Post ID
fromDate (optional, ISO 8601; default 90 days ago)
toDate (optional, ISO 8601; default now)

Response includes timeline[] rows with date, platform, platformPostId, and metrics like impressions, reach, likes, comments, shares, saves, clicks, views.

View documentation
7
You can now authenticate the Late CLI directly from the browser.

Running late auth:login opens a browser window where users verify a confirmation code and authorize access.

An API key is created automatically and saved to the CLI config.
2👏2
Posts can now be recycled (auto-reposted on a schedule) via recycling on POST /v1/posts and PUT /v1/posts/{postId}.

After the original post is published, Late will create new scheduled copies at a weekly/monthly interval until an expiration condition is met.

Configure with recycling:
gap (int)
gapFreq: week | month
startDate (date-time, optional)
expireCount (int, optional)
expireDate (date-time, optional)
contentVariations (string[], optional)

Webhooks: a new event post.recycled is available in POST/PUT /v1/webhooks/settings and filterable in GET /v1/webhooks/logs.

View documentation
🔥3
GET /v1/connect/{platform} redirect behavior now includes accountId in standard mode.

After a successful connect, Late’s standard redirect to redirect_url now appends ?connected={platform}&profileId=X&accountId=Y&username=Z (previously no accountId).

In headless mode (headless=true), the redirect includes raw OAuth data only when a post-OAuth selection step is required (e.g. LinkedIn orgs, Facebook pages). If no selection is needed, the account is created directly and the redirect includes accountId.

View documentation
🔥1
New endpoint GET /v1/accounts/{accountId}/linkedin-post-reactions returns who reacted to a LinkedIn post, including reactor profile details.

Currently supported only for organization/company page accounts (personal profile reaction data is restricted by LinkedIn).

Required params: accountId (path), urn (query, LinkedIn post URN)
Optional: limit (1-100, default 25), cursor

Response includes reactions[] with reactionType (LIKE, PRAISE, EMPATHY, INTEREST, APPRECIATION, ENTERTAINMENT), reactedAt, and from (name, headline, profileUrl), plus pagination.

View documentation
🔥2
Twitter posts now support replying to an existing tweet via replyToTweetId in TwitterPlatformData.

Set replyToTweetId to publish the first tweet (or the root of a thread) as a reply; subsequent thread items chain normally.

replySettings also adds verified (now: following, mentionedUsers, subscribers, verified). Note: replySettings cannot be combined with replyToTweetId.

View documentation
2
GBP endpoints now support overriding the target location via optional locationId.

This lets you fetch/update reviews, media, attributes, place actions, food menus, and location details for a specific GBP location without changing the account’s selected location.

Use locationId (query) on:
GET /v1/accounts/{accountId}/gmb-reviews
GET/PUT /v1/accounts/{accountId}/gmb-food-menus
GET/PUT /v1/accounts/{accountId}/gmb-location-details
GET/POST/DELETE /v1/accounts/{accountId}/gmb-media
GET/PUT /v1/accounts/{accountId}/gmb-attributes
GET/POST/DELETE /v1/accounts/{accountId}/gmb-place-actions

View documentation
2👏1