API keys can now be created with restricted access using
This lets you issue keys limited to specific profiles and/or make keys read-only for safer analytics/integration use.
New request fields:
β’
β’
β’
Key responses now include
View documentation
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
LinkedIn requires a title for document posts; if omitted, Late will fall back to the media item title, then the filename.
Use:
β’
β’
View documentation
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:
β’
β’
View documentation
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, LinkedInView documentation
Zernio
Overview - Platforms
Complete guide to all social media platforms supported by Zernio API
β€4
New Analytics endpoints are available for aggregated reporting and scheduling optimization (requires the Analytics add-on).
Daily aggregated metrics:
β’ Filters:
β’ Returns:
Best times to post:
β’ Filters:
β’ Returns:
Content performance decay:
β’ Filters:
β’ Returns:
Posting frequency vs engagement:
β’ Filters:
β’ Returns:
View documentation
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_engagementContent performance decay:
GET /v1/analytics/content-decayβ’ Filters:
platform, profileIdβ’ Returns:
buckets with bucket_label and avg_pct_of_finalPosting frequency vs engagement:
GET /v1/analytics/posting-frequencyβ’ Filters:
platform, profileIdβ’ Returns:
frequency rows with posts_per_week, avg_engagement_rate, weeks_countView documentation
β€6π₯3
New validation endpoints are available under
Validate weighted character counts per platform with
Dry-run the full post validation pipeline (same body as
Validate a public media URL and compare against per-platform size limits with
Check subreddit existence/info with
View documentation
/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
npm install -g late
Docs: https://docs.getlate.dev/resources/cli
Source: https://github.com/getlate-dev/late-cli
π₯3β€1π1
New endpoint
Query params:
β’
β’
β’
Response includes
View documentation
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
An API key is created automatically and saved to the CLI config.
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
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
β’
β’
β’
β’
β’
β’
Webhooks: a new event
View documentation
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
Currently supported only for organization/company page accounts (personal profile reaction data is restricted by LinkedIn).
Required params:
Optional:
Response includes
View documentation
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), cursorResponse 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
Set
View documentation
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
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
β’
β’
β’
β’
β’
β’
View documentation
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-actionsView documentation
β€2π1
The
Use
View documentation
GET /v1/usage-stats response now includes billingAnchorDay.Use
billingAnchorDay (1β31) to determine the day of the month when the billing cycle resets, which can help align usage tracking and reset expectations.View documentation
β€2π1
GET /v1/analytics now returns richer media metadata for analytics results.You can render previews and handle carousels consistently using the new fields on both single-post and list responses.
New fields:
β’
thumbnailUrlβ’
mediaType = image | video | gif | document | carousel | text (single-post also supports image | video | carousel | text)β’
mediaItems (array of { type: image|video, url, thumbnail }; carousel posts include one entry per slide)View documentation
π₯°1
Late API now supports X/Twitter engagement actions: retweet, bookmark, and follow (plus undo/remove/unfollow).
Use:
β’ Retweet:
β’ Undo retweet:
β’ Bookmark:
β’ Remove bookmark:
β’ Follow:
β’ Unfollow:
Inbox comment moderation also adds X/Twitter support:
β’
β’
For X/Twitter, the reply must be in a conversation started by the authenticated user and requires
View documentation
Use:
β’ Retweet:
POST /v1/twitter/retweet with accountId, tweetIdβ’ Undo retweet:
DELETE /v1/twitter/retweet with accountId, tweetIdβ’ Bookmark:
POST /v1/twitter/bookmark with accountId, tweetIdβ’ Remove bookmark:
DELETE /v1/twitter/bookmark with accountId, tweetIdβ’ Follow:
POST /v1/twitter/follow with accountId, targetUserId (response may include pending_follow for protected accounts)β’ Unfollow:
DELETE /v1/twitter/follow with accountId, targetUserIdInbox comment moderation also adds X/Twitter support:
β’
POST /v1/inbox/comments/{postId}/{commentId}/hideβ’
DELETE /v1/inbox/comments/{postId}/{commentId}/hideFor X/Twitter, the reply must be in a conversation started by the authenticated user and requires
tweet.moderate.write + X API Basic tier (or higher). Bookmark/follow also require bookmark.write / follows.write scopes, and X API Basic tier (or higher).View documentation
β€1π₯1
GET
Single-post lookups can return
Key changes:
β’ Date defaults/limits:
β’ Sorting:
β’ Single post response adds
β’ Per-platform analytics now include
β’ List responses add
View documentation
/v1/analytics now supports richer analytics sync states and more sorting options.Single-post lookups can return
202 when analytics sync is still pending, or 424 when analytics are unavailable because the post failed on all platforms.Key changes:
β’ Date defaults/limits:
fromDate defaults to 90 days ago, toDate defaults to today, max range 366 daysβ’ Sorting:
sortBy now supports date, engagement, impressions, reach, likes, comments, shares, saves, clicks, viewsβ’ Single post response adds
latePostId, syncStatus (synced/pending/partial/unavailable) and message; status can be published/failed/partialβ’ Per-platform analytics now include
syncStatus (synced/pending/unavailable), platformPostUrl, and errorMessage; analytics may be nullβ’ List responses add
posts[].latePostId, posts[].profileId, and overview.dataStalenessView documentation
π₯2π₯°1
Late is now Zernio.
New name. Same API. Same mission: one integration to publish across Instagram, TikTok, LinkedIn, YouTube, X, Facebook, WhatsApp, and 6 more platforms.
What changes:
β’ getlate.dev permanently redirects to zernio.com
β’ New name, new domain, new look
What doesn't change:
β’ Your API keys, endpoints, and integrations all keep working
β’ Zero code changes required
β’ Same team, same support, same reliability
Why rebrand?
"Late" is a common English word. That made us nearly impossible to search for, hard to recommend by name, and easy to confuse. Zernio is distinctive, memorable, and ours.
Watch the announcement: zernio.com/rebrand
Spotted something off during the transition? Hit us up in the support chat. We're monitoring everything closely.
Thanks for building with us βοΈ
New name. Same API. Same mission: one integration to publish across Instagram, TikTok, LinkedIn, YouTube, X, Facebook, WhatsApp, and 6 more platforms.
What changes:
β’ getlate.dev permanently redirects to zernio.com
β’ New name, new domain, new look
What doesn't change:
β’ Your API keys, endpoints, and integrations all keep working
β’ Zero code changes required
β’ Same team, same support, same reliability
Why rebrand?
"Late" is a common English word. That made us nearly impossible to search for, hard to recommend by name, and easy to confuse. Zernio is distinctive, memorable, and ours.
Watch the announcement: zernio.com/rebrand
Spotted something off during the transition? Hit us up in the support chat. We're monitoring everything closely.
Thanks for building with us βοΈ
Zernio
Late is now Zernio
Same team, same API, same reliability. Zero breaking changes.
π₯5β€3π2
New endpoint:
You can now fetch TikTok creator details plus the allowed posting options for an account (privacy levels, interaction settings, posting limits, and commercial content disclosures). Useful for validating post settings before publishing.
Key params:
β’
β’
Also added to
View documentation
GET /v1/accounts/{accountId}/tiktok/creator-info.You can now fetch TikTok creator details plus the allowed posting options for an account (privacy levels, interaction settings, posting limits, and commercial content disclosures). Useful for validating post settings before publishing.
Key params:
β’
accountId (path)β’
mediaType (query, default video): video, photoAlso added to
TikTokPlatformData for video posts: videoCoverImageUrl (custom thumbnail URL). When set, it overrides videoCoverTimestampMs.View documentation
π₯3β€1
TikTok video posts now support a custom cover image via
Provide a thumbnail image URL (JPG/PNG/WebP, max 20MB). When set, it overrides
Use:
β’
β’
View documentation
videoCoverImageUrl in TikTokPlatformData.Provide a thumbnail image URL (JPG/PNG/WebP, max 20MB). When set, it overrides
videoCoverTimestampMs.Use:
β’
videoCoverImageUrl - custom thumbnail image URLβ’
videoCoverTimestampMs - frame timestamp (ms), ignored if videoCoverImageUrl is providedView documentation
π₯4β€1