Skip to content
WbizTool

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

  1. 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).

  2. 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-5 is 9:00 on weekdays. Add an IANA timezone such as Asia/Kolkata.

  3. Create the reminder

    POST to /api/v1/reminder/create/ with reminder_name, phone, message, cron_expression and timezone. Save the reminder_id from the reply.

  4. List or cancel it later

    /api/v1/reminder/list/ returns your reminders, 50 per page. /api/v1/reminder/cancel/ with the reminder_id stops one for good – for example when the customer pays.

Reminder API code examples

Create a monthly reminder
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"
  }'
Create a reminder in Python
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"])
A weekly image reminder
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)
List your reminders
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
  }'
Cancel a reminder
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_type 1 sends an image from img_url. For a file, use msg_type 2 with the file's public URL in img_url and its name in file_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_client to 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/Kolkata or America/Chicago. Abbreviations like IST or CST are refused with Invalid timezone; without a timezone, the schedule runs in UTC.
  • phone takes the number with its country code, such as 919876543210 – there's no country_code field 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_run is 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, message or reminder_name is sent as a number, true or null, 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_client number is logged out when you create the reminder, the API refuses it with WhatsApp 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 its reminder_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_type 2, put the file's public URL in img_url and its name with the extension (such as invoice.pdf) in file_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

Related

Send your first automated WhatsApp message today

Create an account, scan the QR code and send a message in under five minutes.

Start free

Paid plans start at $25 a month in the US. Pricing