Retrieve a single flow by its identifier, including its full
configuration: re-entry behavior, flow filters, effective exit
behavior, a server-generated behavior summary, and the node tree —
each step’s configuration (data) plus the branch graph, with split
conditions and the nodes on each branch.
exit_behavior and reentry state the engine’s effective semantics
directly: exits end only journeys already in progress (the enrolling
event never triggers them), and reentry.mode says explicitly
whether and when a contact can go through again. Trust these fields
and behavior_summary over inferences from the node structure.
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 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","slug":"/docs/api-reference/get-flow","pageMetadata":{"title":"Get a flow","openapi":"openapi/privy-api.yaml GET /flows/{id}","description":"Retrieve a single flow by its identifier, including its full\nconfiguration: re-entry behavior, flow filters, effective exit\nbehavior, a server-generated behavior summary, and the node tree —\neach step's configuration (`data`) plus the branch graph, with split\nconditions and the nodes on each branch.\n\n`exit_behavior` and `reentry` state the engine's effective semantics\ndirectly: exits end only journeys already in progress (the enrolling\nevent never triggers them), and `reentry.mode` says explicitly\nwhether and when a contact can go through again. Trust these fields\nand `behavior_summary` over inferences from the node structure.\n\n**Required scope:** `flows_read`\n","href":"/docs/api-reference/get-flow"},"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: [_jsxs(_components.p, {\n children: [\"Retrieve a single flow by its identifier, including its full\\nconfiguration: re-entry behavior, flow filters, effective exit\\nbehavior, a server-generated behavior summary, and the node tree —\\neach step’s configuration (\", _jsx(_components.code, {\n children: \"data\"\n }), \") plus the branch graph, with split\\nconditions and the nodes on each branch.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"exit_behavior\"\n }), \" and \", _jsx(_components.code, {\n children: \"reentry\"\n }), \" state the engine’s effective semantics\\ndirectly: exits end only journeys already in progress (the enrolling\\nevent never triggers them), and \", _jsx(_components.code, {\n children: \"reentry.mode\"\n }), \" says explicitly\\nwhether and when a contact can go through again. Trust these fields\\nand \", _jsx(_components.code, {\n children: \"behavior_summary\"\n }), \" over inferences from the node structure.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Required scope:\"\n }), \" \", _jsx(_components.code, {\n children: \"flows_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 a flow","openapi":"openapi/privy-api.yaml GET /flows/{id}","description":"Retrieve a single flow by its identifier, including its full\nconfiguration: re-entry behavior, flow filters, effective exit\nbehavior, a server-generated behavior summary, and the node tree —\neach step's configuration (`data`) plus the branch graph, with split\nconditions and the nodes on each branch.\n\n`exit_behavior` and `reentry` state the engine's effective semantics\ndirectly: exits end only journeys already in progress (the enrolling\nevent never triggers them), and `reentry.mode` says explicitly\nwhether and when a contact can go through again. Trust these fields\nand `behavior_summary` over inferences from the node structure.\n\n**Required scope:** `flows_read`\n","href":"/docs/api-reference/get-flow"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"getFlow","summary":"Get a flow","description":"Retrieve a single flow by its identifier, including its full\nconfiguration: re-entry behavior, flow filters, effective exit\nbehavior, a server-generated behavior summary, and the node tree —\neach step's configuration (`data`) plus the branch graph, with split\nconditions and the nodes on each branch.\n\n`exit_behavior` and `reentry` state the engine's effective semantics\ndirectly: exits end only journeys already in progress (the enrolling\nevent never triggers them), and `reentry.mode` says explicitly\nwhether and when a contact can go through again. Trust these fields\nand `behavior_summary` over inferences from the node structure.\n\n**Required scope:** `flows_read`\n","tags":["Flows"],"security":["fce49423-6096-406b-a9d8-aab0593a12a7"],"parameters":["d78c1b5f-1d91-41eb-9150-ae38def4348e","96224192-9fce-4a84-aeff-2ce9320998c4"],"responses":{"200":"82765400-402b-4d14-ba44-20429a8da6fc","401":"fc64f218-5feb-4bea-a0cb-6187ce94410b","403":"b141bd6c-edc6-4ab5-8a41-a30e270a4cf1","404":"65963a92-48b1-4d8f-8db8-e06711569831","429":"a705946b-0565-44de-897d-cb0a1a601aff"},"method":"get","type":"path","servers":["97f63e03-f020-41b7-a5b9-e312bbfed47d"],"path":"/flows/{id}","baseUrlOptions":["https://api.privy.com/v1"],"title":"Get a flow","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"d78c1b5f-1d91-41eb-9150-ae38def4348e":{"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"},"96224192-9fce-4a84-aeff-2ce9320998c4":{"name":"id","in":"path","required":true,"description":"The flow's unique identifier (returned as `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 `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"}},"responses":{"82765400-402b-4d14-ba44-20429a8da6fc":{"description":"The flow.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"Stable, unique identifier for the flow. Use this value in `/v1/flows/{id}`.","example":"Vq7L3mN9xR","uniqueKey":"data.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.\n`order_placed`, `order_delivered`, `cart_abandoned`,\n`checkout_abandoned`, `browse_abandoned`, `back_in_stock`,\n`date_triggered`, `customer_subscribed_to_marketing`,\n`customer_tag_added`, `customer_tag_removed`, `flow_completed`.\n`order_placed` is the one name for the per-platform order events\n(Shopify, BigCommerce, Wix, and the public API) and `order_delivered`\nrenames the order-received event; every other trigger passes through as\nstored, so integration and custom API event names (`api_event:...`)\nappear here verbatim.\n\nPlatform availability: `browse_abandoned` and `back_in_stock` currently\nfire for Shopify stores only — the underlying product-view and inventory\nsignals aren't collected for other platforms, so a flow using one of\nthese triggers on a non-Shopify business will never enroll a contact.\n`checkout_abandoned` and `cart_abandoned` are available on both Shopify\nand BigCommerce. Shopify checkout starts come from the Web Pixel, so the\npixel must hold the scopes that track them; BigCommerce checkout starts\nare captured when the Privy widget loads on the standard Optimized\nOne-Page Checkout, so custom or headless BigCommerce checkouts produce no\nevent and never enroll a contact.\n","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.\n`order_placed`, `order_delivered`, `cart_abandoned`,\n`checkout_abandoned`, `browse_abandoned`, `back_in_stock`,\n`date_triggered`, `customer_subscribed_to_marketing`,\n`customer_tag_added`, `customer_tag_removed`, `flow_completed`.\n`order_placed` is the one name for the per-platform order events\n(Shopify, BigCommerce, Wix, and the public API) and `order_delivered`\nrenames the order-received event; every other trigger passes through as\nstored, so integration and custom API event names (`api_event:...`)\nappear here verbatim.\n\nPlatform availability: `browse_abandoned` and `back_in_stock` currently\nfire for Shopify stores only — the underlying product-view and inventory\nsignals aren't collected for other platforms, so a flow using one of\nthese triggers on a non-Shopify business will never enroll a contact.\n`checkout_abandoned` and `cart_abandoned` are available on both Shopify\nand BigCommerce. Shopify checkout starts come from the Web Pixel, so the\npixel must hold the scopes that track them; BigCommerce checkout starts\nare captured when the Privy widget loads on the standard Optimized\nOne-Page Checkout, so custom or headless BigCommerce checkouts produce no\nevent and never enroll a contact.\n","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"},"nodes":{"type":"array","items":{"type":"object","description":"Node shape returned by `GET /v1/flows/{id}` — adds the branch graph and the node's configuration. Nodes are listed in tree-traversal order (depth-first from the node whose `parent_uuid` is `null`, yes branch before no branch), so after a split the whole yes branch reads before the no branch.","properties":{"uuid":{"type":"string","example":"6f1e8d0a-4b2c-4c1d-9a3e-2f5b7c8d9e0f","uniqueKey":"data.nodes.items.[INDEX].uuid","typeLabel":"string"},"type":{"type":"string","enum":["email","sms","delay","split","ab_test","tag","update_contact"],"example":"email","uniqueKey":"data.nodes.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"name":{"type":"string","example":"Welcome email","uniqueKey":"data.nodes.items.[INDEX].name","typeLabel":"string"},"parent_uuid":{"oneOf":[{"type":"string","description":"`uuid` of the node's parent; `null` on the flow's first node.","example":null,"uniqueKey":"data.nodes.items.[INDEX].parent_uuid.oneOf.0","typeLabel":"string"},{"type":"null","description":"`uuid` of the node's parent; `null` on the flow's first node.","example":null,"uniqueKey":"data.nodes.items.[INDEX].parent_uuid.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.nodes.items.[INDEX].parent_uuid","typeLabel":"string | null"},"next_uuid":{"oneOf":[{"type":"string","description":"`uuid` of the next node. Present on every node type except `split` and `ab_test`; `null` at the end of a branch.","example":"7a2f9e1b-5c3d-4d2e-8b4f-3a6c8d9e0f1a","uniqueKey":"data.nodes.items.[INDEX].next_uuid.oneOf.0","typeLabel":"string"},{"type":"null","description":"`uuid` of the next node. Present on every node type except `split` and `ab_test`; `null` at the end of a branch.","example":"7a2f9e1b-5c3d-4d2e-8b4f-3a6c8d9e0f1a","uniqueKey":"data.nodes.items.[INDEX].next_uuid.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.nodes.items.[INDEX].next_uuid","typeLabel":"string | null"},"yes_next_uuid":{"oneOf":[{"type":"string","description":"`split` nodes only — `uuid` of the first node on the branch taken when the conditions match.","example":"7a2f9e1b-5c3d-4d2e-8b4f-3a6c8d9e0f1a","uniqueKey":"data.nodes.items.[INDEX].yes_next_uuid.oneOf.0","typeLabel":"string"},{"type":"null","description":"`split` nodes only — `uuid` of the first node on the branch taken when the conditions match.","example":"7a2f9e1b-5c3d-4d2e-8b4f-3a6c8d9e0f1a","uniqueKey":"data.nodes.items.[INDEX].yes_next_uuid.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.nodes.items.[INDEX].yes_next_uuid","typeLabel":"string | null"},"no_next_uuid":{"oneOf":[{"type":"string","description":"`split` nodes only — `uuid` of the first node on the branch taken when the conditions do not match.","example":"9c4d1a3e-7e5f-4f4a-8d6b-5c8e0f1a2b3c","uniqueKey":"data.nodes.items.[INDEX].no_next_uuid.oneOf.0","typeLabel":"string"},{"type":"null","description":"`split` nodes only — `uuid` of the first node on the branch taken when the conditions do not match.","example":"9c4d1a3e-7e5f-4f4a-8d6b-5c8e0f1a2b3c","uniqueKey":"data.nodes.items.[INDEX].no_next_uuid.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.nodes.items.[INDEX].no_next_uuid","typeLabel":"string | null"},"a_next_uuid":{"oneOf":[{"type":"string","description":"`ab_test` nodes only — `uuid` of the first node on path A.","example":"7a2f9e1b-5c3d-4d2e-8b4f-3a6c8d9e0f1a","uniqueKey":"data.nodes.items.[INDEX].a_next_uuid.oneOf.0","typeLabel":"string"},{"type":"null","description":"`ab_test` nodes only — `uuid` of the first node on path A.","example":"7a2f9e1b-5c3d-4d2e-8b4f-3a6c8d9e0f1a","uniqueKey":"data.nodes.items.[INDEX].a_next_uuid.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.nodes.items.[INDEX].a_next_uuid","typeLabel":"string | null"},"b_next_uuid":{"oneOf":[{"type":"string","description":"`ab_test` nodes only — `uuid` of the first node on path B. When it is another `ab_test` node, that node splits the B traffic again.","example":"9c4d1a3e-7e5f-4f4a-8d6b-5c8e0f1a2b3c","uniqueKey":"data.nodes.items.[INDEX].b_next_uuid.oneOf.0","typeLabel":"string"},{"type":"null","description":"`ab_test` nodes only — `uuid` of the first node on path B. When it is another `ab_test` node, that node splits the B traffic again.","example":"9c4d1a3e-7e5f-4f4a-8d6b-5c8e0f1a2b3c","uniqueKey":"data.nodes.items.[INDEX].b_next_uuid.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.nodes.items.[INDEX].b_next_uuid","typeLabel":"string | null"},"data":{"type":"object","description":"The node's configuration; fields depend on `type`. `email` — `campaign_id` (usable with `GET /v1/campaigns/{id}`), `subject`, `coupon` (the attached pool as `{id, title, kind, platform}`, `null` when none — a `{{ coupon_code }}` tag only renders when attached). `sms` — `campaign_id`, `message_body`, `coupon` (as above). `delay` — `delay_unit` (`minutes`/`hours`/`days`), `delay_unit_count`. `split` — `conditions` (the condition group the split evaluates). `ab_test` — `a_percent` (share of contacts sent down path A; path B gets the rest), `winner` (`a` or `b` once a winner is picked, otherwise `null`). `tag` — `action_type` (`add`/`remove`), `tags` (tag names). `update_contact` — `action_type`.","properties":{"conditions":{"type":"object","description":"Present on `split` nodes only — the condition group the split evaluates. Ids embedded in its values follow the id and prefix rules described on `ConditionTree`; this is where the `tag_`, `stag_`, and `dfl_` prefixed ids surface.","properties":{"operation":{"type":"string","description":"How this group's conditions combine — `AND` requires every condition to match, `OR` any one of them.","enum":["AND","OR"],"example":"AND","uniqueKey":"data.nodes.items.[INDEX].data.conditions.operation","typeLabel":"enum\u003cstring>"},"conditions":{"type":"array","description":"The group's members. An entry is either a single test, as described below, or a nested group carrying its own `operation` and `conditions` — trees can be arbitrarily deep, so recurse rather than assuming one level.","items":{"type":"object","properties":{"property":{"type":"string","description":"The attribute being tested. Some property names embed a discriminator — `custom_fields$\u003cidentifier>` names a merchant-defined field and `date_field_label$\u003cid>` a date field.","example":"segment","uniqueKey":"data.nodes.items.[INDEX].data.conditions.conditions.items.[INDEX].property","typeLabel":"string"},"operator":{"type":"string","description":"How `value` is compared against the property (e.g. `equals`, `contains`, `greater_than`).","example":"contains","uniqueKey":"data.nodes.items.[INDEX].data.conditions.conditions.items.[INDEX].operator","typeLabel":"string"},"type":{"type":"string","description":"How Privy stores the value (e.g. `integer`, `string`, `array`) — not how it is emitted here. An id stored as an integer is published as its public id, so a row reading `integer` still carries a string. Read ids as strings regardless of this field.","example":"array","uniqueKey":"data.nodes.items.[INDEX].data.conditions.conditions.items.[INDEX].type","typeLabel":"string"},"value":{"description":"The comparison value — a scalar or an array, depending on the property and operator.","example":["Nk2P5rW8yU"],"uniqueKey":"data.nodes.items.[INDEX].data.conditions.conditions.items.[INDEX].value","typeLabel":"any"}},"uniqueKey":"data.nodes.items.[INDEX].data.conditions.conditions.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.nodes.items.[INDEX].data.conditions.conditions","typeLabel":"object[]"}},"uniqueKey":"data.nodes.items.[INDEX].data.conditions","typeLabel":"object"}},"example":{"delay_unit":"hours","delay_unit_count":1},"uniqueKey":"data.nodes.items.[INDEX].data","typeLabel":"object"}},"uniqueKey":"data.nodes.items.[INDEX]","typeLabel":"object"},"description":"The flow's steps from its current version, in tree-traversal order, with the branch graph and each step's configuration.","uniqueKey":"data.nodes","typeLabel":"object[]"},"sync_coupons":{"type":"boolean","description":"Whether the flow uses one shared coupon: when true, a single coupon is\nset at the flow level and applied to every email and SMS node in every\nversion of the flow, including nodes added later. When false, coupons\nare attached to individual nodes by hand and nothing is propagated.\n","example":false,"uniqueKey":"data.sync_coupons","typeLabel":"boolean"},"last_transition_at":{"oneOf":[{"type":"string","format":"date-time","description":"When the flow last changed status.","example":"2026-06-01T12:00:00Z","uniqueKey":"data.last_transition_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"When the flow last changed status.","example":"2026-06-01T12:00:00Z","uniqueKey":"data.last_transition_at.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.last_transition_at","typeLabel":"string\u003cdate-time> | null"},"reentry":{"type":"object","description":"The effective re-entry behavior — whether a contact who has\nbeen through the flow can enter it again. `immediate`: a new\nqualifying trigger re-enrolls the contact as soon as their\nprevious journey has ended. `never`: the contact enters at\nmost once. `after_delay`: the contact may re-enter once\n`frequency` `unit` have elapsed since their previous journey\nended — measured from when it ended, however it ended\n(reaching the last node, being removed by exit criteria, or\nthe flow being deactivated mid-journey). In every mode a\ncontact with a journey in progress is never re-enrolled — no\nsetting runs two journeys at once.\n","properties":{"mode":{"type":"string","enum":["immediate","never","after_delay"],"example":"after_delay","uniqueKey":"data.reentry.mode","typeLabel":"enum\u003cstring>"},"frequency":{"type":"integer","description":"Present only when `mode` is `after_delay`.","example":30,"uniqueKey":"data.reentry.frequency","typeLabel":"integer"},"unit":{"type":"string","enum":["minutes","hours","days"],"description":"Present only when `mode` is `after_delay`.","example":"days","uniqueKey":"data.reentry.unit","typeLabel":"enum\u003cstring>"}},"uniqueKey":"data.reentry","typeLabel":"object"},"flow_filters":{"oneOf":[{"type":"object","description":"Conditions a contact must meet to enter the flow, evaluated once\nwhen the triggering event is processed and never re-checked\nafterwards. Contact properties (segment membership, tags, order\ncount, lifetime spend, country, custom fields, integration fields)\nare matched against the contact's live record; event properties (the\ntriggering cart or order's value, subscription channel, source, and\nhistory) are matched against the triggering event's payload. `null`\nwhen the flow has no filters.\n","properties":{"operation":{"type":"string","description":"How this group's conditions combine — `AND` requires every condition to match, `OR` any one of them.","enum":["AND","OR"],"example":"AND","uniqueKey":"data.flow_filters.oneOf.0.operation","typeLabel":"enum\u003cstring>"},"conditions":{"type":"array","description":"The group's members. An entry is either a single test, as described below, or a nested group carrying its own `operation` and `conditions` — trees can be arbitrarily deep, so recurse rather than assuming one level.","items":{"type":"object","properties":{"property":{"type":"string","description":"The attribute being tested. Some property names embed a discriminator — `custom_fields$\u003cidentifier>` names a merchant-defined field and `date_field_label$\u003cid>` a date field.","example":"segment","uniqueKey":"data.flow_filters.oneOf.0.conditions.items.[INDEX].property","typeLabel":"string"},"operator":{"type":"string","description":"How `value` is compared against the property (e.g. `equals`, `contains`, `greater_than`).","example":"contains","uniqueKey":"data.flow_filters.oneOf.0.conditions.items.[INDEX].operator","typeLabel":"string"},"type":{"type":"string","description":"How Privy stores the value (e.g. `integer`, `string`, `array`) — not how it is emitted here. An id stored as an integer is published as its public id, so a row reading `integer` still carries a string. Read ids as strings regardless of this field.","example":"array","uniqueKey":"data.flow_filters.oneOf.0.conditions.items.[INDEX].type","typeLabel":"string"},"value":{"description":"The comparison value — a scalar or an array, depending on the property and operator.","example":["Nk2P5rW8yU"],"uniqueKey":"data.flow_filters.oneOf.0.conditions.items.[INDEX].value","typeLabel":"any"}},"uniqueKey":"data.flow_filters.oneOf.0.conditions.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.flow_filters.oneOf.0.conditions","typeLabel":"object[]"}},"uniqueKey":"data.flow_filters.oneOf.0","typeLabel":"object"},{"type":"null","description":"Conditions a contact must meet to enter the flow, evaluated once\nwhen the triggering event is processed and never re-checked\nafterwards. Contact properties (segment membership, tags, order\ncount, lifetime spend, country, custom fields, integration fields)\nare matched against the contact's live record; event properties (the\ntriggering cart or order's value, subscription channel, source, and\nhistory) are matched against the triggering event's payload. `null`\nwhen the flow has no filters.\n","uniqueKey":"data.flow_filters.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.flow_filters","typeLabel":"object | null"},"exit_behavior":{"oneOf":[{"type":"object","description":"The effective early-exit behavior; `null` when nothing ends\njourneys early. When any `exit_events` event occurs after a\ncontact enrolled, their in-progress journey ends. This applies\nonly to journeys already in progress: the event that enrolled\nthe contact never triggers the exit, and exits can never block\nentry. On a single event the exit of a previous journey runs\nbefore enrollment is evaluated, so a trigger and an exit\nfiring on the same event type (e.g. an order-placed trigger\nwith an order-placed exit) is a working setup — the standard\nwinback / purchase follow-up pattern, not a misconfiguration.\nWhether that same event also re-enrolls the contact is\n`reentry.mode`. The stored exit condition's comparison\noperator and value are not evaluated by the engine and are\ndeliberately not returned.\n","properties":{"exit_events":{"type":"array","description":"Events that end an in-progress journey. An order-count\nexit condition listens to both `order_placed` and\n`order_delivered`, so those two always appear together.\n","items":{"type":"string","enum":["order_placed","order_delivered","product_added_to_cart","checkout_started"],"uniqueKey":"data.exit_behavior.oneOf.0.exit_events.items.[INDEX]","typeLabel":"enum\u003cstring>"},"example":["order_placed","order_delivered"],"uniqueKey":"data.exit_behavior.oneOf.0.exit_events","typeLabel":"enum\u003cstring>[]"},"applies_to":{"type":"string","enum":["active_journeys_only"],"description":"Exits only end journeys already in progress — they never block entry.","uniqueKey":"data.exit_behavior.oneOf.0.applies_to","typeLabel":"enum\u003cstring>"},"enrollment_event_excluded":{"type":"boolean","enum":[true],"description":"The event that enrolled the contact never triggers the exit.","uniqueKey":"data.exit_behavior.oneOf.0.enrollment_event_excluded","typeLabel":"enum\u003cboolean>"},"summary":{"type":"string","description":"Server-generated restatement of this exit behavior.","example":"After enrollment, a subsequent order placed or order delivered event ends the journey early. The event that enrolled the contact never triggers this exit.","uniqueKey":"data.exit_behavior.oneOf.0.summary","typeLabel":"string"}},"uniqueKey":"data.exit_behavior.oneOf.0","typeLabel":"object"},{"type":"null","description":"The effective early-exit behavior; `null` when nothing ends\njourneys early. When any `exit_events` event occurs after a\ncontact enrolled, their in-progress journey ends. This applies\nonly to journeys already in progress: the event that enrolled\nthe contact never triggers the exit, and exits can never block\nentry. On a single event the exit of a previous journey runs\nbefore enrollment is evaluated, so a trigger and an exit\nfiring on the same event type (e.g. an order-placed trigger\nwith an order-placed exit) is a working setup — the standard\nwinback / purchase follow-up pattern, not a misconfiguration.\nWhether that same event also re-enrolls the contact is\n`reentry.mode`. The stored exit condition's comparison\noperator and value are not evaluated by the engine and are\ndeliberately not returned.\n","properties":{"exit_events":{"type":"array","description":"Events that end an in-progress journey. An order-count\nexit condition listens to both `order_placed` and\n`order_delivered`, so those two always appear together.\n","items":{"type":"string","enum":["order_placed","order_delivered","product_added_to_cart","checkout_started"]},"example":["order_placed","order_delivered"]},"applies_to":{"type":"string","enum":["active_journeys_only"],"description":"Exits only end journeys already in progress — they never block entry."},"enrollment_event_excluded":{"type":"boolean","enum":[true],"description":"The event that enrolled the contact never triggers the exit."},"summary":{"type":"string","description":"Server-generated restatement of this exit behavior.","example":"After enrollment, a subsequent order placed or order delivered event ends the journey early. The event that enrolled the contact never triggers this exit."}},"uniqueKey":"data.exit_behavior.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.exit_behavior","typeLabel":"object | null"},"behavior_summary":{"type":"string","description":"Server-generated plain-language description of the flow's\neffective runtime behavior: enrollment, message timing, early\nexits, and re-entry. Deterministic — derived from the\nconfiguration by the server. Prefer it over reconstructing\nevent ordering from the raw fields.\n\nWhen `status` is not `active` the summary opens by saying so:\na flow that is not active enrolls no contacts and sends no\nmessages, and the sentences that follow describe what it is\nconfigured to do once activated, not what it is doing now.\n","example":"A contact enrolls when the \"Cart abandoned\" event occurs. The flow has 2 message steps. A subsequent order placed or order delivered event ends an active journey early; the event that enrolled the contact never triggers this exit. A contact can re-enter 30 days after their previous journey ends; no setting ever runs two journeys at once.","uniqueKey":"data.behavior_summary","typeLabel":"string"}},"uniqueKey":"data","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"data":{"id":"Vq7L3mN9xR","title":"Abandoned Cart Recovery","status":"active","trigger_type":"cart_abandoned","trigger_label":"Cart abandoned","reentry":{"mode":"after_delay","frequency":30,"unit":"days"},"flow_filters":{"operation":"AND","conditions":[{"property":"channel","operator":"equals","value":"email"},{"property":"segment","operator":"contains","value":["Nk2P5rW8yU"]}]},"exit_behavior":{"exit_events":["order_placed","order_delivered"],"applies_to":"active_journeys_only","enrollment_event_excluded":true,"summary":"After enrollment, a subsequent order placed or order delivered event ends the journey early. The event that enrolled the contact never triggers this exit."},"behavior_summary":"A contact enrolls when the \"Cart abandoned\" event occurs. The flow has 2 message steps. A subsequent order placed or order delivered event ends an active journey early; the event that enrolled the contact never triggers this exit. A contact can re-enter 30 days after their previous journey ends; no setting ever runs two journeys at once.","nodes":[{"uuid":"6f1e8d0a-4b2c-4c1d-9a3e-2f5b7c8d9e0f","type":"delay","name":"Wait 1 hour","parent_uuid":null,"next_uuid":"8b3c0f2d-6d4e-4e3f-9c5a-4b7d9e0f1a2b","data":{"delay_unit":"hours","delay_unit_count":1}},{"uuid":"8b3c0f2d-6d4e-4e3f-9c5a-4b7d9e0f1a2b","type":"split","name":"High-value cart?","parent_uuid":"6f1e8d0a-4b2c-4c1d-9a3e-2f5b7c8d9e0f","yes_next_uuid":"7a2f9e1b-5c3d-4d2e-8b4f-3a6c8d9e0f1a","no_next_uuid":"9c4d1a3e-7e5f-4f4a-8d6b-5c8e0f1a2b3c","data":{"conditions":{"operation":"AND","conditions":[{"property":"abandoned_cart_value","operator":"greater_than","value":100}]}}},{"uuid":"7a2f9e1b-5c3d-4d2e-8b4f-3a6c8d9e0f1a","type":"email","name":"VIP cart reminder","parent_uuid":"8b3c0f2d-6d4e-4e3f-9c5a-4b7d9e0f1a2b","next_uuid":null,"data":{"campaign_id":"Xk4M7pQ2wT","subject":"You left something behind!"}},{"uuid":"9c4d1a3e-7e5f-4f4a-8d6b-5c8e0f1a2b3c","type":"sms","name":"Cart reminder text","parent_uuid":"8b3c0f2d-6d4e-4e3f-9c5a-4b7d9e0f1a2b","next_uuid":null,"data":{"campaign_id":"Zt6N1rV4yU","message_body":"Your cart is waiting — checkout now and save 10%."}}],"sync_coupons":false,"last_transition_at":"2026-06-01T12:00:00Z"}},"examples":{"Example":{"title":"Example","value":{"data":{"id":"Vq7L3mN9xR","title":"Abandoned Cart Recovery","status":"active","trigger_type":"cart_abandoned","trigger_label":"Cart abandoned","reentry":{"mode":"after_delay","frequency":30,"unit":"days"},"flow_filters":{"operation":"AND","conditions":[{"property":"channel","operator":"equals","value":"email"},{"property":"segment","operator":"contains","value":["Nk2P5rW8yU"]}]},"exit_behavior":{"exit_events":["order_placed","order_delivered"],"applies_to":"active_journeys_only","enrollment_event_excluded":true,"summary":"After enrollment, a subsequent order placed or order delivered event ends the journey early. The event that enrolled the contact never triggers this exit."},"behavior_summary":"A contact enrolls when the \"Cart abandoned\" event occurs. The flow has 2 message steps. A subsequent order placed or order delivered event ends an active journey early; the event that enrolled the contact never triggers this exit. A contact can re-enter 30 days after their previous journey ends; no setting ever runs two journeys at once.","nodes":[{"uuid":"6f1e8d0a-4b2c-4c1d-9a3e-2f5b7c8d9e0f","type":"delay","name":"Wait 1 hour","parent_uuid":null,"next_uuid":"8b3c0f2d-6d4e-4e3f-9c5a-4b7d9e0f1a2b","data":{"delay_unit":"hours","delay_unit_count":1}},{"uuid":"8b3c0f2d-6d4e-4e3f-9c5a-4b7d9e0f1a2b","type":"split","name":"High-value cart?","parent_uuid":"6f1e8d0a-4b2c-4c1d-9a3e-2f5b7c8d9e0f","yes_next_uuid":"7a2f9e1b-5c3d-4d2e-8b4f-3a6c8d9e0f1a","no_next_uuid":"9c4d1a3e-7e5f-4f4a-8d6b-5c8e0f1a2b3c","data":{"conditions":{"operation":"AND","conditions":[{"property":"abandoned_cart_value","operator":"greater_than","value":100}]}}},{"uuid":"7a2f9e1b-5c3d-4d2e-8b4f-3a6c8d9e0f1a","type":"email","name":"VIP cart reminder","parent_uuid":"8b3c0f2d-6d4e-4e3f-9c5a-4b7d9e0f1a2b","next_uuid":null,"data":{"campaign_id":"Xk4M7pQ2wT","subject":"You left something behind!"}},{"uuid":"9c4d1a3e-7e5f-4f4a-8d6b-5c8e0f1a2b3c","type":"sms","name":"Cart reminder text","parent_uuid":"8b3c0f2d-6d4e-4e3f-9c5a-4b7d9e0f1a2b","next_uuid":null,"data":{"campaign_id":"Zt6N1rV4yU","message_body":"Your cart is waiting — checkout now and save 10%."}}],"sync_coupons":false,"last_transition_at":"2026-06-01T12:00:00Z"}}}},"exampleType":"examples"}},"exampleType":"examples"},"fc64f218-5feb-4bea-a0cb-6187ce94410b":{"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"},"b141bd6c-edc6-4ab5-8a41-a30e270a4cf1":{"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"},"65963a92-48b1-4d8f-8db8-e06711569831":{"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"},"a705946b-0565-44de-897d-cb0a1a601aff":{"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":{"fce49423-6096-406b-a9d8-aab0593a12a7":{"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 a flow - Privy Knowledge Base","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-22T23:08:30.122Z","originalFileLocation":"docs/api-reference/get-flow.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=\"Retrieve a single flow by its identifier, including its full configuration: re-entry behavior, flow filters, effective exit behavior, a server-generated behavior summary, and the node tree — each step\u0026#x27;s configuration (data) plus the branch graph, with split conditions and the nodes on each branch. exit_behavior and reentry state the engine\u0026#x27;s effective semantics directly: exits end only journeys already in progress (the enrolling event never triggers them), and reentry.mode says explicitly whether and when a contact can go through again. Trust these fields and behavior_summary over inferences from the node structure. Required scope: flows_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 a flow - Privy Knowledge Base\">\u003cmeta data-mint-head property=\"og:description\" content=\"Retrieve a single flow by its identifier, including its full configuration: re-entry behavior, flow filters, effective exit behavior, a server-generated behavior summary, and the node tree — each step\u0026#x27;s configuration (data) plus the branch graph, with split conditions and the nodes on each branch. exit_behavior and reentry state the engine\u0026#x27;s effective semantics directly: exits end only journeys already in progress (the enrolling event never triggers them), and reentry.mode says explicitly whether and when a contact can go through again. Trust these fields and behavior_summary over inferences from the node structure. Required scope: flows_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\">\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=Flows\u0026amp;title=Get+a+flow\u0026amp;description=Retrieve+a+single+flow+by+its+identifier%2C+including+its+full%0Aconfiguration%3A+re-entry+behavior%2C+flow+filters%2C+effective+exit%0Abehavior%2C+a+server-generated+behavio\u0026amp;theme=a5dbdd3119e247d04186b21c\u0026amp;signature=dee974de0d4f17fb1d451c4688e17f1ec82e5162a191cc46f99bd5ed92096a35\">\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 a flow - Privy Knowledge Base\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Retrieve a single flow by its identifier, including its full configuration: re-entry behavior, flow filters, effective exit behavior, a server-generated behavior summary, and the node tree — each step\u0026#x27;s configuration (data) plus the branch graph, with split conditions and the nodes on each branch. exit_behavior and reentry state the engine\u0026#x27;s effective semantics directly: exits end only journeys already in progress (the enrolling event never triggers them), and reentry.mode says explicitly whether and when a contact can go through again. Trust these fields and behavior_summary over inferences from the node structure. Required scope: flows_read\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://privy.mintlify.site/_mintlify/api/og/v2?division=Flows\u0026amp;title=Get+a+flow\u0026amp;description=Retrieve+a+single+flow+by+its+identifier%2C+including+its+full%0Aconfiguration%3A+re-entry+behavior%2C+flow+filters%2C+effective+exit%0Abehavior%2C+a+server-generated+behavio\u0026amp;theme=a5dbdd3119e247d04186b21c\u0026amp;signature=dee974de0d4f17fb1d451c4688e17f1ec82e5162a191cc46f99bd5ed92096a35\">\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\">\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.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#webpage\",\"url\":\"https://help.privy.com/docs/api-reference/get-flow\",\"name\":\"Get a flow\",\"description\":\"Retrieve a single flow by its identifier, including its full configuration: re-entry behavior, flow filters, effective exit behavior, a server-generated behavior summary, and the node tree — each step's configuration (data) plus the branch graph, with split conditions and the nodes on each branch. exit_behavior and reentry state the engine's effective semantics directly: exits end only journeys already in progress (the enrolling event never triggers them), and reentry.mode says explicitly whether and when a contact can go through again. Trust these fields and behavior_summary over inferences from the node structure. Required scope: flows_read\",\"dateModified\":\"2026-10-22T23:08:30.122Z\",\"isPartOf\":{\"@id\":\"https://help.privy.com#website\"},\"breadcrumb\":{\"@id\":\"https://help.privy.com/docs/api-reference/get-flow#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://help.privy.com/docs/api-reference/get-flow#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Flows\",\"item\":\"https://help.privy.com/docs/api-reference/list-flows\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Get a flow\",\"item\":\"https://help.privy.com/docs/api-reference/get-flow\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://help.privy.com/docs/api-reference/get-flow#apireference\",\"headline\":\"Get a flow\",\"name\":\"Get a flow\",\"description\":\"Retrieve a single flow by its identifier, including its full configuration: re-entry behavior, flow filters, effective exit behavior, a server-generated behavior summary, and the node tree — each step's configuration (data) plus the branch graph, with split conditions and the nodes on each branch. exit_behavior and reentry state the engine's effective semantics directly: exits end only journeys already in progress (the enrolling event never triggers them), and reentry.mode says explicitly whether and when a contact can go through again. Trust these fields and behavior_summary over inferences from the node structure. Required scope: flows_read\",\"url\":\"https://help.privy.com/docs/api-reference/get-flow\",\"mainEntityOfPage\":{\"@id\":\"https://help.privy.com/docs/api-reference/get-flow#webpage\"},\"dateModified\":\"2026-10-22T23:08:30.122Z\",\"publisher\":{\"@id\":\"https://help.privy.com/#organization\"},\"isPartOf\":{\"@id\":\"https://help.privy.com#website\"}}]}\u003c/script>","agentPointerHref":"/docs/api-reference/get-flow.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","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","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","description":"Retrieve a paginated list of your automation flows, including each flow's trigger and steps.\nUse `GET /v1/flows/{id}` for a flow's full configuration — entry frequency,\nflow filters, exit criteria, and the node branch graph.\n\nConfiguration only — no performance, and no membership. Flow results and\nthe live enrollment count both come from `/v1/reports/flows`, which lists\nevery flow, so pair the two rather than expecting stats here.\n\n**Required scope:** `flows_read`\n","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","description":"Retrieve a paginated list of your customer segments with their mailable/textable member counts.\n\nRows carry each segment's name, prebuilt flag, and reachable-member counts\nbut not its members: `/v1/segments/{id}/contacts` returns them. Nothing in the API\nreports performance per segment — there is no segment report, so revenue\nor engagement for a segment cannot be answered from here.\n\n**Required scope:** `segments_read`\n","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 a flow - 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"]}