Create Post
create_postCreates one post for X, LinkedIn or Threads and saves it as a draft (status=draft) with an optional proposed time; nothing is scheduled or published until confirm_post approves it. platform=bluesky or mastodon returns an error and saves nothing, because publishing to them isn't available yet. A scheduled_date is stored as the proposed publish time. Without one, and with auto_slot on (the default), Handler proposes the next open slot inside the founder's posting window for that platform, honoring daily caps (5 X / 3 Threads / 2 LinkedIn per day) and spacing (90min / 2h / 4h); the response's slot_assignment holds the proposed time and a rationale string. auto_slot: false saves a dateless draft. With an idempotency_key, a retry with the same key replays the original response instead of creating a duplicate. Multi-part threads (X and Threads): parts separated by a line containing only --- publish as one thread, one part per post; without ---, the content publishes as a single post. X allows 280 characters per post; a longer single post needs the founder-confirmed X long-post setting and an account that supports it, and FeedSquad never splits it into a thread. A thread exists only with --- on its own line between parts, and every part must be 280 characters or fewer. Content is capped at 3,000 characters. Every response carries status_before, status_after and approval_required.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"content": "<content>"
},
"name": "create_post"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Optional title for the post | |
| content | Yes | The post content (max 3000 characters) | |
| dry_run | No | When true, the call validates inputs and checks capacity without writing, and returns what would happen. | |
| platform | No | Target platform: linkedin, x (twitter is an alias), or threads. bluesky and mastodon are accepted for compatibility but return an error: publishing to them isn't available yet. | |
| auto_slot | No | When true (default) and scheduled_date is omitted, Handler proposes the next available slot, honoring per-platform daily caps (5 X / 3 Threads / 2 LinkedIn) and spacing (90min / 2h / 4h); the post is saved as a draft with that proposed time. false keeps the post as a dateless draft (no proposal). | |
| campaign_mode | No | Activates Handler campaign mode: spacing rules are relaxed for 48 hours (a launch-day override). Daily caps stay enforced (5 X / 3 Threads / 2 LinkedIn). While the window is active, later auto-slotted posts inherit the relaxation. | |
| scheduled_date | No | Optional future publish time to propose, ISO 8601. With an offset or Z it is used exactly as sent; without one (e.g. 2026-10-22T08:45) it is read in the founder's timezone (the timezone field of scheduling responses) and the response's time_input says so. The time is kept exactly as given, to the minute. The post is saved as a draft either way; the time is committed only when the draft is approved. When omitted, auto_slot decides whether Handler proposes a slot. | |
| company_page_id | No | ||
| idempotency_key | No | ||
| connector_account_id | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| quota | No | ||
| title | No | ||
| health | No | ||
| notice | No | ||
| status | Yes | ||
| content | Yes | ||
| dry_run | No | ||
| draft_id | Yes | ||
| platform | Yes | ||
| timezone | No | ||
| char_count | Yes | ||
| server_now | No | ||
| time_input | No | ||
| status_after | No | ||
| would_create | No | ||
| campaign_mode | No | ||
| dashboard_url | No | ||
| status_before | No | ||
| approval_reset | No | ||
| scheduled_date | No | ||
| scheduled_local | No | ||
| slot_assignment | No | ||
| timezone_source | No | ||
| approval_required | No |