API resource
WhatsApp templates and flows
Outside 24 hours of a customer's last message, WhatsApp only delivers templates Meta has approved. Create one, watch its review status, then send it. Flows are native forms, surveys and booking screens that open inside the chat.
List flow responses
/v1/whatsapp/flow-responsesWorks on: WhatsApp
Query parameters
accountIdstringrequiredWhatsApp account ID
flowIdstringScope to responses for this flow
limitintegerMax responses to return
curl "https://creatoros-production-5658.up.railway.app/v1/whatsapp/flow-responses?accountId=acc_Wa2Qp7Vz4Ny9Tx1Lm6Rc3Wb8Js5Df0Ga7Ue2Ki4Oq9W" \
-H "Authorization: Bearer $CREATOROS_API_KEY"{
"responses": [
{
"id": "string",
"receivedAt": "2026-10-10T00:00:00.000Z",
"from": "string",
"senderName": "string",
"conversationId": "string",
"flowToken": "string",
"data": {},
"raw": "string"
}
]
}Get Flows encryption key status
/v1/whatsapp/flows/encryption-keyWorks on: WhatsApp
Query parameters
accountIdstringrequiredWhatsApp account ID
curl "https://creatoros-production-5658.up.railway.app/v1/whatsapp/flows/encryption-key?accountId=acc_Wa2Qp7Vz4Ny9Tx1Lm6Rc3Wb8Js5Df0Ga7Ue2Ki4Oq9W" \
-H "Authorization: Bearer $CREATOROS_API_KEY"{
"publicKey": "string",
"signatureStatus": "VALID",
"registered": true
}Register a Flows encryption key
/v1/whatsapp/flows/encryption-keyWorks on: WhatsApp
Body
accountIdstringrequiredWhatsApp account ID
businessPublicKeystringrequiredRSA public key in PEM format. Rejected if it is a private key or not a valid RSA public key PEM.
curl -X POST "https://creatoros-production-5658.up.railway.app/v1/whatsapp/flows/encryption-key" \
-H "Authorization: Bearer $CREATOROS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"accountId": "acc_Wa2Qp7Vz4Ny9Tx1Lm6Rc3Wb8Js5Df0Ga7Ue2Ki4Oq9W",
"businessPublicKey": "string"
}'{
"success": true
}Send flow message
/v1/whatsapp/flows/sendWorks on: WhatsApp
Body
accountIdstringrequiredWhatsApp account ID
tostringrequiredRecipient phone number (E.164 format, e.g. +1234567890)
flow_idstringrequiredPublished flow ID
flow_ctastringrequiredCTA button text (e.g. 'Book Now', 'Sign Up')
flow_actionstringAction type: navigate opens a screen directly, data_exchange hits your endpoint first
flow_tokenstringUnique token to correlate responses. If omitted, auto-generated as '<flowId>:<uuid>' so the response can be attributed to this flow in the Flow Responses view.
flow_action_payloadobjectbodystringrequiredMessage body text
headerobjectfooterstringOptional footer text
draftbooleanSet true to test an unpublished (DRAFT) flow
curl -X POST "https://creatoros-production-5658.up.railway.app/v1/whatsapp/flows/send" \
-H "Authorization: Bearer $CREATOROS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"accountId": "acc_Wa2Qp7Vz4Ny9Tx1Lm6Rc3Wb8Js5Df0Ga7Ue2Ki4Oq9W",
"to": "string",
"flow_id": "string",
"flow_cta": "string",
"body": "string"
}'{
"success": true,
"messageId": "4455667788990011223"
}Deprecate flow
/v1/whatsapp/flows/{flowId}/deprecateWorks on: WhatsApp
Path parameters
flowIdstringrequiredFlow ID
Body
accountIdstringrequiredWhatsApp account ID
curl -X POST "https://creatoros-production-5658.up.railway.app/v1/whatsapp/flows/1203948572039485/deprecate" \
-H "Authorization: Bearer $CREATOROS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"accountId": "acc_Wa2Qp7Vz4Ny9Tx1Lm6Rc3Wb8Js5Df0Ga7Ue2Ki4Oq9W"
}'{
"success": true
}Get flow JSON asset
/v1/whatsapp/flows/{flowId}/jsonWorks on: WhatsApp
Path parameters
flowIdstringrequiredFlow ID
Query parameters
accountIdstringrequiredWhatsApp account ID
curl "https://creatoros-production-5658.up.railway.app/v1/whatsapp/flows/1203948572039485/json?accountId=acc_Wa2Qp7Vz4Ny9Tx1Lm6Rc3Wb8Js5Df0Ga7Ue2Ki4Oq9W" \
-H "Authorization: Bearer $CREATOROS_API_KEY"{
"success": true,
"assets": [
{
"name": "flow.json",
"asset_type": "FLOW_JSON",
"download_url": "string"
}
]
}Upload flow JSON
/v1/whatsapp/flows/{flowId}/jsonWorks on: WhatsApp
Path parameters
flowIdstringrequiredFlow ID
Body
accountIdstringrequiredWhatsApp account ID
flow_jsonobjectrequiredThe Flow JSON content. Pass as a JSON object or a JSON string.
curl -X PUT "https://creatoros-production-5658.up.railway.app/v1/whatsapp/flows/1203948572039485/json" \
-H "Authorization: Bearer $CREATOROS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"accountId": "acc_Wa2Qp7Vz4Ny9Tx1Lm6Rc3Wb8Js5Df0Ga7Ue2Ki4Oq9W",
"flow_json": {}
}'{
"success": true,
"validation_errors": [
{
"error": "string",
"error_type": "string",
"message": "string",
"line_start": 0,
"line_end": 0,
"column_start": 0,
"column_end": 0
}
]
}Get flow preview URL
/v1/whatsapp/flows/{flowId}/previewWorks on: WhatsApp
Path parameters
flowIdstringrequiredFlow ID
Query parameters
accountIdstringrequiredWhatsApp account ID
invalidatebooleanMint a fresh preview link (default false)
curl "https://creatoros-production-5658.up.railway.app/v1/whatsapp/flows/1203948572039485/preview?accountId=acc_Wa2Qp7Vz4Ny9Tx1Lm6Rc3Wb8Js5Df0Ga7Ue2Ki4Oq9W" \
-H "Authorization: Bearer $CREATOROS_API_KEY"{
"preview_url": "string",
"expires_at": "2026-10-10T00:00:00.000Z"
}Publish flow
/v1/whatsapp/flows/{flowId}/publishWorks on: WhatsApp
Path parameters
flowIdstringrequiredFlow ID
Body
accountIdstringrequiredWhatsApp account ID
curl -X POST "https://creatoros-production-5658.up.railway.app/v1/whatsapp/flows/1203948572039485/publish" \
-H "Authorization: Bearer $CREATOROS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"accountId": "acc_Wa2Qp7Vz4Ny9Tx1Lm6Rc3Wb8Js5Df0Ga7Ue2Ki4Oq9W"
}'{
"success": true
}List flow versions
/v1/whatsapp/flows/{flowId}/versionsWorks on: WhatsApp
Path parameters
flowIdstringrequiredFlow ID
Query parameters
accountIdstringrequiredWhatsApp account ID
curl "https://creatoros-production-5658.up.railway.app/v1/whatsapp/flows/1203948572039485/versions?accountId=acc_Wa2Qp7Vz4Ny9Tx1Lm6Rc3Wb8Js5Df0Ga7Ue2Ki4Oq9W" \
-H "Authorization: Bearer $CREATOROS_API_KEY"{
"versions": [
{
"flowId": "1203948572039485",
"version": 0,
"parentFlowId": "string",
"name": "string",
"status": "string",
"missing": true
}
]
}Delete flow
/v1/whatsapp/flows/{flowId}Works on: WhatsApp
Path parameters
flowIdstringrequiredFlow ID
Query parameters
accountIdstringrequiredWhatsApp account ID
curl -X DELETE "https://creatoros-production-5658.up.railway.app/v1/whatsapp/flows/1203948572039485?accountId=acc_Wa2Qp7Vz4Ny9Tx1Lm6Rc3Wb8Js5Df0Ga7Ue2Ki4Oq9W" \
-H "Authorization: Bearer $CREATOROS_API_KEY"{
"success": true
}Get flow
/v1/whatsapp/flows/{flowId}Works on: WhatsApp
Path parameters
flowIdstringrequiredFlow ID
Query parameters
accountIdstringrequiredWhatsApp account ID
fieldsstringComma-separated fields to return (default: id,name,status,categories,validation_errors,json_version,preview,data_api_version,endpoint_uri)
curl "https://creatoros-production-5658.up.railway.app/v1/whatsapp/flows/1203948572039485?accountId=acc_Wa2Qp7Vz4Ny9Tx1Lm6Rc3Wb8Js5Df0Ga7Ue2Ki4Oq9W" \
-H "Authorization: Bearer $CREATOROS_API_KEY"{
"success": true,
"flow": {
"id": "string",
"name": "string",
"status": "string",
"categories": [
"string"
],
"validation_errors": [
{}
],
"json_version": "string",
"preview": {
"preview_url": "string",
"expires_at": "2026-10-10T00:00:00.000Z"
}
}
}Update flow
/v1/whatsapp/flows/{flowId}Works on: WhatsApp
Path parameters
flowIdstringrequiredFlow ID
Body
accountIdstringrequiredWhatsApp account ID
namestringNew flow name
categoriesstring[]endpointUristringHTTPS-only data exchange endpoint for the flow. Settable only while the flow is in DRAFT, and the flow's uploaded Flow JSON must declare data_api_version "3.0" for the endpoint to be used.
curl -X PATCH "https://creatoros-production-5658.up.railway.app/v1/whatsapp/flows/1203948572039485" \
-H "Authorization: Bearer $CREATOROS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"accountId": "acc_Wa2Qp7Vz4Ny9Tx1Lm6Rc3Wb8Js5Df0Ga7Ue2Ki4Oq9W"
}'{
"success": true
}List flows
/v1/whatsapp/flowsWorks on: WhatsApp
Query parameters
accountIdstringrequiredWhatsApp account ID
curl "https://creatoros-production-5658.up.railway.app/v1/whatsapp/flows?accountId=acc_Wa2Qp7Vz4Ny9Tx1Lm6Rc3Wb8Js5Df0Ga7Ue2Ki4Oq9W" \
-H "Authorization: Bearer $CREATOROS_API_KEY"{
"success": true,
"flows": [
{
"id": "string",
"name": "string",
"status": "DRAFT",
"categories": [
"string"
],
"validation_errors": [
{}
],
"version": 0,
"lineageId": "string"
}
]
}Create flow
/v1/whatsapp/flowsWorks on: WhatsApp
Body
accountIdstringrequiredWhatsApp account ID
namestringrequiredFlow display name
categoriesstring[]requiredFlow categories
cloneFlowIdstringOptional: ID of an existing flow to clone the Flow JSON from
asVersionbooleanWhen cloning, true keeps the clone in cloneFlowId's version lineage (auto-numbered next version); false/absent creates an independent flow. Ignored without cloneFlowId.
endpointUristringHTTPS-only data exchange endpoint for the flow. Settable only while the flow is in DRAFT, and the flow's uploaded Flow JSON must declare data_api_version "3.0" for the endpoint to be used.
curl -X POST "https://creatoros-production-5658.up.railway.app/v1/whatsapp/flows" \
-H "Authorization: Bearer $CREATOROS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"accountId": "acc_Wa2Qp7Vz4Ny9Tx1Lm6Rc3Wb8Js5Df0Ga7Ue2Ki4Oq9W",
"name": "string",
"categories": [
"SIGN_UP"
]
}'{
"success": true,
"flow": {
"id": "string",
"name": "string",
"status": "DRAFT",
"categories": [
"string"
],
"version": 0,
"lineageId": "string"
}
}Look up a library template
/v1/whatsapp/template-libraryWorks on: WhatsApp
Query parameters
accountIdstringrequiredWhatsApp account ID
namestringrequiredExact library template name
languagestringDesired language variant (e.g. es, en_US). If the template is not offered in it, the first available variant is returned and named in the response language field.
curl "https://creatoros-production-5658.up.railway.app/v1/whatsapp/template-library?accountId=acc_Wa2Qp7Vz4Ny9Tx1Lm6Rc3Wb8Js5Df0Ga7Ue2Ki4Oq9W&name=%3Cname%3E" \
-H "Authorization: Bearer $CREATOROS_API_KEY"{
"template": {
"name": "string",
"language": "string",
"category": "string",
"body": "string",
"body_params": [
"string"
],
"availableLanguages": [
"string"
],
"buttons": [
{
"type": "string",
"text": "string"
}
]
}
}Delete template by id
/v1/whatsapp/templates/id/{templateId}Works on: WhatsApp
Path parameters
templateIdstringrequiredMeta template id (numeric).
Query parameters
accountIdstringrequiredWhatsApp account ID
curl -X DELETE "https://creatoros-production-5658.up.railway.app/v1/whatsapp/templates/id/1875844705851813?accountId=acc_Wa2Qp7Vz4Ny9Tx1Lm6Rc3Wb8Js5Df0Ga7Ue2Ki4Oq9W" \
-H "Authorization: Bearer $CREATOROS_API_KEY"{
"success": true,
"scope": "language",
"language": "string",
"message": "string"
}Get template by id
/v1/whatsapp/templates/id/{templateId}Works on: WhatsApp
Path parameters
templateIdstringrequiredMeta template id (numeric).
Query parameters
accountIdstringrequiredWhatsApp account ID
curl "https://creatoros-production-5658.up.railway.app/v1/whatsapp/templates/id/1875844705851813?accountId=acc_Wa2Qp7Vz4Ny9Tx1Lm6Rc3Wb8Js5Df0Ga7Ue2Ki4Oq9W" \
-H "Authorization: Bearer $CREATOROS_API_KEY"{
"success": true,
"template": {
"id": "string",
"name": "string",
"status": "string",
"category": "string",
"language": "string",
"components": [
{}
],
"message_send_ttl_seconds": 0,
"rejected_reason": "string",
"quality_score": {}
}
}Update template by id
/v1/whatsapp/templates/id/{templateId}Works on: WhatsApp
Path parameters
templateIdstringrequiredMeta template id (numeric).
Body
accountIdstringrequiredWhatsApp account ID
componentsobject[]Updated template components. Optional when only message_send_ttl_seconds changes; at least one of the two is required.
message_send_ttl_secondsintegerDelivery validity window in seconds: a message not delivered within it is dropped. Range depends on category: AUTHENTICATION 30 to 900, UTILITY 30 to 43200 (12h), MARKETING 43200 to 2592000 (30 days); -1 is not accepted here (Meta treats it as an empty edit); send a value in range.
curl -X PATCH "https://creatoros-production-5658.up.railway.app/v1/whatsapp/templates/id/1875844705851813" \
-H "Authorization: Bearer $CREATOROS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"accountId": "acc_Wa2Qp7Vz4Ny9Tx1Lm6Rc3Wb8Js5Df0Ga7Ue2Ki4Oq9W"
}'{
"success": true,
"template": {
"id": "string",
"name": "string",
"language": "string",
"status": "PENDING"
}
}Delete template
/v1/whatsapp/templates/{templateName}Works on: WhatsApp
Path parameters
templateNamestringrequiredTemplate name (the family).
Query parameters
accountIdstringrequiredWhatsApp account ID
languagestringDelete only this language variant (e.g. es). Omit to delete the whole family.
curl -X DELETE "https://creatoros-production-5658.up.railway.app/v1/whatsapp/templates/order_update?accountId=acc_Wa2Qp7Vz4Ny9Tx1Lm6Rc3Wb8Js5Df0Ga7Ue2Ki4Oq9W" \
-H "Authorization: Bearer $CREATOROS_API_KEY"{
"success": true,
"scope": "all_languages",
"language": "string",
"message": "string"
}Get template
/v1/whatsapp/templates/{templateName}Works on: WhatsApp
Path parameters
templateNamestringrequiredTemplate name (the family).
Query parameters
accountIdstringrequiredWhatsApp account ID
languagestringLanguage code of the variant (e.g. en_US, es, pt_BR). Required when the family has several languages.
curl "https://creatoros-production-5658.up.railway.app/v1/whatsapp/templates/order_update?accountId=acc_Wa2Qp7Vz4Ny9Tx1Lm6Rc3Wb8Js5Df0Ga7Ue2Ki4Oq9W" \
-H "Authorization: Bearer $CREATOROS_API_KEY"{
"success": true,
"template": {
"id": "string",
"name": "string",
"status": "string",
"category": "string",
"language": "string",
"components": [
{}
],
"message_send_ttl_seconds": 0,
"rejected_reason": "string",
"quality_score": {}
}
}Update template
/v1/whatsapp/templates/{templateName}Works on: WhatsApp
Path parameters
templateNamestringrequiredTemplate name (the family).
Body
accountIdstringrequiredWhatsApp account ID
languagestringLanguage code of the variant to edit (e.g. en_US, es, pt_BR). Required when the family has several languages. Body only: a language query parameter on PATCH is a 400.
componentsobject[]Updated template components. Optional when only message_send_ttl_seconds changes; at least one of the two is required.
message_send_ttl_secondsintegerDelivery validity window in seconds: a message not delivered within it is dropped. Range depends on category: AUTHENTICATION 30 to 900, UTILITY 30 to 43200 (12h), MARKETING 43200 to 2592000 (30 days); -1 is not accepted here (Meta treats it as an empty edit); send a value in range.
curl -X PATCH "https://creatoros-production-5658.up.railway.app/v1/whatsapp/templates/order_update" \
-H "Authorization: Bearer $CREATOROS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"accountId": "acc_Wa2Qp7Vz4Ny9Tx1Lm6Rc3Wb8Js5Df0Ga7Ue2Ki4Oq9W"
}'{
"success": true,
"template": {
"id": "string",
"name": "string",
"language": "string",
"status": "PENDING"
}
}List templates
/v1/whatsapp/templatesWorks on: WhatsApp
Query parameters
accountIdstringrequiredWhatsApp account ID
namestringExact template name; returns every language variant of that family.
languagestringExact language code (e.g. en_US).
statusstringOne of: APPROVED, REJECTED, PENDING, PAUSED, DISABLED, IN_APPEAL, PENDING_DELETION.
curl "https://creatoros-production-5658.up.railway.app/v1/whatsapp/templates?accountId=acc_Wa2Qp7Vz4Ny9Tx1Lm6Rc3Wb8Js5Df0Ga7Ue2Ki4Oq9W" \
-H "Authorization: Bearer $CREATOROS_API_KEY"{
"success": true,
"templates": [
{
"id": "string",
"name": "string",
"status": "APPROVED",
"category": "AUTHENTICATION",
"language": "string",
"message_send_ttl_seconds": 0,
"components": [
{}
]
}
]
}Create template
/v1/whatsapp/templatesWorks on: WhatsApp
Body
accountIdstringrequiredWhatsApp account ID
namestringrequiredTemplate name (lowercase, letters/numbers/underscores, must start with a letter)
categorystringrequiredTemplate category
languagestringrequiredTemplate language code (e.g., en_US)
parameter_formatstringVariable style: POSITIONAL ({{1}}, the default) or NAMED ({{customer_name}}). Named templates provide examples via body_text_named_params / header_text_named_params. Inferred as NAMED when omitted but a named-params example is present.
componentsobject[]Template components (header, body, footer, buttons, carousel, limited_time_offer). Required for custom templates, omit when using library_template_name.
library_template_namestringName of a pre-built template from Meta's template library (e.g., "appointment_reminder", "auto_pay_reminder_1", "address_update"). When provided, the template is pre-approved by Meta with no review wait. Omit components when using this field.
library_template_body_inputsobjectOptional body customizations for library templates. Available options depend on the template (e.g., add_contact_number, add_learn_more_link, add_security_recommendation, add_track_package_link, code_expiration_minutes).
library_template_button_inputsobject[]Optional button customizations for library templates. Each item specifies button type and configuration (e.g., URL, phone number, quick reply).
message_send_ttl_secondsintegerDelivery validity window in seconds: a message not delivered within it is dropped. Range depends on category: AUTHENTICATION 30 to 900, UTILITY 30 to 43200 (12h), MARKETING 43200 to 2592000 (30 days); -1 (create only) keeps the 30-day default on AUTHENTICATION and UTILITY.
curl -X POST "https://creatoros-production-5658.up.railway.app/v1/whatsapp/templates" \
-H "Authorization: Bearer $CREATOROS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"accountId": "acc_Wa2Qp7Vz4Ny9Tx1Lm6Rc3Wb8Js5Df0Ga7Ue2Ki4Oq9W",
"name": "string",
"category": "AUTHENTICATION",
"language": "string"
}'{
"success": true,
"template": {
"id": "string",
"name": "string",
"status": "string",
"category": "string",
"language": "string",
"message_send_ttl_seconds": 0
}
}