Workflow funnel overlay
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.
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. Every send node that has sent mail appears; one whose mail has no SES event yet reports it all as pending. A sent count in sends means SES accepted the call, not that the mail arrived: rendering_failed counts the messages SES accepted and then could not render (typically a merge variable missing from the template data), which were never delivered. Webhook outcomes are in webhooks, never here.
Each entry in engagement:
node_path string required sent integer<int64> optional Distinct messages this node handed to SES.
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.
rendering_failed integer<int64> optional Messages SES accepted and then could not render, so never delivered (a Rendering Failure event — usually a merge variable the template uses that the send did not supply).
pending integer<int64> optional Messages with no delivery, bounce, reject or rendering failure reported yet.
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 code is internal_error. The
request_id field can be quoted to SendOps support to investigate.
application/problem+json