How to schedule appointment messages for clients on WhatsApp so you never forget
"I'll message you Tuesday" is the promise most often lost at agencies and in support: nobody writes it down, the day passes and the lead goes cold. Scheduling the message the moment the commitment is born solves the forgetting without relying on anyone's memory. ZapZap has scheduling inside the chat and by API. This guide shows both paths, what is worth scheduling and the care needed so scheduling does not turn into mass sending. ZapZap is an unofficial API: WhatsApp may limit numbers that send unwanted messages.
Published on · 3 min read
Scheduling inside the chat: the agent's path
In the conversation panel there is a Schedule action. The agent picks the date and time and writes the message (or attaches the media), and it goes into a list of scheduled messages for that conversation, which can be viewed, edited or canceled. It suits what is born mid-conversation: "follow-up tomorrow at 10", "I'll send the proposal Friday", "a reminder about your appointment".
The gain for the agency is in process: the commitment stops living in the memory of whoever handled the chat and exists in the system, visible to whoever takes over the conversation later.
Scheduling by API: the automation path
For reminders that come from another system (calendar, CRM, billing), the simple send accepts the scheduled_for field, a timestamp in milliseconds. The example below schedules a message to one number and returns a folder_id, which lets you track the campaign. Mind the time zone: compute the timestamp from the client's local date.
The numbers field is a list (as JSON text) and the delayMin and delayMax delays, in seconds, space out the sends. Even for a single reminder, keep these fields, because the same call serves larger lists.
Schedule a message and check its status
# Schedule for 2026-11-12 10:00 (UTC-3): compute the timestamp in milliseconds
SCHEDULED_FOR=$(date -d "2026-11-12 10:00:00 -0300" +%s)000
curl -X POST "https://api.zapzapapi.com/api/v1/$ZAPZAP_INSTANCE/sender/simple" \
-H "Content-Type: application/json" \
-H "x-api-key: $ZAPZAP_API_KEY" \
-H "x-api-secret: $ZAPZAP_API_SECRET" \
-d "{\"numbers\":\"[\\\"5511999999999\\\"]\",\"type\":\"text\",\"text\":\"Oi! Lembrando do nosso retorno hoje as 10h.\",\"folder\":\"retornos\",\"delayMin\":5,\"delayMax\":12,\"scheduled_for\":$SCHEDULED_FOR}"
# Example answer: {"count":1,"folder_id":"r37d5cc380a7f31","status":"queued"}
# Later, list campaigns to see status and counters (log_total, log_delivered, log_read, log_failed)
curl "https://api.zapzapapi.com/api/v1/$ZAPZAP_INSTANCE/sender/listfolders" \
-H "x-api-key: $ZAPZAP_API_KEY" -H "x-api-secret: $ZAPZAP_API_SECRET"What is worth scheduling
It is worth scheduling what the contact already expected: an agreed follow-up, an appointment or meeting reminder, a promised proposal, a due-date notice to a customer, a follow-up on a quote they requested. In all of these, there is a prior conversation and a clear reason for the message.
It is not worth scheduling a blast to someone who has never talked to you. Scheduling does not make a message expected, it only changes when it goes out. ZapZap's acceptable use requires consent from the recipient: see the acceptable use policy and the guide on legal mass messaging and the LGPD.
Pace and timing cautions
Scheduling many things for the same minute creates a spike a human agent would not make. Spread out the times, keep delays between messages and respect the contact's business hours. A new number still warming up should not get a schedule of sends to strangers: see chip warm-up.
Confirm the recipient's time zone. Reminding someone of an appointment at 10 a.m. in the wrong time zone becomes a useless message and one more reason to mute the number.
Building the agency routine
A simple routine: the agent schedules every agreed commitment in the chat, the CRM schedules by API the reminders for known events, and a weekly check reviews the list of scheduled campaigns per client. For the broader flow of automatic reminders, see scheduling WhatsApp messages automatically and the page for agencies.
Quick summary
- Schedule the commitment when it is born: inside the chat (Schedule) or by API.
- By API, the simple send accepts scheduled_for in milliseconds and returns a folder_id to track.
- Schedule what the contact already expected; scheduling does not replace consent.
- Spread out times, keep delays and confirm the recipient's time zone.
- The list of scheduled messages per client belongs in the weekly review.
Keep reading
Also read
Frequently asked questions
Can I schedule messages inside the chat?
Yes. The conversation has a Schedule action, with date and time. The conversation's scheduled messages sit in a list, where they can be edited or canceled.
How do I schedule by API?
Use POST /{instanceId}/sender/simple with numbers, type, delayMin, delayMax and scheduled_for (timestamp in milliseconds). The response carries a folder_id, and GET /{instanceId}/sender/listfolders shows the status and counters.
Can I schedule blasts to a cold list?
It is not recommended and the acceptable use policy requires consent. Scheduling does not make the message expected.
Which time zone does the API use?
scheduled_for is an absolute timestamp in milliseconds, so the time zone is in the calculation you make when generating it. Compute it from the client's local date.
Does scheduling prevent a ban?
No. It prevents forgetting. The risk of the unofficial channel remains, and pace, consent and warm-up are what reduce it.
Stop losing agreed commitments
Create the account, connect a number and schedule your first message in the chat. R$15 per active number per month, no per-message fee. Verify your phone and you get a welcome credit, subject to the current campaign.
