Workflow funnel overlay

Search Documentation

Search across all developer documentation

workflows

Workflow funnel overlay

GET /v1/workflows/{id}/funnel
Auth required api.workflows.view

Per-node funnel aggregates (runs and entries per node) plus per-send-node outcome counts, for one definition version. Defaults to the current version; pin an older one with ?version=.

webhooks[] is the same shape for call webhook steps — how many calls at each node were delivered, failed or (in shadow) merely recorded. It is a sibling of sends[] rather than a result inside it, because a call reaches an external system rather than a mailbox.

Path parameters

id string required

The workflow's UUID or, when the value does not parse as a UUID, its org-unique key. Unknown handles read as 404 not_found. Accepted on every workflow route, read and write alike.

Query parameters

version integer optional

Definition version to aggregate (default the current version).

Responses

Errors follow the RFC 7807 problem format — see the error reference.

200 The funnel overlay application/json
definition_version integer required
nodes array<object> required

Each entry in nodes:

node_path string required
runs integer<int64> required

Distinct journeys through the node.

entries integer<int64> required

Total passes (repeat iterations included).

sends array<object> required

Each entry in sends:

node_path string required
result string required

sent, filtered, failed or deferred for a live run; for a workflow running in shadow, shadowed (the mail it would have sent) and shadowed_filtered (the mail its own consent re-check would have stopped). A rehearsal is deliberately never counted as sent.

count integer<int64> required
webhooks array<object> required

Per-call webhook-node outcome counts. Its own array rather than values inside sends, because a call is not a send: it reaches an external system and the counts answer a different question. Empty for a workflow with no call webhook step.

Each entry in webhooks:

node_path string required
result string required

delivered (the endpoint answered 2xx) or failed (it answered no, could not be reached, or the deadline passed — the run took the failed: arm) for a live run; for a workflow running in shadow, shadowed (the call it would have made). A rehearsal is deliberately never counted as delivered.

count integer<int64> required
engagement array<object> required

What happened to each send node's mail once SES accepted it. Every figure counts distinct messages, so a message opened twice is one unique open. Covers every send the node has made, including those made before this field existed. A send node whose mail has no delivery, open, click, bounce or complaint yet is absent. Webhook outcomes are in webhooks, never here.

Each entry in engagement:

node_path string required
delivered integer<int64> required

Messages SES delivered to the recipient's mail server.

unique_opens integer<int64> required

Messages opened at least once.

unique_clicks integer<int64> required

Messages with at least one tracked link click.

bounces integer<int64> required

Messages that bounced.

complaints integer<int64> required

Messages the recipient marked as spam.

401 Missing, malformed, or unknown API key application/problem+json
403 Key lacks the required scope or plan limit violated application/problem+json
404 Resource not found application/problem+json
422 A query parameter, path value or body field failed validation. The body is a validation_failed Problem. When the refusal is about a reference — a segment key, template slug, topic or attribute name the organization does not have — it additionally carries validation_code, field, line/column, missing, candidates and next_step, so a client can correct the call without a second round of guessing. See ValidationProblem. application/problem+json
429 Per-org rate limit exceeded application/problem+json
500 Unexpected server-side failure. The code is internal_error. The request_id field can be quoted to SendOps support to investigate. application/problem+json