LittlePoster.ai

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.

v1 (stable)Base URL: api.littleposter.aiOpenAPI spec

Quickstart

Three calls, one minute

If you can run curl, you can ship a scheduled post in your next coffee break.

curl · bashQuickstart
# 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.

POST/v1/postsCreate a draft or scheduled post.
GET/v1/posts/{id}Fetch a post and its variants.
POST/v1/posts/{id}/scheduleMove a draft into the queue.
POST/v1/posts/{id}/publishPublish a draft immediately.
GET/v1/channelsList connected channels for the workspace.
GET/v1/channels/{id}/analyticsAggregate metrics for a channel over a window.
GET/v1/commentsList inbox comments, normalized across networks.
POST/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.
JSON · post.publishedWebhook payload
{
  "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.