Last updated: September 2026
Does the LinkedIn API support scheduling posts?
No. The LinkedIn posting API has no scheduled-publish field: a post sent to POST /rest/posts is published when the call is made. Every tool that schedules LinkedIn posts stores the post itself and makes that call at the chosen time. Doing it yourself means building the storage, a job runner and handling for tokens that expire after 60 days with no refresh token.
Below is what that build involves, why the token rule matters most for scheduled posts, and the one-call alternative with scheduled_date.
What you would build
LinkedIn gives you an endpoint that posts now. Everything that turns it into a schedule is yours.
The last two rows have their own pages: the 426 NONEXISTENT_VERSION error and posts cut off at a parenthesis.
The job runner makes the call LinkedIn will not
At the due minute, the runner sends the same request you would send to post right away. There is nothing in it about time.
for (const post of await duePosts()) {
if (post.tokenExpiresAt <= Date.now()) {
await holdAndAskToReconnect(post);
continue;
}
const res = await fetch('https://api.linkedin.com/rest/posts', {
method: 'POST',
headers: {
Authorization: 'Bearer ' + post.token,
'LinkedIn-Version': '202608',
'X-Restli-Protocol-Version': '2.0.0',
'Content-Type': 'application/json',
},
body: JSON.stringify({
author: post.authorUrn,
commentary: escapeLittleText(post.text),
visibility: 'PUBLIC',
distribution: {
feedDistribution: 'MAIN_FEED',
targetEntities: [],
thirdPartyDistributionChannels: [],
},
lifecycleState: 'PUBLISHED',
isReshareDisabledByAuthor: false,
}),
});
if (res.ok) {
await markPublished(post, res.headers.get('x-restli-id'));
} else {
await recordFailure(post, res.status);
}
}duePosts, holdAndAskToReconnect and the rest are the parts you write and run: the database, the process that calls this every minute, and the email or notification that brings the member back.
The 60-day token is the hard part
Self-serve LinkedIn apps get 60-day access tokens and no refresh token, so nothing can renew a token in the background. A post scheduled more than 60 days after the member signed in cannot go out until they sign in again. Your scheduler has to notice before the post is due, not when the call fails. More in why the LinkedIn token expires after 60 days.Or schedule it in one call
OpenTweet runs the queue, so scheduling a LinkedIn post is one request with a scheduled_date in ISO 8601.
curl -X POST https://opentweet.io/api/v1/posts \
-H "Authorization: Bearer ot_your_key" \
-H "Content-Type: application/json" \
-d '{
"text": "Three things we changed after our first 100 customers.",
"platforms": ["linkedin"],
"scheduled_date": "2026-10-01T09:00:00Z"
}'The response returns the post with its id and scheduled_date. Once it has published, reading the post back from the API returns results[] with one entry per network, and the LinkedIn post_id is the post URN, such as urn:li:share:7300000000000000000.
- Several networks at once.
"platforms": ["x", "bluesky", "linkedin"]schedules the same post on all three. - A specific LinkedIn account. Pass
linkedin_account_idwhen you have more than one connected. Pro connects 1 LinkedIn account, Advanced 3 and Agency 10. - From an AI agent. The hosted MCP server at
https://mcp.opentweet.io/mcpdoes the same from Claude or any MCP client. See LinkedIn over MCP.
OpenTweet sets the version header, escapes the text and publishes at the scheduled time. When the 60-day LinkedIn sign-in runs out, scheduled LinkedIn posts are held and you get an email to reconnect, which is one click in Settings.
What to know before relying on it: LinkedIn posts go to your personal profile only, not Company Pages. Text is up to 3,000 characters counted in UTF-16 code units, so an emoji counts as 2. A thread goes out as one post. Video is not supported on LinkedIn yet, and there are no LinkedIn analytics. Hashtags and @mentions publish as plain text.
7-day free trial. Cancel anytime.
Frequently asked questions
Does the LinkedIn API support scheduling posts?
No. The LinkedIn posting API has no scheduled-publish field. A post sent to /rest/posts is published when the call is made, so scheduling means storing the post yourself and making that call at the chosen time.
Can I send LinkedIn a post with a future publish time?
No. There is no field for a publish time. Whatever time you want the post to appear is the time your own system has to call the API.
How do LinkedIn scheduling tools work, then?
Every one of them runs its own queue. The tool stores your post, and a job runner calls the LinkedIn posting endpoint at the scheduled minute with your access token.
What happens to a scheduled LinkedIn post when the access token expires?
It cannot be published until the member signs in again. Self-serve apps get 60-day access tokens and no refresh token, so nothing can renew the token in the background. In OpenTweet, scheduled LinkedIn posts are held and you get an email to reconnect, which is one click.
How do I schedule a LinkedIn post through the OpenTweet API?
Send POST https://opentweet.io/api/v1/posts with your ot_ key, "platforms": ["linkedin"] and an ISO 8601 "scheduled_date". OpenTweet stores it and publishes it to your LinkedIn profile at that time. Add "x" or "bluesky" to the platforms array to schedule the same post there too.
Keep exploring
Everything a LinkedIn scheduler has to handle, and how to hand it off.
Why the token expires after 60 days
No refresh token on self-serve apps, and what that means for scheduled posts.
LinkedIn API 426 NONEXISTENT_VERSION
The LinkedIn-Version header names a retired or unreleased version. How to pick one that works.
Post cut off at a parenthesis
The characters LinkedIn treats as markup in commentary, and a copy-paste escape function.
LinkedIn scheduler
Schedule LinkedIn posts from the OpenTweet composer or the API.
LinkedIn from an MCP client
Schedule LinkedIn posts from Claude or any MCP client through the hosted OpenTweet server.
Cross-posting API reference
The platforms parameter, the results array, and the per-network limits.
Schedule LinkedIn posts without running a queue
One API call with a scheduled_date. No LinkedIn app, no job runner. LinkedIn is on every plan from $11.99 a month.
7-day free trial. Cancel anytime.