Core concepts

Scheduling & the queue

Add one field to publish later instead of now. Posts sit in a queue and a publisher ships them at the right moment — no separate scheduling API to learn.

The schedule_at field

Include schedule_at in Create a post to queue it. Omit it and the post publishes immediately. Three formats are accepted:

FormatExampleNotes
Unix seconds1785535200Values below 1e12 are read as seconds.
Unix milliseconds1785535200000Values at or above 1e12 are read as milliseconds.
ISO 8601"2026-08-01T09:00:00Z"Include a Z or offset (see time zones below).
{
  "caption": "Scheduled from the queue ⏰",
  "platforms": ["bluesky", "telegram"],
  "schedule_at": "2026-08-01T09:00:00Z"
}

Scheduling rules

schedule_at must be in the future — up to 60 seconds of clock skew is tolerated, but anything earlier is rejected with 400. A value that can’t be parsed as a timestamp or ISO date is also a 400. See Errors & responses.

The queue

A scheduled post is stored with status: "scheduled". A publisher runs every minute, finds posts whose schedule_at has passed, and publishes them through the exact same engine as an immediate post. In practice a post ships within about a minute of its scheduled time.

To confirm it went out, poll Get a post until status is published and published_at is set.

Canceling a scheduled post

Call Delete or cancel a post any time before it ships. The scheduled post is removed and will never publish. The same call deletes an unsent draft.

curl -X DELETE https://postmyish.com/api/v1/posts/post_7d1a9c8b \
  -H "Authorization: Bearer $POSTMYISH_KEY"

Time zones

Timestamps are absolute moments in time. Unix values are UTC by definition; for ISO 8601, always include a Z or an explicit offset (for example 2026-08-01T09:00:00-04:00) so there’s no ambiguity about which 9am you meant.

One-shot, not recurring

  • Each post schedules a single publish. There are no recurring rules.
  • To post on a cadence, create a post per occurrence — the scheduler recipe shows a loop that does exactly this.