Skip to content

Reminders

Two ways to drive Auto reminders from your own system:

  • Schedule one reminder for one contact — “remind Asha about invoice 1042 on Friday at 10 am”. Create, change or cancel it with your own external_id.
  • Send an event — cart_abandoned, visit_completed, order_completed… Reminder rules set up in the panel (Automation → Auto reminders, type After an event) start on it, or stop on it.

Dates for the date-based rules (appointment, payment due, renewal, birthday) are plain contact fields: set them with POST /v1/contacts fields, e.g. "payment_due": "2026-11-10" or "appointment_at": "2026-11-02 15:30". Accepted formats: 2026-11-02, 02/11/2026 (day first), either with a time (15:30 or 3:30 pm), or an ISO date-time with an offset.

Every reminder goes through the same rules as the panel: an approved template any time, free text only inside the 24-hour window; opted-out contacts never get one; quiet hours (default 9 am–9 pm in your time zone), the per-contact daily limit and the catch-up rule after downtime apply.

POST https://login.meapi.in/api/v1/reminders
Field Type Description
phone string Required. The customer, e.g. +919812345678. Created as a contact if new.
at string Required. When to send — ISO 8601 with an offset, e.g. 2026-11-02T10:00:00+05:30. Must be in the future.
template object { "name", "language"?, "variables"? } — one of your approved templates. variables fill {{1}}, {{2}}… in order: a string is fixed text, { "field": "amount_due" } reads a contact field at send time, { "contact": "name" } the contact’s name.
text string Instead of template: free text, delivered only if the 24-hour window is open at at (otherwise the reminder is skipped).
external_id string Your reference (invoice, booking…), up to 120 of A-Z a-z 0-9 _ . : -. Sending the same external_id again returns the existing reminder (200, "created": false) instead of a second one.
note string Shown to your team beside the chat
name string The contact’s name, if the contact is new
channel_id integer Which of your numbers
Terminal window
curl https://login.meapi.in/api/v1/reminders \
-H "Authorization: Bearer $MEAPI_KEY" -H "Content-Type: application/json" \
-d '{ "phone": "+919812345678", "at": "2026-11-07T10:00:00+05:30", "external_id": "inv-1042",
"template": { "name": "payment_due_reminder", "language": "en",
"variables": [ { "contact": "name" }, "Rs 4,500", "10 Nov" ] } }'

201 Created (or 200 for an external_id you already used):

{
"success": true,
"created": true,
"reminder": {
"id": 9182,
"external_id": "inv-1042",
"status": "scheduled",
"reason": null,
"note": null,
"source": "api",
"rule": null,
"contact": { "id": 3310, "phone": "+919812345678", "name": "Asha Patel" },
"scheduled_at": "2026-11-07T04:30:00.000Z",
"sent_at": null,
"replied_at": null,
"message_id": null,
"cost_estimate": null
}
}
status Meaning
scheduled Waiting for its time (quiet hours or the daily limit may move it later — scheduled_at shows when)
sent, delivered, read Sent; the WhatsApp message’s own status. message_id works with GET /v1/messages/:id.
replied The customer wrote back within 7 days
failed Meta refused it or delivery failed — reason says why
skipped Not sent on purpose — reason says why (opted out, window closed for free text, too late after downtime, no longer in the audience…)
cancelled Cancelled by you, or its rule stopped (the customer paid, replied, the date changed)

cost_estimate ({ amount, currency, category, note }) is filled when it is sent: an estimate from Meta’s list rates for the recipient’s country — Meta bills per delivered message, and its invoice is what counts.

GET https://login.meapi.in/api/v1/reminders?phone=%2B919812345678
GET https://login.meapi.in/api/v1/reminders/9182
GET https://login.meapi.in/api/v1/reminders/by-external-id/inv-1042
Query Description
phone Only this contact’s reminders — including the ones your reminder rules scheduled
external_id Only this reference
status scheduled, sent, failed, skipped or cancelled
limit 1–200 (default 50), newest first
PATCH https://login.meapi.in/api/v1/reminders/by-external-id/inv-1042
DELETE https://login.meapi.in/api/v1/reminders/by-external-id/inv-1042

/v1/reminders/:id works the same. PATCH takes at, note, template or text and only changes a scheduled reminder you created (one-off or API) — a rule’s reminder follows its rule and its date field; change the field instead. DELETE cancels a scheduled reminder (409 if it already went out); add ?stop_rule=true to stop a rule’s whole sequence for that contact.

POST https://login.meapi.in/api/v1/reminders/events
Field Type Description
phone string Required. The customer
event string Required. Lowercase letters, digits and _, e.g. cart_abandoned
external_id string The cart / order / visit id. The same event with the same id starts nothing a second time.
fields object Saved on the contact first, so the reminder can use them — e.g. { "cart_url": "https://…" }
tags string[] Tags to add
Terminal window
curl https://login.meapi.in/api/v1/reminders/events \
-H "Authorization: Bearer $MEAPI_KEY" -H "Content-Type: application/json" \
-d '{ "phone": "+919812345678", "event": "cart_abandoned", "external_id": "cart-77",
"fields": { "cart_url": "https://shop.example.com/cart/77" } }'
{ "success": true, "event": "cart_abandoned", "contact": { "id": 3310, "phone": "+919812345678" }, "reminders_started": 1, "reminders_stopped": 0 }

Send order_completed when the order is placed: an Abandoned cart reminder set to stop on it stops at once.

Code When
BAD_TIME at missing, not a date-time, or in the past
BAD_PHONE Not a valid number with country code
MISSING_TEMPLATE / MISSING_TEXT Neither a template nor text
TEMPLATE_NOT_APPROVED No approved template with that name (and language)
BAD_EXTERNAL_ID, BAD_EVENT, BAD_FIELDS The value does not fit the rules above
NOT_FOUND No such reminder on your account
NOT_SCHEDULED (409) Cancelling or changing a reminder that already went out

Webhook events for reminders — reminder.sent, reminder.failed, reminder.skipped — are on Webhooks.

© 2026 MeAPI by TheWebStore028 · RADHAMADHAV WEBSTORE LLP · GSTIN 27ABJFR6148J1ZO · Contact us ·Cookie settings