Skip to content

Drafts

Save a notification as a draft with the API, change it as often as you like, then send it.

Save a notification without sending it, change it as often as you like, then send it. A draft is never queued, never counted against the send limits, never listed in the on-site inbox and never reported to webhooks.

RequestWhat it does
POST /api/v1/notifications with "draft": trueSaves the other fields (the same ones as a send) as a draft. The title may be empty and nothing is checked yet. Answers 201 { "ok": true, "notificationId": "…", "status": "draft" }. A website can keep up to 500 drafts (409 too_many_drafts), each up to 256 KB (413 draft_too_large).
PATCH /api/v1/notifications/:idChanges the fields you send; the others stay as they were. A field sent as null is cleared. Answers 200 { "ok": true, "notificationId", "status": "draft", "sendBody": { … } }, sendBody being the draft's fields now.
POST /api/v1/notifications/:id/sendSends the draft with exactly the checks, limits, quiet hours and sendAt scheduling of a normal send, and answers the same way (202, 400, 403, 429). Fields in the body replace the draft's for this send. The notification keeps its id, and its date becomes the moment it was sent. A sendAt that has passed sends now.
DELETE /api/v1/notifications/:idDeletes the draft: 200 { "ok": true, "deleted": true }.

A notification that isn't a draft answers 409 not_a_draft to PATCH, /send and DELETE; an id that isn't one of this website's answers 404 not_found. To read a draft back, use GET /api/v1/notifications/:id: its sendBody holds the saved fields. Drafts are listed with ?status=draft.

Shell
curl -X POST https://relaybell.com/api/v1/notifications \
  -H "Authorization: Bearer rb_live_xxxxx" -H "Content-Type: application/json" \
  -d '{ "draft": true, "title": "Autumn sale", "body": "Up to 30% off" }'

curl -X POST https://relaybell.com/api/v1/notifications/5b0c2f7e-1d7a-4c3e-9a51-2f8e6b1d0c42/send \
  -H "Authorization: Bearer rb_live_xxxxx" -H "Content-Type: application/json" \
  -d '{ "sendAt": "2026-11-01T09:00:00Z" }'