One flow’s performance over a period: the combined email + SMS stat
set plus a per-node breakdown of each email and SMS message step.
Configuration — trigger, filters, re-entry behavior, branch graph — is
/v1/flows/{id}. The per-node uuids match that response’s node uuids,
which is how a message step is placed in the flow graph; a step the flow
no longer contains has no counterpart there.
Target a subaccount instead of the main connected account.
Pass a subaccount id from get_account's subaccounts list. Only direct subaccounts
of the connected account are reachable — omit this for the main account itself.
The flow's unique identifier (returned as flow_id in report responses and id in flow responses). Ids are opaque public strings — a numeric id from a Privy dashboard URL is not a valid API id and will 404; list flows and match by title instead.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Privy Knowledge Base","colors":{"primary":"#254E5A","light":"#E3E32B","dark":"#254E5A"},"logo":{"light":"https://mintcdn.com/privy/fGrkZt933tBjY_zl/logo/light.svg?fit=max\u0026auto=format\u0026n=fGrkZt933tBjY_zl\u0026q=85\u0026s=36a01db426b7c94fac423778765cd517","dark":"https://mintcdn.com/privy/fGrkZt933tBjY_zl/logo/dark.svg?fit=max\u0026auto=format\u0026n=fGrkZt933tBjY_zl\u0026q=85\u0026s=24576b53a928bf065f4a636ab8dc3431"},"favicon":"https://mintcdn.com/privy/fGrkZt933tBjY_zl/logo/favicon.svg?fit=max\u0026auto=format\u0026n=fGrkZt933tBjY_zl\u0026q=85\u0026s=9fee6eb5a3c74b929294365e07a3f01d","background":{"color":{"light":"#FFF","dark":"#0D1D23"}},"navbar":{"links":[{"href":"https://www.privy.com/pricing","label":"Pricing"},{"href":"mailto:support@privy.com","label":"Contact Support"}],"primary":{"type":"button","label":"Login","href":"https://dashboard.privy.com"}},"footer":{"socials":{"x":"https://x.com/privy","linkedin":"https://www.linkedin.com/company/privy"}},"seo":{"indexing":"all"},"fonts":{"heading":{"family":"Matter","weight":650,"source":"https://public-assets.privy.com/MatterStandard-VF.woff2","format":"woff2"},"body":{"family":"Matter","weight":400,"source":"https://public-assets.privy.com/MatterStandard-VF.woff2","format":"woff2"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"privy","hasAudioNarration":false,"actualSubdomain":"privy","customDomains":["help.privy.com"],"gitSource":{"type":"github","owner":"privy","repo":"mintlify-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true,"issues":true,"edits":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"REMOVE_BRANDING":{"status":"ENABLED"},"CONTEXTUAL_FEEDBACK":{"status":"ENABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af3ac7069be62302954224f","clientVersion":"0.0.4111","searchFilterCounts":[{"language":"default","tag":"Learn","count":275},{"language":"default","tag":"Developer","count":49},{"language":"default","tag":"Integrations","count":30},{"language":"default","tag":"Strategy Guides","count":24},{"language":"default","tag":"Flows","count":18},{"language":"default","tag":"Account + Billing","count":18},{"language":"default","tag":"Contacts","count":17},{"language":"default","tag":"Displays","count":15},{"language":"default","tag":"Deliverability","count":11},{"language":"default","tag":"Content","count":10}]},"assistantConfig":{},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"@font-face{font-family:\"Matter\";src:url(\"https://public-assets.privy.com/MatterStandard-VF.woff2\") format(\"woff2\");font-display:swap;font-style:normal;font-weight:600}.mdx-content strong,.mdx-content b{font-weight:600}.mdx-content em,.mdx-content i{font-style:italic}"}],"page":{"pagePath":"docs/api-reference/get-flow-performance","slug":"/docs/api-reference/get-flow-performance","pageMetadata":{"title":"Get flow performance","openapi":"openapi/privy-api.yaml GET /reports/flows/{flow_id}","description":"One flow's performance over a period: the combined email + SMS stat\nset plus a per-node breakdown of each email and SMS message step.\n\nConfiguration — trigger, filters, re-entry behavior, branch graph — is\n`/v1/flows/{id}`. The per-node `uuid`s match that response's node `uuid`s,\nwhich is how a message step is placed in the flow graph; a step the flow\nno longer contains has no counterpart there.\n\n**Required scope:** `reports_read`\n","href":"/docs/api-reference/get-flow-performance"},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n strong: \"strong\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"One flow’s performance over a period: the combined email + SMS stat\\nset plus a per-node breakdown of each email and SMS message step.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Configuration — trigger, filters, re-entry behavior, branch graph — is\\n\", _jsx(_components.code, {\n children: \"/v1/flows/{id}\"\n }), \". The per-node \", _jsx(_components.code, {\n children: \"uuid\"\n }), \"s match that response’s node \", _jsx(_components.code, {\n children: \"uuid\"\n }), \"s,\\nwhich is how a message step is placed in the flow graph; a step the flow\\nno longer contains has no counterpart there.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Required scope:\"\n }), \" \", _jsx(_components.code, {\n children: \"reports_read\"\n })]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Get flow performance","openapi":"openapi/privy-api.yaml GET /reports/flows/{flow_id}","description":"One flow's performance over a period: the combined email + SMS stat\nset plus a per-node breakdown of each email and SMS message step.\n\nConfiguration — trigger, filters, re-entry behavior, branch graph — is\n`/v1/flows/{id}`. The per-node `uuid`s match that response's node `uuid`s,\nwhich is how a message step is placed in the flow graph; a step the flow\nno longer contains has no counterpart there.\n\n**Required scope:** `reports_read`\n","href":"/docs/api-reference/get-flow-performance"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"getFlowReport","summary":"Get flow performance","description":"One flow's performance over a period: the combined email + SMS stat\nset plus a per-node breakdown of each email and SMS message step.\n\nConfiguration — trigger, filters, re-entry behavior, branch graph — is\n`/v1/flows/{id}`. The per-node `uuid`s match that response's node `uuid`s,\nwhich is how a message step is placed in the flow graph; a step the flow\nno longer contains has no counterpart there.\n\n**Required scope:** `reports_read`\n","tags":["Reports"],"security":["304f82fe-62af-49a5-a61e-9c079340e85d"],"parameters":["341750d4-54d5-4da5-aadb-bb99e9a9d150","f7d61318-6ac4-45c5-a496-e57f6d77817a","74fd6098-c9af-4959-8143-cc9abd1ab97b","891ee0af-ac32-44be-af10-ce299577da99","3c9179d4-4853-4f38-8d25-3c422141a99b"],"responses":{"200":"d1b9b55b-ff48-4737-b06b-70dc919666f6","401":"aa4bffe6-4cbf-4112-9e03-04bed7fbeb30","403":"3a7b6af0-fa30-43e9-b42d-9f831e637331","404":"d630ad27-f3b1-4ba8-8b00-243b4e794c37","422":"e0ff1f78-3c94-488a-a092-6ff51894012e","429":"c7f6e2e5-0bfe-4716-af56-84a10d0889e4"},"method":"get","type":"path","servers":["97f63e03-f020-41b7-a5b9-e312bbfed47d"],"path":"/reports/flows/{flow_id}","baseUrlOptions":["https://api.privy.com/v1"],"title":"Get flow performance","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"341750d4-54d5-4da5-aadb-bb99e9a9d150":{"name":"Privy-Account-Id","in":"header","required":false,"description":"Target a subaccount instead of the main connected account.\nPass a subaccount `id` from get_account's `subaccounts` list. Only direct subaccounts\nof the connected account are reachable — omit this for the main account itself.\n","schema":{"type":"string","isRequired":false,"description":"Target a subaccount instead of the main connected account.\nPass a subaccount `id` from get_account's `subaccounts` list. Only direct subaccounts\nof the connected account are reachable — omit this for the main account itself.\n","uniqueKey":"","typeLabel":"string"},"example":"S1U2B3A4C5C6T7"},"f7d61318-6ac4-45c5-a496-e57f6d77817a":{"name":"flow_id","in":"path","required":true,"description":"The flow's unique identifier (returned as `flow_id` in report responses and `id` in flow responses). Ids are opaque public strings — a numeric id from a Privy dashboard URL is not a valid API id and will 404; list flows and match by title instead.","schema":{"type":"string","isRequired":true,"description":"The flow's unique identifier (returned as `flow_id` in report responses and `id` in flow responses). Ids are opaque public strings — a numeric id from a Privy dashboard URL is not a valid API id and will 404; list flows and match by title instead.","uniqueKey":"","typeLabel":"string"},"example":"Vq7L3mN9xR"},"74fd6098-c9af-4959-8143-cc9abd1ab97b":{"name":"period","in":"query","description":"The date range to report over, resolved in the account's time zone. Pass `custom` together with `start_date` and `end_date`.","schema":{"type":"string","enum":["last_7_days","last_30_days","last_90_days","this_month","last_month","custom"],"default":"last_30_days","description":"The date range to report over, resolved in the account's time zone. Pass `custom` together with `start_date` and `end_date`.","uniqueKey":"","typeLabel":"enum\u003cstring>"},"example":"last_30_days"},"891ee0af-ac32-44be-af10-ce299577da99":{"name":"start_date","in":"query","description":"Inclusive start of a `custom` period (ISO 8601 date). Required when `period=custom`, ignored otherwise.","schema":{"type":"string","format":"date","description":"Inclusive start of a `custom` period (ISO 8601 date). Required when `period=custom`, ignored otherwise.","uniqueKey":"","typeLabel":"string\u003cdate>"},"example":"2026-06-01"},"3c9179d4-4853-4f38-8d25-3c422141a99b":{"name":"end_date","in":"query","description":"Inclusive end of a `custom` period (ISO 8601 date). Required when `period=custom`, ignored otherwise. Custom periods are capped at 366 days.","schema":{"type":"string","format":"date","description":"Inclusive end of a `custom` period (ISO 8601 date). Required when `period=custom`, ignored otherwise. Custom periods are capped at 366 days.","uniqueKey":"","typeLabel":"string\u003cdate>"},"example":"2026-06-30"}},"responses":{"d1b9b55b-ff48-4737-b06b-70dc919666f6":{"description":"The flow's performance over the resolved period.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"flow_id":{"type":"string","description":"The flow's unique identifier. Use this value in `/v1/reports/flows/{flow_id}` and `/v1/flows/{id}`.","example":"Vq7L3mN9xR","uniqueKey":"data.flow_id","typeLabel":"string"},"title":{"oneOf":[{"type":"string","example":"Abandoned Cart Recovery","uniqueKey":"data.title.oneOf.0","typeLabel":"string"},{"type":"null","example":"Abandoned Cart Recovery","uniqueKey":"data.title.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.title","typeLabel":"string | null"},"status":{"type":"string","enum":["draft","active","inactive"],"example":"active","uniqueKey":"data.status","typeLabel":"enum\u003cstring>"},"trigger_type":{"oneOf":[{"type":"string","description":"Normalized name of the event that starts the flow (e.g. `order_placed`, `cart_abandoned`, `customer_subscribed_to_marketing`) — the same vocabulary `GET /v1/flows` returns.","example":"cart_abandoned","uniqueKey":"data.trigger_type.oneOf.0","typeLabel":"string"},{"type":"null","description":"Normalized name of the event that starts the flow (e.g. `order_placed`, `cart_abandoned`, `customer_subscribed_to_marketing`) — the same vocabulary `GET /v1/flows` returns.","example":"cart_abandoned","uniqueKey":"data.trigger_type.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.trigger_type","typeLabel":"string | null"},"trigger_label":{"oneOf":[{"type":"string","description":"Human-readable form of `trigger_type`.","example":"Cart abandoned","uniqueKey":"data.trigger_label.oneOf.0","typeLabel":"string"},{"type":"null","description":"Human-readable form of `trigger_type`.","example":"Cart abandoned","uniqueKey":"data.trigger_label.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.trigger_label","typeLabel":"string | null"},"channels":{"oneOf":[{"type":"string","enum":["email","sms","multi",null],"description":"Message channels the flow sends on. `null` when the flow has no message nodes.","example":"multi","uniqueKey":"data.channels.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["email","sms","multi",null],"description":"Message channels the flow sends on. `null` when the flow has no message nodes.","example":"multi","uniqueKey":"data.channels.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.channels","typeLabel":"enum\u003cstring> | null"},"current_enrollment":{"type":"object","description":"Contacts with a journey in progress right now — a point-in-time count,\nnot scoped to the report period, and at most one journey per contact.\n","properties":{"value":{"type":"number","example":42,"uniqueKey":"data.current_enrollment.value","typeLabel":"number"},"unit":{"type":"string","description":"`count`, `percent`, or a lowercased ISO 4217 currency code.","example":"count","uniqueKey":"data.current_enrollment.unit","typeLabel":"string"}},"uniqueKey":"data.current_enrollment","typeLabel":"object"},"stats":{"type":"object","description":"Combined email + SMS performance for one flow over the report period,\nsummed across the flow's message nodes. `sent` counts send attempts and\n`delivered` counts provider-confirmed deliveries — separate counters,\nneither derived from the other. `opened` and `clicked` are unique counts\n(contacts who opened or clicked at least once within the report period),\nnot totals of every event.\n`open_rate` is `opened` over email deliveries only, since opens do not\nexist for SMS; `click_rate` and `order_rate` are over email and SMS\ndeliveries combined. `attributed_orders` and `attributed_revenue` credit\nthe flow when one of its messages was the contact's most recent\nengagement — email open, email click, or SMS click — in the 7 days before\nthe order was placed: last-touch attribution, where that single most\nrecent engagement takes the whole order.\n","properties":{"sent":{"type":"object","description":"A single report metric with its unit. `count` values are whole\nnumbers, `percent` values are 0–100 with one decimal. Money metrics\ncarry the account's lowercased ISO 4217 currency code as their unit\n(e.g. `usd`, `eur`, `jpy`) and are expressed in that currency's major\nunits, two decimals. A rate whose denominator was zero reports 0, not\nnull — so 0 does not distinguish \"no activity\" from \"activity that\nnever converted\"; read the underlying counts to tell those apart.\n","properties":{"value":{"type":"number","example":42,"uniqueKey":"data.stats.sent.value","typeLabel":"number"},"unit":{"type":"string","description":"`count`, `percent`, or a lowercased ISO 4217 currency code.","example":"count","uniqueKey":"data.stats.sent.unit","typeLabel":"string"}},"uniqueKey":"data.stats.sent","typeLabel":"object"},"delivered":{"type":"object","description":"A single report metric with its unit. `count` values are whole\nnumbers, `percent` values are 0–100 with one decimal. Money metrics\ncarry the account's lowercased ISO 4217 currency code as their unit\n(e.g. `usd`, `eur`, `jpy`) and are expressed in that currency's major\nunits, two decimals. A rate whose denominator was zero reports 0, not\nnull — so 0 does not distinguish \"no activity\" from \"activity that\nnever converted\"; read the underlying counts to tell those apart.\n","properties":{"value":{"type":"number","example":42,"uniqueKey":"data.stats.delivered.value","typeLabel":"number"},"unit":{"type":"string","description":"`count`, `percent`, or a lowercased ISO 4217 currency code.","example":"count","uniqueKey":"data.stats.delivered.unit","typeLabel":"string"}},"uniqueKey":"data.stats.delivered","typeLabel":"object"},"opened":{"type":"object","description":"A single report metric with its unit. `count` values are whole\nnumbers, `percent` values are 0–100 with one decimal. Money metrics\ncarry the account's lowercased ISO 4217 currency code as their unit\n(e.g. `usd`, `eur`, `jpy`) and are expressed in that currency's major\nunits, two decimals. A rate whose denominator was zero reports 0, not\nnull — so 0 does not distinguish \"no activity\" from \"activity that\nnever converted\"; read the underlying counts to tell those apart.\n","properties":{"value":{"type":"number","example":42,"uniqueKey":"data.stats.opened.value","typeLabel":"number"},"unit":{"type":"string","description":"`count`, `percent`, or a lowercased ISO 4217 currency code.","example":"count","uniqueKey":"data.stats.opened.unit","typeLabel":"string"}},"uniqueKey":"data.stats.opened","typeLabel":"object"},"clicked":{"type":"object","description":"A single report metric with its unit. `count` values are whole\nnumbers, `percent` values are 0–100 with one decimal. Money metrics\ncarry the account's lowercased ISO 4217 currency code as their unit\n(e.g. `usd`, `eur`, `jpy`) and are expressed in that currency's major\nunits, two decimals. A rate whose denominator was zero reports 0, not\nnull — so 0 does not distinguish \"no activity\" from \"activity that\nnever converted\"; read the underlying counts to tell those apart.\n","properties":{"value":{"type":"number","example":42,"uniqueKey":"data.stats.clicked.value","typeLabel":"number"},"unit":{"type":"string","description":"`count`, `percent`, or a lowercased ISO 4217 currency code.","example":"count","uniqueKey":"data.stats.clicked.unit","typeLabel":"string"}},"uniqueKey":"data.stats.clicked","typeLabel":"object"},"open_rate":{"type":"object","description":"A single report metric with its unit. `count` values are whole\nnumbers, `percent` values are 0–100 with one decimal. Money metrics\ncarry the account's lowercased ISO 4217 currency code as their unit\n(e.g. `usd`, `eur`, `jpy`) and are expressed in that currency's major\nunits, two decimals. A rate whose denominator was zero reports 0, not\nnull — so 0 does not distinguish \"no activity\" from \"activity that\nnever converted\"; read the underlying counts to tell those apart.\n","properties":{"value":{"type":"number","example":42,"uniqueKey":"data.stats.open_rate.value","typeLabel":"number"},"unit":{"type":"string","description":"`count`, `percent`, or a lowercased ISO 4217 currency code.","example":"count","uniqueKey":"data.stats.open_rate.unit","typeLabel":"string"}},"uniqueKey":"data.stats.open_rate","typeLabel":"object"},"click_rate":{"type":"object","description":"A single report metric with its unit. `count` values are whole\nnumbers, `percent` values are 0–100 with one decimal. Money metrics\ncarry the account's lowercased ISO 4217 currency code as their unit\n(e.g. `usd`, `eur`, `jpy`) and are expressed in that currency's major\nunits, two decimals. A rate whose denominator was zero reports 0, not\nnull — so 0 does not distinguish \"no activity\" from \"activity that\nnever converted\"; read the underlying counts to tell those apart.\n","properties":{"value":{"type":"number","example":42,"uniqueKey":"data.stats.click_rate.value","typeLabel":"number"},"unit":{"type":"string","description":"`count`, `percent`, or a lowercased ISO 4217 currency code.","example":"count","uniqueKey":"data.stats.click_rate.unit","typeLabel":"string"}},"uniqueKey":"data.stats.click_rate","typeLabel":"object"},"attributed_orders":{"type":"object","description":"A single report metric with its unit. `count` values are whole\nnumbers, `percent` values are 0–100 with one decimal. Money metrics\ncarry the account's lowercased ISO 4217 currency code as their unit\n(e.g. `usd`, `eur`, `jpy`) and are expressed in that currency's major\nunits, two decimals. A rate whose denominator was zero reports 0, not\nnull — so 0 does not distinguish \"no activity\" from \"activity that\nnever converted\"; read the underlying counts to tell those apart.\n","properties":{"value":{"type":"number","example":42,"uniqueKey":"data.stats.attributed_orders.value","typeLabel":"number"},"unit":{"type":"string","description":"`count`, `percent`, or a lowercased ISO 4217 currency code.","example":"count","uniqueKey":"data.stats.attributed_orders.unit","typeLabel":"string"}},"uniqueKey":"data.stats.attributed_orders","typeLabel":"object"},"attributed_revenue":{"type":"object","description":"A single report metric with its unit. `count` values are whole\nnumbers, `percent` values are 0–100 with one decimal. Money metrics\ncarry the account's lowercased ISO 4217 currency code as their unit\n(e.g. `usd`, `eur`, `jpy`) and are expressed in that currency's major\nunits, two decimals. A rate whose denominator was zero reports 0, not\nnull — so 0 does not distinguish \"no activity\" from \"activity that\nnever converted\"; read the underlying counts to tell those apart.\n","properties":{"value":{"type":"number","example":42,"uniqueKey":"data.stats.attributed_revenue.value","typeLabel":"number"},"unit":{"type":"string","description":"`count`, `percent`, or a lowercased ISO 4217 currency code.","example":"count","uniqueKey":"data.stats.attributed_revenue.unit","typeLabel":"string"}},"uniqueKey":"data.stats.attributed_revenue","typeLabel":"object"},"order_rate":{"type":"object","description":"A single report metric with its unit. `count` values are whole\nnumbers, `percent` values are 0–100 with one decimal. Money metrics\ncarry the account's lowercased ISO 4217 currency code as their unit\n(e.g. `usd`, `eur`, `jpy`) and are expressed in that currency's major\nunits, two decimals. A rate whose denominator was zero reports 0, not\nnull — so 0 does not distinguish \"no activity\" from \"activity that\nnever converted\"; read the underlying counts to tell those apart.\n","properties":{"value":{"type":"number","example":42,"uniqueKey":"data.stats.order_rate.value","typeLabel":"number"},"unit":{"type":"string","description":"`count`, `percent`, or a lowercased ISO 4217 currency code.","example":"count","uniqueKey":"data.stats.order_rate.unit","typeLabel":"string"}},"uniqueKey":"data.stats.order_rate","typeLabel":"object"},"average_order_value":{"type":"object","description":"A single report metric with its unit. `count` values are whole\nnumbers, `percent` values are 0–100 with one decimal. Money metrics\ncarry the account's lowercased ISO 4217 currency code as their unit\n(e.g. `usd`, `eur`, `jpy`) and are expressed in that currency's major\nunits, two decimals. A rate whose denominator was zero reports 0, not\nnull — so 0 does not distinguish \"no activity\" from \"activity that\nnever converted\"; read the underlying counts to tell those apart.\n","properties":{"value":{"type":"number","example":42,"uniqueKey":"data.stats.average_order_value.value","typeLabel":"number"},"unit":{"type":"string","description":"`count`, `percent`, or a lowercased ISO 4217 currency code.","example":"count","uniqueKey":"data.stats.average_order_value.unit","typeLabel":"string"}},"uniqueKey":"data.stats.average_order_value","typeLabel":"object"},"unsubscribed":{"type":"object","description":"A single report metric with its unit. `count` values are whole\nnumbers, `percent` values are 0–100 with one decimal. Money metrics\ncarry the account's lowercased ISO 4217 currency code as their unit\n(e.g. `usd`, `eur`, `jpy`) and are expressed in that currency's major\nunits, two decimals. A rate whose denominator was zero reports 0, not\nnull — so 0 does not distinguish \"no activity\" from \"activity that\nnever converted\"; read the underlying counts to tell those apart.\n","properties":{"value":{"type":"number","example":42,"uniqueKey":"data.stats.unsubscribed.value","typeLabel":"number"},"unit":{"type":"string","description":"`count`, `percent`, or a lowercased ISO 4217 currency code.","example":"count","uniqueKey":"data.stats.unsubscribed.unit","typeLabel":"string"}},"uniqueKey":"data.stats.unsubscribed","typeLabel":"object"},"bounced":{"type":"object","description":"A single report metric with its unit. `count` values are whole\nnumbers, `percent` values are 0–100 with one decimal. Money metrics\ncarry the account's lowercased ISO 4217 currency code as their unit\n(e.g. `usd`, `eur`, `jpy`) and are expressed in that currency's major\nunits, two decimals. A rate whose denominator was zero reports 0, not\nnull — so 0 does not distinguish \"no activity\" from \"activity that\nnever converted\"; read the underlying counts to tell those apart.\n","properties":{"value":{"type":"number","example":42,"uniqueKey":"data.stats.bounced.value","typeLabel":"number"},"unit":{"type":"string","description":"`count`, `percent`, or a lowercased ISO 4217 currency code.","example":"count","uniqueKey":"data.stats.bounced.unit","typeLabel":"string"}},"uniqueKey":"data.stats.bounced","typeLabel":"object"},"sms_opted_out":{"type":"object","description":"A single report metric with its unit. `count` values are whole\nnumbers, `percent` values are 0–100 with one decimal. Money metrics\ncarry the account's lowercased ISO 4217 currency code as their unit\n(e.g. `usd`, `eur`, `jpy`) and are expressed in that currency's major\nunits, two decimals. A rate whose denominator was zero reports 0, not\nnull — so 0 does not distinguish \"no activity\" from \"activity that\nnever converted\"; read the underlying counts to tell those apart.\n","properties":{"value":{"type":"number","example":42,"uniqueKey":"data.stats.sms_opted_out.value","typeLabel":"number"},"unit":{"type":"string","description":"`count`, `percent`, or a lowercased ISO 4217 currency code.","example":"count","uniqueKey":"data.stats.sms_opted_out.unit","typeLabel":"string"}},"uniqueKey":"data.stats.sms_opted_out","typeLabel":"object"},"sms_failed":{"type":"object","description":"A single report metric with its unit. `count` values are whole\nnumbers, `percent` values are 0–100 with one decimal. Money metrics\ncarry the account's lowercased ISO 4217 currency code as their unit\n(e.g. `usd`, `eur`, `jpy`) and are expressed in that currency's major\nunits, two decimals. A rate whose denominator was zero reports 0, not\nnull — so 0 does not distinguish \"no activity\" from \"activity that\nnever converted\"; read the underlying counts to tell those apart.\n","properties":{"value":{"type":"number","example":42,"uniqueKey":"data.stats.sms_failed.value","typeLabel":"number"},"unit":{"type":"string","description":"`count`, `percent`, or a lowercased ISO 4217 currency code.","example":"count","uniqueKey":"data.stats.sms_failed.unit","typeLabel":"string"}},"uniqueKey":"data.stats.sms_failed","typeLabel":"object"}},"uniqueKey":"data.stats","typeLabel":"object"},"period":{"type":"object","description":"The resolved date range the report covers, inclusive, in the account's\ntime zone. Every label except `last_month` ends today, so the last day\nof the range is still in progress: `last_7_days` is the six days before\ntoday plus today, `this_month` runs from the 1st through today, and\n`last_month` is the whole previous calendar month. Custom ranges cannot\nexceed 366 days.\n","properties":{"label":{"type":"string","enum":["last_7_days","last_30_days","last_90_days","this_month","last_month","custom"],"example":"last_30_days","uniqueKey":"data.period.label","typeLabel":"enum\u003cstring>"},"start_date":{"type":"string","format":"date","example":"2026-06-21","uniqueKey":"data.period.start_date","typeLabel":"string\u003cdate>"},"end_date":{"type":"string","format":"date","example":"2026-07-20","uniqueKey":"data.period.end_date","typeLabel":"string\u003cdate>"}},"uniqueKey":"data.period","typeLabel":"object"},"nodes":{"type":"array","description":"Per-node breakdown of the flow's email and SMS message steps.","items":{"type":"object","properties":{"uuid":{"type":"string","example":"7a2f9e1b-5c3d-4d2e-8b4f-3a6c8d9e0f1a","uniqueKey":"data.nodes.items.[INDEX].uuid","typeLabel":"string"},"type":{"type":"string","enum":["email","sms"],"example":"email","uniqueKey":"data.nodes.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"name":{"oneOf":[{"type":"string","example":"Cart reminder email","uniqueKey":"data.nodes.items.[INDEX].name.oneOf.0","typeLabel":"string"},{"type":"null","example":"Cart reminder email","uniqueKey":"data.nodes.items.[INDEX].name.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.nodes.items.[INDEX].name","typeLabel":"string | null"},"subject":{"oneOf":[{"type":"string","description":"The email's subject line. Present on email nodes only.","example":"You left something behind","uniqueKey":"data.nodes.items.[INDEX].subject.oneOf.0","typeLabel":"string"},{"type":"null","description":"The email's subject line. Present on email nodes only.","example":"You left something behind","uniqueKey":"data.nodes.items.[INDEX].subject.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.nodes.items.[INDEX].subject","typeLabel":"string | null"},"stats":{"type":"object","description":"Per-node deliverability and attribution metrics for one message step over\nthe report period. Email nodes carry `opened_unique`, `bounced`, and\n`unsubscribed`; `sms` nodes carry `opted_out` and `failed`; both carry the\nrest. `opened_unique` and `clicked_unique` count contacts who opened or\nclicked at least once, not total opens or clicks. `attributed_orders` and\n`attributed_revenue` credit this node's message under the same last-touch,\n7-day rule as the flow total.\n","properties":{"sent":{"type":"object","description":"A single report metric with its unit. `count` values are whole\nnumbers, `percent` values are 0–100 with one decimal. Money metrics\ncarry the account's lowercased ISO 4217 currency code as their unit\n(e.g. `usd`, `eur`, `jpy`) and are expressed in that currency's major\nunits, two decimals. A rate whose denominator was zero reports 0, not\nnull — so 0 does not distinguish \"no activity\" from \"activity that\nnever converted\"; read the underlying counts to tell those apart.\n","properties":{"value":{"type":"number","example":42,"uniqueKey":"data.nodes.items.[INDEX].stats.sent.value","typeLabel":"number"},"unit":{"type":"string","description":"`count`, `percent`, or a lowercased ISO 4217 currency code.","example":"count","uniqueKey":"data.nodes.items.[INDEX].stats.sent.unit","typeLabel":"string"}},"uniqueKey":"data.nodes.items.[INDEX].stats.sent","typeLabel":"object"},"delivered":{"type":"object","description":"A single report metric with its unit. `count` values are whole\nnumbers, `percent` values are 0–100 with one decimal. Money metrics\ncarry the account's lowercased ISO 4217 currency code as their unit\n(e.g. `usd`, `eur`, `jpy`) and are expressed in that currency's major\nunits, two decimals. A rate whose denominator was zero reports 0, not\nnull — so 0 does not distinguish \"no activity\" from \"activity that\nnever converted\"; read the underlying counts to tell those apart.\n","properties":{"value":{"type":"number","example":42,"uniqueKey":"data.nodes.items.[INDEX].stats.delivered.value","typeLabel":"number"},"unit":{"type":"string","description":"`count`, `percent`, or a lowercased ISO 4217 currency code.","example":"count","uniqueKey":"data.nodes.items.[INDEX].stats.delivered.unit","typeLabel":"string"}},"uniqueKey":"data.nodes.items.[INDEX].stats.delivered","typeLabel":"object"},"opened_unique":{"type":"object","description":"A single report metric with its unit. `count` values are whole\nnumbers, `percent` values are 0–100 with one decimal. Money metrics\ncarry the account's lowercased ISO 4217 currency code as their unit\n(e.g. `usd`, `eur`, `jpy`) and are expressed in that currency's major\nunits, two decimals. A rate whose denominator was zero reports 0, not\nnull — so 0 does not distinguish \"no activity\" from \"activity that\nnever converted\"; read the underlying counts to tell those apart.\n","properties":{"value":{"type":"number","example":42,"uniqueKey":"data.nodes.items.[INDEX].stats.opened_unique.value","typeLabel":"number"},"unit":{"type":"string","description":"`count`, `percent`, or a lowercased ISO 4217 currency code.","example":"count","uniqueKey":"data.nodes.items.[INDEX].stats.opened_unique.unit","typeLabel":"string"}},"uniqueKey":"data.nodes.items.[INDEX].stats.opened_unique","typeLabel":"object"},"clicked_unique":{"type":"object","description":"A single report metric with its unit. `count` values are whole\nnumbers, `percent` values are 0–100 with one decimal. Money metrics\ncarry the account's lowercased ISO 4217 currency code as their unit\n(e.g. `usd`, `eur`, `jpy`) and are expressed in that currency's major\nunits, two decimals. A rate whose denominator was zero reports 0, not\nnull — so 0 does not distinguish \"no activity\" from \"activity that\nnever converted\"; read the underlying counts to tell those apart.\n","properties":{"value":{"type":"number","example":42,"uniqueKey":"data.nodes.items.[INDEX].stats.clicked_unique.value","typeLabel":"number"},"unit":{"type":"string","description":"`count`, `percent`, or a lowercased ISO 4217 currency code.","example":"count","uniqueKey":"data.nodes.items.[INDEX].stats.clicked_unique.unit","typeLabel":"string"}},"uniqueKey":"data.nodes.items.[INDEX].stats.clicked_unique","typeLabel":"object"},"bounced":{"type":"object","description":"A single report metric with its unit. `count` values are whole\nnumbers, `percent` values are 0–100 with one decimal. Money metrics\ncarry the account's lowercased ISO 4217 currency code as their unit\n(e.g. `usd`, `eur`, `jpy`) and are expressed in that currency's major\nunits, two decimals. A rate whose denominator was zero reports 0, not\nnull — so 0 does not distinguish \"no activity\" from \"activity that\nnever converted\"; read the underlying counts to tell those apart.\n","properties":{"value":{"type":"number","example":42,"uniqueKey":"data.nodes.items.[INDEX].stats.bounced.value","typeLabel":"number"},"unit":{"type":"string","description":"`count`, `percent`, or a lowercased ISO 4217 currency code.","example":"count","uniqueKey":"data.nodes.items.[INDEX].stats.bounced.unit","typeLabel":"string"}},"uniqueKey":"data.nodes.items.[INDEX].stats.bounced","typeLabel":"object"},"unsubscribed":{"type":"object","description":"A single report metric with its unit. `count` values are whole\nnumbers, `percent` values are 0–100 with one decimal. Money metrics\ncarry the account's lowercased ISO 4217 currency code as their unit\n(e.g. `usd`, `eur`, `jpy`) and are expressed in that currency's major\nunits, two decimals. A rate whose denominator was zero reports 0, not\nnull — so 0 does not distinguish \"no activity\" from \"activity that\nnever converted\"; read the underlying counts to tell those apart.\n","properties":{"value":{"type":"number","example":42,"uniqueKey":"data.nodes.items.[INDEX].stats.unsubscribed.value","typeLabel":"number"},"unit":{"type":"string","description":"`count`, `percent`, or a lowercased ISO 4217 currency code.","example":"count","uniqueKey":"data.nodes.items.[INDEX].stats.unsubscribed.unit","typeLabel":"string"}},"uniqueKey":"data.nodes.items.[INDEX].stats.unsubscribed","typeLabel":"object"},"opted_out":{"type":"object","description":"A single report metric with its unit. `count` values are whole\nnumbers, `percent` values are 0–100 with one decimal. Money metrics\ncarry the account's lowercased ISO 4217 currency code as their unit\n(e.g. `usd`, `eur`, `jpy`) and are expressed in that currency's major\nunits, two decimals. A rate whose denominator was zero reports 0, not\nnull — so 0 does not distinguish \"no activity\" from \"activity that\nnever converted\"; read the underlying counts to tell those apart.\n","properties":{"value":{"type":"number","example":42,"uniqueKey":"data.nodes.items.[INDEX].stats.opted_out.value","typeLabel":"number"},"unit":{"type":"string","description":"`count`, `percent`, or a lowercased ISO 4217 currency code.","example":"count","uniqueKey":"data.nodes.items.[INDEX].stats.opted_out.unit","typeLabel":"string"}},"uniqueKey":"data.nodes.items.[INDEX].stats.opted_out","typeLabel":"object"},"failed":{"type":"object","description":"A single report metric with its unit. `count` values are whole\nnumbers, `percent` values are 0–100 with one decimal. Money metrics\ncarry the account's lowercased ISO 4217 currency code as their unit\n(e.g. `usd`, `eur`, `jpy`) and are expressed in that currency's major\nunits, two decimals. A rate whose denominator was zero reports 0, not\nnull — so 0 does not distinguish \"no activity\" from \"activity that\nnever converted\"; read the underlying counts to tell those apart.\n","properties":{"value":{"type":"number","example":42,"uniqueKey":"data.nodes.items.[INDEX].stats.failed.value","typeLabel":"number"},"unit":{"type":"string","description":"`count`, `percent`, or a lowercased ISO 4217 currency code.","example":"count","uniqueKey":"data.nodes.items.[INDEX].stats.failed.unit","typeLabel":"string"}},"uniqueKey":"data.nodes.items.[INDEX].stats.failed","typeLabel":"object"},"attributed_orders":{"type":"object","description":"A single report metric with its unit. `count` values are whole\nnumbers, `percent` values are 0–100 with one decimal. Money metrics\ncarry the account's lowercased ISO 4217 currency code as their unit\n(e.g. `usd`, `eur`, `jpy`) and are expressed in that currency's major\nunits, two decimals. A rate whose denominator was zero reports 0, not\nnull — so 0 does not distinguish \"no activity\" from \"activity that\nnever converted\"; read the underlying counts to tell those apart.\n","properties":{"value":{"type":"number","example":42,"uniqueKey":"data.nodes.items.[INDEX].stats.attributed_orders.value","typeLabel":"number"},"unit":{"type":"string","description":"`count`, `percent`, or a lowercased ISO 4217 currency code.","example":"count","uniqueKey":"data.nodes.items.[INDEX].stats.attributed_orders.unit","typeLabel":"string"}},"uniqueKey":"data.nodes.items.[INDEX].stats.attributed_orders","typeLabel":"object"},"attributed_revenue":{"type":"object","description":"A single report metric with its unit. `count` values are whole\nnumbers, `percent` values are 0–100 with one decimal. Money metrics\ncarry the account's lowercased ISO 4217 currency code as their unit\n(e.g. `usd`, `eur`, `jpy`) and are expressed in that currency's major\nunits, two decimals. A rate whose denominator was zero reports 0, not\nnull — so 0 does not distinguish \"no activity\" from \"activity that\nnever converted\"; read the underlying counts to tell those apart.\n","properties":{"value":{"type":"number","example":42,"uniqueKey":"data.nodes.items.[INDEX].stats.attributed_revenue.value","typeLabel":"number"},"unit":{"type":"string","description":"`count`, `percent`, or a lowercased ISO 4217 currency code.","example":"count","uniqueKey":"data.nodes.items.[INDEX].stats.attributed_revenue.unit","typeLabel":"string"}},"uniqueKey":"data.nodes.items.[INDEX].stats.attributed_revenue","typeLabel":"object"}},"uniqueKey":"data.nodes.items.[INDEX].stats","typeLabel":"object"}},"uniqueKey":"data.nodes.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.nodes","typeLabel":"object[]"}},"uniqueKey":"data","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"data":{"flow_id":"Vq7L3mN9xR","title":"Abandoned Cart Recovery","status":"active","trigger_type":"cart_abandoned","channels":"multi","current_enrollment":{"value":86,"unit":"count"},"period":{"label":"last_30_days","start_date":"2026-06-21","end_date":"2026-07-20"},"stats":{"sent":{"value":5200,"unit":"count"},"delivered":{"value":5050,"unit":"count"},"opened":{"value":2210,"unit":"count"},"clicked":{"value":640,"unit":"count"},"open_rate":{"value":51.4,"unit":"percent"},"click_rate":{"value":12.7,"unit":"percent"},"attributed_orders":{"value":210,"unit":"count"},"attributed_revenue":{"value":9640.5,"unit":"usd"},"order_rate":{"value":4.2,"unit":"percent"},"average_order_value":{"value":45.91,"unit":"usd"},"unsubscribed":{"value":34,"unit":"count"},"bounced":{"value":61,"unit":"count"},"sms_opted_out":{"value":12,"unit":"count"},"sms_failed":{"value":9,"unit":"count"}},"nodes":[{"uuid":"7a2f9e1b-5c3d-4d2e-8b4f-3a6c8d9e0f1a","type":"email","name":"Cart reminder email","subject":"You left something behind","stats":{"sent":{"value":2600,"unit":"count"},"delivered":{"value":2540,"unit":"count"},"opened_unique":{"value":1180,"unit":"count"},"clicked_unique":{"value":340,"unit":"count"},"bounced":{"value":38,"unit":"count"},"unsubscribed":{"value":21,"unit":"count"},"attributed_orders":{"value":120,"unit":"count"},"attributed_revenue":{"value":5610.25,"unit":"usd"}}},{"uuid":"8b3a0f2c-6d4e-4e3f-9c5a-4b7d9e0f1a2b","type":"sms","name":"Cart reminder text","stats":{"sent":{"value":780,"unit":"count"},"delivered":{"value":762,"unit":"count"},"clicked_unique":{"value":96,"unit":"count"},"opted_out":{"value":7,"unit":"count"},"failed":{"value":18,"unit":"count"},"attributed_orders":{"value":41,"unit":"count"},"attributed_revenue":{"value":1890,"unit":"usd"}}}]}},"examples":{"Example":{"title":"Example","value":{"data":{"flow_id":"Vq7L3mN9xR","title":"Abandoned Cart Recovery","status":"active","trigger_type":"cart_abandoned","channels":"multi","current_enrollment":{"value":86,"unit":"count"},"period":{"label":"last_30_days","start_date":"2026-06-21","end_date":"2026-07-20"},"stats":{"sent":{"value":5200,"unit":"count"},"delivered":{"value":5050,"unit":"count"},"opened":{"value":2210,"unit":"count"},"clicked":{"value":640,"unit":"count"},"open_rate":{"value":51.4,"unit":"percent"},"click_rate":{"value":12.7,"unit":"percent"},"attributed_orders":{"value":210,"unit":"count"},"attributed_revenue":{"value":9640.5,"unit":"usd"},"order_rate":{"value":4.2,"unit":"percent"},"average_order_value":{"value":45.91,"unit":"usd"},"unsubscribed":{"value":34,"unit":"count"},"bounced":{"value":61,"unit":"count"},"sms_opted_out":{"value":12,"unit":"count"},"sms_failed":{"value":9,"unit":"count"}},"nodes":[{"uuid":"7a2f9e1b-5c3d-4d2e-8b4f-3a6c8d9e0f1a","type":"email","name":"Cart reminder email","subject":"You left something behind","stats":{"sent":{"value":2600,"unit":"count"},"delivered":{"value":2540,"unit":"count"},"opened_unique":{"value":1180,"unit":"count"},"clicked_unique":{"value":340,"unit":"count"},"bounced":{"value":38,"unit":"count"},"unsubscribed":{"value":21,"unit":"count"},"attributed_orders":{"value":120,"unit":"count"},"attributed_revenue":{"value":5610.25,"unit":"usd"}}},{"uuid":"8b3a0f2c-6d4e-4e3f-9c5a-4b7d9e0f1a2b","type":"sms","name":"Cart reminder text","stats":{"sent":{"value":780,"unit":"count"},"delivered":{"value":762,"unit":"count"},"clicked_unique":{"value":96,"unit":"count"},"opted_out":{"value":7,"unit":"count"},"failed":{"value":18,"unit":"count"},"attributed_orders":{"value":41,"unit":"count"},"attributed_revenue":{"value":1890,"unit":"usd"}}}]}}}},"exampleType":"examples"}},"exampleType":"examples"},"aa4bffe6-4cbf-4112-9e03-04bed7fbeb30":{"description":"Missing or invalid bearer token.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["invalid_client","invalid_scope","unauthorized","insufficient_scope","forbidden","paid_plan_required","api_access_required","segment_builder_required","not_found","no_connected_store","conflict","contacts_not_ready","validation_failed","idempotency_key_reused","rate_limited","store_unavailable","store_rate_limited","not_a_draft","design_changed","sms_missing","email_missing","ab_test_draft","idempotency_key_reused","template_unavailable","design_unavailable","render_failed"],"example":"validation_failed","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","example":"One or more fields are invalid","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","example":"email","uniqueKey":"error.details.items.[INDEX].field","typeLabel":"string"},"message":{"type":"string","example":"is required","uniqueKey":"error.details.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"error.details.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details","typeLabel":"object[]"}},"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"unauthorized","message":"Bearer token is missing or invalid"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"unauthorized","message":"Bearer token is missing or invalid"}}}},"exampleType":"examples"}},"exampleType":"examples"},"3a7b6af0-fa30-43e9-b42d-9f831e637331":{"description":"`insufficient_scope` when the token lacks the required scope for this endpoint.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["invalid_client","invalid_scope","unauthorized","insufficient_scope","forbidden","paid_plan_required","api_access_required","segment_builder_required","not_found","no_connected_store","conflict","contacts_not_ready","validation_failed","idempotency_key_reused","rate_limited","store_unavailable","store_rate_limited","not_a_draft","design_changed","sms_missing","email_missing","ab_test_draft","idempotency_key_reused","template_unavailable","design_unavailable","render_failed"],"example":"validation_failed","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","example":"One or more fields are invalid","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","example":"email","uniqueKey":"error.details.items.[INDEX].field","typeLabel":"string"},"message":{"type":"string","example":"is required","uniqueKey":"error.details.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"error.details.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details","typeLabel":"object[]"}},"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"insufficient_scope","message":"Token does not have the required scope"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"insufficient_scope","message":"Token does not have the required scope"}}}},"exampleType":"examples"}},"exampleType":"examples"},"d630ad27-f3b1-4ba8-8b00-243b4e794c37":{"description":"The requested resource does not exist or does not belong to your account.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["invalid_client","invalid_scope","unauthorized","insufficient_scope","forbidden","paid_plan_required","api_access_required","segment_builder_required","not_found","no_connected_store","conflict","contacts_not_ready","validation_failed","idempotency_key_reused","rate_limited","store_unavailable","store_rate_limited","not_a_draft","design_changed","sms_missing","email_missing","ab_test_draft","idempotency_key_reused","template_unavailable","design_unavailable","render_failed"],"example":"validation_failed","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","example":"One or more fields are invalid","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","example":"email","uniqueKey":"error.details.items.[INDEX].field","typeLabel":"string"},"message":{"type":"string","example":"is required","uniqueKey":"error.details.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"error.details.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details","typeLabel":"object[]"}},"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"not_found","message":"Not found"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"not_found","message":"Not found"}}}},"exampleType":"examples"}},"exampleType":"examples"},"e0ff1f78-3c94-488a-a092-6ff51894012e":{"description":"One or more fields failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["invalid_client","invalid_scope","unauthorized","insufficient_scope","forbidden","paid_plan_required","api_access_required","segment_builder_required","not_found","no_connected_store","conflict","contacts_not_ready","validation_failed","idempotency_key_reused","rate_limited","store_unavailable","store_rate_limited","not_a_draft","design_changed","sms_missing","email_missing","ab_test_draft","idempotency_key_reused","template_unavailable","design_unavailable","render_failed"],"example":"validation_failed","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","example":"One or more fields are invalid","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","example":"email","uniqueKey":"error.details.items.[INDEX].field","typeLabel":"string"},"message":{"type":"string","example":"is required","uniqueKey":"error.details.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"error.details.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details","typeLabel":"object[]"}},"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"validation_failed","message":"One or more fields are invalid","details":[{"field":"email","message":"is required"}]}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"validation_failed","message":"One or more fields are invalid","details":[{"field":"email","message":"is required"}]}}}},"exampleType":"examples"}},"exampleType":"examples"},"c7f6e2e5-0bfe-4716-af56-84a10d0889e4":{"description":"Rate limit exceeded. Retry after the specified time.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":42},"X-RateLimit-Limit-Minute":{"description":"Maximum requests allowed per minute.","schema":{"type":"integer"},"example":60},"X-RateLimit-Remaining-Minute":{"description":"Requests remaining in the current minute window.","schema":{"type":"integer"},"example":0},"X-RateLimit-Reset-Minute":{"description":"Unix timestamp when the minute window resets.","schema":{"type":"integer"},"example":1711929600},"X-RateLimit-Limit-Day":{"description":"Maximum requests allowed per day.","schema":{"type":"integer"},"example":10000},"X-RateLimit-Remaining-Day":{"description":"Requests remaining in the current day window.","schema":{"type":"integer"},"example":9500},"X-RateLimit-Reset-Day":{"description":"Unix timestamp when the day window resets.","schema":{"type":"integer"},"example":1712016000}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["invalid_client","invalid_scope","unauthorized","insufficient_scope","forbidden","paid_plan_required","api_access_required","segment_builder_required","not_found","no_connected_store","conflict","contacts_not_ready","validation_failed","idempotency_key_reused","rate_limited","store_unavailable","store_rate_limited","not_a_draft","design_changed","sms_missing","email_missing","ab_test_draft","idempotency_key_reused","template_unavailable","design_unavailable","render_failed"],"example":"validation_failed","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","example":"One or more fields are invalid","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","example":"email","uniqueKey":"error.details.items.[INDEX].field","typeLabel":"string"},"message":{"type":"string","example":"is required","uniqueKey":"error.details.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"error.details.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details","typeLabel":"object[]"}},"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"rate_limited","message":"Rate limit exceeded"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"rate_limited","message":"Rate limit exceeded"}}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"304f82fe-62af-49a5-a61e-9c079340e85d":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"API token or OAuth access token","description":"Send either an API token or an OAuth access token as\n`Authorization: Bearer \u003ctoken>`. See the Authentication page for details.\n","scopes":[],"schemeName":"bearerAuth"}}},"servers":{"97f63e03-f020-41b7-a5b9-e312bbfed47d":{"url":"https://api.privy.com/v1","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"API token or OAuth access token","description":"Send either an API token or an OAuth access token as\n`Authorization: Bearer \u003ctoken>`. See the Authentication page for details.\n","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Send either an API token or an OAuth access token as\n`Authorization: Bearer \u003ctoken>`. See the Authentication page for details.\n","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"openapi/privy-api.yaml"},"subdomain":"privy","siteName":"Privy Knowledge Base","title":"Get flow performance - Privy Knowledge Base","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-22T23:08:30.127Z","originalFileLocation":"docs/api-reference/get-flow-performance.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"One flow\u0026#x27;s performance over a period: the combined email + SMS stat set plus a per-node breakdown of each email and SMS message step. Configuration — trigger, filters, re-entry behavior, branch graph — is /v1/flows/{id}. The per-node uuids match that response\u0026#x27;s node uuids, which is how a message step is placed in the flow graph; a step the flow no longer contains has no counterpart there. Required scope: reports_read\">\u003cmeta data-mint-head name=\"application-name\" content=\"Privy Knowledge Base\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/privy/fvbglk3MPcKWjtyG/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/privy/fvbglk3MPcKWjtyG/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/privy/fvbglk3MPcKWjtyG/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/privy/fvbglk3MPcKWjtyG/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/privy/fvbglk3MPcKWjtyG/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/privy/fvbglk3MPcKWjtyG/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/privy/fvbglk3MPcKWjtyG/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/privy/fvbglk3MPcKWjtyG/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/privy/fvbglk3MPcKWjtyG/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Get flow performance - Privy Knowledge Base\">\u003cmeta data-mint-head property=\"og:description\" content=\"One flow\u0026#x27;s performance over a period: the combined email + SMS stat set plus a per-node breakdown of each email and SMS message step. Configuration — trigger, filters, re-entry behavior, branch graph — is /v1/flows/{id}. The per-node uuids match that response\u0026#x27;s node uuids, which is how a message step is placed in the flow graph; a step the flow no longer contains has no counterpart there. Required scope: reports_read\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Privy Knowledge Base\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://help.privy.com/docs/api-reference/get-flow-performance\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://privy.mintlify.site/_mintlify/api/og/v2?division=Reports\u0026amp;title=Get+flow+performance\u0026amp;description=One+flow%27s+performance+over+a+period%3A+the+combined+email+%2B+SMS+stat%0Aset+plus+a+per-node+breakdown+of+each+email+and+SMS+message+step.%0A%0AConfiguration+%E2%80%94+trigger%2C+\u0026amp;theme=a5dbdd3119e247d04186b21c\u0026amp;signature=e8a158a3a10444d89459e7c72b8129c6c069bb2eb2ff3237f27352d7d5c0bc93\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Get flow performance - Privy Knowledge Base\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"One flow\u0026#x27;s performance over a period: the combined email + SMS stat set plus a per-node breakdown of each email and SMS message step. Configuration — trigger, filters, re-entry behavior, branch graph — is /v1/flows/{id}. The per-node uuids match that response\u0026#x27;s node uuids, which is how a message step is placed in the flow graph; a step the flow no longer contains has no counterpart there. Required scope: reports_read\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://privy.mintlify.site/_mintlify/api/og/v2?division=Reports\u0026amp;title=Get+flow+performance\u0026amp;description=One+flow%27s+performance+over+a+period%3A+the+combined+email+%2B+SMS+stat%0Aset+plus+a+per-node+breakdown+of+each+email+and+SMS+message+step.%0A%0AConfiguration+%E2%80%94+trigger%2C+\u0026amp;theme=a5dbdd3119e247d04186b21c\u0026amp;signature=e8a158a3a10444d89459e7c72b8129c6c069bb2eb2ff3237f27352d7d5c0bc93\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/privy/fvbglk3MPcKWjtyG/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Privy Knowledge Base\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#254E5A\">\u003clink data-mint-head rel=\"canonical\" href=\"https://help.privy.com/docs/api-reference/get-flow-performance\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/api-reference/get-flow-performance.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://help.privy.com/#organization\",\"name\":\"Privy Knowledge Base\",\"url\":\"https://help.privy.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/privy/fGrkZt933tBjY_zl/logo/light.svg?fit=max\u0026auto=format\u0026n=fGrkZt933tBjY_zl\u0026q=85\u0026s=36a01db426b7c94fac423778765cd517\"}},{\"@type\":\"WebSite\",\"@id\":\"https://help.privy.com#website\",\"name\":\"Privy Knowledge Base\",\"url\":\"https://help.privy.com\",\"publisher\":{\"@id\":\"https://help.privy.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://help.privy.com/docs/api-reference/get-flow-performance#webpage\",\"url\":\"https://help.privy.com/docs/api-reference/get-flow-performance\",\"name\":\"Get flow performance\",\"description\":\"One flow's performance over a period: the combined email + SMS stat set plus a per-node breakdown of each email and SMS message step. Configuration — trigger, filters, re-entry behavior, branch graph — is /v1/flows/{id}. The per-node uuids match that response's node uuids, which is how a message step is placed in the flow graph; a step the flow no longer contains has no counterpart there. Required scope: reports_read\",\"dateModified\":\"2026-10-22T23:08:30.127Z\",\"isPartOf\":{\"@id\":\"https://help.privy.com#website\"},\"breadcrumb\":{\"@id\":\"https://help.privy.com/docs/api-reference/get-flow-performance#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://help.privy.com/docs/api-reference/get-flow-performance#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Reports\",\"item\":\"https://help.privy.com/docs/api-reference/get-report-summary\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Get flow performance\",\"item\":\"https://help.privy.com/docs/api-reference/get-flow-performance\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://help.privy.com/docs/api-reference/get-flow-performance#apireference\",\"headline\":\"Get flow performance\",\"name\":\"Get flow performance\",\"description\":\"One flow's performance over a period: the combined email + SMS stat set plus a per-node breakdown of each email and SMS message step. Configuration — trigger, filters, re-entry behavior, branch graph — is /v1/flows/{id}. The per-node uuids match that response's node uuids, which is how a message step is placed in the flow graph; a step the flow no longer contains has no counterpart there. Required scope: reports_read\",\"url\":\"https://help.privy.com/docs/api-reference/get-flow-performance\",\"mainEntityOfPage\":{\"@id\":\"https://help.privy.com/docs/api-reference/get-flow-performance#webpage\"},\"dateModified\":\"2026-10-22T23:08:30.127Z\",\"publisher\":{\"@id\":\"https://help.privy.com/#organization\"},\"isPartOf\":{\"@id\":\"https://help.privy.com#website\"}}]}\u003c/script>","agentPointerHref":"/docs/api-reference/get-flow-performance.md","siteName":"Privy Knowledge Base","nav":{"global":null,"tabs":[{"tab":"Learn","icon":"house","pages":[{"title":"Learn","href":"/docs/learn/home"}]},{"tab":"Developer","icon":"square-terminal","groups":[{"group":"API Reference","pages":[{"title":"API Overview","sidebarTitle":"Overview","icon":"book-open","href":"/docs/api-reference/overview"},{"title":"Authentication","sidebarTitle":"Authentication","icon":"lock","href":"/docs/api-reference/authentication"},{"title":"API Tokens","sidebarTitle":"API Tokens","icon":"key","href":"/docs/api-reference/api-tokens"},{"title":"Rate Limits","sidebarTitle":"Rate Limits","icon":"gauge","href":"/docs/api-reference/rate-limits"},{"title":"Errors","sidebarTitle":"Errors","icon":"triangle-exclamation","href":"/docs/api-reference/errors"},{"title":"API Changelog","sidebarTitle":"Changelog","icon":"clock-rotate-left","href":"/docs/api-reference/changelog"}]},{"group":"Account","pages":[{"title":"Get account","openapi":"openapi/privy-api.yaml GET /account","href":"/docs/api-reference/get-account"},{"title":"Get account setup","openapi":"openapi/privy-api.yaml GET /account/setup","href":"/docs/api-reference/get-account-setup"}]},{"group":"Contacts","pages":[{"title":"List contacts","openapi":"openapi/privy-api.yaml GET /contacts","href":"/docs/api-reference/list-contacts"},{"title":"Get a contact","openapi":"openapi/privy-api.yaml GET /contacts/{id}","href":"/docs/api-reference/get-contact"},{"title":"Create a contact","openapi":"openapi/privy-api.yaml POST /contacts","href":"/docs/api-reference/create-contact"},{"title":"Update a contact","openapi":"openapi/privy-api.yaml PATCH /contacts/{id}","href":"/docs/api-reference/update-contact"},{"title":"Delete a contact","openapi":"openapi/privy-api.yaml DELETE /contacts/{id}","href":"/docs/api-reference/delete-contact"},{"title":"List a contact's activity","openapi":"openapi/privy-api.yaml GET /contacts/{id}/events","href":"/docs/api-reference/list-contact-activity"}]},{"group":"Imports","pages":[{"title":"List contact imports","openapi":"openapi/privy-api.yaml GET /imports","href":"/docs/api-reference/list-imports"},{"title":"Get a contact import","openapi":"openapi/privy-api.yaml GET /imports/{id}","href":"/docs/api-reference/get-import"}]},{"group":"Tags","pages":[{"title":"List tags","openapi":"openapi/privy-api.yaml GET /tags","href":"/docs/api-reference/list-tags"},{"title":"Get a tag","openapi":"openapi/privy-api.yaml GET /tags/{id}","href":"/docs/api-reference/get-tag"}]},{"group":"Campaigns","pages":[{"title":"List campaigns","openapi":"openapi/privy-api.yaml GET /campaigns","href":"/docs/api-reference/list-campaigns"},{"title":"Get a campaign","openapi":"openapi/privy-api.yaml GET /campaigns/{id}","href":"/docs/api-reference/get-campaign"}]},{"group":"Displays","pages":[{"title":"List displays","openapi":"openapi/privy-api.yaml GET /displays","href":"/docs/api-reference/list-displays"},{"title":"Get a display","openapi":"openapi/privy-api.yaml GET /displays/{id}","href":"/docs/api-reference/get-display"}]},{"group":"Coupons","pages":[{"title":"List coupons","openapi":"openapi/privy-api.yaml GET /coupons","href":"/docs/api-reference/list-coupons"},{"title":"Get a coupon","openapi":"openapi/privy-api.yaml GET /coupons/{id}","href":"/docs/api-reference/get-coupon"},{"title":"Check a coupon code","openapi":"openapi/privy-api.yaml GET /coupons/{id}/codes/{code}","href":"/docs/api-reference/check-coupon-code"}]},{"group":"Reports","pages":[{"title":"Get business report summary","openapi":"openapi/privy-api.yaml GET /reports/summary","href":"/docs/api-reference/get-report-summary"},{"title":"List campaign performance","openapi":"openapi/privy-api.yaml GET /reports/campaigns","href":"/docs/api-reference/list-campaign-performance"},{"title":"Get campaign performance","openapi":"openapi/privy-api.yaml GET /reports/campaigns/{campaign_id}","href":"/docs/api-reference/get-campaign-performance"},{"title":"List flow performance","openapi":"openapi/privy-api.yaml GET /reports/flows","description":"Rank your flows by performance over a period — best performers first,\nremaining flows by recency. Each row combines email and SMS stats\nacross the flow's message steps. Use `/v1/reports/flows/{flow_id}`\nfor one flow's report including the per-node message breakdown.\n\nEvery flow with the requested status is listed, quiet ones included —\nunlike the display and campaign leaderboards nothing is dropped for\nhaving no activity, so this doubles as a performance-annotated flow\ninventory. A flow's configuration is `/v1/flows/{id}`.\n\n**Required scope:** `reports_read`\n","href":"/docs/api-reference/list-flow-performance"},{"title":"Get flow performance","openapi":"openapi/privy-api.yaml GET /reports/flows/{flow_id}","href":"/docs/api-reference/get-flow-performance"},{"title":"List display performance","openapi":"openapi/privy-api.yaml GET /reports/displays","description":"Rank your displays by performance over a period — signups by default,\nor any of the documented sort keys. Displays whose value for the chosen\nsort key is zero are left out entirely, and ranking stops at 50\ndisplays, which also caps the reported `total_count`. Use\n`/v1/reports/displays/{display_id}` for one display's full stat set,\nincluding average order value and A/B test results.\n\n**Required scope:** `reports_read`\n","href":"/docs/api-reference/list-display-performance"},{"title":"Get display performance","openapi":"openapi/privy-api.yaml GET /reports/displays/{display_id}","href":"/docs/api-reference/get-display-performance"},{"title":"List top products","openapi":"openapi/privy-api.yaml GET /reports/top_products","href":"/docs/api-reference/list-top-products"}]},{"group":"Flows","pages":[{"title":"List flows","openapi":"openapi/privy-api.yaml GET /flows","href":"/docs/api-reference/list-flows"},{"title":"Get a flow","openapi":"openapi/privy-api.yaml GET /flows/{id}","href":"/docs/api-reference/get-flow"}]},{"group":"Segments","pages":[{"title":"List segments","openapi":"openapi/privy-api.yaml GET /segments","href":"/docs/api-reference/list-segments"},{"title":"Get a segment","openapi":"openapi/privy-api.yaml GET /segments/{id}","href":"/docs/api-reference/get-segment"},{"title":"List a segment's contacts","openapi":"openapi/privy-api.yaml GET /segments/{id}/contacts","href":"/docs/api-reference/list-segment-contacts"}]},{"group":"Orders","pages":[{"title":"Order placed","openapi":"openapi/privy-api.yaml POST /orders/placed","href":"/docs/api-reference/order-placed"},{"title":"List orders","openapi":"openapi/privy-api.yaml GET /orders","href":"/docs/api-reference/list-orders"},{"title":"Get an order","openapi":"openapi/privy-api.yaml GET /orders/{order_id}","href":"/docs/api-reference/get-order"}]},{"group":"Products","pages":[{"title":"List products","openapi":"openapi/privy-api.yaml GET /products","href":"/docs/api-reference/list-products"},{"title":"Get a product","openapi":"openapi/privy-api.yaml GET /products/{id}","href":"/docs/api-reference/get-product"},{"title":"List product collections","openapi":"openapi/privy-api.yaml GET /product_collections","href":"/docs/api-reference/list-product-collections"},{"title":"Get a product collection","openapi":"openapi/privy-api.yaml GET /product_collections/{id}","href":"/docs/api-reference/get-product-collection"},{"title":"List a collection's products","openapi":"openapi/privy-api.yaml GET /product_collections/{id}/products","href":"/docs/api-reference/list-collection-products"},{"title":"List a product's collections","openapi":"openapi/privy-api.yaml GET /products/{id}/collections","href":"/docs/api-reference/list-collections-for-product"}]},{"group":"Events","pages":[{"title":"Ingest an event","openapi":"openapi/privy-api.yaml POST /events","href":"/docs/api-reference/ingest-event"},{"title":"Send cart events from your storefront","sidebarTitle":"Browser events","href":"/docs/api-reference/browser-events"}]}]}]},"basePath":"","title":"Get flow performance - Privy Knowledge Base","buildId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","deploymentId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-CybtLBIt.js","utils-BMLj2fvV.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-B6In562Y.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-Dr8Mfhp9.js","snippetPresets-2rmQvMVl.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-WMqJYdZj.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-CJ-MlPHu.js","shallow-dY3TMRCk.js","getApiPlaygroundDisplay-v-1B2bKm.js","CodeSnippet-BDhiTB7U.js","CodeSnippets-D9hnzQcS.js","Page-C4GwDT3_.js","getPastedJson-Th2V45jI.js","icon-BQXch1W9.js","MethodPill-BCqUneP3.js","DuplicateIcon-Q_-bhurZ.js","createIcon-DUjLHRqp.js","DynamicMarkdown-B-f2cqXQ.js","SectionHeading-Da5NsV4v.js","axios-vUo_bRtp.js","Markdown-D13FWkIM.js","clsx-D3Isdib3.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-C-XZBk9h.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink--qIqmmVG.js"]}