Create Flow draft
Create a WhatsApp Flow draft from a definition in Blueticked's builder dialect.
Body parameters
| namerequired | string |
| description | string |
| definition | object |
definitionis Blueticked's builder dialect, not raw Meta Flow JSON:{ version, screens: [...] }where each screen is{ id, title, terminal?, layout: { type: "SingleColumnLayout", children: [...] } }. Screen ids use letters, digits and underscores.- Supported component types: TextInput, TextArea, DatePicker, CalendarPicker, Dropdown, RadioButtonsGroup, CheckboxGroup, ChipsSelector, OptIn, PhotoPicker, DocumentPicker, Image, TextHeading, TextSubheading, TextBody, TextCaption, RichText, EmbeddedLink, NavigationList, If, Switch and Footer (an explicit Form wrapper is also accepted). Anything else (e.g. Meta-only DateTimePicker or ImageCarousel) is rejected with
400 validation_failedat create/update time. - Input components carry
name,labeland optionalrequired; choice fields takedata-sourceas a static[{ id, title }]list (or a${data.key}webhook binding on dynamic forms); each screen ends in a Footer whoseon-click-action.nameiscomplete(terminal screen),navigateordata_exchange. - On publish the stored dialect is transformed to Meta Flow JSON 7.3: the wire version is stamped, screens are wrapped in a Form, and the complete/navigate payload mappings Meta requires are generated, so never paste Meta Flow JSON here. Deeper rules (label caps, footer/payload rules) are checked at publish with friendly errors.
- Omit
definition(or send{}) to create a blank draft and fill it in via PATCH or the Flow builder UI. - The flow is returned flat (fields at the top level, the full serializer), matching GET /api/v1/flows/{id}.
curl -X POST "https://app.blueticked.com/api/v1/flows" \
-H "Authorization: Bearer $BLUETICKED_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: change-me-per-request-0001" \
-d '{
"name": "customer_feedback_v1",
"description": "Post-visit feedback form",
"definition": {
"version": "7.3",
"screens": [
{
"id": "MAIN",
"title": "Feedback",
"terminal": true,
"layout": {
"type": "SingleColumnLayout",
"children": [
{
"type": "TextHeading",
"text": "How did Karoo Trading Co do?"
},
{
"type": "RadioButtonsGroup",
"name": "rating",
"label": "Your rating",
"required": true,
"data-source": [
{
"id": "great",
"title": "Great"
},
{
"id": "okay",
"title": "Okay"
},
{
"id": "poor",
"title": "Poor"
}
]
},
{
"type": "TextInput",
"name": "feedback",
"label": "Anything to add?",
"helper-text": "A sentence or two is perfect."
},
{
"type": "Footer",
"label": "Submit",
"on-click-action": {
"name": "complete"
}
}
]
}
}
]
}
}'Response
{
"id": "2bb7e214-6106-4d25-ba1f-2e28b88dc657",
"business_id": "22222222-2222-4222-9222-222222222222",
"name": "customer_feedback_v1",
"description": "Post-visit feedback form",
"status": "draft",
"preset_id": null,
"meta_flow_id": null,
"meta_flow_version": null,
"definition": {
"version": "7.3",
"screens": [
{
"id": "MAIN",
"title": "Feedback",
"terminal": true,
"layout": {
"type": "SingleColumnLayout",
"children": [
{
"type": "TextHeading",
"text": "How did Karoo Trading Co do?"
},
{
"type": "RadioButtonsGroup",
"name": "rating",
"label": "Your rating",
"required": true,
"data-source": [
{
"id": "great",
"title": "Great"
},
{
"id": "okay",
"title": "Okay"
},
{
"id": "poor",
"title": "Poor"
}
]
},
{
"type": "TextInput",
"name": "feedback",
"label": "Anything to add?",
"helper-text": "A sentence or two is perfect."
},
{
"type": "Footer",
"label": "Submit",
"on-click-action": {
"name": "complete"
}
}
]
}
}
]
},
"public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkq...\n-----END PUBLIC KEY-----\n",
"last_synced_at": null,
"created_at": "2026-05-22T10:30:00.000Z",
"updated_at": "2026-05-22T10:30:00.000Z",
"request_id": "req_b2e3d610e10f1b07468721ee98f0e1d2"
}