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
ParameterTypeDescription
pageintegerPage number (default: 1)
limitintegerPage size, 1–100. Default 50.
statusstringFilter by status (DRAFT, PUBLISHED, DEPRECATED)
accountstringFilter by WhatsApp account name
searchstringCase-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
FieldTypeRequiredDescription
whatsapp_accountstringYesAccount name
namestringYesFlow name
categorystringNoMeta flow category
json_versionstringNoFlow JSON version, e.g. "7.0"
flow_jsonobjectNoThe full Flow JSON definition
screensarrayNoScreen 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.

StatusDescription
DRAFTFlow is being designed, not yet available
PUBLISHEDFlow is live and can be sent to users
DEPRECATEDFlow has been retired