Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.letmepost.dev/llms.txt

Use this file to discover all available pages before exploring further.

Fires when an operator cancels a queued scheduled post via DELETE /v1/posts/:id. The BullMQ job is removed and the row transitions to status: "canceled" before this event dispatches. The event does not fire for posts that reached rejected or failed through the normal publish path — those carry their own events. post.canceled is specifically the operator-initiated cancellation signal.

Payload

post.canceled.json
{
  "id": "evt_...",
  "type": "post.canceled",
  "createdAt": "2026-05-08T11:55:00Z",
  "organizationId": "org_...",
  "data": {
    "id": "post_...",
    "platform": "bluesky",
    "accountId": "...",
    "profileId": "...",
    "scheduledAt": "2026-05-08T12:00:00Z",
    "canceledAt": "2026-05-08T11:55:00Z"
  }
}
scheduledAt is the time the post would have fired if it hadn’t been canceled. canceledAt is when the cancellation was accepted.

Use it for

  • Reverting any pre-publish work you queued in anticipation (CMS draft state, scheduled announcements, attribution links).
  • Notifying upstream tools that the planned post won’t go out.
  • Audit trail: pair with post.queued to reconstruct the full lifecycle of any scheduled item.

Cancellation race

If you receive post.canceled before the platform-side post would have fired, that’s the expected path. If you receive it after a post.published event for the same post.id, ignore the cancel — the worker had already finalized the publish and the cancellation arrived too late to stop it. The API’s window gate (status=queued AND scheduledAt > now) makes this race vanishingly rare, but consumers should still handle it idempotently.