The LinkedIn scheduling API
Create a LinkedIn post with one HTTP call. It joins the same queue the dashboard uses, retries on failure, and reports back what actually went out.
Publish to LinkedIn
# POST a text-and-media post to your connected LinkedIn channel
curl -X POST https://api.postwharf.com/v1/posts \
-H "Authorization: Bearer $POSTWHARF_KEY" \
-H "Content-Type: application/json" \
-d '{
"text": "Shipping today.",
"channels": ["ch_your_linkedin_channel"],
"media": ["med_optional"]
}'
Schedule it instead
curl -X POST https://api.postwharf.com/v1/posts \
-H "Authorization: Bearer $POSTWHARF_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Tuesday drop","channels":["ch_your_linkedin_channel"],"publish_at":"2026-09-01T09:00:00Z"}'
Find your LinkedIn channel id
curl https://api.postwharf.com/v1/channels \ -H "Authorization: Bearer $POSTWHARF_KEY"
Each connected account is a channel. The one you want has "platform": "linkedin".
Check what happened
curl https://api.postwharf.com/v1/posts/post_xxx \ -H "Authorization: Bearer $POSTWHARF_KEY"
The response carries one delivery per channel with its status, the live URL once published, and the error text if it failed. Deliveries are re-checked after publishing, so a LinkedIn post removed later stops reporting as live.
What LinkedIn accepts
3,000 characters, counting the post body. Up to 20 images or 1 video per post — LinkedIn does not take both in the same post.
Read from the table the API enforces, so a post over 3,000 is refused when you create it rather than truncated on the way to LinkedIn.
Worth knowing about LinkedIn
Company Pages need an extra permission grant from LinkedIn.
Every other network
Instagram · TikTok · X · YouTube · Facebook · Threads · Pinterest · Bluesky · Reddit · Telegram · Discord · Snapchat · WordPress