Changelog
Stay up to date with the latest API changes and improvements
Track all updates to the Late API. We announce significant changes here and on our Telegram channel.
Breaking Change
LinkedIn headless OAuth flow updated
LinkedIn headless mode now uses a token-based approach to retrieve OAuth data, preventing URITOOLONG 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.
LinkedIn headless mode now uses a token-based approach to retrieve OAuth data, preventing URITOOLONG 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=PENDINGDATATOKENReturns:
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.
New Feature
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
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.New Feature
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
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.New Feature
YouTube daily views breakdown is now available via
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.Improvement
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
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.Breaking Change
The endpoint
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.Improvement
YouTube now supports AI-generated content disclosure via
Set
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.Improvement
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.
Improvement
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.
New Feature
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.
New Feature
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.Improvement
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.
Improvement
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)Improvement
The
-
-
-
These fields help you understand why an account was disconnected and quickly look up related data.
account.disconnected webhook payload now includes additional fields for better context:-
accountId - The account's unique identifier (same as used in /v1/accounts/{accountId})-
profileId - The profile's unique identifier this account belongs to-
disconnectionType - Either intentional (user disconnected manually) or unintentional (token expired or was revoked)These fields help you understand why an account was disconnected and quickly look up related data.