Skip to content

WhatsApp Flows

WhatsApp Flows provide native UI components for building interactive experiences within WhatsApp. Use the Flows API to create, publish, and manage your flows.

Retrieve all flows.

Terminal window
GET /api/flows
Parameter Type Description
page integer Page number (default: 1)
limit integer Page size, 1–100. Default 50.
status string Filter by status (DRAFT, PUBLISHED, DEPRECATED)
account string Filter by WhatsApp account name
search string Case-insensitive match on the flow name
{
"status": "success",
"data": {
"flows": [
{
"id": "uuid",
"whatsapp_account": "Main Business",
"meta_flow_id": "123456789",
"name": "Order Form",
"status": "PUBLISHED",
"category": "OTHER",
"json_version": "7.0",
"flow_json": { },
"screens": [],
"preview_url": "",
"has_local_changes": false,
"created_at": "2024-01-01T00:00:00Z",
"updated_at": "2024-01-01T00:00:00Z"
}
],
"total": 10,
"page": 1,
"limit": 50
}
}

has_local_changes is true when the flow has been edited in Whatomate but not yet pushed to Meta (see Save to Meta).

Retrieve a single flow with its JSON definition. Same object shape as a list item.

Terminal window
GET /api/flows/{id}

Create a new WhatsApp Flow.

Terminal window
POST /api/flows
Field Type Required Description
whatsapp_account string Yes Account name
name string Yes Flow name
category string No Meta flow category
json_version string No Flow JSON version, e.g. "7.0"
flow_json object No The full Flow JSON definition
screens array No Screen definitions
{
"whatsapp_account": "Main Business",
"name": "Customer Survey",
"category": "CUSTOMER_SUPPORT",
"json_version": "7.0",
"flow_json": {
"version": "3.0",
"screens": [
{
"id": "SURVEY",
"title": "Quick Survey",
"layout": {
"type": "SingleColumnLayout",
"children": [
{
"type": "TextHeading",
"text": "How was your experience?"
},
{
"type": "RadioButtonsGroup",
"name": "rating",
"label": "Rating",
"data-source": [
{"id": "5", "title": "Excellent"},
{"id": "4", "title": "Good"},
{"id": "3", "title": "Average"},
{"id": "2", "title": "Poor"},
{"id": "1", "title": "Very Poor"}
]
},
{
"type": "Footer",
"label": "Submit",
"on-click-action": {
"name": "complete",
"payload": {}
}
}
]
}
}
]
}
}
{
"status": "success",
"data": {
"id": "uuid",
"name": "Customer Survey",
"status": "DRAFT",
"created_at": "2024-01-01T00:00:00Z"
}
}

Update a flow’s definition.

Terminal window
PUT /api/flows/{id}
{
"whatsapp_account": "Main Business",
"name": "Updated Survey",
"category": "CUSTOMER_SUPPORT",
"json_version": "7.0",
"flow_json": { }
}

Delete a flow.

Terminal window
DELETE /api/flows/{id}

Push the flow definition to Meta’s WhatsApp Business API.

Terminal window
POST /api/flows/{id}/save-to-meta
{
"status": "success",
"data": {
"meta_flow_id": "123456789",
"validation_errors": []
}
}

Publish a draft flow to make it available for use.

Terminal window
POST /api/flows/{id}/publish
{
"status": "success",
"data": {
"id": "uuid",
"status": "PUBLISHED"
}
}

Deprecate a published flow.

Terminal window
POST /api/flows/{id}/deprecate
{
"status": "success",
"data": {
"id": "uuid",
"status": "DEPRECATED"
}
}

Clone an existing flow into a fresh DRAFT. The copy keeps the same account, category, and flow JSON, is named <original name> (Copy), and has no meta_flow_id — it is a brand-new local flow that you can edit and publish independently.

Terminal window
POST /api/flows/{id}/duplicate
{
"status": "success",
"data": {
"flow": {
"id": "new-uuid",
"name": "Order Form (Copy)",
"status": "DRAFT"
},
"message": "Flow duplicated successfully. You can now edit and publish the new flow."
}
}

Sync flows from Meta.

Terminal window
POST /api/flows/sync
{
"whatsapp_account": "Main Business"
}

Omitting it returns 400 WhatsApp account is required; an unknown name returns 400 WhatsApp account not found.

Status Description
DRAFT Flow is being designed, not yet available
PUBLISHED Flow is live and can be sent to users
DEPRECATED Flow has been retired