Send recurring WhatsApp reminders with the API
Send the same WhatsApp message on a schedule – monthly rent, a weekly timetable, a daily check-in – from your own number. Create the reminder once with a cron expression and a timezone, and WbizTool queues the message each time it matches. Reminders are part of every paid plan, from $25 a month in the US (your price is on Pricing).
Reminders need a paid plan: from $25 a month in the US.
How it works
Get your API key and link your number
Link your WhatsApp number on the WhatsApp numbers page with a QR code or a pairing code, and create a key on Settings → API keys. Reminders need a paid plan (Lite, Standard, Advanced or Enterprise).
Pick the schedule
Write it as a five-field cron expression:
0 10 1 * *is 10:00 on the 1st of every month,0 9 * * 1-5is 9:00 on weekdays. Add an IANA timezone such asAsia/Kolkata.Create the reminder
POST to
/api/v1/reminder/create/withreminder_name,phone,message,cron_expressionandtimezone. Save thereminder_idfrom the reply.List or cancel it later
/api/v1/reminder/list/returns your reminders, 50 per page./api/v1/reminder/cancel/with thereminder_idstops one for good – for example when the customer pays.
Reminder API code examples
curl -X POST https://wbiztool.com/api/v1/reminder/create/ \
-H "Content-Type: application/json" \
-d '{
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"whatsapp_client": 678,
"reminder_name": "Monthly rent reminder",
"phone": "919876543210",
"message": "Hi Aman, a reminder that your rent is due on {current_date_formatted}.",
"cron_expression": "0 10 1 * *",
"timezone": "Asia/Kolkata"
}'import requests
response = requests.post(
"https://wbiztool.com/api/v1/reminder/create/",
json={
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"whatsapp_client": 678,
"reminder_name": "Monthly rent reminder",
"phone": "919876543210",
"message": "Hi Aman, a reminder that your rent is due on {current_date_formatted}.",
"cron_expression": "0 10 1 * *",
"timezone": "Asia/Kolkata",
},
timeout=60,
)
try:
result = response.json() # read the body even when the HTTP code is 400
except ValueError:
raise SystemExit(f"HTTP {response.status_code}: not JSON. Send every text value as a string.")
if result["status"] == 1:
print("Reminder created with reminder_id", result["reminder_id"])
else:
print("Failed:", result["message"])import requests
response = requests.post(
"https://wbiztool.com/api/v1/reminder/create/",
json={
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"whatsapp_client": 678,
"reminder_name": "Weekly class timetable",
"phone": "919876543210",
"msg_type": 1,
"img_url": "https://example.com/timetable.png",
"message": "Here is this week's timetable.",
"cron_expression": "0 8 * * 1",
"timezone": "Asia/Kolkata",
},
timeout=60,
)
print(response.status_code, response.text)curl -X POST https://wbiztool.com/api/v1/reminder/list/ \
-H "Content-Type: application/json" \
-d '{
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"page": 1
}'curl -X POST https://wbiztool.com/api/v1/reminder/cancel/ \
-H "Content-Type: application/json" \
-d '{
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"reminder_id": "3187"
}'What you can do
Any schedule cron can say
Daily at 9:00 (
0 9 * * *), every Monday (0 9 * * 1), twice a day (0 9,18 * * *), the 15th of each month (0 10 15 * *) or every 6 hours (0 */6 * * *).Dates filled in for you
Template variables such as
{current_date_formatted},{current_time_12h}and{reminder_name}are replaced each time the reminder runs, in its own timezone.Images and files
msg_type1 sends an image fromimg_url. For a file, usemsg_type2 with the file's public URL inimg_urland its name infile_name.Visible in your dashboard
Reminders made through the API also appear on the Reminders page, where you can pause or edit them. That page can also import many reminders from a CSV or Excel sheet.
Sends from the number you choose
Set
whatsapp_clientto pick the number. Leave it out and each run uses a number that's connected at that moment.
Good to know
- Reminders need a paid plan. On the free trial the API answers
Upgrade your plan to use reminders feature. - Use IANA timezone names such as
Asia/KolkataorAmerica/Chicago. Abbreviations likeISTorCSTare refused withInvalid timezone; without a timezone, the schedule runs in UTC. phonetakes the number with its country code, such as 919876543210 – there's nocountry_codefield on this endpoint.- There's no update or pause call in the API. To change a schedule, cancel the reminder and create a new one; to pause, use the Reminders page.
- Reminders are checked periodically, not to the second, so a run can go out up to 10 minutes after its time; if a check is later than that, the run is skipped. Each run counts towards the number's 1,000 messages a day.
- In List reminders,
next_runis worked out as if the reminder's timezone were UTC. Check the Reminders page for the right next time. - If a text field such as
phone,messageorreminder_nameis sent as a number,trueornull, the reply is an HTML error page (HTTP 500), so send text values as strings and handle a body that isn't JSON, as the Python example does. - If the
whatsapp_clientnumber is logged out when you create the reminder, the API refuses it withWhatsApp Logged Out. Please Reconnect!! - Messages go out from your own WhatsApp number, so WhatsApp's own rules apply: message people who expect to hear from you.
Questions
- What's the difference between a reminder and a scheduled message?
- A scheduled message (
/api/v1/schedule_msg/) goes out once, at the date and time you give. A reminder repeats on its cron schedule until you cancel it. - How do I stop a reminder when the customer pays?
- Call
/api/v1/reminder/cancel/with itsreminder_id. It stops at once and won't run again. A message it had already queued before you cancelled may still be sent. - Can I pause or edit a reminder through the API?
- Not yet. Pause or edit it on the Reminders page in your dashboard, or cancel it and create a new one with the new schedule.
- Can a reminder send a PDF?
- Yes. Use
msg_type2, put the file's public URL inimg_urland its name with the extension (such asinvoice.pdf) infile_name. The file is downloaded each time the reminder runs, so keep the link working. - Which plans include reminders?
- Every paid plan: Lite (1 number), Standard (3 numbers) and Advanced (10 numbers) – $25, $59 and $149 a month in the US; Pricing shows your country's price. All send unlimited messages under fair use. The free trial doesn't include reminders.
Read the guides
- Create reminder API
- List reminders API
- Cancel reminder API
- Reminders in the dashboard
- Plans and billing
- API keys and Client ID
Related
- Payment remindersMonthly or one-off payment reminders from your own number, with the invoice as a PDF.
- Appointment remindersRemind clients before each visit, from a booking sheet, your booking software or a weekly schedule.
- PythonSend WhatsApp messages from Python with the official client or plain requests.
- cURLSend, schedule and track WhatsApp messages with one cURL command.
Send your first automated WhatsApp message today
Create an account, scan the QR code and send a message in under five minutes.
Start freePaid plans start at $25 a month in the US. Pricing
