LinkedIn Scheduling API
Schedule LinkedIn posts for a future time via API, with delivery status per target.
LinkedIn's API has no native scheduling — the Posts API only accepts lifecycleState PUBLISHED. To schedule, add an ISO 8601 scheduled_at to a normal POST /api/posts request: PostGate stores the post as scheduled, submits it to LinkedIn at that instant, and tracks the target to published or failed. Use scheduled_at: "queue" for recurring slots.
LinkedIn doesn't offer native post scheduling in its API — lifecycleState: 'PUBLISHED' is the only state the Posts API accepts for going live, there's no scheduled_at field on LinkedIn's side. PostGate holds the post, fires it at the right instant, and reports the result the same way it does for an immediate publish.
How do you schedule a single post for a fixed time?
Add an ISO 8601 scheduled_at to the same request you'd use for an immediate publish. PostGate stores the post as scheduled, then submits it to LinkedIn at that instant and tracks the resulting target through to published or failed.
curl -X POST "https://postgate.studio/api/posts?profile_group_id=grp_acme123" \
-H "Authorization: Bearer $POSTGATE_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: linkedin-schedule-001" \
-d '{
"post": {
"body": "Join us at the conference next month.",
"options": { "linkedin": { "visibility": "PUBLIC" } }
},
"profiles": ["pro_linkedin456"],
"scheduled_at": "2026-09-15T13:00:00Z"
}'What if the post needs approval first?
Set draft: true instead of a scheduled_at to save the post without any delivery attempt. A reviewer can edit it with PATCH /api/posts/{id}, then either publish it immediately with POST /api/posts/{id}/publish or add a scheduled_at once it's approved.
How do you fill a recurring queue instead of picking exact times?
Define a recurring schedule — a cron expression or a comma-separated list of daily HH:mm slots — with a LinkedIn profile in its template. Any post created with scheduled_at: "queue" against that profile group takes the next open slot automatically, which is the pattern behind most "social media queue" tools.
curl -X POST https://postgate.studio/api/schedules \
-H "Authorization: Bearer $POSTGATE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Weekday LinkedIn update",
"kind": "cron",
"expression": "0 9 * * 1-5",
"timezone": "America/Sao_Paulo",
"profile_group_id": "grp_acme123",
"template": {
"post": { "body": "Good morning from Acme." },
"profiles": ["pro_linkedin456"],
"media": []
}
}'What happens if the token expires before the post fires?
Standard LinkedIn member tokens are relatively short-lived — commonly around 60 days — and a token can expire between the moment a post is scheduled and the moment it fires. PostGate checks profile health before the scheduled attempt and marks the target awaiting_reconnect rather than silently dropping it, so surface that state in your product before the send time, not after.
Frequently asked questions
Does the LinkedIn API support scheduling posts natively?
No. lifecycleState: PUBLISHED is the only state LinkedIn's Posts API accepts for going live — there is no scheduled_at field on LinkedIn's side. A scheduler like PostGate holds the post, fires it at the right instant, and reports the result the same way it does for an immediate publish.
How do I save a LinkedIn post as a draft for approval before scheduling?
Set draft: true instead of a scheduled_at to save the post without any delivery attempt. A reviewer can edit it with PATCH /api/posts/{id}, then either publish it immediately with POST /api/posts/{id}/publish or add a scheduled_at once it is approved.
How do I set up a recurring LinkedIn posting queue?
Define a recurring schedule — a cron expression or a comma-separated list of daily HH:mm slots — with a LinkedIn profile in its template. Any post created with scheduled_at: "queue" against that profile group takes the next open slot automatically, which is the pattern behind most social media queue tools.
Can a scheduled LinkedIn post fail because of an expired token?
Yes. Standard LinkedIn member tokens are relatively short-lived — commonly around 60 days — and one can expire between scheduling and firing. PostGate checks profile health before the scheduled attempt and marks the target awaiting_reconnect rather than silently dropping it, so surface that state in your product before the send time.
