[relaybell docs › Sending › Drafts](https://relaybell.com/docs/drafts) · [All docs as Markdown](https://relaybell.com/docs.md) · [Index for AI assistants](https://relaybell.com/llms.txt)

# 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](https://relaybell.com/docs/errors-limits#rate-limits), never listed in the on-site inbox and never reported to webhooks.

| Request | What it does |
| --- | --- |
| **POST** `/api/v1/notifications` with `"draft": true` | Saves 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/:id` | Changes 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/send` | Sends 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/:id` | Deletes 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`](https://relaybell.com/docs/analytics-reports#notification-detail): its `sendBody` holds the saved fields. Drafts are listed with [`?status=draft`](https://relaybell.com/docs/analytics-reports#notifications-list).

```bash
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" }'
```
