Public API
A small, predictable JSON API for drafting and scheduling posts from programs, scripts and AI agents. Designed to be hand-callable from curl and machine-friendly enough for an LLM to consume.
Base URL
https://postme.live/api/v1One-minute quickstart
- Open Settings → Developers and create an API key. Copy it once — we only store its hash.
- Discover your channels:
bash curl https://postme.live/api/v1/channels \ -H "Authorization: Bearer pml_live_<lookup>_<secret>" - Create a post (lands as a draft in v1):
bash curl -X POST https://postme.live/api/v1/posts \ -H "Authorization: Bearer pml_live_<lookup>_<secret>" \ -H "Idempotency-Key: $(uuidgen)" \ -H "Content-Type: application/json" \ -d '{ "caption": "We just shipped v0.20!", "channels": [{ "id": "<channel-id-from-step-2>" }] }' - Review the draft at the
review_urlreturned in the response, or in the dashboard, and publish from there.
Drafts by default, scheduling opt-in
Posts created through the API are persisted with status: "draft" unless you pass scheduled_for — then they're queued and publish automatically at that time (ISO 8601, at least 2 minutes ahead, at least one media item; consumes one post-quota slot). See Posts → Scheduling. Immediate "post now" stays locked while the API stabilises.
Use the explicit POST /drafts endpoint in code that should always be draft-only — it rejects scheduled_for.
Conventions
- Auth. Every request needs
Authorization: Bearer pml_live_…. - Idempotency. Every write needs an
Idempotency-Keyheader. Replays return the original response for 24h. - Encoding. Request and response bodies are JSON (
application/json) unless explicitly multipart. - Naming. JSON keys are
snake_case. Timestamps are RFC-3339 in UTC. Ids are UUIDv4. - Status.
2xxis success,4xxis your fault,5xxis ours. See Errors. - Rate limit. Plan-based, per key — 5 req/min on Free, 50 on Community. See Rate limits.
Machine-readable spec
The OpenAPI 3.1 spec is the contract: it's what we test against and what we generate clients from.
Download openapi.yaml · paste into editor.swagger.io for an interactive view.