Developers

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.

Already have an account? Issue an API key and follow the connect-your-agent quick start in Settings → Developers.

Open Settings → Developers

Base URL

http
https://postme.live/api/v1

One-minute quickstart

  1. Open Settings → Developers and create an API key. Copy it once; we only store its hash.
  2. Discover your channels:
    bash
    curl https://postme.live/api/v1/channels \
      -H "Authorization: Bearer pml_live_<lookup>_<secret>"
  3. 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>" }]
      }'
  4. Review the draft at the review_url returned 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 (ISO 8601, at least 2 minutes ahead) or publish_now: true — both create a queued post and consume one post-quota slot. Content rules are per-platform: text-only posts publish fine to Facebook and webhooks; Instagram and YouTube need media. See Posts → Scheduling.

Create a draft, review or revise it with PATCH /posts/{id}, then publish the same draft by patching in scheduled_for or publish_now. To keep something draft-only, simply omit both when creating.

Conventions

  • Auth. Every request needs Authorization: Bearer pml_live_….
  • Idempotency. Every write needs an Idempotency-Key header. 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. 2xx is success, 4xx is your fault, 5xx is ours. See Errors.
  • Rate limit. Plan-based, per key: 5 req/min on Free, 30 on Solo and Agency (per brand workspace). 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.

Public API: Overview · postme.live