Listing mappings
templates:read.
Provisioning mappings
Platforms can create or update mappings without the console:pack and mappings):
templates:write.
To also seed workflows and Flows for a vertical, use automation packs.
Addressing
By phone number:type and value, the same shape as a contact:
Record without sending
Not every business event should message the customer. A lead being qualified, a visit booked by an agent or a ticket created are worth keeping, and worth starting a workflow from, without a WhatsApp message. Send"deliver": false:
202. The event appears in GET /v1/events with status recorded and starts api_event workflows. It needs no template mapping: a type with no mapping is refused only when you ask for it to be delivered.
Event types
type accepts the built-in library plus any event you define in your workspace. Defining your own also lets you declare a property schema, so a malformed event is rejected at the API rather than producing a message with an empty placeholder.
Define a type over the API with PUT /v1/event-definitions/{type}. Namespace it (real_estate.visit_booked, clinic.appointment_booked) so two products sharing a workspace never fight over one type:
GET /v1/event-definitions lists your types, and DELETE /v1/event-definitions/{type} archives one: new events of that type are refused, and past ones stay in the history.
Idempotency
Events are the natural place for permanent deduplication. The body-levelidempotency_key is enforced by a unique constraint, so one business event produces one message — forever, not just for 24 hours: