API
A REST API that does what the dashboard does.
Compose, schedule, publish, and analyze posts from your own systems. Same primitives, same guarantees, no special API plan.
Quickstart
Three calls, one minute
If you can run curl, you can ship a scheduled post in your next coffee break.
# 1. Create a personal access token in Settings → Developers
export LP_TOKEN="lp_live_…"
# 2. List your channels
curl https://api.littleposter.ai/v1/channels \
-H "Authorization: Bearer $LP_TOKEN"
# 3. Schedule a post to two of them
curl https://api.littleposter.ai/v1/posts \
-H "Authorization: Bearer $LP_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"scheduled_at": "2026-05-15T09:00:00Z",
"variants": [
{ "channel_id": "ch_01HX...", "body": "Hello, world!" },
{ "channel_id": "ch_01HX...", "body": "Hello on LinkedIn." }
]
}'What you get
A boring, predictable API
Calm software needs calm APIs. No surprises, no hand-rolled auth, no “v2 is coming soon” vapor.
Bearer auth with scoped tokens
Personal access tokens scope to the workspaces you select, with read or write per resource. No OAuth dance for first-party use.
Idempotent writes
Send an Idempotency-Key header on POST requests; we de-duplicate on it for 24 hours so retries are safe.
Webhooks for everything that ships
Subscribe to post.published, post.failed, channel.needs_reauth, and comment.created. Each delivery is HMAC-signed.
OpenAPI 3.1 spec
Full machine-readable spec at /v1/openapi.json. Generate clients with the tooling of your choice.
Endpoints
A peek at the surface
The full reference covers query params, response shapes, and error codes. This is the highlights reel.
/v1/postsCreate a draft or scheduled post./v1/posts/{id}Fetch a post and its variants./v1/posts/{id}/scheduleMove a draft into the queue./v1/posts/{id}/publishPublish a draft immediately./v1/channelsList connected channels for the workspace./v1/channels/{id}/analyticsAggregate metrics for a channel over a window./v1/commentsList inbox comments, normalized across networks./v1/comments/{id}/replyReply to an inbox comment.Webhooks
Listen for what your code cares about
Subscribe in Settings → Developers, give us a URL, and we’ll POST a signed JSON event the moment something interesting happens.
post.published— a scheduled variant went live.post.failed— a publish attempt exhausted its retries.channel.needs_reauth— tokens were rejected and the channel is paused.comment.created— a new inbox item was normalized.
{
"id": "evt_01HX9F2K3M4N5P6Q7R8S9T0V1W",
"type": "post.published",
"created_at": "2026-05-14T09:00:13Z",
"data": {
"post_id": "po_01HX9F2K3M4N5P6Q7R8S9T0V1W",
"channel_id": "ch_01HX9F2K3M4N5P6Q7R8S9T0V1W",
"external_post_id": "1857291...",
"permalink": "https://x.com/acme/status/1857291..."
}
}Ready to build?
Personal access tokens are free on every plan, including Free.