Schedule everywhere, from one place.
One composer. Every channel. On schedule.
Upload your media, write the post once, pick the accounts, and set the time. A real scheduler publishes it while you sleep — and an API lets your own tooling do the same.
You upload your own media. Nothing here is generated for you.
Schedule with intent
Pick a date, a time and a timezone. Everything is stored in UTC and shown back in yours, so 9am means 9am wherever you are.
A scheduler that actually runs
A dedicated worker claims due posts with row-level locks, retries with exponential backoff, and records the exact error when a channel rejects a post.
Built for automation
A documented REST API with bearer keys covers the whole product — upload media, create posts, cancel, retry, inspect status. No cookies, no CSRF dance.
Drive it from your own tooling
Every action in the dashboard is also a documented REST call. Generate a key in Settings, then upload media, queue posts, cancel or retry them — all with a bearer token. No cookies, no CSRF handshake, no browser required.
- Versioned endpoints under /api/v1
- Machine-readable error codes and Zod-validated inputs
- Idempotency keys so a retried call never double-posts
- Provider capabilities are discoverable at runtime
curl -X POST $BASE/api/v1/posts \
-H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" \
-d '{
"content": "Doors open at 9.",
"assetIds": ["ast_..."],
"accountIds": ["acct_..."],
"scheduledAt": "2026-09-07T09:00:00",
"timezone": "Europe/Lisbon"
}'