Hey π
Welcome to the Zernio Dev News channel π
Here we share technical updates, API changes, and product news for zernio.com
Youβll find:
π Bug fixes and reliability improvements
βοΈ New endpoints, SDKs, and integration updates
π¨ Breaking changes (with migration notes)
π‘ Short examples so you can plug things in fast
This channel is:
π Readβonly, announcementβonly
π§΅ Low noise, just the important stuff
Useful links:
π Docs β https://docs.zernio.com
Welcome to the Zernio Dev News channel π
Here we share technical updates, API changes, and product news for zernio.com
Youβll find:
π Bug fixes and reliability improvements
βοΈ New endpoints, SDKs, and integration updates
π¨ Breaking changes (with migration notes)
π‘ Short examples so you can plug things in fast
This channel is:
π Readβonly, announcementβonly
π§΅ Low noise, just the important stuff
Useful links:
π Docs β https://docs.zernio.com
β€3π1
Zernio | Developer News pinned Β«Hey π Welcome to the Zernio Dev News channel π Here we share technical updates, API changes, and product news for zernio.com Youβll find: π Bug fixes and reliability improvements βοΈ New endpoints, SDKs, and integration updates π¨ Breaking changes (withβ¦Β»
New Endpoints Available:
1.
- This endpoint allows you to check the health status of all connected social accounts. It returns a summary of token validity, permissions status, and any issues that need attention. This is useful for monitoring account connections and identifying accounts that may need reconnection.
- Parameters:
-
-
-
- Response: Returns a JSON object containing:
-
-
2.
- This endpoint provides detailed health information for a specific social account. It includes token status, granted permissions, missing permissions, and actionable recommendations.
- Parameters:
-
- Response: Returns a JSON object containing:
-
These new endpoints enhance the API's capability to monitor and manage social media accounts effectively.
1.
GET /v1/accounts/health- This endpoint allows you to check the health status of all connected social accounts. It returns a summary of token validity, permissions status, and any issues that need attention. This is useful for monitoring account connections and identifying accounts that may need reconnection.
- Parameters:
-
profileId (string, optional): Filter by profile ID.-
platform (string, optional): Filter by platform. Acceptable values include: facebook, instagram, linkedin, twitter, tiktok, youtube, threads, pinterest, reddit, bluesky, googlebusiness, telegram.-
status (string, optional): Filter by health status. Acceptable values are healthy, warning, error.- Response: Returns a JSON object containing:
-
summary: Total number of accounts, number of healthy accounts, accounts with warnings, accounts with errors, and accounts needing reconnection.-
accounts: An array of account details, including account ID, platform, username, display name, health status, posting and analytics permissions, token validity, and any issues.2.
GET /v1/accounts/{accountId}/health- This endpoint provides detailed health information for a specific social account. It includes token status, granted permissions, missing permissions, and actionable recommendations.
- Parameters:
-
accountId (string, required): The account ID for which to check the health.- Response: Returns a JSON object containing:
-
accountId, platform, username, displayName, overall status, tokenStatus (validity, expiry time, refresh needs), permissions (posting, analytics, optional), issues found, and actionable recommendations.These new endpoints enhance the API's capability to monitor and manage social media accounts effectively.
β€2
GET /v1/profiles
This endpoint lists profiles visible to the authenticated user. It now includes a new optional query parameter
Response contains:
-
-
-
-
-
-
-
GET /v1/accounts
This endpoint lists connected social accounts. It now also includes the
Response contains:
-
-
-
-
-
-
-
-
-
This endpoint lists profiles visible to the authenticated user. It now includes a new optional query parameter
includeOverLimit (type: boolean, default: false). When set to true, it includes profiles that exceed the user's plan limit, which will have isOverLimit: true in the response. This is useful for managing or deleting profiles after a plan downgrade. The profiles are sorted by creation date (oldest first).Response contains:
-
profiles: an array of profile objects, each containing:-
_id: string-
name: string-
color: string-
isDefault: boolean-
isOverLimit: boolean (only present when includeOverLimit=true)-
createdAt: string (date-time)GET /v1/accounts
This endpoint lists connected social accounts. It now also includes the
includeOverLimit parameter (type: boolean, default: false). When true, it includes accounts from profiles that exceed the user's plan limit, allowing users to disconnect accounts from over-limit profiles for deletion.Response contains:
-
accounts: an array of account objects, each containing:-
_id: string-
platform: string-
profileId: object containing profile details-
username: string-
displayName: string-
profileUrl: string-
isActive: boolean-
hasAnalyticsAccess: boolean (indicates if the user has analytics add-on access)β€4
GET /v1/accounts/{accountId}/linkedin-mentions
This endpoint resolves a LinkedIn profile URL (for a person) or a company page URL (for an organization) to a URN that can be used to @mention them in posts.
Parameters:
-
-
- Person:
- Organization:
-
Response:
On success (HTTP 200), the response contains:
-
-
-
-
-
-
This change allows developers to mention organizations without needing to be an admin of a LinkedIn organization, which simplifies the process of tagging companies in posts. Person mentions still require admin access for the organization but now support a broader range of input formats.
This endpoint resolves a LinkedIn profile URL (for a person) or a company page URL (for an organization) to a URN that can be used to @mention them in posts.
Parameters:
-
accountId (path, required): The LinkedIn account ID.-
url (query, required): LinkedIn profile URL, company URL, or vanity name. It supports:- Person:
miquelpalet, linkedin.com/in/miquelpalet- Organization:
company/microsoft, linkedin.com/company/microsoft-
displayName (query, optional): The exact display name as shown on LinkedIn. This is required for clickable person mentions. If not provided, the name is derived from the vanity URL, which may not match exactly.Response:
On success (HTTP 200), the response contains:
-
urn: The LinkedIn URN (either for a person or organization).-
type: The type of entity, which can be either person or organization.-
displayName: The display name (provided, from API, or derived from vanity URL).-
mentionFormat: Ready-to-use mention format for post content.-
vanityName: The vanity name/slug (only for organization mentions).-
warning: A warning about clickable mentions (only present for person mentions if displayName was not provided).This change allows developers to mention organizations without needing to be an admin of a LinkedIn organization, which simplifies the process of tagging companies in posts. Person mentions still require admin access for the organization but now support a broader range of input formats.
π₯3β€1π1
New Endpoints for Pinterest Integration
We have added two new endpoints to enhance your integration with Pinterest in headless mode:
1.
- Summary: List Pinterest Boards after OAuth (Headless Mode)
- Description: This endpoint retrieves a list of Pinterest boards available for selection after initiating OAuth via
- Parameters:
-
-
-
- Responses:
-
-
-
-
-
2.
- Summary: Select a Pinterest Board to complete the connection (Headless Mode)
- Description: Use this endpoint to save the selected board and complete the Pinterest account connection after OAuth.
- Request Body: Must include the following fields:
-
-
-
-
-
-
-
-
- Responses:
-
-
-
-
-
We have added two new endpoints to enhance your integration with Pinterest in headless mode:
1.
GET /v1/connect/pinterest/select-board- Summary: List Pinterest Boards after OAuth (Headless Mode)
- Description: This endpoint retrieves a list of Pinterest boards available for selection after initiating OAuth via
/v1/connect/pinterest with headless=true. It allows you to build your own fully-branded board selector instead of using Late's hosted UI.- Parameters:
-
X-Connect-Token (header, required): Short-lived connect token from the OAuth redirect.-
profileId (query, required): Your Late profile ID.-
tempToken (query, required): Temporary Pinterest access token from the OAuth callback redirect.- Responses:
-
200: Returns a list of Pinterest boards available for connection, including each board's ID, name, description, and privacy setting.-
400: Missing required parameters.-
401: Unauthorized access.-
403: No access to profile.-
500: Failed to fetch boards.2.
POST /v1/connect/pinterest/select-board- Summary: Select a Pinterest Board to complete the connection (Headless Mode)
- Description: Use this endpoint to save the selected board and complete the Pinterest account connection after OAuth.
- Request Body: Must include the following fields:
-
profileId (string, required): Your Late profile ID.-
boardId (string, required): The Pinterest Board ID selected by the user.-
boardName (string, optional): The board name for display purposes.-
tempToken (string, required): Temporary Pinterest access token from OAuth.-
userProfile (object, optional): User profile data from OAuth redirect.-
refreshToken (string, optional): Pinterest refresh token if available.-
expiresIn (integer, optional): Token expiration time in seconds.-
redirect_url (string, optional): Custom redirect URL after connection completes.- Responses:
-
200: Pinterest Board connected successfully, returns a message and account details.-
400: Missing required fields.-
401: Unauthorized access.-
403: No access to profile or profile limit exceeded.-
500: Failed to save Pinterest connection.β€3π2π₯°1
New Endpoints Available:
1.
- This endpoint allows you to retrieve publishing logs for all posts. You can filter logs by status (
-
-
-
-
-
-
- The response includes an array of logs and pagination details.
2.
- Use this endpoint to retrieve detailed information about a specific log entry, including full request and response bodies for debugging purposes.
-
- The response contains the log entry details, including the full context of the publishing attempt.
3.
- This endpoint retrieves all publishing logs for a specific post, showing the complete history of publishing attempts across all platforms.
-
-
- The response includes an array of logs specific to the post and the count of logs returned.
1.
GET /v1/logs- This endpoint allows you to retrieve publishing logs for all posts. You can filter logs by status (
status), platform (platform), and action (action). The logs include detailed information about each publishing attempt, such as API requests, responses, and timing data. -
status (string, optional): Filter by log status (options: success, failed, pending, skipped, all).-
platform (string, optional): Filter by platform (options include tiktok, instagram, facebook, etc.).-
action (string, optional): Filter by action type (options: publish, retry, media_upload, etc.).-
days (integer, optional): Number of days to look back (max 7, default 7).-
limit (integer, optional): Maximum number of logs to return (max 100, default 50).-
skip (integer, optional): Number of logs to skip for pagination (default 0).- The response includes an array of logs and pagination details.
2.
GET /v1/logs/{logId}- Use this endpoint to retrieve detailed information about a specific log entry, including full request and response bodies for debugging purposes.
-
logId (string, required): The ID of the log entry you want to retrieve.- The response contains the log entry details, including the full context of the publishing attempt.
3.
GET /v1/posts/{postId}/logs- This endpoint retrieves all publishing logs for a specific post, showing the complete history of publishing attempts across all platforms.
-
postId (string, required): The ID of the post for which you want to retrieve logs.-
limit (integer, optional): Maximum number of logs to return (max 100, default 50).- The response includes an array of logs specific to the post and the count of logs returned.
β€4π2π₯1
InstagramPlatformData Schema Update
The
Here are the details of the new
-
-
- Possible values:
- This field determines how a trial reel transitions to a regular reel:
-
-
The rest of the schema remains unchanged, including the parameters
This update enhances your ability to manage Reels effectively, allowing for strategic sharing and performance-based visibility adjustments. Keep this in mind as you plan your content strategy.
The
InstagramPlatformData schema has been updated to include a new parameter: trialParams. This parameter allows for configuration of trial Reels, which are initially shared only with non-followers. Here are the details of the new
trialParams field:-
trialParams: object (optional)-
graduationStrategy: string (required)- Possible values:
MANUAL, SS_PERFORMANCE- This field determines how a trial reel transitions to a regular reel:
-
MANUAL: Requires manual graduation via the Instagram app.-
SS_PERFORMANCE: Automatically graduates based on performance metrics with non-followers.The rest of the schema remains unchanged, including the parameters
contentType, shareToFeed, collaborators, firstComment, and userTags. This update enhances your ability to manage Reels effectively, allowing for strategic sharing and performance-based visibility adjustments. Keep this in mind as you plan your content strategy.
β€1π₯1
Instagram now supports custom audio names for Reels via
You can set a custom name for the original audio, replacing the default "Original Audio" label. This can only be set once during creation or later from the Instagram audio page in the app.
audioName in platformSpecificData.You can set a custom name for the original audio, replacing the default "Original Audio" label. This can only be set once during creation or later from the Instagram audio page in the app.
β€2π₯1
YouTube now supports AI-generated content disclosure via
Set
View documentation
containsSyntheticMedia in YouTubePlatformData.Set
containsSyntheticMedia to true if your video contains AI-generated or synthetic content that could be mistaken for real people, places, or events. YouTube may add a label to videos when this is set.View documentation
β€5π₯°1
The endpoint
View documentation
POST /v1/profiles/{profileId}/clone-connection has been removed. This endpoint was used to clone an existing connection to a profile, allowing users to manage multiple brands with the same underlying social media account.View documentation
β€2π2
Late now automatically compresses media that exceeds platform limits during publishing, simplifying the upload process.
Image compression thresholds are set for platforms like
Video compression thresholds include
View documentation
Image compression thresholds are set for platforms like
Twitter/X: >5 MB, Instagram: >8 MB, Facebook: >10 MB, and more. Video compression thresholds include
Twitter/X: >512 MB, Instagram Stories: >100 MB, Facebook: >4 GB, among others.View documentation
β€5π₯5
YouTube daily views breakdown is now available via
View documentation
GET /v1/analytics/youtube/daily-views. This endpoint returns historical daily view counts for a specific YouTube video, including views, watch time, and subscriber changes. Required parameters include videoId and accountId, with optional date range parameters startDate and endDate.View documentation
β€3π2
New webhook event:
You can now subscribe to notifications when a social account is connected to a profile. The webhook payload includes
Add it to your
View documentation
account.connectedYou can now subscribe to notifications when a social account is connected to a profile. The webhook payload includes
accountId, profileId, platform, username, and displayName.Add it to your
events array when creating or updating webhooks.View documentation
π₯1π1
Instagram Reels now support thumbnail offset selection via
Specify a millisecond offset from the start of the video to use as the Reel cover image. Defaults to 0 (first frame).
If you provide a custom thumbnail URL via
View documentation
thumbOffset in platformSpecificData.Specify a millisecond offset from the start of the video to use as the Reel cover image. Defaults to 0 (first frame).
thumbOffset: integer, minimum 0 (milliseconds)If you provide a custom thumbnail URL via
instagramThumbnail in mediaItems, it takes priority and this offset is ignored.View documentation
β€2π₯2
LinkedIn headless OAuth flow updated
LinkedIn headless mode now uses a token-based approach to retrieve OAuth data, preventing URI_TOO_LONG errors for users with many organizations.
What changed:
After OAuth redirect, you now receive
Call the new endpoint to fetch the data:
Returns:
Important:
β’ One-time use: data is deleted after fetching
β’ Data expires after 10 minutes if not fetched
β’ No authentication required, just the token
Other platforms (Facebook, Pinterest, Google Business, Snapchat) are unchanged.
The old flow still works and is not broken. Migrate to the new flow if you want to prevent the URI_TOO_LONG error for users with many orgs.
View documentation
LinkedIn headless mode now uses a token-based approach to retrieve OAuth data, preventing URI_TOO_LONG errors for users with many organizations.
What changed:
After OAuth redirect, you now receive
pendingDataToken instead of tempToken, userProfile, and organizations in the URL.Call the new endpoint to fetch the data:
GET /v1/connect/pending-data?token=PENDING_DATA_TOKENReturns:
tempToken, refreshToken, expiresIn, userProfile, organizations, selectionTypeImportant:
β’ One-time use: data is deleted after fetching
β’ Data expires after 10 minutes if not fetched
β’ No authentication required, just the token
Other platforms (Facebook, Pinterest, Google Business, Snapchat) are unchanged.
The old flow still works and is not broken. Migrate to the new flow if you want to prevent the URI_TOO_LONG error for users with many orgs.
View documentation
β€2π₯1
This media is not supported in your browser
VIEW IN TELEGRAM
We turned our API docs into a Claude Code skill.
$ npx skills add getlate-dev/late-api
Ask Claude to schedule posts, connect accounts, set up webhooks - it knows everything about the Late API now π
$ npx skills add getlate-dev/late-api
Ask Claude to schedule posts, connect accounts, set up webhooks - it knows everything about the Late API now π
π3π₯3β€2
Analytics responses now include
When an external post originated from a Late-scheduled post, the response now includes the original Late Post ID directly. This makes it easier to correlate analytics data with posts created via
The field appears in both single post queries and paginated list responses. It's
View documentation
latePostId field.When an external post originated from a Late-scheduled post, the response now includes the original Late Post ID directly. This makes it easier to correlate analytics data with posts created via
POST /v1/posts.The field appears in both single post queries and paginated list responses. It's
null for posts that weren't scheduled through Late.View documentation
π₯4
YouTube uploads now support
This COPPA compliance field declares whether your video is child-directed content. Defaults to
Set to
View documentation
madeForKids in platformSpecificData.youtube.This COPPA compliance field declares whether your video is child-directed content. Defaults to
false.Set to
true if your video is made for kids. Note: kid-directed videos have restricted features (no comments, no notifications, limited ad targeting).View documentation
β€3π₯1
POST /v1/posts now returns
If you post identical content to the same account within 24 hours, you'll get:
Additionally,
β’ Velocity limit: 15 posts/hour per account
β’ Account cooldown: Escalating delays (10min β 24h) after repeated errors
β’ Daily post limits: Platform-specific (X: 20, Pinterest: 25, Instagram/Facebook: 100, Threads: 250, others: 50)
New headers on 429:
These changes also apply to
View documentation
409 Conflict when duplicate content is detected.If you post identical content to the same account within 24 hours, you'll get:
{
"error": "This exact content was already posted...",
"details": {
"accountId": "...",
"platform": "...",
"existingPostId": "..."
}
}Additionally,
429 responses now include detailed context about which limit was hit:β’ Velocity limit: 15 posts/hour per account
β’ Account cooldown: Escalating delays (10min β 24h) after repeated errors
β’ Daily post limits: Platform-specific (X: 20, Pinterest: 25, Instagram/Facebook: 100, Threads: 250, others: 50)
New headers on 429:
Retry-After, X-RateLimit-Limit, X-RateLimit-RemainingThese changes also apply to
POST /v1/posts/bulk-upload and POST /v1/posts/{postId}/retry.View documentation
π₯2π1