Flows

WhatsApp Flows let you send structured, multi-step experiences inside WhatsApp.

The important part of this API is that you do not need to call Meta directly for Flow management. Use your organization API key and our API will use the stored WABA credentials internally.


What You Can Do

All Flow management endpoints are scoped under:

/v1/wabas/{wabaId}/flows


Golden Path

  1. Create the Flow shell with POST /v1/wabas/{wabaId}/flows
  2. Replace the JSON with PUT /v1/wabas/{wabaId}/flows/{flowId}/json
  3. Preview it with GET /v1/wabas/{wabaId}/flows/{flowId}/preview
  4. Publish it with POST /v1/wabas/{wabaId}/flows/{flowId}/publish
  5. Send it to a user with a normal type: "flow" message

Create a Flow

POST /v1/wabas/{wabaId}/flows

{
  "name": "Fint Discovery Sandbox",
  "categories": ["LEAD_GENERATION", "OTHER"],
  "flowJson": {
    "version": "7.1",
    "routing_model": {
      "DISCOVER_SCREEN": ["CONFIRM_SCREEN"],
      "CONFIRM_SCREEN": []
    },
    "screens": [
      {
        "id": "DISCOVER_SCREEN",
        "title": "Descubri eventos",
        "layout": {
          "type": "SingleColumnLayout",
          "children": []
        }
      },
      {
        "id": "CONFIRM_SCREEN",
        "title": "Confirmar",
        "terminal": true,
        "success": true,
        "layout": {
          "type": "SingleColumnLayout",
          "children": []
        }
      }
    ]
  }
}

Example response:

{
  "data": {
    "id": "123456789012345",
    "name": "Fint Discovery Sandbox",
    "status": "DRAFT",
    "categories": ["LEAD_GENERATION", "OTHER"],
    "validationErrors": null,
    "jsonVersion": "7.1",
    "dataApiVersion": null,
    "endpointUri": null,
    "preview": null,
    "raw": {}
  }
}

Replace Flow JSON

PUT /v1/wabas/{wabaId}/flows/{flowId}/json

This endpoint is intentionally simpler than Meta's asset upload API. You send JSON directly:

{
  "fileName": "fint-discovery-v1.json",
  "flowJson": {
    "version": "7.1",
    "screens": []
  }
}

Preview a Flow

GET /v1/wabas/{wabaId}/flows/{flowId}/preview

Returns the raw preview payload from Meta so you can validate compilation and preview metadata.


Publish a Flow

POST /v1/wabas/{wabaId}/flows/{flowId}/publish

Once published, you can send the Flow in a normal outbound message:

{
  "type": "flow",
  "to": "5491155551234",
  "bodyText": "Te ayudo a descubrir el mejor evento",
  "flowToken": "session_123",
  "flowId": "123456789012345",
  "flowCta": "Buscar eventos",
  "flowAction": "navigate",
  "screen": "DISCOVER_SCREEN",
  "data": {
    "source": "fint-bot"
  }
}

See the Sending Messages guide for the full outbound message format.


Notes