DEVELOPER REFERENCE
One workspace. Explicit scopes.
Create and revoke keys in Settings → API access. Keep keys on your server. Never put them in a public browser application.
Authentication and limits
Send Authorization: Bearer pr_… or x-postroom-api-key: pr_… . Browser preflight is supported; keep credentials server-side in your own integration. Keys expire after one year, are limited to their owner workspace, and allow only selected read, preview or schedule operations. Each key allows 30 requests per minute, including cached retries. Writes require an Idempotency-Key of 8–128 letters, digits or -_.: . Reuse that key only for a retry of the same method, path and exact JSON input. Responses are retained for 30 days. A conflicting body returns 409. A pending or uncertain request is held; inspect its saved preview before acting again.
| Method / path | Scope | Input |
|---|---|---|
| GET /api/v1/accounts | read | None |
| GET /api/v1/brand | read | None |
| GET /api/v1/queue | read | Optional account_id |
| GET /api/v1/posts/:id | read | Saved post UUID |
| POST /api/v1/workflow | preview (+ read for requested context) | drafts (1–5, one account each); optional include_accounts/include_brand; Idempotency-Key required |
| POST /api/v1/preview | preview | account_ids, caption, format, scheduled_at; channel-specific fields and owned uploaded media |
| POST /api/v1/schedule | schedule | draft_id, confirmation: approve_exact_preview; optional brand_override: acknowledge_brand_rule_violations only after explicit warning acknowledgment |
| GET /api/v1/post_status?post_id=… | read | post_id |
| POST /api/v1/cancel | schedule | post_id |
| POST /api/v1/automate | schedule | draft_id; requires a separately enabled workspace automation policy |
Preview → approval → status
For a single-turn batch, use POST /api/v1/workflow (MCP: yet_run_workflow with workflow_key). It saves 1–5 independent channel previews, optionally returning current accounts and complete brand guidance. Inspect every item status and receipt. This does not infer account IDs, execute code or schedule posts. Retry identical input with the same key to recover; expired or changed drafts require a new key and review. OpenAPI 3.1 specification.
List accounts first. Request a preview with a future ISO timestamp and explicit timezone offset. Review every returned caption, destination, media URL, schedule and deterministic assessment. Failed previews remain visible for correction. Only after a person approves the exact preview, send its draft_id and confirmation to schedule. This queues records; it does not claim publication. Query each returned post ID for the provider-confirmed result. Previews expire after one hour. Changing content requires a new preview and approval.
{
"account_ids": [
"returned-account-id"
],
"caption": "An original sample post",
"format": "text",
"scheduled_at": "2030-01-01T09:00:00Z",
"timezone": "UTC"
}Instagram requires supported media. Pinterest also requires title and selected board_id/board_ids. Use your workspace-uploaded media URLs; external arbitrary fetches are rejected. REST previews preserve original media: upload a prepared image to change its ratio. Optional writing_assessment_consent: true authorizes sending the draft and saved voice/reference examples to TypeSafe. Failure or missing configuration returns assessment_status: unavailable.
Optional automation
Automation is off by default. A workspace owner must enable it in Settings, choose channels and a 1–100 item daily UTC cap, and consent to TypeSafe assessment. The automate operation checks the exact saved records again. Platform and brand rules must pass; clarity and alignment must each be at least 3 on the provider’s 0–4 scale, confidence at least 0.8, and guideline adherence probability at least 0.8. Missing, uncertain or failing assessments return held_for_human_review and never schedule. TikTok is excluded. A high score cannot enable automation or replace the workspace opt-in.
Current API access is owner-scoped. Selecting an inactive workspace brand does not create a different publishing identity or expose another owner’s data.