Register an HTTPS URL once viaDocumentation Index
Fetch the complete documentation index at: https://docs.letmepost.dev/llms.txt
Use this file to discover all available pages before exploring further.
POST /v1/webhook-endpoints and we’ll deliver signed JSON for every event. No polling.
Event types
| event | when |
|---|---|
post.queued | scheduled post accepted; job enqueued |
post.validated | preflight passed (currently fired together with post.queued on schedule) |
post.published | upstream returned success |
post.rejected | preflight or platform rejected; not retried |
post.failed | transient failure; the worker may retry |
token.expiring | platform token approaching expiry |
token.revoked | platform token rejected by upstream |
version.deprecated | upstream platform announced an API version sunset |
WEBHOOK_EVENT_TYPES in packages/schemas/src/webhook-events.ts. Adding an event is non-breaking; removing one is breaking and shows up in the changelog.
Envelope
Every delivery has the same outer shape:envelope.json
data field is the only thing that varies between event types. The envelope is stable so consumers can write one verifier and one router.
Signature verification
Every delivery includes:v1 is HMAC-SHA256(secret, t + "." + raw_body) in hex. Verify before parsing the body:
verify.ts
X-Letmepost-Delivery ids — at-least-once is the contract.
Retries
Delivery is retried with exponential backoff for any non-2xx response. After ~5 attempts the delivery is dropped and surfaces in the dashboard’s webhook log. Respond2xx quickly — within 5 seconds. Defer your work to a background queue if it takes longer.
Replay window
Reject deliveries wheret is more than 5 minutes from now. That window catches replay attacks while tolerating clock skew.
See also
- Per-event pages link from the table above for the exact
datashape. POST /v1/webhook-endpointsreference.