Reminders & Reservations API
Create and manage appointment reservations, schedule automated WhatsApp reminder broadcasts before/after events, prune stale messages on rescheduling, and inspect booking history via REST and MCP.
AI & LLM Integration Hub
LLM ReadyFeed WACM API specs directly to Cursor, Claude, ChatGPT, Antigravity, or custom AI agents.
Overview
The Reminders module automates time-based WhatsApp communication for reservations, appointments, renewals, consultations, and payment deadlines. It bridges your scheduling workflow with WhatsApp Cloud API campaigns, providing:
- REST API Endpoints: Full CRUD operations under
/api/v1/reminders/reservationswith Bearer token authentication. - Booking Idempotency: Safe retries using
booking_keyprevent duplicate appointment bookings. - Smart Reschedule Lifecycle: Updating appointment times automatically cancels old pending reminder messages and schedules fresh ones, avoiding duplicate alerts.
- Negative Variables: Seamless variable injection (
-4to-10) into WhatsApp campaign templates for date, time, and booking reference. - MCP Server Tools: AI agents in Claude, Cursor, or Antigravity can list and inspect reservations using the official
@codingmantra/wacm-mcppackage. - WhatsApp Chat Sideapp: Customer support agents can view upcoming reservations and schedule new appointments directly inside the WhatsApp team chat sidebar.
How the Scheduling Engine Works
1. Sources & Rules
Admins configure Sources (e.g. "Doctor Appointment", "Vehicle Service") with one or more reminder rules (e.g., 24 hours before, 1 hour before).
2. Reservation Created
When created via API, sideapp, or dashboard, the system immediately pre-calculates send times and registers scheduled campaign messages for the contact.
3. CheckDueReminders Job
Runs on a schedule, identifies active reservations within the send window, and dispatches personalized WhatsApp messages via Meta Cloud API.
Authentication
All endpoints accept authentication via Laravel Sanctum API tokens:
- Header:
Authorization: Bearer YOUR_SANCTUM_TOKEN - Query Parameter:
?token=YOUR_SANCTUM_TOKEN - JSON Request Body:
{"token": "YOUR_SANCTUM_TOKEN"}
REST API Endpoints
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/v1/reminders/reservations | Create reservation with optional idempotency key |
| PUT | /api/v1/reminders/reservations | Update/reschedule reservation (auto-prunes old messages) |
| DELETE | /api/v1/reminders/reservations | Cancel reservation and prune pending reminder messages |
| GET | /api/v1/reminders/reservations | List reservations (filters: contact_id, phone, status, page) |
| GET | /api/v1/reminders/reservations/show | Get single reservation details by ID |
| GET | /api/v1/reminders | List active reminder sources and configured rules |
1. Create Reservation
Creates a new reservation for a contact. You can specify a WhatsApp phone number directly (the contact will be located or created automatically) or pass an existing contact_id.
Idempotency: Supply an optional booking_key (e.g., your internal booking UUID). If a reservation with that key already exists, WACM returns the existing record immediately without duplicating reminders or sending duplicate notifications.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| source_id | integer | Required | ID of the Reminder Source defining message templates and time rules |
| start_date | datetime | Required | Appointment start timestamp in <code>YYYY-MM-DD HH:mm:ss</code> format |
| phone | string | Optional | Contact phone with country code (e.g. <code>+919876543210</code>). Required if <code>contact_id</code> is omitted |
| contact_id | integer | Optional | Existing Wpbox contact ID. Required if <code>phone</code> is omitted |
| end_date | datetime | Optional | Optional appointment end timestamp in <code>YYYY-MM-DD HH:mm:ss</code> format |
| booking_key | string | Optional | Unique idempotency key to prevent duplicate booking creation on network retries |
| external_id | string | Optional | Reference ID from your external booking system or EHR/CRM |
| notes | string | Optional | Optional internal notes or remarks about the appointment |
| status | integer | Optional | <code>1</code> = Active (default), <code>2</code> = Inactive, <code>3</code> = Cancelled, <code>4</code> = Completed |
curl -X POST "https://app.wacm.in/api/v1/reminders/reservations" \
-H "Authorization: Bearer YOUR_SANCTUM_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"phone": "+919876543210",
"source_id": 3,
"start_date": "2026-10-15 14:30:00",
"end_date": "2026-10-15 15:30:00",
"booking_key": "booking-apt-88219",
"external_id": "EXT-88219",
"notes": "Consultation with Dr. Sharma"
}'{
"status": "success",
"message": "Reservation created successfully",
"data": {
"id": 142,
"company_id": 12,
"source_id": 3,
"contact_id": 804,
"start_date": "2026-10-15 14:30:00",
"end_date": "2026-10-15 15:30:00",
"booking_key": "booking-apt-88219",
"external_id": "EXT-88219",
"notes": "Consultation with Dr. Sharma",
"status": 1,
"created_at": "2026-10-11T16:30:00.000000Z",
"updated_at": "2026-10-11T16:30:00.000000Z"
}
}2. Reschedule or Update Reservation
Updates appointment date, time, status, or source. When start_date, end_date, source_id, or status changes, WACM's automatic lifecycle listener cancels all unsent pending reminder messages for the old schedule and re-generates new ones for the revised date.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| id | integer | Required | Reservation ID to update |
| start_date | datetime | Optional | Revised appointment start timestamp |
| end_date | datetime | Optional | Revised appointment end timestamp |
| source_id | integer | Optional | Change reminder template source |
| status | integer | Optional | Status code: <code>1</code> = Active, <code>2</code> = Inactive, <code>3</code> = Cancelled, <code>4</code> = Completed |
| notes | string | Optional | Updated notes |
| external_id | string | Optional | Updated external reference ID |
curl -X PUT "https://app.wacm.in/api/v1/reminders/reservations" \
-H "Authorization: Bearer YOUR_SANCTUM_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"id": 142,
"start_date": "2026-10-16 11:00:00",
"end_date": "2026-10-16 12:00:00",
"notes": "Rescheduled per patient request"
}'{
"status": "success",
"message": "Reservation updated successfully",
"data": {
"id": 142,
"company_id": 12,
"source_id": 3,
"contact_id": 804,
"start_date": "2026-10-16 11:00:00",
"end_date": "2026-10-16 12:00:00",
"booking_key": "booking-apt-88219",
"external_id": "EXT-88219",
"notes": "Rescheduled per patient request",
"status": 1,
"updated_at": "2026-10-11T16:35:00.000000Z"
}
}3. Cancel Reservation
Cancels an appointment reservation. It sets the status to 3 (Cancelled) and immediately purges all pending scheduled messages so the customer will not receive any further reminders.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| id | integer | Required | Reservation ID to cancel (can also be passed as <code>reservation_id</code>) |
curl -X DELETE "https://app.wacm.in/api/v1/reminders/reservations" \
-H "Authorization: Bearer YOUR_SANCTUM_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "id": 142 }'{
"status": "success",
"message": "Reservation cancelled successfully",
"data": {
"id": 142,
"status": 3,
"status_text": "Cancelled"
}
}4. List Reservations
Query reservations with filtering by phone number, contact ID, or status code.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| phone | string | Optional | Filter by customer phone number |
| contact_id | integer | Optional | Filter by specific Wpbox contact ID |
| status | integer | Optional | Filter by status: <code>1</code> (Active), <code>2</code> (Inactive), <code>3</code> (Cancelled), <code>4</code> (Completed) |
| page | integer | Optional | Page number for pagination (default: 1) |
| limit | integer | Optional | Results per page (default: 20, max: 100) |
curl "https://app.wacm.in/api/v1/reminders/reservations?phone=%2B919876543210&status=1" \
-H "Authorization: Bearer YOUR_SANCTUM_TOKEN"{
"status": "success",
"data": [
{
"id": 142,
"source_id": 3,
"contact_id": 804,
"start_date": "2026-10-16 11:00:00",
"end_date": "2026-10-16 12:00:00",
"booking_key": "booking-apt-88219",
"external_id": "EXT-88219",
"notes": "Rescheduled per patient request",
"status": 1,
"contact": {
"id": 804,
"name": "Rohan Patel",
"phone": "+919876543210"
},
"source": {
"id": 3,
"name": "Doctor Appointment"
}
}
],
"meta": {
"current_page": 1,
"per_page": 20,
"total": 1
}
}5. Get Reservation
Retrieve full details for a single reservation including contact info and source configuration.
curl "https://app.wacm.in/api/v1/reminders/reservations/show?id=142" \
-H "Authorization: Bearer YOUR_SANCTUM_TOKEN"6. List Reminder Rules
Fetch active reminder sources and their message rules to determine available booking types.
curl "https://app.wacm.in/api/v1/reminders" \
-H "Authorization: Bearer YOUR_SANCTUM_TOKEN"Negative Variables in Message Templates
When a reminder broadcast is prepared from a reservation, WACM maps reservation dates and metadata into template negative variables. You can configure Meta WhatsApp message templates using these variables:
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| -1 | string | Optional | Contact Name (from Wpbox contact record) |
| -2 | string | Optional | Contact Phone Number (e.g. <code>+919876543210</code>) |
| -3 | string | Optional | Contact Extra Value / Custom Field |
| -4 | string | Optional | Reservation Start Date formatted as <code>YYYY-MM-DD</code> (e.g., <code>2026-10-16</code>) |
| -5 | string | Optional | Reservation Start Time formatted as <code>HH:mm:ss</code> (e.g., <code>11:00:00</code>) |
| -6 | string | Optional | Reservation Start Date & Time formatted as <code>YYYY-MM-DD HH:mm:ss</code> |
| -7 | string | Optional | Reservation End Date formatted as <code>YYYY-MM-DD</code> |
| -8 | string | Optional | Reservation End Time formatted as <code>HH:mm:ss</code> |
| -9 | string | Optional | Reservation End Date & Time formatted as <code>YYYY-MM-DD HH:mm:ss</code> |
| -10 | string | Optional | External ID or Booking Reference Key (e.g., <code>EXT-88219</code>) |
Hi {{1}},
This is a reminder that your appointment is scheduled for {{-4}} at {{-5}}.
Booking Ref: {{-10}}
To reschedule or cancel, please reply to this message directly.
See you soon!Model Context Protocol (MCP) Integration
The official npm package @codingmantra/wacm-mcp provides 4 specialized read tools for LLM coding and support assistants:
| MCP Tool Name | Usage |
|---|---|
| list_reservations | List or filter reservations by phone, contact ID, status, or date range |
| get_reservation | Inspect details of a reservation by its ID or external reference |
| list_reminders | List configured reminder sources, offset timing, and campaign templates |
| get_contact_reservations | Quickly read active and past reservations for a specific customer contact ID |
For setup instructions in Claude Desktop, Cursor, VS Code, or Antigravity, see the WACM MCP Setup Guide.
Flowmaker Events
The Reminders module emits events to trigger AI Flow Builder workflows:
EVENT_REMINDER_DUE
Fired when a scheduled reminder window arrives. Used by Flowmaker trigger nodes to execute automated actions, prompt LLMs, or trigger webhooks.
EVENT_RESERVATION_CREATED
Fired immediately when a new reservation is confirmed. Use this to send instant confirmation messages, issue calendar invites, or update Google Sheets.
WhatsApp Chat Inbox Sideapp
When agents use the WACM WhatsApp Team Inbox, the built-in Reminders Sideapp renders on the right sidebar for the open conversation:
- Displays existing upcoming and past appointments for the active contact.
- Shows status badges (Active, Inactive, Cancelled, Completed) with appointment dates and times.
- Provides a + New Reservation button that pre-populates the customer's details in a modal for one-click scheduling.
Related Documentation
- Model Context Protocol (MCP) Guide — Connect Claude and AI coding agents to WACM
- WhatsApp Business API — Campaigns and message delivery
- AI Flow Builder — Visual flow automation with reminder triggers
- WhatsApp Team Inbox — Multi-agent collaboration and sideapps