ChirpieDocs
Guides

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 --json

LinkedIn 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/mcp

Then 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?

RuleDetail
FormatISO 8601, UTC, must be in the future
Publish windowWithin about five minutes of the target time
Minimum spacingFive minutes between scheduled posts on the same account
RetriesUp to three attempts, five minutes apart
Status flowscheduledpublishingpublished (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

On this page