How to Set Up WhatsApp Flows Checkout
ProfilePilot Team | Aug 28, 2026 | 11 min read
Configure encrypted Flow endpoints, sign keys on Meta, publish a retail checkout Flow, and send it from Marketing templates or Manager tests.
Step 1: What Flows checkout is
WhatsApp Flows are multi-screen experiences inside WhatsApp (catalog pick → fulfillment → date/address → payment).
ProfilePilot B2C retail checkout Flow (`pp_retail_checkout_v1`) creates the same `whatsapp_orders` rows as conversational chat.
Use Flows when you want a structured UI; keep chat checkout for quick reorders and AI browse.
Requires:
- WhatsApp Commerce + retail catalog mirrored to `whatsapp_products` (run catalog sync first)
- Encrypted data_exchange endpoint on ProfilePilot
- RSA keypair signed on the same phone_number_id that sends templates
Step 2: Generate keys and endpoint URL
Open WhatsApp Orders → Flows:
- Click Generate keypair (stored encrypted per org).
- Copy the endpoint URL — format:
`https://profilepilotapp.com/api/whatsapp/flows?org_id=<your-org-uuid>`
- Click Sign public key on Meta (uses connected `phone_number_id`).
Critical: `org_id` in the URL must match the organisation whose keypair you signed. Mixing Actonia lab keys with a client org breaks decryption (health check 421 Decryption failed).
Verify keypair runs an encrypted ping against Meta.
Reference Flow JSON for Manager import lives in the repo: `docs/whatsapp_flow_retail_checkout.json`.
Screen ids: `CATALOG` → `FULFILLMENT` → `DATE` or `ADDRESS` → `PAYMENT`. Responses use `"version": "3.0"`.
Step 3: Create the Flow in WhatsApp Manager
In WhatsApp Manager → Flows:
- Create Flow → Endpoint type (not fully static Navigate-only).
- Paste endpoint URL with correct `org_id`.
- Import screens from ProfilePilot JSON or rebuild matching screen ids.
- Publish Flow and link it to a MARKETING template button (category Marketing) or test from Manager.
Manager “Send flow” test:
- Choose Request data (not “No data”) so INIT loads catalog from ProfilePilot.
- Pick the connected business phone number.
Empty product dropdown usually means: catalog sync not run, products `is_available = false`, or wrong org in endpoint URL.
Step 4: Marketing template with Flow button
Create template in Manager on the client WABA:
- Category: MARKETING
- Button: Flow
- Flow starts with → Network request (Data exchange) — not “Pre-defined screen → Choose items”
ProfilePilot campaign send supplies `flow_token` only (`pp.v1.<base64url>`). Do not add `flow_action` on template sends — Graph rejects unexpected keys.
Sync template in Marketing → WhatsApp → Sync templates, then compose a campaign with that template.
For manual API debugging, build token via ProfilePilot Flows card or server helper for the target org + recipient WA id.
Step 5: CATALOG screen and product titles
INIT `data_exchange` returns available products from `whatsapp_products` as dropdown entries:
- id = SKU (stable for Meta 30-char limits)
- title = product name truncated to 30 characters
Checkout resolves SKU → internal UUID when completing the order.
Product images in Flow dropdown are not in V1 (text-only Dropdown). Chat product cards still show `image_url`.
Always return `"error_message": ""` on success responses (Meta UI expectation).
Step 6: Troubleshooting
| Issue | Fix | | --- | --- | | Manager test works, template send fails | Template must use Network request; campaign uses synced APPROVED MARKETING template | | `flow_action` Graph error | Remove flow_action from template payload — send flow_token only | | Empty catalog | Sync catalog; confirm org_id; products available | | 421 Decryption failed | Regenerate keys on production domain; re-sign on same phone_number_id | | Duplicate orders | Same flow_token is idempotent — check `whatsapp_orders.flow_token` unique index | | Payment screen missing methods | Configure Payments tab for org |
After submit, order appears in WhatsApp Orders → Kitchen Queue like chat checkout. Sprint 7 (Lead/Survey flows → Smart Inbox) is separate from retail checkout.
Keep learning
See the latest guides, experiments, and rollouts.