Messages
Send Form
Sends a button that opens a WhatsApp Native Flow for structured data capture
POST
Send Form
Auth:
Custom flow via
Escape hatch for your own flows (built in WhatsApp Business Manager). When
TokenAccount or TokenInstance • Rate-limit: Global (100/min) • Idempotent: no
Description
Sends a message with a button that opens a WhatsApp Native Flow, a native form that collects structured data (name, phone, email, CPF/CNPJ, address) without leaving the conversation. It supports two ready-made flows:contact_details (Customer details) and registration_offer (Registration offer), plus an escape hatch via buttonParamsJSON for fully custom flows. Ideal for lead capture, sign-ups and offers with quick confirmation.
Examples
Registration offer (registration_offer)
Sends an offer with title and description. The button opens the default registration Flow with configurable visible fields.Contact data capture (contact_details)
Uses WhatsApp’s officialcontact_details flow. Hide fields you don’t want to ask for via the *Visible flags. Here we ask for name, phone and email only.
Custom flow via buttonParamsJSON
Escape hatch for your own flows (built in WhatsApp Business Manager). When buttonParamsJSON is provided, the server ignores every other flow-related field (formType, flowId, visibility flags, offerName, etc.) and uses the literal JSON as the Native Flow button params.
Create Flows
Open the WhatsApp Business Manager to create and manage your custom Flows (get the
flow_id here).Flows Playground
Test and prototype Flow schemas in Meta’s official playground before shipping to production.
Success response
The returnedmessageType is interactive (a form is a variation of a Native Flow interactive message), and content echoes the message you sent. Save the messageId (and the flowToken, generated automatically when you don’t send one) to correlate with the flow response on the webhook.
200 OK
When the user fills in and submits the form, WhatsApp sends an
interactive_response message carrying the flow_token (the UUID you provided or the one auto-generated) and the JSON with the answers. Capture it via webhook/websocket to correlate with the original send.Path parameters
string
required
Instance name (e.g.,
$Instance_Name).Headers
string
required
TokenAccount or TokenInstance.string
required
application/jsonRequest body
string
required
Destination: phone (
5511999999999) or JID (@s.whatsapp.net, @lid, @g.us).string
required
Text shown in the message bubble, above the button that opens the Flow.
string
default:"registration_offer"
Pre-configured form type:
"contact_details" (Customer details) or "registration_offer" (Registration offer). Ignored if buttonParamsJSON is provided.string
default:"Add information"
Text displayed on the button that opens the Flow (
flow_cta).string
Token to correlate the form response with the send. When omitted, the server generates a UUID automatically. You can use this token to tie it back to a lead/opportunity in your CRM.
string
Flow ID in WhatsApp Business. Defaults per
formType:contact_details→1889354358373616registration_offer→892701196712475
buttonParamsJSON).string
default:"4"
flow_message_version value sent to WhatsApp.int
default:"3"
message_version of the Native Flow payload.string
Escape hatch for fully custom flows. When provided, the server sends this literal JSON as the Native Flow button
params and ignores formType, flowId, flowToken, flowMessageVersion, messageVersion, every *Visible flag, offerName and offerDescription. Useful to integrate with flows you’ve built in WhatsApp Business Manager with custom schemas.boolean
default:"true"
Shows the “Full name” field in the form. Ignored if
buttonParamsJSON is provided.boolean
default:"true"
Shows the “Phone number” field.
boolean
default:"true"
Shows the “Email” field.
boolean
default:"true"
Shows the “CPF/CNPJ” field.
boolean
default:"true"
Shows the “Delivery address” field.
string
Offer title displayed inside the Flow. Used when
formType=registration_offer.string
Offer description displayed inside the Flow. Used when
formType=registration_offer.int
default:"0"
Time in seconds to wait before sending. During the interval, the server shows the “typing…” indicator to the recipient.
string
ID of the message to reply to. The original message must belong to the same instance and be saved in the database.
boolean
default:"false"
When
true and replyTo points to a message originating from a group, the reply is redirected to the private chat of the original author.string
default:"api"
Origin identifier for traceability (e.g.,
crm, landing-sales, n8n).Notes
- The
contact_detailsandregistration_offerFlows are pre-approved WhatsApp templates ready to use. If you need a form with specific fields (custom questions, screen logic), usebuttonParamsJSONwith your own Flow. - The
flowTokenis your identifier to tie the form response back to the originating record (lead, order, etc.). If you don’t send one, save the auto-generated UUID so you can correlate later. - When
buttonParamsJSONis sent, every other Flow-related field is ignored, you take full control of the payload, includingflow_id,flow_action,flow_action_payloadandflow_message_version. - Native Flow only works in 1-to-1 chats (
@s.whatsapp.net) and groups (@g.us); newsletters (@newsletter) are not supported by WhatsApp. - The form response arrives as an
interactive_responseevent, it isn’t a regular text message, so handle the webhook accordingly.
Errors
Error envelope: