Check it, then schedule it.
posts.check runs each network's rules on your draft without saving anything; posts.create schedules it. The same tools the app uses, so nothing your code sends is treated differently.
- POST /v1/posts/check and /v1/posts
- Idempotency keys and cursor pagination
- Signed webhooks with retries
POST /v1/posts/check { "body": "Tidepool 2.0 is live.", "channelIds": ["<bluesky>", "<threads>"] } POST /v1/posts { "body": "Tidepool 2.0 is live.", "channelIds": ["<bluesky>", "<threads>"], "schedule": { "local": "2026-03-03T09:00", "zone": "America/Toronto" } }