Analytics
GET /whatsapp-flows/{id}/analytics returns the funnel of one flow over a date range. Scope: whatsapp_flows:read.
| Query | Notes |
|---|---|
date_from | ISO date or date-time. Default: 30 days before date_to. |
date_to | ISO date or date-time, inclusive day. Default: now. |
The range may span at most one year, and date_from must be before date_to (422 invalid_date_range).
curl "https://api.sendseven.com/api/v1/whatsapp-flows/0f9e8d7c-…/analytics?date_from=2026-09-01&date_to=2026-09-30" \
-H "Authorization: Bearer s7_api_a1b2c3d4e5f6789012345678abcdef00"
{
"definition_id": "0f9e8d7c-…",
"date_from": "2026-09-01T00:00:00Z",
"date_to": "2026-09-30T23:59:59.999999Z",
"funnel": {
"sent": 1200,
"delivered": 0,
"read": 0,
"init": 610,
"completed": 455,
"expired": 0
},
"errors": {
"send_failed": 14,
"error": 6,
"writeback_error": 1
},
"screens": [
{ "screen": "PICK_SERVICE", "views": 610 },
{ "screen": "PICK_SLOT", "views": 520 },
{ "screen": "CONTACT", "views": 471 }
],
"completion_rate": 0.3792,
"open_rate": 0.5083,
"open_to_completion_rate": 0.7459
}
All counts are distinct sessions that had the event in the range.
| Field | Meaning |
|---|---|
funnel.sent | Flow messages accepted by WhatsApp. |
funnel.init | Sessions in which the contact opened the flow. Dynamic flows only: WhatsApp only tells SendSeven about opens through the data endpoint. |
funnel.completed | Submitted flows. |
funnel.delivered | Flow messages that WhatsApp reported as delivered to the contact's phone. A read receipt also counts as delivered. |
funnel.read | Flow messages the contact read. Only counted when the contact has read receipts turned on. |
funnel.expired | Sessions whose expires_at passed without a submission. A session that is completed late counts as both expired and completed. |
errors.send_failed | Sends that WhatsApp rejected. |
errors.error | Data endpoint problems (for example a failing webhook data source) and WhatsApp health alerts. |
errors.writeback_error | Completions whose write-back ended as error or partial (for example a skipped e-mail that belongs to another contact). |
screens | Views per screen, most viewed first. Dynamic flows only. Use it to see where contacts drop off. |
completion_rate | completed / sent, or null without sends. |
open_rate | init / sent (dynamic flows). |
open_to_completion_rate | completed / init (dynamic flows). |
For static flows, use sent, completed and completion_rate. Opens and screen views are not visible because a static flow runs entirely on the phone.
Per-session detail
The sessions API lists each send with its status, answers, last screen and write-back result. Filter by status=completed to export answers, or by contact_id to see one contact's history.