Schedule a Week of LinkedIn Posts with an Agent
Have an AI agent draft and schedule five LinkedIn posts in one pass using the Chirpie scheduling API.
Updated September 2026
How do you schedule a week of LinkedIn posts with an AI agent?
Give the agent your LinkedIn account_id and a Chirpie API key, then have it call POST /api/v1/posts five times, each with a future schedule_at timestamp in UTC. Chirpie stores each post as scheduled and publishes it within about five minutes of its slot. One script, one run, a week of content queued.
Step 1 — Connect LinkedIn and grab the account ID
Connect from the dashboard, or start the OAuth flow from code:
curl -X POST https://chirpie.ai/api/v1/accounts \
-H "Authorization: Bearer chirpie_sk_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{ "platform": "linkedin" }'Open the returned authorization_url, approve, then read the UUID back:
chirpie accounts --jsonLinkedIn tokens refresh automatically, so this is a one-time setup.
Step 2 — Write the scheduling script
import { ChirpieClient } from "@chirpie/sdk";
const chirpie = new ChirpieClient({ apiKey: process.env.CHIRPIE_API_KEY! });
const accountId = process.env.LINKEDIN_ACCOUNT_ID!;
const week = [
{ day: "2026-09-07", time: "09:00", text: "Monday: the one metric we stopped tracking, and why our roadmap got clearer." },
{ day: "2026-09-08", time: "09:00", text: "Tuesday: three questions we ask before adding any new integration." },
{ day: "2026-09-09", time: "09:00", text: "Wednesday: what a week of on-call taught us about retry logic." },
{ day: "2026-09-10", time: "09:00", text: "Thursday: hiring note — we look for people who write before they build." },
{ day: "2026-09-11", time: "09:00", text: "Friday: shipping log. Five things that went out this week." },
];
for (const slot of week) {
const post = await chirpie.createPost({
account_id: accountId,
text: slot.text,
schedule_at: `${slot.day}T${slot.time}:00Z`,
});
console.log(`${slot.day} → ${post.id} (${post.status})`);
}Every schedule_at must be a future ISO 8601 timestamp, and everything is UTC. If you think in local time, convert before you send.
Step 3 — Let the agent do the drafting too
If you are working in Claude Code, Cursor, or any MCP-capable client, add the server:
npm install -g chirpie
chirpie login
claude mcp add chirpie -- npx @chirpie/mcpThen hand over the whole task in one prompt:
Draft five LinkedIn posts about our scheduler rewrite — one per weekday, under 1,200 characters each, no hashtags. Schedule them for 9:00 UTC each day next week on my LinkedIn account.
The agent calls chirpie_list_accounts to resolve the LinkedIn UUID, then chirpie_post five times with schedule_at. Ask it to list the drafts back before it schedules if you want a review gate.
What are the scheduling rules?
| Rule | Detail |
|---|---|
| Format | ISO 8601, UTC, must be in the future |
| Publish window | Within about five minutes of the target time |
| Minimum spacing | Five minutes between scheduled posts on the same account |
| Retries | Up to three attempts, five minutes apart |
| Status flow | scheduled → publishing → published (or failed) |
Scheduling two posts less than five minutes apart on the same account returns a 400 with code bad_request. Spread a "post every minute" plan out, or the batch will fail partway through.
Scheduled posts also draw on a separate monthly quota that scales with your plan. See rate limits and quotas for the current numbers.
How do you schedule a thread instead?
LinkedIn has no native threading, so each item in a thread publishes as its own standalone post. That is still useful for a multi-part narrative — send them as a thread and Chirpie handles the sequencing:
await chirpie.createThread({
account_id: accountId,
posts: [
{ text: "Part 1: why we rewrote our scheduler." },
{ text: "Part 2: the compare-and-swap guard that killed duplicate publishes." },
{ text: "Part 3: what we would do differently." },
],
schedule_at: "2026-09-14T09:00:00Z",
});A thread counts as N posts against both your post quota and your scheduled quota. Threads publish atomically — if one post fails, the whole thread is rescheduled for retry.
How do you review and cancel what is queued?
# Everything currently scheduled
curl "https://chirpie.ai/api/v1/posts?status=scheduled&limit=50" \
-H "Authorization: Bearer chirpie_sk_YOUR_KEY"
# Cancel one
curl -X DELETE https://chirpie.ai/api/v1/posts/POST_ID \
-H "Authorization: Bearer chirpie_sk_YOUR_KEY"Deleting a post before its scheduled time cancels it. From an agent, that is "show me what's scheduled for next week" followed by "drop Thursday's."
LinkedIn specifics worth telling the agent
- Max post length is 3,000 characters.
- Up to 4 images per post (JPEG, PNG, GIF, 8 MB each). No video.
- Pass images as public URLs in
media_urls; for scheduled posts, Chirpie stores the media at schedule time so expiring URLs are not a problem.
FAQ
Can I schedule months ahead? Yes. Any future timestamp works, subject to your monthly scheduled-post quota.
What time zone does schedule_at use?
UTC, always. Convert local times before sending.
What happens if LinkedIn is down at publish time?
The post retries up to three times, five minutes apart, then is marked failed with an error_message.
Can one script schedule to LinkedIn and X at once?
Yes — loop over multiple account_id values. Same endpoint, same payload shape.
Does a scheduled post count twice? It counts once against your monthly posts and once against your scheduled-posts quota.
How do I know a post went out?
Poll GET /api/v1/posts/:id or list with status=published. Published posts carry a platform_post_id and published_at.
Next steps
Post to Bluesky and Mastodon from Claude Code
Wire the Chirpie MCP server into Claude Code so you can post to Bluesky and Mastodon without leaving your terminal.
Post to Social Media from n8n
Use the n8n HTTP Request node to publish to X, Bluesky, LinkedIn, and more through the Chirpie API — with an importable workflow.