Scheduled sending
Any send accepts a scheduled_at field (RFC3339). bZapper holds the message and
fires it at the exact time — no cron on your server, no process to keep alive.
How it works
Add scheduled_at to any send endpoint (/messages/text, /messages/image, etc.).
The rest of the payload is the same as a normal send.
curl -X POST https://api.bzapper.com.br/messages/text \
-H "Authorization: Bearer $BZ_KEY" -H "X-Project-Id: $PROJECT" \
-H "Content-Type: application/json" \
-d '{
"to": "+5511999990000",
"body": "Good morning! ☀️",
"scheduled_at": "2026-07-01T09:00:00Z"
}'
202 response:
{ "scheduled_id": "...", "status": "scheduled", "scheduled_at": "2026-07-01T09:00:00Z" }
The number is chosen at send time
Number selection (affinity/rotation) happens at promotion, not at scheduling — so the message never lands on a number that went offline afterwards.
Scheduling window by plan
| Plan | Maximum lead time |
|---|---|
| Free | 24 hours |
| Pro | 30 days |
| Pro + "Extended scheduling" add-on | 1 year |
Exceeding the limit returns 400 scheduled_too_far. OTP cannot be scheduled
(short-lived codes).
List and cancel
# list the project's scheduled sends
curl https://api.bzapper.com.br/messages/scheduled \
-H "Authorization: Bearer $BZ_KEY" -H "X-Project-Id: $PROJECT"
# cancel a pending scheduled send
curl -X DELETE https://api.bzapper.com.br/messages/scheduled/$SCHEDULED_ID \
-H "Authorization: Bearer $BZ_KEY" -H "X-Project-Id: $PROJECT"
Endpoints
| Method | Path | What it does |
|---|---|---|
| POST | /messages/* with scheduled_at | Schedule the send (202 scheduled) |
| GET | /messages/scheduled | List scheduled sends |
| DELETE | /messages/scheduled/{id} | Cancel a pending scheduled send |