Adding a branch to a BranchNode creates one AudienceFilter child node.
Adding a branch to an ExperimentBranchNode creates one VariantNode child node.This endpoint does not accept node configuration fields; update the child node after creation. Public workflows are limited to 400 nodes, and this endpoint adds 1 node.
The workflow revision token returned by the latest workflow read or mutation. Older workflows may return null before their first revision-aware mutation; pass null back as expectedRevisionId in that case. If the token is stale, the API returns a 409 Conflict error.
{"docsConfig":{"theme":"almond","$schema":"https://mintlify.com/docs.json","name":"Loops","description":"Documentation for Loops, the email platform for software companies.","colors":{"primary":"#FC5200","light":"#FC7432","dark":"#DD4800"},"logo":{"light":"https://mintcdn.com/loops/1DdZd7QTRR4Srm-l/logo/light.png?fit=max\u0026auto=format\u0026n=1DdZd7QTRR4Srm-l\u0026q=85\u0026s=af97da0e1eae22a2d70b0e1cae7f0df3","dark":"https://mintcdn.com/loops/1DdZd7QTRR4Srm-l/logo/dark.png?fit=max\u0026auto=format\u0026n=1DdZd7QTRR4Srm-l\u0026q=85\u0026s=72d4e8cd5151301936b7ae8ea69be757"},"favicon":"https://mintcdn.com/loops/Vqx-auiVy74YQr9S/favicon.png?fit=max\u0026auto=format\u0026n=Vqx-auiVy74YQr9S\u0026q=85\u0026s=dbe3e951e74a150874408aee1934e3cf","api":{"playground":{"display":"simple"},"mdx":{"auth":{"method":"bearer"},"server":"https://app.loops.so/api"}},"navbar":{"links":[{"href":"https://app.loops.so/settings?page=support","label":"Contact Us"},{"href":"https://app.loops.so/","label":"Log in"},{"href":"https://loops.so","label":"Loops"}]},"footer":{"socials":{"x":"https://twitter.com/loops","linkedin":"https://www.linkedin.com/company/sendwithloops"}},"seo":{"indexing":"navigable"},"fonts":{"family":"Inter"},"styling":{"codeblocks":"dark","latex":false},"integrations":{"koala":{"publicApiKey":"pk_f2087cde372aa191b0b276a5518bd869acc7"},"amplitude":{"apiKey":"512a2f0d1f22b5c69615cec59d377029"},"ga4":{"measurementId":"G-JSTF27DRRN"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity"],"display":"header"},"metadata":{"timestamp":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"loops","hasAudioNarration":false,"actualSubdomain":"loops","customDomains":["loops.so"],"gitSource":{"type":"github","owner":"loops-so","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae20f278c406dd2ccb37b9c","collectionId":"85139641-3ca4-494e-9b44-dc7e8d941234","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae20f278c406dd2ccb37b9c"},"feedback":{"thumbs":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"REMOVE_BRANDING":{"status":"ENABLED"},"CONTEXTUAL_FEEDBACK":{"status":"DISABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"DISABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae20f278c406dd2ccb37b9c","clientVersion":"0.0.4043","searchFilterCounts":[{"language":"default","tag":"Learn","count":98},{"language":"default","tag":"API","count":87},{"language":"default","tag":"API Reference","count":72},{"language":"default","tag":"Guides","count":40},{"language":"default","tag":"Integrations","count":32},{"language":"default","tag":"Editing emails","count":25},{"language":"default","tag":"Contacts","count":18},{"language":"default","tag":"CLI","count":18},{"language":"default","tag":"Deliverability","count":18},{"language":"default","tag":"Workflows","count":12}]},"assistantConfig":{"deflection":{"enabled":true,"email":"support@loops.so","showHelpButton":true}},"basePath":"/docs","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","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":"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":"byok-sep-25","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":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","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}],"googleFontsInlined":false},"customCss":[{"filePath":"custom.css","content":".callout code:not(pre code){background-color:rgba(0,0,0,.06);border-color:rgba(0,0,0,.08)}.dark .callout code:not(pre code){background-color:rgba(255,255,255,.09);border-color:rgba(255,255,255,.12)}"}],"page":{"pagePath":"api-reference/add-workflow-branch","slug":"/api-reference/add-workflow-branch","pageMetadata":{"title":"Add a branch","description":"Add a branch and a child node under an existing Branch or Experiment node.","deprecated":null,"version":null,"sidebarTitle":"Add a branch","openapi":"https://app.loops.so/openapi.json post /v1/workflows/{workflowId}/nodes/{nodeId}/add-branch","href":"/api-reference/add-workflow-branch","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Add a branch and a child node under an existing Branch or Experiment node.\"\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,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,p:`p`,..._provideComponents(),...props.components};return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Adding a branch to a `,_jsx(_components.code,{children:`BranchNode`}),` creates one `,_jsx(_components.code,{children:`AudienceFilter`}),` child node.\nAdding a branch to an `,_jsx(_components.code,{children:`ExperimentBranchNode`}),` creates one `,_jsx(_components.code,{children:`VariantNode`}),` child node.`]}),`\n`,_jsxs(_components.p,{children:[`This endpoint does not accept node configuration fields; `,_jsx(_components.a,{href:`/api-reference/update-workflow-node`,children:`update the child node`}),` after creation. Public workflows are limited to 400 nodes, and this endpoint adds 1 node.`]})]})}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":{"codeStyling":"dark","config":{},"pageMetadata":{"title":"Add a branch","description":"Add a branch and a child node under an existing Branch or Experiment node.","deprecated":null,"version":null,"sidebarTitle":"Add a branch","openapi":"https://app.loops.so/openapi.json post /v1/workflows/{workflowId}/nodes/{nodeId}/add-branch","href":"/api-reference/add-workflow-branch","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":["/docs/_mintlify/custom/loops/9f23b55700f99bdb/script.js"],"openApiReferenceData":{"operation":{"tags":["Workflow nodes"],"summary":"Add a branch","operationId":"addWorkflowBranch","description":"Add a branch and a child node under an existing Branch or Experiment node.","x-mint":{"href":"/api-reference/add-workflow-branch","content":"Adding a branch to a `BranchNode` creates one `AudienceFilter` child node.\nAdding a branch to an `ExperimentBranchNode` creates one `VariantNode` child node.\n\nThis endpoint does not accept node configuration fields; [update the child node](/api-reference/update-workflow-node) after creation. Public workflows are limited to 400 nodes, and this endpoint adds 1 node.","metadata":{"sidebarTitle":"Add a branch","description":"Add a branch and a child node under an existing Branch or Experiment node."}},"requestBody":"945444bb-76c1-4a38-b099-ba8af93d779e","responses":{"200":"289a77eb-6457-4ffb-95fd-0c26d048afa8","400":"74f83afc-2aa4-4f1e-a07b-7d071f151ef2","401":"992a7516-88a7-4749-975c-a031ec9e892f","404":"d1e7b7fd-c686-430a-ba8c-9177e9c4a609","405":"859e653a-3255-4370-bfc8-dafc1e4fd683","409":"e6221056-2f68-42d5-93c5-9fb39c0b3821"},"security":["7897de14-96f2-425b-9fba-dae3be1f63bd"],"method":"post","type":"path","servers":["1e62fe97-28f9-4363-ae44-d09684d6987d"],"path":"/v1/workflows/{workflowId}/nodes/{nodeId}/add-branch","baseUrlOptions":["https://app.loops.so/api"],"title":"Add a branch","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"c9e758a9-bb71-40b1-b105-11e1fc27ca86":{"name":"workflowId","in":"path","required":true,"description":"The ID of the workflow.","schema":{"type":"string","isRequired":true,"description":"The ID of the workflow.","uniqueKey":"","typeLabel":"string"}},"4f146b05-2eec-4487-9fb5-492614652fe9":{"name":"nodeId","in":"path","required":true,"description":"The ID of the BranchNode or ExperimentBranchNode that should receive one new child.","schema":{"type":"string","isRequired":true,"description":"The ID of the BranchNode or ExperimentBranchNode that should receive one new child.","uniqueKey":"","typeLabel":"string"}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"expectedRevisionId":{"oneOf":[{"type":"string","description":"The workflow revision token returned by the latest workflow read or mutation. Older workflows may return `null` before their first revision-aware mutation; pass `null` back as `expectedRevisionId` in that case. If the token is stale, the API returns a `409 Conflict` error.","isRequired":true,"uniqueKey":"expectedRevisionId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The workflow revision token returned by the latest workflow read or mutation. Older workflows may return `null` before their first revision-aware mutation; pass `null` back as `expectedRevisionId` in that case. If the token is stale, the API returns a `409 Conflict` error.","isRequired":true,"uniqueKey":"expectedRevisionId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"expectedRevisionId","typeLabel":"string | null"}},"required":["expectedRevisionId"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"expectedRevisionId":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"289a77eb-6457-4ffb-95fd-0c26d048afa8":{"description":"Branch added.","content":{"application/json":{"schema":{"type":"object","properties":{"node":{"oneOf":[{"type":"object","title":"Signup trigger","description":"Detailed workflow node returned from a mutation, plus the latest workflow revision token.","required":["workflowRevisionId","id","typeName","nextNodeIds"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"node.oneOf.0.id","typeLabel":"string"},"typeName":{"type":"string","enum":["SignupTrigger"],"isRequired":true,"uniqueKey":"node.oneOf.0.typeName","typeLabel":"enum\u003cstring>"},"nextNodeIds":{"type":"array","items":{"type":"string","uniqueKey":"node.oneOf.0.nextNodeIds.items.[INDEX]","typeLabel":"string"},"description":"The IDs of the nodes that are downstream of this node.","isRequired":true,"uniqueKey":"node.oneOf.0.nextNodeIds","typeLabel":"string[]"},"workflowRevisionId":{"type":"string","description":"The current workflow revision token. Pass the latest value as `expectedRevisionId` on the next workflow mutation.","isRequired":true,"uniqueKey":"node.oneOf.0.workflowRevisionId","typeLabel":"string"}},"isRequired":true,"uniqueKey":"node.oneOf.0","typeLabel":"Signup trigger · object"},{"type":"object","title":"Event trigger","description":"Detailed workflow node returned from a mutation, plus the latest workflow revision token.","required":["workflowRevisionId","id","typeName","nextNodeIds","reEligible"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"node.oneOf.1.id","typeLabel":"string"},"typeName":{"type":"string","enum":["EventTrigger"],"isRequired":true,"uniqueKey":"node.oneOf.1.typeName","typeLabel":"enum\u003cstring>"},"nextNodeIds":{"type":"array","items":{"type":"string","uniqueKey":"node.oneOf.1.nextNodeIds.items.[INDEX]","typeLabel":"string"},"description":"The IDs of the nodes that are downstream of this node.","isRequired":true,"uniqueKey":"node.oneOf.1.nextNodeIds","typeLabel":"string[]"},"reEligible":{"type":"boolean","description":"If `true`, the contacts will be able to enter this workflow every time the trigger is matched. If `false`, contacts will only ever enter this workflow once. Matches the \"Trigger frequency\" option in the UI.","isRequired":true,"uniqueKey":"node.oneOf.1.reEligible","typeLabel":"boolean"},"workflowRevisionId":{"type":"string","description":"The current workflow revision token. Pass the latest value as `expectedRevisionId` on the next workflow mutation.","isRequired":true,"uniqueKey":"node.oneOf.1.workflowRevisionId","typeLabel":"string"},"eventName":{"type":"string","description":"The name of the event pattern that triggers this node.","uniqueKey":"node.oneOf.1.eventName","typeLabel":"string"},"eventProperties":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","isRequired":true,"uniqueKey":"node.oneOf.1.eventProperties.items.[INDEX].name","typeLabel":"string"},"type":{"type":"string","enum":["string","number","boolean","date"],"isRequired":true,"uniqueKey":"node.oneOf.1.eventProperties.items.[INDEX].type","typeLabel":"enum\u003cstring>"}},"required":["name","type"],"uniqueKey":"node.oneOf.1.eventProperties.items.[INDEX]","typeLabel":"object"},"description":"The properties of the event pattern, which can be used in emails.","uniqueKey":"node.oneOf.1.eventProperties","typeLabel":"object[]"}},"isRequired":true,"uniqueKey":"node.oneOf.1","typeLabel":"Event trigger · object"},{"type":"object","title":"Contact property trigger","description":"Detailed workflow node returned from a mutation, plus the latest workflow revision token.","required":["workflowRevisionId","id","typeName","nextNodeIds","contactPropertyQuery","reEligible"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"node.oneOf.2.id","typeLabel":"string"},"typeName":{"type":"string","enum":["ContactPropertyTrigger"],"isRequired":true,"uniqueKey":"node.oneOf.2.typeName","typeLabel":"enum\u003cstring>"},"nextNodeIds":{"type":"array","items":{"type":"string","uniqueKey":"node.oneOf.2.nextNodeIds.items.[INDEX]","typeLabel":"string"},"description":"The IDs of the nodes that are downstream of this node.","isRequired":true,"uniqueKey":"node.oneOf.2.nextNodeIds","typeLabel":"string[]"},"contactPropertyQuery":{"oneOf":[{"type":"object","title":"Contact property query","description":"Define the contact property change that triggers the workflow. In update requests, `key` must resolve to an existing contact property that is available for Contact Updated triggers. Hidden or unsupported fields, such as `createdAt`, `notes`, and computed contact properties, are rejected.","required":["key","is","was"],"properties":{"key":{"type":"string","description":"The camel-cased `key` of the contact property to query. The property must exist for the team and must be available for Contact Updated triggers.","examples":["firstName","email","planName"],"isRequired":true,"uniqueKey":"node.oneOf.2.contactPropertyQuery.oneOf.0.key","typeLabel":"string"},"is":{"type":"object","description":"Comparison for the new contact property value after the update.","properties":{"value":{"oneOf":[{"type":"string","title":"String","isRequired":true,"uniqueKey":"node.oneOf.2.contactPropertyQuery.oneOf.0.is.value.oneOf.0","typeLabel":"string"},{"type":"number","title":"Number","isRequired":true,"uniqueKey":"node.oneOf.2.contactPropertyQuery.oneOf.0.is.value.oneOf.1","typeLabel":"number"},{"type":"boolean","title":"Boolean","isRequired":true,"uniqueKey":"node.oneOf.2.contactPropertyQuery.oneOf.0.is.value.oneOf.2","typeLabel":"boolean"}],"isRequired":true,"uniqueKey":"node.oneOf.2.contactPropertyQuery.oneOf.0.is.value","typeLabel":"string | number | boolean"},"operator":{"type":"string","description":"The comparison operator. It must be valid for the selected contact property's type and for the `is` or `was` side of the comparison. Number and boolean properties allow `empty` on `was`, but not on `is`.","enum":["any","contains","not_contains","empty","not_empty","equal","not_equal","greater_than","less_than","true","false","numeric_equal","numeric_not_equal","after","before","between"],"isRequired":true,"uniqueKey":"node.oneOf.2.contactPropertyQuery.oneOf.0.is.operator","typeLabel":"enum\u003cstring>"}},"required":["value","operator"],"isRequired":true,"uniqueKey":"node.oneOf.2.contactPropertyQuery.oneOf.0.is","typeLabel":"object"},"was":{"type":"object","description":"Comparison for the previous contact property value before the update.","properties":{"value":{"oneOf":[{"type":"string","title":"String","isRequired":true,"uniqueKey":"node.oneOf.2.contactPropertyQuery.oneOf.0.was.value.oneOf.0","typeLabel":"string"},{"type":"number","title":"Number","isRequired":true,"uniqueKey":"node.oneOf.2.contactPropertyQuery.oneOf.0.was.value.oneOf.1","typeLabel":"number"},{"type":"boolean","title":"Boolean","isRequired":true,"uniqueKey":"node.oneOf.2.contactPropertyQuery.oneOf.0.was.value.oneOf.2","typeLabel":"boolean"}],"isRequired":true,"uniqueKey":"node.oneOf.2.contactPropertyQuery.oneOf.0.was.value","typeLabel":"string | number | boolean"},"operator":{"type":"string","description":"The comparison operator. It must be valid for the selected contact property's type and for the `is` or `was` side of the comparison. Number and boolean properties allow `empty` on `was`, but not on `is`.","enum":["any","contains","not_contains","empty","not_empty","equal","not_equal","greater_than","less_than","true","false","numeric_equal","numeric_not_equal","after","before","between"],"isRequired":true,"uniqueKey":"node.oneOf.2.contactPropertyQuery.oneOf.0.was.operator","typeLabel":"enum\u003cstring>"}},"required":["value","operator"],"isRequired":true,"uniqueKey":"node.oneOf.2.contactPropertyQuery.oneOf.0.was","typeLabel":"object"}},"isRequired":true,"uniqueKey":"node.oneOf.2.contactPropertyQuery.oneOf.0","typeLabel":"Contact property query · object"},{"type":"null","title":"Null","isRequired":true,"uniqueKey":"node.oneOf.2.contactPropertyQuery.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"node.oneOf.2.contactPropertyQuery","typeLabel":"Contact property query · object | null"},"reEligible":{"type":"boolean","description":"If `true`, the contacts will be able to enter this workflow every time the trigger is matched. If `false`, contacts will only ever enter this workflow once. Matches the \"Trigger frequency\" option in the UI.","isRequired":true,"uniqueKey":"node.oneOf.2.reEligible","typeLabel":"boolean"},"workflowRevisionId":{"type":"string","description":"The current workflow revision token. Pass the latest value as `expectedRevisionId` on the next workflow mutation.","isRequired":true,"uniqueKey":"node.oneOf.2.workflowRevisionId","typeLabel":"string"}},"isRequired":true,"uniqueKey":"node.oneOf.2","typeLabel":"Contact property trigger · object"},{"type":"object","title":"Add-to-list trigger","description":"Detailed workflow node returned from a mutation, plus the latest workflow revision token.","required":["workflowRevisionId","id","typeName","nextNodeIds","mailingListId","reEligible"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"node.oneOf.3.id","typeLabel":"string"},"typeName":{"type":"string","enum":["AddToListTrigger"],"isRequired":true,"uniqueKey":"node.oneOf.3.typeName","typeLabel":"enum\u003cstring>"},"nextNodeIds":{"type":"array","items":{"type":"string","uniqueKey":"node.oneOf.3.nextNodeIds.items.[INDEX]","typeLabel":"string"},"description":"The IDs of the nodes that are downstream of this node.","isRequired":true,"uniqueKey":"node.oneOf.3.nextNodeIds","typeLabel":"string[]"},"mailingListId":{"oneOf":[{"type":"string","description":"The ID of the mailing list this trigger sends to, if set.","isRequired":true,"uniqueKey":"node.oneOf.3.mailingListId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The ID of the mailing list this trigger sends to, if set.","isRequired":true,"uniqueKey":"node.oneOf.3.mailingListId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"node.oneOf.3.mailingListId","typeLabel":"string | null"},"reEligible":{"type":"boolean","description":"If `true`, the contacts will be able to enter this workflow every time the trigger is matched. If `false`, contacts will only ever enter this workflow once. Matches the \"Trigger frequency\" option in the UI.","isRequired":true,"uniqueKey":"node.oneOf.3.reEligible","typeLabel":"boolean"},"workflowRevisionId":{"type":"string","description":"The current workflow revision token. Pass the latest value as `expectedRevisionId` on the next workflow mutation.","isRequired":true,"uniqueKey":"node.oneOf.3.workflowRevisionId","typeLabel":"string"}},"isRequired":true,"uniqueKey":"node.oneOf.3","typeLabel":"Add-to-list trigger · object"},{"type":"object","title":"Blank trigger","description":"Detailed workflow node returned from a mutation, plus the latest workflow revision token.","required":["workflowRevisionId","id","typeName","nextNodeIds"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"node.oneOf.4.id","typeLabel":"string"},"typeName":{"type":"string","enum":["BlankTrigger"],"isRequired":true,"uniqueKey":"node.oneOf.4.typeName","typeLabel":"enum\u003cstring>"},"nextNodeIds":{"type":"array","items":{"type":"string","uniqueKey":"node.oneOf.4.nextNodeIds.items.[INDEX]","typeLabel":"string"},"description":"The IDs of the nodes that are downstream of this node.","isRequired":true,"uniqueKey":"node.oneOf.4.nextNodeIds","typeLabel":"string[]"},"workflowRevisionId":{"type":"string","description":"The current workflow revision token. Pass the latest value as `expectedRevisionId` on the next workflow mutation.","isRequired":true,"uniqueKey":"node.oneOf.4.workflowRevisionId","typeLabel":"string"}},"isRequired":true,"uniqueKey":"node.oneOf.4","typeLabel":"Blank trigger · object"},{"type":"object","title":"Audience filter node","description":"Detailed workflow node returned from a mutation, plus the latest workflow revision token.","required":["workflowRevisionId","id","typeName","nextNodeIds","appliesDownstream"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"node.oneOf.5.id","typeLabel":"string"},"typeName":{"type":"string","enum":["AudienceFilter"],"isRequired":true,"uniqueKey":"node.oneOf.5.typeName","typeLabel":"enum\u003cstring>"},"nextNodeIds":{"type":"array","items":{"type":"string","uniqueKey":"node.oneOf.5.nextNodeIds.items.[INDEX]","typeLabel":"string"},"description":"The IDs of the nodes that are downstream of this node.","isRequired":true,"uniqueKey":"node.oneOf.5.nextNodeIds","typeLabel":"string[]"},"appliesDownstream":{"description":"If `true`, the audience filter will apply to all downstream nodes. If `false`, the audience filter will only apply to the current node. Matches the \"Filter scope\" option in the UI.","type":"boolean","isRequired":true,"uniqueKey":"node.oneOf.5.appliesDownstream","typeLabel":"boolean"},"workflowRevisionId":{"type":"string","description":"The current workflow revision token. Pass the latest value as `expectedRevisionId` on the next workflow mutation.","isRequired":true,"uniqueKey":"node.oneOf.5.workflowRevisionId","typeLabel":"string"},"audienceFilter":{"oneOf":[{"type":"object","description":"A tree of audience conditions combined with `match`.","properties":{"match":{"type":"string","enum":["all","any"],"isRequired":true,"uniqueKey":"node.oneOf.5.audienceFilter.oneOf.0.match","typeLabel":"enum\u003cstring>"},"conditions":{"type":"array","minItems":1,"items":{"oneOf":[{"type":"object","title":"Contact property","description":"Matches contacts by a property value.","required":["type","key","operator"],"example":{"type":"property","key":"plan","operator":"equals","value":"pro"},"properties":{"type":{"type":"string","enum":["property"],"isRequired":true,"uniqueKey":"node.oneOf.5.audienceFilter.oneOf.0.conditions.items.[INDEX].oneOf.0.type","typeLabel":"enum\u003cstring>"},"key":{"type":"string","description":"The contact property name.","isRequired":true,"uniqueKey":"node.oneOf.5.audienceFilter.oneOf.0.conditions.items.[INDEX].oneOf.0.key","typeLabel":"string"},"operator":{"type":"string","enum":["any","contains","notContains","equals","notEquals","greaterThan","lessThan","isTrue","isFalse","empty","notEmpty","dateEmpty","dateNotEmpty","after","before","between"],"isRequired":true,"uniqueKey":"node.oneOf.5.audienceFilter.oneOf.0.conditions.items.[INDEX].oneOf.0.operator","typeLabel":"enum\u003cstring>"},"value":{"oneOf":[{"type":"string","title":"String","description":"The comparison value. Omitted for value-less operators (e.g. `isTrue`, `empty`). A `{ from, to }` object for `between`.","uniqueKey":"node.oneOf.5.audienceFilter.oneOf.0.conditions.items.[INDEX].oneOf.0.value.oneOf.0","typeLabel":"string"},{"type":"number","title":"Number","description":"The comparison value. Omitted for value-less operators (e.g. `isTrue`, `empty`). A `{ from, to }` object for `between`.","uniqueKey":"node.oneOf.5.audienceFilter.oneOf.0.conditions.items.[INDEX].oneOf.0.value.oneOf.1","typeLabel":"number"},{"type":"object","title":"Date range","description":"The comparison value. Omitted for value-less operators (e.g. `isTrue`, `empty`). A `{ from, to }` object for `between`.","required":["from","to"],"properties":{"from":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"node.oneOf.5.audienceFilter.oneOf.0.conditions.items.[INDEX].oneOf.0.value.oneOf.2.from","typeLabel":"string\u003cdate-time>"},"to":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"node.oneOf.5.audienceFilter.oneOf.0.conditions.items.[INDEX].oneOf.0.value.oneOf.2.to","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"node.oneOf.5.audienceFilter.oneOf.0.conditions.items.[INDEX].oneOf.0.value.oneOf.2","typeLabel":"Date range · object"}],"uniqueKey":"node.oneOf.5.audienceFilter.oneOf.0.conditions.items.[INDEX].oneOf.0.value","typeLabel":"string | number | Date range · object"}},"uniqueKey":"node.oneOf.5.audienceFilter.oneOf.0.conditions.items.[INDEX].oneOf.0","typeLabel":"Contact property · object"},{"type":"object","title":"Mailing list opt-in","description":"Matches contacts by mailing list opt-in status.","required":["type","status"],"example":{"type":"optIn","status":"accepted"},"properties":{"type":{"type":"string","enum":["optIn"],"isRequired":true,"uniqueKey":"node.oneOf.5.audienceFilter.oneOf.0.conditions.items.[INDEX].oneOf.1.type","typeLabel":"enum\u003cstring>"},"status":{"oneOf":[{"type":"string","enum":["accepted","pending","rejected",null],"isRequired":true,"uniqueKey":"node.oneOf.5.audienceFilter.oneOf.0.conditions.items.[INDEX].oneOf.1.status.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["accepted","pending","rejected",null],"isRequired":true,"uniqueKey":"node.oneOf.5.audienceFilter.oneOf.0.conditions.items.[INDEX].oneOf.1.status.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"node.oneOf.5.audienceFilter.oneOf.0.conditions.items.[INDEX].oneOf.1.status","typeLabel":"enum\u003cstring> | null"}},"uniqueKey":"node.oneOf.5.audienceFilter.oneOf.0.conditions.items.[INDEX].oneOf.1","typeLabel":"Mailing list opt-in · object"},{"type":"object","title":"Activity","description":"Matches contacts by their activity on a campaign or workflow.","required":["type","action","negate","target","id"],"example":{"type":"activity","action":"opened","negate":false,"target":"campaign","id":"clc4m6n8p0q2r4s6t8u0v2x4"},"properties":{"type":{"type":"string","enum":["activity"],"isRequired":true,"uniqueKey":"node.oneOf.5.audienceFilter.oneOf.0.conditions.items.[INDEX].oneOf.2.type","typeLabel":"enum\u003cstring>"},"action":{"type":"string","enum":["sent","opened","clicked"],"isRequired":true,"uniqueKey":"node.oneOf.5.audienceFilter.oneOf.0.conditions.items.[INDEX].oneOf.2.action","typeLabel":"enum\u003cstring>"},"negate":{"type":"boolean","isRequired":true,"uniqueKey":"node.oneOf.5.audienceFilter.oneOf.0.conditions.items.[INDEX].oneOf.2.negate","typeLabel":"boolean"},"target":{"type":"string","enum":["campaign","workflow","workflowEmail"],"isRequired":true,"uniqueKey":"node.oneOf.5.audienceFilter.oneOf.0.conditions.items.[INDEX].oneOf.2.target","typeLabel":"enum\u003cstring>"},"id":{"type":"string","description":"The ID of the campaign, workflow, or workflow email.","isRequired":true,"uniqueKey":"node.oneOf.5.audienceFilter.oneOf.0.conditions.items.[INDEX].oneOf.2.id","typeLabel":"string"}},"uniqueKey":"node.oneOf.5.audienceFilter.oneOf.0.conditions.items.[INDEX].oneOf.2","typeLabel":"Activity · object"}],"uniqueKey":"node.oneOf.5.audienceFilter.oneOf.0.conditions.items.[INDEX]","typeLabel":"Contact property · object | Mailing list opt-in · object | Activity · object"},"isRequired":true,"uniqueKey":"node.oneOf.5.audienceFilter.oneOf.0.conditions","typeLabel":"(Contact property · object | Mailing list opt-in · object | Activity · object)[]"}},"required":["match","conditions"],"additionalProperties":false,"uniqueKey":"node.oneOf.5.audienceFilter.oneOf.0","typeLabel":"object"},{"type":"null","description":"A tree of audience conditions combined with `match`.","properties":{"match":{"type":"string","enum":["all","any"]},"conditions":{"type":"array","minItems":1,"items":{"oneOf":[{"type":"object","title":"Contact property","description":"Matches contacts by a property value.","required":["type","key","operator"],"example":{"type":"property","key":"plan","operator":"equals","value":"pro"},"properties":{"type":{"type":"string","enum":["property"]},"key":{"type":"string","description":"The contact property name."},"operator":{"type":"string","enum":["any","contains","notContains","equals","notEquals","greaterThan","lessThan","isTrue","isFalse","empty","notEmpty","dateEmpty","dateNotEmpty","after","before","between"]},"value":{"oneOf":[{"type":"string","title":"String","description":"The comparison value. Omitted for value-less operators (e.g. `isTrue`, `empty`). A `{ from, to }` object for `between`."},{"type":"number","title":"Number","description":"The comparison value. Omitted for value-less operators (e.g. `isTrue`, `empty`). A `{ from, to }` object for `between`."},{"type":"object","title":"Date range","description":"The comparison value. Omitted for value-less operators (e.g. `isTrue`, `empty`). A `{ from, to }` object for `between`.","required":["from","to"],"properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}}}]}}},{"type":"object","title":"Mailing list opt-in","description":"Matches contacts by mailing list opt-in status.","required":["type","status"],"example":{"type":"optIn","status":"accepted"},"properties":{"type":{"type":"string","enum":["optIn"]},"status":{"oneOf":[{"type":"string","enum":["accepted","pending","rejected",null]},{"type":"null","enum":["accepted","pending","rejected",null]}]}}},{"type":"object","title":"Activity","description":"Matches contacts by their activity on a campaign or workflow.","required":["type","action","negate","target","id"],"example":{"type":"activity","action":"opened","negate":false,"target":"campaign","id":"clc4m6n8p0q2r4s6t8u0v2x4"},"properties":{"type":{"type":"string","enum":["activity"]},"action":{"type":"string","enum":["sent","opened","clicked"]},"negate":{"type":"boolean"},"target":{"type":"string","enum":["campaign","workflow","workflowEmail"]},"id":{"type":"string","description":"The ID of the campaign, workflow, or workflow email."}}}]}}},"required":["match","conditions"],"additionalProperties":false,"uniqueKey":"node.oneOf.5.audienceFilter.oneOf.1","typeLabel":"null"}],"uniqueKey":"node.oneOf.5.audienceFilter","typeLabel":"object | null"},"audienceSegmentId":{"type":"string","description":"The ID of the audience segment this trigger targets.","uniqueKey":"node.oneOf.5.audienceSegmentId","typeLabel":"string"}},"isRequired":true,"uniqueKey":"node.oneOf.5","typeLabel":"Audience filter node · object"},{"type":"object","title":"Timer node","description":"Detailed workflow node returned from a mutation, plus the latest workflow revision token.","required":["workflowRevisionId","id","typeName","nextNodeIds","amount","unit"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"node.oneOf.6.id","typeLabel":"string"},"typeName":{"type":"string","enum":["TimerAction"],"isRequired":true,"uniqueKey":"node.oneOf.6.typeName","typeLabel":"enum\u003cstring>"},"nextNodeIds":{"type":"array","items":{"type":"string","uniqueKey":"node.oneOf.6.nextNodeIds.items.[INDEX]","typeLabel":"string"},"description":"The IDs of the nodes that are downstream of this node.","isRequired":true,"uniqueKey":"node.oneOf.6.nextNodeIds","typeLabel":"string[]"},"amount":{"type":"number","description":"The amount of time to wait before triggering the next node. Set to `0` to move to the next node immediately.","isRequired":true,"uniqueKey":"node.oneOf.6.amount","typeLabel":"number"},"unit":{"type":"string","enum":["m","h","d"],"description":"The unit of time for the timer action node. m = minutes, h = hours, d = days.","isRequired":true,"uniqueKey":"node.oneOf.6.unit","typeLabel":"enum\u003cstring>"},"workflowRevisionId":{"type":"string","description":"The current workflow revision token. Pass the latest value as `expectedRevisionId` on the next workflow mutation.","isRequired":true,"uniqueKey":"node.oneOf.6.workflowRevisionId","typeLabel":"string"}},"isRequired":true,"uniqueKey":"node.oneOf.6","typeLabel":"Timer node · object"},{"type":"object","title":"Send email node","description":"Detailed workflow node returned from a mutation, plus the latest workflow revision token.","required":["workflowRevisionId","id","typeName","nextNodeIds","emailMessageId","subject"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"node.oneOf.7.id","typeLabel":"string"},"typeName":{"type":"string","enum":["SendEmailAction"],"isRequired":true,"uniqueKey":"node.oneOf.7.typeName","typeLabel":"enum\u003cstring>"},"nextNodeIds":{"type":"array","items":{"type":"string","uniqueKey":"node.oneOf.7.nextNodeIds.items.[INDEX]","typeLabel":"string"},"description":"The IDs of the nodes that are downstream of this node.","isRequired":true,"uniqueKey":"node.oneOf.7.nextNodeIds","typeLabel":"string[]"},"emailMessageId":{"type":"string","description":"The ID of the email message to send. To edit this email, use the `POST /v1/email-messages/{emailMessageId}` endpoint.","isRequired":true,"uniqueKey":"node.oneOf.7.emailMessageId","typeLabel":"string"},"subject":{"type":"string","isRequired":true,"uniqueKey":"node.oneOf.7.subject","typeLabel":"string"},"workflowRevisionId":{"type":"string","description":"The current workflow revision token. Pass the latest value as `expectedRevisionId` on the next workflow mutation.","isRequired":true,"uniqueKey":"node.oneOf.7.workflowRevisionId","typeLabel":"string"}},"isRequired":true,"uniqueKey":"node.oneOf.7","typeLabel":"Send email node · object"},{"type":"object","title":"Exit node","description":"Detailed workflow node returned from a mutation, plus the latest workflow revision token.","required":["workflowRevisionId","id","typeName","nextNodeIds"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"node.oneOf.8.id","typeLabel":"string"},"typeName":{"type":"string","enum":["ExitAction"],"isRequired":true,"uniqueKey":"node.oneOf.8.typeName","typeLabel":"enum\u003cstring>"},"nextNodeIds":{"type":"array","items":{"type":"string","uniqueKey":"node.oneOf.8.nextNodeIds.items.[INDEX]","typeLabel":"string"},"description":"The IDs of the nodes that are downstream of this node.","isRequired":true,"uniqueKey":"node.oneOf.8.nextNodeIds","typeLabel":"string[]"},"workflowRevisionId":{"type":"string","description":"The current workflow revision token. Pass the latest value as `expectedRevisionId` on the next workflow mutation.","isRequired":true,"uniqueKey":"node.oneOf.8.workflowRevisionId","typeLabel":"string"}},"isRequired":true,"uniqueKey":"node.oneOf.8","typeLabel":"Exit node · object"},{"type":"object","title":"Branch node","description":"Detailed workflow node returned from a mutation, plus the latest workflow revision token.","required":["workflowRevisionId","id","typeName","nextNodeIds"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"node.oneOf.9.id","typeLabel":"string"},"typeName":{"type":"string","enum":["BranchNode"],"isRequired":true,"uniqueKey":"node.oneOf.9.typeName","typeLabel":"enum\u003cstring>"},"nextNodeIds":{"type":"array","items":{"type":"string","uniqueKey":"node.oneOf.9.nextNodeIds.items.[INDEX]","typeLabel":"string"},"description":"The IDs of the nodes that are downstream of this node.","isRequired":true,"uniqueKey":"node.oneOf.9.nextNodeIds","typeLabel":"string[]"},"workflowRevisionId":{"type":"string","description":"The current workflow revision token. Pass the latest value as `expectedRevisionId` on the next workflow mutation.","isRequired":true,"uniqueKey":"node.oneOf.9.workflowRevisionId","typeLabel":"string"}},"isRequired":true,"uniqueKey":"node.oneOf.9","typeLabel":"Branch node · object"},{"type":"object","title":"Experiment node","description":"Detailed workflow node returned from a mutation, plus the latest workflow revision token.","required":["workflowRevisionId","id","typeName","nextNodeIds","samplingRate"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"node.oneOf.10.id","typeLabel":"string"},"typeName":{"type":"string","enum":["ExperimentBranchNode"],"isRequired":true,"uniqueKey":"node.oneOf.10.typeName","typeLabel":"enum\u003cstring>"},"nextNodeIds":{"type":"array","items":{"type":"string","uniqueKey":"node.oneOf.10.nextNodeIds.items.[INDEX]","typeLabel":"string"},"description":"The IDs of the nodes that are downstream of this node.","isRequired":true,"uniqueKey":"node.oneOf.10.nextNodeIds","typeLabel":"string[]"},"samplingRate":{"type":"number","description":"The percentage of contacts that will be sent to variant branches, between `0` and `100`. The remaining percentage will be sent to the control branch. `100` sends all contacts to variant branches.","isRequired":true,"uniqueKey":"node.oneOf.10.samplingRate","typeLabel":"number"},"workflowRevisionId":{"type":"string","description":"The current workflow revision token. Pass the latest value as `expectedRevisionId` on the next workflow mutation.","isRequired":true,"uniqueKey":"node.oneOf.10.workflowRevisionId","typeLabel":"string"}},"isRequired":true,"uniqueKey":"node.oneOf.10","typeLabel":"Experiment node · object"},{"type":"object","title":"Variant node","description":"Detailed workflow node returned from a mutation, plus the latest workflow revision token.","required":["workflowRevisionId","id","typeName","nextNodeIds"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"node.oneOf.11.id","typeLabel":"string"},"typeName":{"type":"string","enum":["VariantNode"],"isRequired":true,"uniqueKey":"node.oneOf.11.typeName","typeLabel":"enum\u003cstring>"},"nextNodeIds":{"type":"array","items":{"type":"string","uniqueKey":"node.oneOf.11.nextNodeIds.items.[INDEX]","typeLabel":"string"},"description":"The IDs of the nodes that are downstream of this node.","isRequired":true,"uniqueKey":"node.oneOf.11.nextNodeIds","typeLabel":"string[]"},"workflowRevisionId":{"type":"string","description":"The current workflow revision token. Pass the latest value as `expectedRevisionId` on the next workflow mutation.","isRequired":true,"uniqueKey":"node.oneOf.11.workflowRevisionId","typeLabel":"string"},"isControl":{"type":"boolean","description":"Whether this is the control variant of an experiment.","uniqueKey":"node.oneOf.11.isControl","typeLabel":"boolean"}},"isRequired":true,"uniqueKey":"node.oneOf.11","typeLabel":"Variant node · object"}],"isRequired":true,"uniqueKey":"node","typeLabel":"Signup trigger · object | Event trigger · object | Contact property trigger · object | Add-to-list trigger · object | Blank trigger · object | Audience filter node · object | Timer node · object | Send email node · object | Exit node · object | Branch node · object | Experiment node · object | Variant node · object"},"workflow":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the workflow.","isRequired":true,"uniqueKey":"workflow.id","typeLabel":"string"},"url":{"type":"string","format":"uri","description":"The URL of the workflow in the Loops app.","examples":["https://app.loops.so/workflows/clw1a3b5c7d9e1f3g5h7i9j1"],"isRequired":true,"uniqueKey":"workflow.url","typeLabel":"string\u003curi>"},"workflowRevisionId":{"oneOf":[{"type":"string","description":"The current workflow revision token. Pass the latest value as `expectedRevisionId` on the next workflow mutation. Will be `null` for workflows without a revision token yet.","isRequired":true,"uniqueKey":"workflow.workflowRevisionId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The current workflow revision token. Pass the latest value as `expectedRevisionId` on the next workflow mutation. Will be `null` for workflows without a revision token yet.","isRequired":true,"uniqueKey":"workflow.workflowRevisionId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"workflow.workflowRevisionId","typeLabel":"string | null"},"status":{"type":"string","enum":["Draft","Sending","Paused","PausedAndQueueing"],"isRequired":true,"uniqueKey":"workflow.status","typeLabel":"enum\u003cstring>"},"workflowGroupId":{"type":"string","description":"The ID of the workflow group this workflow belongs to.","isRequired":true,"uniqueKey":"workflow.workflowGroupId","typeLabel":"string"},"mailingListId":{"oneOf":[{"type":"string","description":"The ID of the mailing list the workflow sends to.","isRequired":true,"uniqueKey":"workflow.mailingListId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The ID of the mailing list the workflow sends to.","isRequired":true,"uniqueKey":"workflow.mailingListId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"workflow.mailingListId","typeLabel":"string | null"},"rootNodeId":{"type":"string","description":"The ID of the root node in the workflow graph.","isRequired":true,"uniqueKey":"workflow.rootNodeId","typeLabel":"string"},"nodes":{"type":"object","description":"A map of node IDs to simplified node objects. Each node includes `typeName` and `nextNodeIds`, plus type-specific fields when present. To get the full node object, use the `GET /v1/workflows/{workflowId}/nodes/{nodeId}` endpoint.","additionalProperties":{"oneOf":[{"type":"object","title":"Signup trigger","required":["typeName","nextNodeIds"],"properties":{"typeName":{"type":"string","enum":["SignupTrigger"],"isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.0.typeName","typeLabel":"enum\u003cstring>"},"nextNodeIds":{"type":"array","items":{"type":"string","uniqueKey":"workflow.nodes.additionalProperties.oneOf.0.nextNodeIds.items.[INDEX]","typeLabel":"string"},"description":"The IDs of the nodes that are downstream of this node.","isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.0.nextNodeIds","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.0","typeLabel":"Signup trigger · object"},{"type":"object","title":"Event trigger","required":["typeName","nextNodeIds","eventName","reEligible"],"example":{"typeName":"EventTrigger","nextNodeIds":["cln1a3b5c7d9e1f3g5h7i9j1"],"eventName":"signup","reEligible":false},"properties":{"typeName":{"type":"string","enum":["EventTrigger"],"isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.1.typeName","typeLabel":"enum\u003cstring>"},"nextNodeIds":{"type":"array","items":{"type":"string","uniqueKey":"workflow.nodes.additionalProperties.oneOf.1.nextNodeIds.items.[INDEX]","typeLabel":"string"},"description":"The IDs of the nodes that are downstream of this node.","isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.1.nextNodeIds","typeLabel":"string[]"},"eventName":{"oneOf":[{"type":"string","description":"The name of the event that triggers the workflow.","isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.1.eventName.oneOf.0","typeLabel":"string"},{"type":"null","description":"The name of the event that triggers the workflow.","isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.1.eventName.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.1.eventName","typeLabel":"string | null"},"reEligible":{"type":"boolean","description":"If `true`, the contacts will be able to enter this workflow every time the trigger is matched. If `false`, contacts will only ever enter this workflow once. Matches the \"Trigger frequency\" option in the UI.","isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.1.reEligible","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.1","typeLabel":"Event trigger · object"},{"type":"object","title":"Contact property trigger","required":["typeName","nextNodeIds","contactPropertyQuery","reEligible"],"properties":{"typeName":{"type":"string","enum":["ContactPropertyTrigger"],"isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.2.typeName","typeLabel":"enum\u003cstring>"},"nextNodeIds":{"type":"array","items":{"type":"string","uniqueKey":"workflow.nodes.additionalProperties.oneOf.2.nextNodeIds.items.[INDEX]","typeLabel":"string"},"description":"The IDs of the nodes that are downstream of this node.","isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.2.nextNodeIds","typeLabel":"string[]"},"contactPropertyQuery":{"oneOf":[{"type":"object","title":"Contact property query","description":"Define the contact property change that triggers the workflow. In update requests, `key` must resolve to an existing contact property that is available for Contact Updated triggers. Hidden or unsupported fields, such as `createdAt`, `notes`, and computed contact properties, are rejected.","required":["key","is","was"],"properties":{"key":{"type":"string","description":"The camel-cased `key` of the contact property to query. The property must exist for the team and must be available for Contact Updated triggers.","examples":["firstName","email","planName"],"isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.2.contactPropertyQuery.oneOf.0.key","typeLabel":"string"},"is":{"type":"object","description":"Comparison for the new contact property value after the update.","properties":{"value":{"oneOf":[{"type":"string","title":"String","isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.2.contactPropertyQuery.oneOf.0.is.value.oneOf.0","typeLabel":"string"},{"type":"number","title":"Number","isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.2.contactPropertyQuery.oneOf.0.is.value.oneOf.1","typeLabel":"number"},{"type":"boolean","title":"Boolean","isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.2.contactPropertyQuery.oneOf.0.is.value.oneOf.2","typeLabel":"boolean"}],"isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.2.contactPropertyQuery.oneOf.0.is.value","typeLabel":"string | number | boolean"},"operator":{"type":"string","description":"The comparison operator. It must be valid for the selected contact property's type and for the `is` or `was` side of the comparison. Number and boolean properties allow `empty` on `was`, but not on `is`.","enum":["any","contains","not_contains","empty","not_empty","equal","not_equal","greater_than","less_than","true","false","numeric_equal","numeric_not_equal","after","before","between"],"isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.2.contactPropertyQuery.oneOf.0.is.operator","typeLabel":"enum\u003cstring>"}},"required":["value","operator"],"isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.2.contactPropertyQuery.oneOf.0.is","typeLabel":"object"},"was":{"type":"object","description":"Comparison for the previous contact property value before the update.","properties":{"value":{"oneOf":[{"type":"string","title":"String","isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.2.contactPropertyQuery.oneOf.0.was.value.oneOf.0","typeLabel":"string"},{"type":"number","title":"Number","isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.2.contactPropertyQuery.oneOf.0.was.value.oneOf.1","typeLabel":"number"},{"type":"boolean","title":"Boolean","isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.2.contactPropertyQuery.oneOf.0.was.value.oneOf.2","typeLabel":"boolean"}],"isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.2.contactPropertyQuery.oneOf.0.was.value","typeLabel":"string | number | boolean"},"operator":{"type":"string","description":"The comparison operator. It must be valid for the selected contact property's type and for the `is` or `was` side of the comparison. Number and boolean properties allow `empty` on `was`, but not on `is`.","enum":["any","contains","not_contains","empty","not_empty","equal","not_equal","greater_than","less_than","true","false","numeric_equal","numeric_not_equal","after","before","between"],"isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.2.contactPropertyQuery.oneOf.0.was.operator","typeLabel":"enum\u003cstring>"}},"required":["value","operator"],"isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.2.contactPropertyQuery.oneOf.0.was","typeLabel":"object"}},"isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.2.contactPropertyQuery.oneOf.0","typeLabel":"Contact property query · object"},{"type":"null","title":"Null","isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.2.contactPropertyQuery.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.2.contactPropertyQuery","typeLabel":"Contact property query · object | null"},"reEligible":{"type":"boolean","description":"If `true`, the contacts will be able to enter this workflow every time the trigger is matched. If `false`, contacts will only ever enter this workflow once. Matches the \"Trigger frequency\" option in the UI.","isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.2.reEligible","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.2","typeLabel":"Contact property trigger · object"},{"type":"object","title":"Add-to-list trigger","required":["typeName","nextNodeIds","mailingListId","reEligible"],"properties":{"typeName":{"type":"string","enum":["AddToListTrigger"],"isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.3.typeName","typeLabel":"enum\u003cstring>"},"nextNodeIds":{"type":"array","items":{"type":"string","uniqueKey":"workflow.nodes.additionalProperties.oneOf.3.nextNodeIds.items.[INDEX]","typeLabel":"string"},"description":"The IDs of the nodes that are downstream of this node.","isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.3.nextNodeIds","typeLabel":"string[]"},"mailingListId":{"oneOf":[{"type":"string","description":"The ID of the mailing list that triggers the workflow.","isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.3.mailingListId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The ID of the mailing list that triggers the workflow.","isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.3.mailingListId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.3.mailingListId","typeLabel":"string | null"},"reEligible":{"type":"boolean","description":"If `true`, the contacts will be able to enter this workflow every time the trigger is matched. If `false`, contacts will only ever enter this workflow once. Matches the \"Trigger frequency\" option in the UI.","isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.3.reEligible","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.3","typeLabel":"Add-to-list trigger · object"},{"type":"object","title":"Blank trigger","required":["typeName","nextNodeIds"],"properties":{"typeName":{"type":"string","enum":["BlankTrigger"],"isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.4.typeName","typeLabel":"enum\u003cstring>"},"nextNodeIds":{"type":"array","items":{"type":"string","uniqueKey":"workflow.nodes.additionalProperties.oneOf.4.nextNodeIds.items.[INDEX]","typeLabel":"string"},"description":"The IDs of the nodes that are downstream of this node.","isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.4.nextNodeIds","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.4","typeLabel":"Blank trigger · object"},{"type":"object","title":"Audience filter node","required":["typeName","nextNodeIds"],"properties":{"typeName":{"type":"string","enum":["AudienceFilter"],"isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.5.typeName","typeLabel":"enum\u003cstring>"},"nextNodeIds":{"type":"array","items":{"type":"string","uniqueKey":"workflow.nodes.additionalProperties.oneOf.5.nextNodeIds.items.[INDEX]","typeLabel":"string"},"description":"The IDs of the nodes that are downstream of this node.","isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.5.nextNodeIds","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.5","typeLabel":"Audience filter node · object"},{"type":"object","title":"Timer node","required":["typeName","nextNodeIds","amount","unit"],"example":{"typeName":"TimerAction","nextNodeIds":["cln1a3b5c7d9e1f3g5h7i9j1"],"amount":2,"unit":"d"},"properties":{"typeName":{"type":"string","enum":["TimerAction"],"isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.6.typeName","typeLabel":"enum\u003cstring>"},"nextNodeIds":{"type":"array","items":{"type":"string","uniqueKey":"workflow.nodes.additionalProperties.oneOf.6.nextNodeIds.items.[INDEX]","typeLabel":"string"},"description":"The IDs of the nodes that are downstream of this node.","isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.6.nextNodeIds","typeLabel":"string[]"},"amount":{"type":"number","description":"The amount of time to wait before triggering the next node. Set to `0` to move to the next node immediately.","isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.6.amount","typeLabel":"number"},"unit":{"type":"string","enum":["m","h","d"],"description":"The unit of time for the timer action node. m = minutes, h = hours, d = days.","isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.6.unit","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.6","typeLabel":"Timer node · object"},{"type":"object","title":"Send email node","required":["typeName","nextNodeIds","emailMessageId","subject"],"example":{"typeName":"SendEmailAction","nextNodeIds":[],"emailMessageId":"cle5f7g9h1i3j5k7l9m1n3p5","subject":"Welcome to Acme!"},"properties":{"typeName":{"type":"string","enum":["SendEmailAction"],"isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.7.typeName","typeLabel":"enum\u003cstring>"},"nextNodeIds":{"type":"array","items":{"type":"string","uniqueKey":"workflow.nodes.additionalProperties.oneOf.7.nextNodeIds.items.[INDEX]","typeLabel":"string"},"description":"The IDs of the nodes that are downstream of this node.","isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.7.nextNodeIds","typeLabel":"string[]"},"emailMessageId":{"oneOf":[{"type":"string","description":"The ID of the email message to send. To edit this email, use the `POST /v1/email-messages/{emailMessageId}` endpoint.","isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.7.emailMessageId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The ID of the email message to send. To edit this email, use the `POST /v1/email-messages/{emailMessageId}` endpoint.","isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.7.emailMessageId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.7.emailMessageId","typeLabel":"string | null"},"subject":{"type":"string","description":"The subject of the email message (reference only).","isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.7.subject","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.7","typeLabel":"Send email node · object"},{"type":"object","title":"Exit node","required":["typeName","nextNodeIds"],"properties":{"typeName":{"type":"string","enum":["ExitAction"],"isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.8.typeName","typeLabel":"enum\u003cstring>"},"nextNodeIds":{"type":"array","items":{"type":"string","uniqueKey":"workflow.nodes.additionalProperties.oneOf.8.nextNodeIds.items.[INDEX]","typeLabel":"string"},"description":"The IDs of the nodes that are downstream of this node.","isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.8.nextNodeIds","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.8","typeLabel":"Exit node · object"},{"type":"object","title":"Branch node","required":["typeName","nextNodeIds"],"properties":{"typeName":{"type":"string","enum":["BranchNode"],"isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.9.typeName","typeLabel":"enum\u003cstring>"},"nextNodeIds":{"type":"array","items":{"type":"string","uniqueKey":"workflow.nodes.additionalProperties.oneOf.9.nextNodeIds.items.[INDEX]","typeLabel":"string"},"description":"The IDs of the nodes that are downstream of this node.","isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.9.nextNodeIds","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.9","typeLabel":"Branch node · object"},{"type":"object","title":"Experiment node","required":["typeName","nextNodeIds","samplingRate"],"properties":{"typeName":{"type":"string","enum":["ExperimentBranchNode"],"isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.10.typeName","typeLabel":"enum\u003cstring>"},"nextNodeIds":{"type":"array","items":{"type":"string","uniqueKey":"workflow.nodes.additionalProperties.oneOf.10.nextNodeIds.items.[INDEX]","typeLabel":"string"},"description":"The IDs of the nodes that are downstream of this node.","isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.10.nextNodeIds","typeLabel":"string[]"},"samplingRate":{"type":"number","description":"The percentage of contacts that will be sent to variant branches, between `0` and `100`. The remaining percentage will be sent to the control branch.","isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.10.samplingRate","typeLabel":"number"}},"additionalProperties":false,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.10","typeLabel":"Experiment node · object"},{"type":"object","title":"Variant node","required":["typeName","nextNodeIds","isControl"],"properties":{"typeName":{"type":"string","enum":["VariantNode"],"isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.11.typeName","typeLabel":"enum\u003cstring>"},"nextNodeIds":{"type":"array","items":{"type":"string","uniqueKey":"workflow.nodes.additionalProperties.oneOf.11.nextNodeIds.items.[INDEX]","typeLabel":"string"},"description":"The IDs of the nodes that are downstream of this node.","isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.11.nextNodeIds","typeLabel":"string[]"},"isControl":{"type":"boolean","description":"Whether this is the control variant of an experiment.","isRequired":true,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.11.isControl","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"workflow.nodes.additionalProperties.oneOf.11","typeLabel":"Variant node · object"}],"uniqueKey":"workflow.nodes.additionalProperties","typeLabel":"Signup trigger · object | Event trigger · object | Contact property trigger · object | Add-to-list trigger · object | Blank trigger · object | Audience filter node · object | Timer node · object | Send email node · object | Exit node · object | Branch node · object | Experiment node · object | Variant node · object"},"example":{"cf16k73gq014h3mmj5b6jdi9r":{"typeName":"SignupTrigger","nextNodeIds":["cf16k73gq014h3mmj5b4jdifg","cf16k73gq014h3mmj5b4jdifh"]}},"isRequired":true,"uniqueKey":"workflow.nodes","typeLabel":"object"},"name":{"type":"string","description":"The name of the workflow.","uniqueKey":"workflow.name","typeLabel":"string"},"description":{"type":"string","description":"The description of the workflow.","uniqueKey":"workflow.description","typeLabel":"string"}},"required":["id","url","workflowRevisionId","status","workflowGroupId","mailingListId","rootNodeId","nodes"],"examples":[{"id":"clw1a3b5c7d9e1f3g5h7i9j1","url":"https://app.loops.so/workflows/clw1a3b5c7d9e1f3g5h7i9j1","workflowRevisionId":"clx7a3b5c7d9e1f3g5h7i9j2","status":"Draft","name":"Welcome series","description":"Onboarding emails for new signups","workflowGroupId":"clg7n5p3q1r9s7t5u3v1w9y7","mailingListId":"clm2k8j4h6g0f8d6s4a2b0z8","rootNodeId":"cln8p0q2r4s6t8u0v2w4x6z8","nodes":{"cln8p0q2r4s6t8u0v2w4x6z8":{"typeName":"SignupTrigger","nextNodeIds":["cln1a3b5c7d9e1f3g5h7i9j1"]},"cln1a3b5c7d9e1f3g5h7i9j1":{"typeName":"SendEmailAction","nextNodeIds":[],"emailMessageId":"cle5f7g9h1i3j5k7l9m1n3p5","subject":"Welcome to Acme!"}}}],"isRequired":true,"uniqueKey":"workflow","typeLabel":"object"}},"required":["node","workflow"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"node":{"id":"\u003cstring>","typeName":"SignupTrigger","nextNodeIds":["\u003cstring>"],"workflowRevisionId":"\u003cstring>"},"workflow":{"id":"clw1a3b5c7d9e1f3g5h7i9j1","url":"https://app.loops.so/workflows/clw1a3b5c7d9e1f3g5h7i9j1","workflowRevisionId":"clx7a3b5c7d9e1f3g5h7i9j2","status":"Draft","name":"Welcome series","description":"Onboarding emails for new signups","workflowGroupId":"clg7n5p3q1r9s7t5u3v1w9y7","mailingListId":"clm2k8j4h6g0f8d6s4a2b0z8","rootNodeId":"cln8p0q2r4s6t8u0v2w4x6z8","nodes":{"cln8p0q2r4s6t8u0v2w4x6z8":{"typeName":"SignupTrigger","nextNodeIds":["cln1a3b5c7d9e1f3g5h7i9j1"]},"cln1a3b5c7d9e1f3g5h7i9j1":{"typeName":"SendEmailAction","nextNodeIds":[],"emailMessageId":"cle5f7g9h1i3j5k7l9m1n3p5","subject":"Welcome to Acme!"}}}}}},"exampleType":"generated"}},"exampleType":"generated"},"74f83afc-2aa4-4f1e-a07b-7d071f151ef2":{"description":"Invalid `workflowId`, `nodeId`, request body, branch target, workflow state, or workflow node cap.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"required":["message"],"examples":[{"message":"Workflow not found."}],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"message":"Workflow not found."}}},"exampleType":"generated"}},"exampleType":"generated"},"992a7516-88a7-4749-975c-a031ec9e892f":{"description":"Invalid API key.","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"d1e7b7fd-c686-430a-ba8c-9177e9c4a609":{"description":"Workflow or workflow node not found.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"required":["message"],"examples":[{"message":"Workflow not found."}],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"message":"Workflow not found."}}},"exampleType":"generated"}},"exampleType":"generated"},"859e653a-3255-4370-bfc8-dafc1e4fd683":{"description":"Wrong HTTP request method.","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"e6221056-2f68-42d5-93c5-9fb39c0b3821":{"description":"`expectedRevisionId` is stale.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"required":["message"],"examples":[{"message":"Workflow not found."}],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"message":"Workflow not found."}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"7897de14-96f2-425b-9fba-dae3be1f63bd":{"apiKey":{"type":"http","scheme":"bearer","scopes":[],"schemeName":"apiKey"}}},"servers":{"1e62fe97-28f9-4363-ae44-d09684d6987d":{"url":"https://app.loops.so/api"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","scopes":[],"schemeName":"apiKey"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Bearer authentication header of the form `Bearer \u003ctoken>`, where `\u003ctoken>` is your auth token.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"apiKey","name":"Authorization"}],"title":"apiKey"}]},"originalFileLocation":"https://app.loops.so/openapi.json"},"subdomain":"loops","siteName":"Loops","title":"Add a branch - Loops","relatedPagesConfig":{"enabled":true,"limit":5,"mode":"automatic"},"navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"originalFileLocation":"api-reference/add-workflow-branch.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=\"Add a branch and a child node under an existing Branch or Experiment node.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Loops\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/loops/oQA_4tr5jYF-tv7z/_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=\"/docs/mintlify-assets/_mintlify/favicons/loops/oQA_4tr5jYF-tv7z/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/loops/oQA_4tr5jYF-tv7z/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/loops/oQA_4tr5jYF-tv7z/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/loops/oQA_4tr5jYF-tv7z/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/loops/oQA_4tr5jYF-tv7z/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/loops/oQA_4tr5jYF-tv7z/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/loops/oQA_4tr5jYF-tv7z/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/loops/oQA_4tr5jYF-tv7z/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Add a branch - Loops\">\u003cmeta data-mint-head property=\"og:description\" content=\"Add a branch and a child node under an existing Branch or Experiment node.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Loops\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://loops.so/docs/api-reference/add-workflow-branch\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://loops.mintlify.app/_mintlify/api/og/v2?division=Workflow+nodes\u0026amp;title=Add+a+branch\u0026amp;description=Add+a+branch+and+a+child+node+under+an+existing+Branch+or+Experiment+node.\u0026amp;theme=4d99034fa43c3fda37d2eb26\u0026amp;signature=c110972d50d2dbc21ab0161ad91f7fd1c5fa70f3b03060a07a6413a29823fbc9\">\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=\"Add a branch - Loops\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Add a branch and a child node under an existing Branch or Experiment node.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://loops.mintlify.app/_mintlify/api/og/v2?division=Workflow+nodes\u0026amp;title=Add+a+branch\u0026amp;description=Add+a+branch+and+a+child+node+under+an+existing+Branch+or+Experiment+node.\u0026amp;theme=4d99034fa43c3fda37d2eb26\u0026amp;signature=c110972d50d2dbc21ab0161ad91f7fd1c5fa70f3b03060a07a6413a29823fbc9\">\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=\"/docs/mintlify-assets/_mintlify/favicons/loops/oQA_4tr5jYF-tv7z/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Loops\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#FC5200\">\u003clink data-mint-head rel=\"canonical\" href=\"https://loops.so/docs/api-reference/add-workflow-branch\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/api-reference/add-workflow-branch.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://loops.so/#organization\",\"name\":\"Loops\",\"url\":\"https://loops.so\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/loops/1DdZd7QTRR4Srm-l/logo/light.png?fit=max\u0026auto=format\u0026n=1DdZd7QTRR4Srm-l\u0026q=85\u0026s=af97da0e1eae22a2d70b0e1cae7f0df3\"}},{\"@type\":\"WebSite\",\"@id\":\"https://loops.so/docs#website\",\"name\":\"Loops\",\"url\":\"https://loops.so/docs\",\"publisher\":{\"@id\":\"https://loops.so/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://loops.so/docs/api-reference/add-workflow-branch#webpage\",\"url\":\"https://loops.so/docs/api-reference/add-workflow-branch\",\"name\":\"Add a branch\",\"description\":\"Add a branch and a child node under an existing Branch or Experiment node.\",\"isPartOf\":{\"@id\":\"https://loops.so/docs#website\"},\"breadcrumb\":{\"@id\":\"https://loops.so/docs/api-reference/add-workflow-branch#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://loops.so/docs/api-reference/add-workflow-branch#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"API\",\"item\":\"https://loops.so/docs/api-reference/intro\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"API Reference\",\"item\":\"https://loops.so/docs/api-reference/api-key\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Workflow nodes\",\"item\":\"https://loops.so/docs/api-reference/create-workflow-node\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Add a branch\",\"item\":\"https://loops.so/docs/api-reference/add-workflow-branch\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://loops.so/docs/api-reference/add-workflow-branch#apireference\",\"headline\":\"Add a branch\",\"name\":\"Add a branch\",\"description\":\"Add a branch and a child node under an existing Branch or Experiment node.\",\"url\":\"https://loops.so/docs/api-reference/add-workflow-branch\",\"mainEntityOfPage\":{\"@id\":\"https://loops.so/docs/api-reference/add-workflow-branch#webpage\"},\"publisher\":{\"@id\":\"https://loops.so/#organization\"},\"isPartOf\":{\"@id\":\"https://loops.so/docs#website\"}}]}\u003c/script>","siteName":"Loops","nav":{"global":null,"groups":[{"group":"Learn","pages":[{"group":"Get started","pages":[{"title":"Quickstart","sidebarTitle":"Human quickstart","icon":"user","href":"/quickstart"},{"title":"Quickstart for agents","sidebarTitle":"Agent quickstart","icon":"robot","href":"/quickstart-agents"},{"title":"Setting up your domain","icon":"globe","href":"/sending-domain"},{"title":"Types of emails","icon":"envelopes-bulk","href":"/types-of-emails"},{"title":"Sending your first email","icon":"mailbox","href":"/sending-first-email"}]},{"group":"Editing emails","pages":[{"title":"The editor","icon":"keyboard","href":"/creating-emails/editor"},{"title":"LMX","icon":"square-code","href":"/creating-emails/lmx"},{"group":"Adding content","icon":"square-plus","pages":[{"title":"Images","icon":"image","href":"/creating-emails/editor/images"},{"title":"Videos","icon":"video","href":"/creating-emails/editor/videos"},{"title":"Links","icon":"link","href":"/creating-emails/editor/links"},{"title":"Buttons","icon":"rectangle-minus","href":"/creating-emails/editor/buttons"},{"title":"Social icons","icon":"star","href":"/creating-emails/editor/social-icons"},{"title":"Dividers","icon":"minus","href":"/creating-emails/editor/dividers"},{"title":"Columns","icon":"columns","href":"/creating-emails/editor/columns"},{"title":"Sections","icon":"rectangle-list","href":"/creating-emails/editor/sections"},{"title":"Arrays","icon":"bars","href":"/creating-emails/editor/arrays"},{"title":"Markdown","icon":"markdown","href":"/creating-emails/editor/markdown"},{"title":"Code blocks","icon":"code","href":"/creating-emails/editor/code-blocks"}]},{"title":"Components","icon":"shapes","href":"/creating-emails/components"},{"title":"Styling emails","icon":"palette","href":"/creating-emails/styles"},{"title":"Personalizing emails","icon":"crystal-ball","href":"/creating-emails/personalizing-emails"},{"title":"Guardian","icon":"badge-check","href":"/creating-emails/guardian"},{"title":"Uploading a custom email","icon":"arrow-up-from-bracket","sidebarTitle":"Upload a custom email","href":"/creating-emails/uploading-custom-email"},{"title":"Sending settings","icon":"pen-field","href":"/creating-emails/sending-settings"},{"title":"Critical notices","icon":"triangle-exclamation","href":"/creating-emails/critical-notices"},{"title":"Duplicating emails","icon":"copy","href":"/creating-emails/duplicating-emails"},{"title":"Font support","icon":"fonticons","href":"/creating-emails/font-support"},{"title":"Translating emails","icon":"globe","href":"/creating-emails/translating-emails-with-ai"},{"title":"Using templates","icon":"table-layout","href":"/creating-emails/using-templates"},{"title":"Delete emails","icon":"trash","href":"/creating-emails/deleting-emails"}]},{"group":"Workflows","pages":[{"title":"Workflows","sidebarTitle":"Guide","icon":"arrows-rotate","href":"/workflows"},{"title":"Triggering workflows","icon":"circle-play","href":"/workflows/triggers"},{"title":"Pausing workflows","icon":"pause","href":"/workflows/pausing"},{"title":"Branching workflows","icon":"code-branch","href":"/workflows/branching"},{"title":"Experiments","icon":"vial","href":"/workflows/experiments"}]},{"group":"Events","pages":[{"title":"Events: trigger automated emails with Loops","sidebarTitle":"Guide","icon":"bolt","href":"/events"},{"title":"Event properties","icon":"book-sparkles","href":"/events/properties"}]},{"group":"Goals","pages":[{"title":"Overview","href":"/goals/overview"},{"title":"Building your first goal","href":"/goals/building"},{"title":"Understanding metrics","href":"/goals/metrics"}]},{"group":"Contacts","pages":[{"group":"Add contacts","icon":"user-plus","pages":[{"title":"CSV Upload","href":"/add-users/csv-upload"},{"title":"Add contacts via integrations","sidebarTitle":"Integrations","href":"/add-users/integrations"},{"title":"Add and update contacts with the Loops API","sidebarTitle":"API","href":"/add-users/loops-api"}]},{"title":"Double opt-in","icon":"shield-check","href":"/contacts/double-opt-in"},{"title":"List management","icon":"list","href":"/contacts/mailing-lists"},{"title":"Filters and Segments","icon":"filter-list","href":"/contacts/filters-segments"},{"title":"Contact properties","icon":"address-book","href":"/contacts/properties"},{"title":"Contact activity timeline","icon":"bars-staggered","href":"/contacts/contact-activity"},{"title":"Email blocklist","icon":"ban","href":"/contacts/email-blocklist"},{"title":"Contact suppression","icon":"circle-xmark","href":"/contacts/suppression"},{"title":"Delete contacts","icon":"user-minus","href":"/contacts/delete-contacts"},{"title":"Export contacts","icon":"file-export","href":"/contacts/export-contacts"}]},{"group":"Transactional email","pages":[{"title":"Transactional email","sidebarTitle":"Guide","icon":"envelope","href":"/transactional"},{"title":"Attachments","icon":"paperclip","href":"/transactional/attachments"}]},{"group":"Integrations","pages":[{"title":"Integrations","sidebarTitle":"Overview","icon":"arrows-turn-right","href":"/integrations"},{"group":"Forms","icon":"table-list","pages":[{"title":"Simple form","href":"/forms/simple-form"},{"title":"Custom form","href":"/forms/custom-form"}]},{"title":"Incoming webhooks","icon":"webhook","href":"/integrations/incoming-webhooks"},{"title":"Auto BCC","icon":"eye-slash","href":"/integrations/auto-bcc"},{"title":"Attio","href":"/integrations/attio"},{"title":"Auth0 integration","sidebarTitle":"Auth0","href":"/integrations/auth0"},{"title":"Auth.js","href":"/integrations/authjs"},{"title":"Better Auth","href":"/integrations/better-auth"},{"title":"Bubble integration","sidebarTitle":"Bubble","href":"/integrations/bubble"},{"title":"Carrd integration","sidebarTitle":"Carrd","href":"/integrations/carrd"},{"title":"Clay integration","sidebarTitle":"Clay","href":"/integrations/clay"},{"title":"Clerk integration","sidebarTitle":"Clerk","href":"/integrations/clerk"},{"title":"Fivetran integration","sidebarTitle":"Fivetran","href":"/integrations/fivetran"},{"title":"Framer integration","sidebarTitle":"Framer","href":"/integrations/framer"},{"title":"Integrately","href":"/integrations/integrately"},{"title":"Novu integration","sidebarTitle":"Novu","href":"/integrations/novu"},{"title":"Make integration","sidebarTitle":"Make","href":"/integrations/make"},{"title":"Polar","href":"/integrations/polar"},{"title":"PostHog","href":"/integrations/posthog"},{"title":"RudderStack","href":"/integrations/rudderstack"},{"title":"Segment","href":"/integrations/segment"},{"title":"Stripe integration","sidebarTitle":"Stripe","href":"/integrations/stripe"},{"group":"Supabase","pages":[{"title":"Supabase","sidebarTitle":"Overview","href":"/integrations/supabase"},{"title":"Supabase - Sync contacts","sidebarTitle":"Sync contacts","href":"/integrations/supabase/contact-sync"},{"title":"Supabase - Send emails","sidebarTitle":"Send emails","href":"/integrations/supabase/send-email"}]},{"title":"Webflow integration","sidebarTitle":"Webflow","href":"/integrations/webflow"},{"title":"Zapier integration","sidebarTitle":"Zapier","href":"/integrations/zapier"}]},{"group":"SMTP","pages":[{"title":"Send with SMTP","sidebarTitle":"Overview","icon":"envelopes","href":"/smtp"},{"title":"Django SMTP","sidebarTitle":"Django","icon":"python","href":"/smtp/django"},{"title":"Laravel","icon":"laravel","href":"/smtp/laravel"},{"title":"Ruby on Rails","icon":"gem","href":"/smtp/rails"},{"title":"Supabase SMTP","sidebarTitle":"Supabase","icon":"bolt","href":"/smtp/supabase"}]},{"group":"Account","pages":[{"title":"Change your login email","icon":"user-gear","href":"/account/changing-your-email"},{"title":"Team members","icon":"users","href":"/account/team-members"},{"title":"Team switcher","icon":"arrow-up-arrow-down","href":"/account/team-switcher"},{"title":"Billing","icon":"file-invoice-dollar","href":"/account/billing"},{"title":"Group billing","icon":"layer-group","href":"/account/group-billing"},{"title":"Notifications","icon":"bell","href":"/account/notifications"},{"title":"Delete your account","icon":"user-xmark","href":"/account/delete-account"}]},{"title":"Agent skills for Loops","sidebarTitle":"Agent skills","href":"/skills"},{"title":"Loops MCP server","sidebarTitle":"MCP","href":"/mcp-server"},{"title":"Security and Vulnerability Reporting","sidebarTitle":"Security","href":"/security-reporting"},{"title":"Security and Compliance","sidebarTitle":"Compliance","href":"/security-compliance"}]},{"group":"API","pages":[{"title":"API Introduction","href":"/api-reference/intro"},{"group":"API Reference","pages":[{"group":"API key","pages":[{"title":"API key","deprecated":null,"version":null,"sidebarTitle":"Api key","openapi":"https://app.loops.so/openapi.json get /v1/api-key","href":"/api-reference/api-key"}]},{"group":"Audience segments","pages":[{"title":"Get an audience segment","deprecated":null,"version":null,"sidebarTitle":"Get a segment","openapi":"https://app.loops.so/openapi.json get /v1/audience-segments/{audienceSegmentId}","href":"/api-reference/get-audience-segment"},{"title":"List audience segments","deprecated":null,"version":null,"sidebarTitle":"List segments","openapi":"https://app.loops.so/openapi.json get /v1/audience-segments","href":"/api-reference/list-audience-segments"},{"title":"Create an audience segment","deprecated":null,"version":null,"sidebarTitle":"Create a segment","openapi":"https://app.loops.so/openapi.json post /v1/audience-segments","href":"/api-reference/create-audience-segment"}]},{"group":"Campaigns","pages":[{"title":"List campaigns","deprecated":null,"version":null,"sidebarTitle":"List campaigns","openapi":"https://app.loops.so/openapi.json get /v1/campaigns","href":"/api-reference/list-campaigns"},{"title":"Create a campaign","deprecated":null,"version":null,"sidebarTitle":"Create campaign","openapi":"https://app.loops.so/openapi.json post /v1/campaigns","href":"/api-reference/create-campaign"},{"title":"Get a campaign","deprecated":null,"version":null,"sidebarTitle":"Get campaign","openapi":"https://app.loops.so/openapi.json get /v1/campaigns/{campaignId}","href":"/api-reference/get-campaign"},{"title":"Update a campaign","deprecated":null,"version":null,"sidebarTitle":"Update campaign","openapi":"https://app.loops.so/openapi.json post /v1/campaigns/{campaignId}","href":"/api-reference/update-campaign"},{"title":"Get campaign metrics","deprecated":null,"version":null,"sidebarTitle":"Get metrics","openapi":"https://app.loops.so/openapi.json get /v1/campaigns/{campaignId}/metrics","href":"/api-reference/get-campaign-metrics"}]},{"group":"Campaign groups","pages":[{"title":"List campaign groups","deprecated":null,"version":null,"sidebarTitle":"List groups","openapi":"https://app.loops.so/openapi.json get /v1/campaign-groups","href":"/api-reference/list-campaign-groups"},{"title":"Create a campaign group","deprecated":null,"version":null,"sidebarTitle":"Create a group","openapi":"https://app.loops.so/openapi.json post /v1/campaign-groups","href":"/api-reference/create-campaign-group"},{"title":"Get a campaign group","deprecated":null,"version":null,"sidebarTitle":"Get a group","openapi":"https://app.loops.so/openapi.json get /v1/campaign-groups/{campaignGroupId}","href":"/api-reference/get-campaign-group"},{"title":"Update a campaign group","deprecated":null,"version":null,"sidebarTitle":"Update a group","openapi":"https://app.loops.so/openapi.json post /v1/campaign-groups/{campaignGroupId}","href":"/api-reference/update-campaign-group"}]},{"group":"Configuration","pages":[{"title":"List dedicated sending IP addresses","deprecated":null,"version":null,"sidebarTitle":"List sending IPs","openapi":"https://app.loops.so/openapi.json get /v1/dedicated-sending-ips","href":"/api-reference/dedicated-sending-ips"}]},{"group":"Contacts","pages":[{"title":"Create a contact","deprecated":null,"version":null,"sidebarTitle":"Create contact","openapi":"https://app.loops.so/openapi.json post /v1/contacts/create","href":"/api-reference/create-contact"},{"title":"Update a contact","deprecated":null,"version":null,"sidebarTitle":"Update a contact","openapi":"https://app.loops.so/openapi.json put /v1/contacts/update","href":"/api-reference/update-contact"},{"title":"Find a contact","deprecated":null,"version":null,"sidebarTitle":"Find contact","openapi":"https://app.loops.so/openapi.json get /v1/contacts/find","href":"/api-reference/find-contact"},{"title":"Delete a contact","deprecated":null,"version":null,"sidebarTitle":"Delete a contact","openapi":"https://app.loops.so/openapi.json post /v1/contacts/delete","href":"/api-reference/delete-contact"},{"title":"Check contact suppression status","deprecated":null,"version":null,"sidebarTitle":"Check suppression","openapi":"https://app.loops.so/openapi.json get /v1/contacts/suppression","href":"/api-reference/check-contact-suppression"},{"title":"Remove contact from suppression","deprecated":null,"version":null,"sidebarTitle":"Remove suppression","openapi":"https://app.loops.so/openapi.json delete /v1/contacts/suppression","href":"/api-reference/remove-contact-suppression"}]},{"group":"Contact properties","pages":[{"title":"List contact properties","deprecated":null,"version":null,"sidebarTitle":"List properties","openapi":"https://app.loops.so/openapi.json get /v1/contacts/properties","href":"/api-reference/list-contact-properties"},{"title":"Create a contact property","deprecated":null,"version":null,"sidebarTitle":"Create property","openapi":"https://app.loops.so/openapi.json post /v1/contacts/properties","href":"/api-reference/create-contact-property"}]},{"group":"Components","pages":[{"title":"Get a component","deprecated":null,"version":null,"sidebarTitle":"Get component","openapi":"https://app.loops.so/openapi.json get /v1/components/{componentId}","href":"/api-reference/get-component"},{"title":"Update a component","deprecated":null,"version":null,"sidebarTitle":"Update component","openapi":"https://app.loops.so/openapi.json post /v1/components/{componentId}","href":"/api-reference/update-component"},{"title":"List components","deprecated":null,"version":null,"sidebarTitle":"List components","openapi":"https://app.loops.so/openapi.json get /v1/components","href":"/api-reference/list-components"},{"title":"Create a component","deprecated":null,"version":null,"sidebarTitle":"Create component","openapi":"https://app.loops.so/openapi.json post /v1/components","href":"/api-reference/create-component"}]},{"group":"Email messages","pages":[{"title":"Get an email message","deprecated":null,"version":null,"sidebarTitle":"Get an email","openapi":"https://app.loops.so/openapi.json get /v1/email-messages/{emailMessageId}","href":"/api-reference/get-email-message"},{"title":"Update an email message","deprecated":null,"version":null,"sidebarTitle":"Update an email","openapi":"https://app.loops.so/openapi.json post /v1/email-messages/{emailMessageId}","href":"/api-reference/update-email-message"},{"title":"Send a preview of an email message","deprecated":null,"version":null,"sidebarTitle":"Preview email","openapi":"https://app.loops.so/openapi.json post /v1/email-messages/{emailMessageId}/preview","href":"/api-reference/preview-email-message"},{"title":"Run Guardian checks on an email message","deprecated":null,"version":null,"sidebarTitle":"Guardian checks","openapi":"https://app.loops.so/openapi.json get /v1/email-messages/{emailMessageId}/guardian","href":"/api-reference/run-guardian-checks"}]},{"group":"Events","pages":[{"title":"Send an event","deprecated":null,"version":null,"sidebarTitle":"Send event","openapi":"https://app.loops.so/openapi.json post /v1/events/send","href":"/api-reference/send-event"}]},{"group":"Event patterns","pages":[{"title":"List event patterns","deprecated":null,"version":null,"sidebarTitle":"List event patterns","openapi":"https://app.loops.so/openapi.json get /v1/event-patterns","href":"/api-reference/list-event-patterns"},{"title":"Get an event pattern by name","deprecated":null,"version":null,"sidebarTitle":"Get by name","openapi":"https://app.loops.so/openapi.json get /v1/event-patterns/by-name/{eventName}","href":"/api-reference/get-event-pattern-by-name"},{"title":"Get an event pattern by ID","deprecated":null,"version":null,"sidebarTitle":"Get by ID","openapi":"https://app.loops.so/openapi.json get /v1/event-patterns/{eventPatternId}","href":"/api-reference/get-event-pattern"}]},{"group":"Mailing lists","pages":[{"title":"List mailing lists","deprecated":null,"version":null,"sidebarTitle":"List mailing lists","openapi":"https://app.loops.so/openapi.json get /v1/lists","href":"/api-reference/list-mailing-lists"}]},{"group":"Themes","pages":[{"title":"Get a theme","deprecated":null,"version":null,"sidebarTitle":"Get theme","openapi":"https://app.loops.so/openapi.json get /v1/themes/{themeId}","href":"/api-reference/get-theme"},{"title":"Update a theme","deprecated":null,"version":null,"sidebarTitle":"Update theme","openapi":"https://app.loops.so/openapi.json post /v1/themes/{themeId}","href":"/api-reference/update-theme"},{"title":"List themes","deprecated":null,"version":null,"sidebarTitle":"List themes","openapi":"https://app.loops.so/openapi.json get /v1/themes","href":"/api-reference/list-themes"},{"title":"Create a theme","deprecated":null,"version":null,"sidebarTitle":"Create theme","openapi":"https://app.loops.so/openapi.json post /v1/themes","href":"/api-reference/create-theme"}]},{"group":"Transactional emails","pages":[{"title":"List transactional emails (legacy)","deprecated":true,"version":null,"sidebarTitle":"List transactionals (legacy)","openapi":"https://app.loops.so/openapi.json get /v1/transactional","href":"/api-reference/list-transactional-emails-v1"},{"title":"Send a transactional email","deprecated":null,"version":null,"sidebarTitle":"Send transactional","openapi":"https://app.loops.so/openapi.json post /v1/transactional","href":"/api-reference/send-transactional-email"},{"title":"List transactional emails","deprecated":null,"version":null,"sidebarTitle":"List transactionals","openapi":"https://app.loops.so/openapi.json get /v1/transactional-emails","href":"/api-reference/list-transactional-emails"},{"title":"Create a transactional email","deprecated":null,"version":null,"sidebarTitle":"Create transactional","openapi":"https://app.loops.so/openapi.json post /v1/transactional-emails","href":"/api-reference/create-transactional-email"},{"title":"Get a transactional email","deprecated":null,"version":null,"sidebarTitle":"Get transactional","openapi":"https://app.loops.so/openapi.json get /v1/transactional-emails/{transactionalId}","href":"/api-reference/get-transactional-email"},{"title":"Update a transactional email","deprecated":null,"version":null,"sidebarTitle":"Update transactional","openapi":"https://app.loops.so/openapi.json post /v1/transactional-emails/{transactionalId}","href":"/api-reference/update-transactional-email"},{"title":"Get transactional email metrics","deprecated":null,"version":null,"sidebarTitle":"Get metrics","openapi":"https://app.loops.so/openapi.json get /v1/transactional-emails/{transactionalId}/metrics","href":"/api-reference/get-transactional-email-metrics"},{"title":"Ensure a transactional email has a draft","deprecated":null,"version":null,"sidebarTitle":"Ensure draft","openapi":"https://app.loops.so/openapi.json post /v1/transactional-emails/{transactionalId}/draft","href":"/api-reference/ensure-transactional-draft"},{"title":"Publish a transactional email","deprecated":null,"version":null,"sidebarTitle":"Publish transactional","openapi":"https://app.loops.so/openapi.json post /v1/transactional-emails/{transactionalId}/publish","href":"/api-reference/publish-transactional-email"}]},{"group":"Transactional groups","pages":[{"title":"List transactional groups","deprecated":null,"version":null,"sidebarTitle":"List groups","openapi":"https://app.loops.so/openapi.json get /v1/transactional-groups","href":"/api-reference/list-transactional-groups"},{"title":"Create a transactional group","deprecated":null,"version":null,"sidebarTitle":"Create a group","openapi":"https://app.loops.so/openapi.json post /v1/transactional-groups","href":"/api-reference/create-transactional-group"},{"title":"Get a transactional group","deprecated":null,"version":null,"sidebarTitle":"Get a group","openapi":"https://app.loops.so/openapi.json get /v1/transactional-groups/{transactionalGroupId}","href":"/api-reference/get-transactional-group"},{"title":"Update a transactional group","deprecated":null,"version":null,"sidebarTitle":"Update a group","openapi":"https://app.loops.so/openapi.json post /v1/transactional-groups/{transactionalGroupId}","href":"/api-reference/update-transactional-group"}]},{"group":"Uploads","pages":[{"title":"Create an upload","deprecated":null,"version":null,"sidebarTitle":"Create an upload","openapi":"https://app.loops.so/openapi.json post /v1/uploads","href":"/api-reference/create-upload"},{"title":"Complete an upload","deprecated":null,"version":null,"sidebarTitle":"Complete upload","openapi":"https://app.loops.so/openapi.json post /v1/uploads/{emailAssetId}/complete","href":"/api-reference/complete-upload"}]},{"group":"Workflow groups","pages":[{"title":"List workflow groups","deprecated":null,"version":null,"sidebarTitle":"List groups","openapi":"https://app.loops.so/openapi.json get /v1/workflow-groups","href":"/api-reference/list-workflow-groups"},{"title":"Create a workflow group","deprecated":null,"version":null,"sidebarTitle":"Create a group","openapi":"https://app.loops.so/openapi.json post /v1/workflow-groups","href":"/api-reference/create-workflow-group"},{"title":"Get a workflow group","deprecated":null,"version":null,"sidebarTitle":"Get a group","openapi":"https://app.loops.so/openapi.json get /v1/workflow-groups/{workflowGroupId}","href":"/api-reference/get-workflow-group"},{"title":"Update a workflow group","deprecated":null,"version":null,"sidebarTitle":"Update a group","openapi":"https://app.loops.so/openapi.json post /v1/workflow-groups/{workflowGroupId}","href":"/api-reference/update-workflow-group"}]},{"group":"Workflows","pages":[{"title":"List workflows","deprecated":null,"version":null,"sidebarTitle":"List workflows","openapi":"https://app.loops.so/openapi.json get /v1/workflows","href":"/api-reference/list-workflows"},{"title":"Create a workflow","deprecated":null,"version":null,"sidebarTitle":"Create workflow","openapi":"https://app.loops.so/openapi.json post /v1/workflows","href":"/api-reference/create-workflow"},{"title":"Get a workflow","deprecated":null,"version":null,"sidebarTitle":"Get workflow","openapi":"https://app.loops.so/openapi.json get /v1/workflows/{workflowId}","href":"/api-reference/get-workflow"},{"title":"Update a workflow","deprecated":null,"version":null,"sidebarTitle":"Update workflow","openapi":"https://app.loops.so/openapi.json post /v1/workflows/{workflowId}","href":"/api-reference/update-workflow"},{"title":"Delete a workflow","deprecated":null,"version":null,"sidebarTitle":"Delete a workflow","openapi":"https://app.loops.so/openapi.json delete /v1/workflows/{workflowId}","href":"/api-reference/delete-workflow"},{"title":"Change workflow mailing list","deprecated":null,"version":null,"sidebarTitle":"Change mailing list","openapi":"https://app.loops.so/openapi.json post /v1/workflows/{workflowId}/mailing-list","href":"/api-reference/change-workflow-mailing-list"}]},{"group":"Workflow nodes","pages":[{"title":"Create a workflow node","description":"Create a new default workflow node and return it with the latest workflow","deprecated":null,"version":null,"sidebarTitle":"Create a node","openapi":"https://app.loops.so/openapi.json post /v1/workflows/{workflowId}/nodes","href":"/api-reference/create-workflow-node"},{"title":"Add a branch","deprecated":null,"version":null,"sidebarTitle":"Add a branch","openapi":"https://app.loops.so/openapi.json post /v1/workflows/{workflowId}/nodes/{nodeId}/add-branch","href":"/api-reference/add-workflow-branch"},{"title":"Get a workflow node","description":"Retrieve detailed data for a single workflow node.","deprecated":null,"version":null,"sidebarTitle":"Get a node","openapi":"https://app.loops.so/openapi.json get /v1/workflows/{workflowId}/nodes/{nodeId}","href":"/api-reference/get-workflow-node"},{"title":"Update a workflow node","deprecated":null,"version":null,"sidebarTitle":"Update a node","openapi":"https://app.loops.so/openapi.json post /v1/workflows/{workflowId}/nodes/{nodeId}","href":"/api-reference/update-workflow-node"},{"title":"Delete a workflow node","deprecated":null,"version":null,"sidebarTitle":"Delete a node","openapi":"https://app.loops.so/openapi.json delete /v1/workflows/{workflowId}/nodes/{nodeId}","href":"/api-reference/delete-workflow-node"},{"title":"Get workflow node metrics","deprecated":null,"version":null,"sidebarTitle":"Get metrics","openapi":"https://app.loops.so/openapi.json get /v1/workflows/{workflowId}/nodes/{nodeId}/metrics","href":"/api-reference/get-workflow-node-metrics"},{"title":"Reroute a node connection","deprecated":null,"version":null,"sidebarTitle":"Reroute a node","openapi":"https://app.loops.so/openapi.json post /v1/workflows/{workflowId}/nodes/{nodeId}/reroute","href":"/api-reference/reroute-node-connection"},{"title":"Delete workflow nodes recursively","deprecated":null,"version":null,"sidebarTitle":"Delete nodes","openapi":"https://app.loops.so/openapi.json delete /v1/workflows/{workflowId}/nodes/{nodeId}/recursive","href":"/api-reference/delete-workflow-nodes"}]}]},{"group":"Examples","pages":[{"title":"API Examples","href":"/api-reference/examples"},{"title":"Campaigns API examples","sidebarTitle":"Campaigns","href":"/api-reference/examples/campaigns"},{"title":"Contacts API examples","sidebarTitle":"Contacts","href":"/api-reference/examples/contacts"},{"title":"Events API examples","sidebarTitle":"Events","href":"/api-reference/examples/events"},{"title":"Transactional email API examples","sidebarTitle":"Transactional emails","href":"/api-reference/examples/transactional-emails"},{"title":"Workflows API examples","sidebarTitle":"Workflows","href":"/api-reference/examples/workflows"}]},{"group":"SDKs","pages":[{"title":"Loops SDKs","sidebarTitle":"Overview","href":"/sdks"},{"title":"Go SDK","sidebarTitle":"Go","icon":"golang","href":"/sdks/go"},{"title":"JavaScript SDK","sidebarTitle":"JavaScript","icon":"js","href":"/sdks/javascript"},{"title":"Nuxt module","sidebarTitle":"Nuxt","icon":"mountains","href":"/sdks/nuxt"},{"title":"PHP SDK","sidebarTitle":"PHP","icon":"php","href":"/sdks/php"},{"title":"Ruby SDK","sidebarTitle":"Ruby","icon":"gem","href":"/sdks/ruby"}]},{"title":"Webhooks","href":"/webhooks"},{"title":"API Changelog","href":"/api-reference/changelog"}]},{"group":"CLI","pages":[{"title":"Loops CLI","sidebarTitle":"Overview","href":"/cli"},{"title":"Audience segments","href":"/cli/audience-segments"},{"title":"Auth","href":"/cli/auth"},{"title":"Campaign groups","href":"/cli/campaign-groups"},{"title":"Campaigns","href":"/cli/campaigns"},{"title":"Completion","href":"/cli/completion"},{"title":"Components","href":"/cli/components"},{"title":"Contact properties","href":"/cli/contact-properties"},{"title":"Contacts","href":"/cli/contacts"},{"title":"Email messages","href":"/cli/email-messages"},{"title":"Event patterns","href":"/cli/event-patterns"},{"title":"Events","href":"/cli/events"},{"title":"Lists","href":"/cli/lists"},{"title":"Themes","href":"/cli/themes"},{"title":"Transactional","href":"/cli/transactional"},{"title":"Transactional groups","href":"/cli/transactional-groups"},{"title":"Uploads","href":"/cli/uploads"},{"title":"Workflows","href":"/cli/workflows"}]},{"group":"Guides","pages":[{"title":"Guides for onboarding, deliverability, and lifecycle emails.","sidebarTitle":"All guides","href":"/guides/intro"},{"group":"Getting started","pages":[{"title":"Create and send your first campaign with the API or an agent","sidebarTitle":"First campaign via API","href":"/guides/first-campaign-api"},{"title":"Your first onboarding emails","href":"/guides/onboarding-emails"}]},{"group":"Workflows","pages":[{"title":"Retrigger a Workflow","href":"/guides/retroactively-trigger-workflow"}]},{"group":"Deliverability","pages":[{"title":"Reducing product email bounce rate","sidebarTitle":"Reducing bounce rate","href":"/deliverability/reducing-bounce-rate"},{"title":"DMARC and DKIM setup","sidebarTitle":"DMARC and DKIM","href":"/deliverability/dmarc-dkim-setup"},{"title":"DNS zone file export","sidebarTitle":"DNS zone file export","href":"/deliverability/dns-zone-file-export"},{"title":"Shortened YouTube links warning","href":"/deliverability/youtube-links-warning"},{"title":"Deliverability optimization","href":"/deliverability/optimization"},{"title":"Improve your inbox placement","href":"/deliverability/improving-inbox-placement"},{"title":"Sending to large audiences","href":"/deliverability/sending-to-large-audience"},{"title":"Sending legally mandated email","href":"/deliverability/legally-mandated-email"},{"title":"Subdomains vs root domains","href":"/deliverability/sending-from-subdomain"},{"title":"Building your sender reputation","href":"/deliverability/sending-reputation"},{"title":"Sending transactional emails to group inboxes","sidebarTitle":"Send transactional emails to group inboxes","href":"/deliverability/transactional-group-inboxes"},{"title":"Insights from Google Postmaster","href":"/deliverability/gaining-insights"},{"title":"Email open rates","href":"/deliverability/understanding-email-open-rates"},{"title":"Add a sending avatar","href":"/deliverability/adding-a-sending-avatar"},{"title":"Maintaining a clean list","href":"/deliverability/maintaining-a-clean-list"},{"title":"Sending emails to Apple “Hide my email” addresses","sidebarTitle":"Send to “Hide my email” addresses","href":"/deliverability/apple-hide-my-email"},{"title":"Sending from multiple domains","href":"/deliverability/sending-from-multiple-domains"},{"title":"Migrating domains","href":"/deliverability/migrating-domains"}]},{"group":"Integrations","pages":[{"title":"Set up Loops in Next.js","sidebarTitle":"Next.js guide","href":"/guides/nextjs"},{"title":"Send emails from Bolt.new","href":"/guides/bolt-emails"},{"title":"Bubble API Connector","href":"/guides/bubble-api-connector"},{"title":"Set up a welcome email sequence for new Ghost members","sidebarTitle":"Email sequence for Ghost","href":"/guides/ghost-email-sequence"}]},{"group":"Creating emails","pages":[{"title":"How to resend a campaign to contacts who haven't received it","sidebarTitle":"Send to new subscribers again","href":"/guides/send-again"},{"title":"Why we don't support HTML emails","href":"/guides/html-emails"},{"title":"Dark mode support in emails","href":"/guides/email-dark-mode"}]},{"group":"Recipes","pages":[{"title":"Recipe: Onboarding completion workflow","sidebarTitle":"Onboarding completion","href":"/guides/onboarding-completion"},{"title":"Recipe: Churn risk segment and re-engagement workflow","sidebarTitle":"Churn risk re-engagement","href":"/guides/churn-risk-segment"},{"title":"Recipe: Active 30-day users segment","sidebarTitle":"Active 30-day users","href":"/guides/active-30-day-users"},{"title":"Recipe: Upgrade upsell workflow","sidebarTitle":"Upgrade upsell","href":"/guides/upgrade-upsell"},{"title":"Recipe: SaaS customer lifecycle emails","sidebarTitle":"Lifecycle emails","href":"/guides/lifecycle-emails"},{"title":"Recipe: Scheduled digest email","sidebarTitle":"Scheduled digest","href":"/guides/scheduled-digest-email"},{"title":"Recipe: Product updates","sidebarTitle":"Product updates","href":"/guides/product-updates"}]},{"group":"Email basics","pages":[{"title":"What is DNS?","href":"/guides/what-is-dns"},{"title":"What is BIMI?","href":"/guides/what-is-bimi"},{"title":"Open rates are a vanity metric","href":"/guides/open-rates"},{"title":"Transactional vs marketing email","sidebarTitle":"Transactional vs marketing","href":"/guides/transactional-vs-marketing-email"}]}]}]},"basePath":"","title":"Add a branch - Loops","buildId":"dpl_4RHMRqtvdHvKgaEfTTjFqjzja3B6","deploymentId":"dpl_4RHMRqtvdHvKgaEfTTjFqjzja3B6","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-D_4Sesi0.js","utils-DRHeK26p.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-C6d-DUc2.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-Dex7slho.js","snippetPresets-BcCEBp0Z.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-CufowNTX.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-A4lJSCIe.js","shallow-DqoHP7zn.js","getApiPlaygroundDisplay-Cku8AmtL.js","CodeSnippet-CtHQbNqc.js","CodeSnippets-CGo5Cslf.js","Page-BoJxk0m8.js","getPastedJson-M-bKdue4.js","icon-DEqCU4st.js","MethodPill-DnfSSXiJ.js","DuplicateIcon-BHu2PE8M.js","createIcon-BPsE5X7c.js","DynamicMarkdown-Dnt6YhtR.js","SectionHeading-6CtFWqMQ.js","axios-vUo_bRtp.js","Markdown-BoKe_1fI.js","clsx-DM5-sUNJ.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CkIdkovK.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-B3e6Nh_r.js"]}