Skip to main content
Reply flows are a beta. Your team must be enrolled before the API accepts reply flow requests; other teams receive 403 feature_unavailable.
A reply flow is a short, fixed conversation that starts when a recipient replies to a campaign message. Each step can send one message and then waits for the recipient’s next reply. The reply decides which step runs next.

How a reply flow runs

  1. Create a reply flow revision with the Messaging API (Create project campaign reply flow) or the Platform API (Create campaign reply flow).
  2. Attach it to a draft or scheduled campaign (Messaging, Platform).
  3. When a campaign message is sent, the flow starts for that recipient on the entry step, which sends nothing and waits for the first reply.
  4. A reply that matches one of the step’s branches moves the recipient to the next step, which sends its message. A reply that matches nothing is ignored.
STOP and START replies are handled first and never move a flow forward. When your team has STOP/START keyword capture on, your own opt-out and opt-in keywords also take precedence: a flow branch on one of those words never fires. A recipient on your opt-out list receives no reply flow messages, and opting out ends their flow.

Limits

A revision cannot be edited. To change a flow, create a new revision with the same flowKey and a higher revision, then attach it to a new campaign. A launched campaign keeps the revision it launched with.

Branches

Each branch has a match and the step it moves to:
  • choice: the recipient tapped a reply button (replyKind: "button") or a list row (replyKind: "list") with this id. A step that sends buttons or a list can branch only on the choices it offers.
  • keyword: the reply text equals this keyword, ignoring case. A reply that quotes the step’s message always counts. An unquoted reply counts only when this is the recipient’s only waiting flow and no other campaign message reached them since the step’s message. Built-in STOP and START words cannot be flow keywords.
  • flow_submission: the recipient submitted the Flow form this step sent. Polymorfa does not store the form answers.

Messages a step can send

A flow_form step on a linked number ends the recipient’s flow without sending. Follow-up messages use the same sending checks, funding, and number protection as other messages from that number. If Polymorfa cannot confirm whether a follow-up message reached WhatsApp, it never sends it again. It checks the send record: a confirmed send continues the flow, and a message that was never sent, or a flow that reaches its 24-hour lifetime first, ends the flow.

Example

Button and list replies also reach your webhooks as message.received events with payload.replyChoice. See Webhooks.