{ "data": { "id": "Nw8K2rT5xY", "type": "newsletter", "title": "June Restock Announcement", "channel": "email", "status": "sent", "subject": "The restock you asked for is here", "send_date": "2026-06-18T15:00:00Z", "audience": { "included_segments": [ { "id": "aBc1234", "name": "Engaged 90d", "prebuilt": false }, { "id": "potential_customers", "name": "Potential Customers", "prebuilt": true } ], "excluded_segments": [ { "id": "dEf5678", "name": "Recent purchasers", "prebuilt": false } ] }, "coupon": null, "ab_test": { "winning_metric": "click_rate", "test_duration_seconds": 86400, "versions": [ { "id": "cpv_dkyYZmk", "name": "Version A", "is_control": true, "is_winner": false, "audience_share": 0.125, "subject": "The restock you asked for is here", "preheader": "Back in stock and going fast", "coupon": null }, { "id": "cpv_YJGOjpJ", "name": "Version B", "is_control": false, "is_winner": true, "audience_share": 0.125, "subject": "Your size is back, but not for long", "preheader": "We saved you a look", "coupon": { "id": "7k2dG6Y", "title": "RESTOCK20", "kind": "master", "platform": "manual" } } ] }, "created_at": "2026-06-10T09:00:00Z", "updated_at": "2026-06-18T15:05:00Z" }}
Campaigns
Get a campaign
Retrieve a single message campaign by its identifier. Resolves both
newsletters and flow campaigns — no type parameter needed. A flow
campaign names the flow that sends it in flow; newsletters omit
that field.
A /v1/campaigns row already carries this exact shape, so following up
per campaign adds nothing — reach for this when the id came from
somewhere else, such as a flow node’s data.campaign_id or a report
row’s campaign_id. Performance is
/v1/reports/campaigns/{campaign_id}.
Target a subaccount instead of the main connected account.
Pass a subaccount id from get_account's subaccounts list. Only direct subaccounts
of the connected account are reachable — omit this for the main account itself.
The campaign's unique identifier (returned as id in campaign responses). Ids are opaque public strings — a numeric id from a Privy dashboard URL is not a valid API id and will 404; list campaigns and match by title instead.
A message campaign — configuration only; send statistics belong to the
reporting surface. type discriminates the two families: newsletter
(email + SMS broadcasts) and flow (the email/SMS messages a flow sends).
Newsletter-only fields (status, send_date, audience) are null
for flow campaigns — the flow's trigger decides who receives them and when.
Show child attributes
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Privy Knowledge Base","colors":{"primary":"#254E5A","light":"#E3E32B","dark":"#254E5A"},"logo":{"light":"https://mintcdn.com/privy/fGrkZt933tBjY_zl/logo/light.svg?fit=max\u0026auto=format\u0026n=fGrkZt933tBjY_zl\u0026q=85\u0026s=36a01db426b7c94fac423778765cd517","dark":"https://mintcdn.com/privy/fGrkZt933tBjY_zl/logo/dark.svg?fit=max\u0026auto=format\u0026n=fGrkZt933tBjY_zl\u0026q=85\u0026s=24576b53a928bf065f4a636ab8dc3431"},"favicon":"https://mintcdn.com/privy/fGrkZt933tBjY_zl/logo/favicon.svg?fit=max\u0026auto=format\u0026n=fGrkZt933tBjY_zl\u0026q=85\u0026s=9fee6eb5a3c74b929294365e07a3f01d","background":{"color":{"light":"#FFF","dark":"#0D1D23"}},"navbar":{"links":[{"href":"https://www.privy.com/pricing","label":"Pricing"},{"href":"mailto:support@privy.com","label":"Contact Support"}],"primary":{"type":"button","label":"Login","href":"https://dashboard.privy.com"}},"footer":{"socials":{"x":"https://x.com/privy","linkedin":"https://www.linkedin.com/company/privy"}},"seo":{"indexing":"all"},"fonts":{"heading":{"family":"Matter","weight":650,"source":"https://public-assets.privy.com/MatterStandard-VF.woff2","format":"woff2"},"body":{"family":"Matter","weight":400,"source":"https://public-assets.privy.com/MatterStandard-VF.woff2","format":"woff2"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"privy","hasAudioNarration":false,"actualSubdomain":"privy","customDomains":["help.privy.com"],"gitSource":{"type":"github","owner":"privy","repo":"mintlify-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true,"issues":true,"edits":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"REMOVE_BRANDING":{"status":"ENABLED"},"CONTEXTUAL_FEEDBACK":{"status":"ENABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af3ac7069be62302954224f","clientVersion":"0.0.4111","searchFilterCounts":[{"language":"default","tag":"Learn","count":275},{"language":"default","tag":"Developer","count":49},{"language":"default","tag":"Integrations","count":30},{"language":"default","tag":"Strategy Guides","count":24},{"language":"default","tag":"Flows","count":18},{"language":"default","tag":"Account + Billing","count":18},{"language":"default","tag":"Contacts","count":17},{"language":"default","tag":"Displays","count":15},{"language":"default","tag":"Deliverability","count":11},{"language":"default","tag":"Content","count":10}]},"assistantConfig":{},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"@font-face{font-family:\"Matter\";src:url(\"https://public-assets.privy.com/MatterStandard-VF.woff2\") format(\"woff2\");font-display:swap;font-style:normal;font-weight:600}.mdx-content strong,.mdx-content b{font-weight:600}.mdx-content em,.mdx-content i{font-style:italic}"}],"page":{"pagePath":"docs/api-reference/get-campaign","slug":"/docs/api-reference/get-campaign","pageMetadata":{"title":"Get a campaign","openapi":"openapi/privy-api.yaml GET /campaigns/{id}","description":"Retrieve a single message campaign by its identifier. Resolves both\nnewsletters and flow campaigns — no `type` parameter needed. A flow\ncampaign names the flow that sends it in `flow`; newsletters omit\nthat field.\n\nA `/v1/campaigns` row already carries this exact shape, so following up\nper campaign adds nothing — reach for this when the id came from\nsomewhere else, such as a flow node's `data.campaign_id` or a report\nrow's `campaign_id`. Performance is\n`/v1/reports/campaigns/{campaign_id}`.\n\n**Required scope:** `campaigns_read`\n","href":"/docs/api-reference/get-campaign"},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n strong: \"strong\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Retrieve a single message campaign by its identifier. Resolves both\\nnewsletters and flow campaigns — no \", _jsx(_components.code, {\n children: \"type\"\n }), \" parameter needed. A flow\\ncampaign names the flow that sends it in \", _jsx(_components.code, {\n children: \"flow\"\n }), \"; newsletters omit\\nthat field.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"A \", _jsx(_components.code, {\n children: \"/v1/campaigns\"\n }), \" row already carries this exact shape, so following up\\nper campaign adds nothing — reach for this when the id came from\\nsomewhere else, such as a flow node’s \", _jsx(_components.code, {\n children: \"data.campaign_id\"\n }), \" or a report\\nrow’s \", _jsx(_components.code, {\n children: \"campaign_id\"\n }), \". Performance is\\n\", _jsx(_components.code, {\n children: \"/v1/reports/campaigns/{campaign_id}\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Required scope:\"\n }), \" \", _jsx(_components.code, {\n children: \"campaigns_read\"\n })]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Get a campaign","openapi":"openapi/privy-api.yaml GET /campaigns/{id}","description":"Retrieve a single message campaign by its identifier. Resolves both\nnewsletters and flow campaigns — no `type` parameter needed. A flow\ncampaign names the flow that sends it in `flow`; newsletters omit\nthat field.\n\nA `/v1/campaigns` row already carries this exact shape, so following up\nper campaign adds nothing — reach for this when the id came from\nsomewhere else, such as a flow node's `data.campaign_id` or a report\nrow's `campaign_id`. Performance is\n`/v1/reports/campaigns/{campaign_id}`.\n\n**Required scope:** `campaigns_read`\n","href":"/docs/api-reference/get-campaign"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"getCampaign","summary":"Get a campaign","description":"Retrieve a single message campaign by its identifier. Resolves both\nnewsletters and flow campaigns — no `type` parameter needed. A flow\ncampaign names the flow that sends it in `flow`; newsletters omit\nthat field.\n\nA `/v1/campaigns` row already carries this exact shape, so following up\nper campaign adds nothing — reach for this when the id came from\nsomewhere else, such as a flow node's `data.campaign_id` or a report\nrow's `campaign_id`. Performance is\n`/v1/reports/campaigns/{campaign_id}`.\n\n**Required scope:** `campaigns_read`\n","tags":["Campaigns"],"security":["2211bf45-b646-44a8-8ffd-494afde82cd6"],"parameters":["c054e003-cfad-4792-9eb6-44f91ca305d9","d99e711c-6ca1-47e9-ba4b-604814978c3b"],"responses":{"200":"2e6e3fee-a780-4ff6-aaef-20fa7cb231fb","401":"f372545f-2093-4bf6-8261-0d1bad0d8630","403":"f25ca737-db60-4879-aa5a-10384121300a","404":"d273fd7f-805a-4856-9d03-6c39be3ffcc4","429":"54fcfd29-0005-495c-b1c6-60173cdc423b"},"method":"get","type":"path","servers":["97f63e03-f020-41b7-a5b9-e312bbfed47d"],"path":"/campaigns/{id}","baseUrlOptions":["https://api.privy.com/v1"],"title":"Get a campaign","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"c054e003-cfad-4792-9eb6-44f91ca305d9":{"name":"Privy-Account-Id","in":"header","required":false,"description":"Target a subaccount instead of the main connected account.\nPass a subaccount `id` from get_account's `subaccounts` list. Only direct subaccounts\nof the connected account are reachable — omit this for the main account itself.\n","schema":{"type":"string","isRequired":false,"description":"Target a subaccount instead of the main connected account.\nPass a subaccount `id` from get_account's `subaccounts` list. Only direct subaccounts\nof the connected account are reachable — omit this for the main account itself.\n","uniqueKey":"","typeLabel":"string"},"example":"S1U2B3A4C5C6T7"},"d99e711c-6ca1-47e9-ba4b-604814978c3b":{"name":"id","in":"path","required":true,"description":"The campaign's unique identifier (returned as `id` in campaign responses). Ids are opaque public strings — a numeric id from a Privy dashboard URL is not a valid API id and will 404; list campaigns and match by title instead.","schema":{"type":"string","isRequired":true,"description":"The campaign's unique identifier (returned as `id` in campaign responses). Ids are opaque public strings — a numeric id from a Privy dashboard URL is not a valid API id and will 404; list campaigns and match by title instead.","uniqueKey":"","typeLabel":"string"},"example":"Nw8K2rT5xY"}},"responses":{"2e6e3fee-a780-4ff6-aaef-20fa7cb231fb":{"description":"The message campaign.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","description":"A message campaign — configuration only; send statistics belong to the\nreporting surface. `type` discriminates the two families: `newsletter`\n(email + SMS broadcasts) and `flow` (the email/SMS messages a flow sends).\nNewsletter-only fields (`status`, `send_date`, `audience`) are `null`\nfor flow campaigns — the flow's trigger decides who receives them and when.\n","properties":{"id":{"type":"string","description":"Stable, unique identifier for the campaign. Use this value in `/v1/campaigns/{id}` and `/v1/reports/campaigns/{campaign_id}`.","example":"Nw8K2rT5xY","uniqueKey":"data.id","typeLabel":"string"},"type":{"type":"string","enum":["newsletter","flow"],"description":"`newsletter` — a broadcast send; `flow` — a message sent by an automation flow.","example":"newsletter","uniqueKey":"data.type","typeLabel":"enum\u003cstring>"},"title":{"oneOf":[{"type":"string","example":"June Restock Announcement","uniqueKey":"data.title.oneOf.0","typeLabel":"string"},{"type":"null","example":"June Restock Announcement","uniqueKey":"data.title.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.title","typeLabel":"string | null"},"channel":{"type":"string","enum":["email","sms"],"example":"email","uniqueKey":"data.channel","typeLabel":"enum\u003cstring>"},"status":{"oneOf":[{"type":"string","enum":["draft","scheduled","preparing","awaiting_winner","sending","sent","partially_sent","unsent","canceled",null],"description":"The newsletter's send lifecycle. `null` for flow campaigns.\n\nTwo kinds of send reach beyond the plain draft → scheduled → sending →\nsent path, and they share some states.\n\nA newsletter scheduled to land at a recipient-local wall-clock time\n(\"send in recipient's timezone\") rolls delivery out over roughly 24\nhours as each timezone reaches that time. `preparing` is audience\ngeneration, and it is the last point at which the send can be\nunscheduled; after that a merchant can only cancel the remaining\ndelivery windows, leaving `partially_sent` when some recipients were\nalready sent to and `canceled` when none were.\n\nAn A/B test runs\n`preparing` → `awaiting_winner` → `sending` → `sent`: it generates its\naudience, sends to the test cohort, then holds at `awaiting_winner`\nwhile the decision window runs, and only sends the winning version to\nthe remaining audience once a winner is committed. A test cancelled\nmid-flight also reports `canceled`. `awaiting_winner` occurs on A/B\ntests only.\n","example":"sent","uniqueKey":"data.status.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["draft","scheduled","preparing","awaiting_winner","sending","sent","partially_sent","unsent","canceled",null],"description":"The newsletter's send lifecycle. `null` for flow campaigns.\n\nTwo kinds of send reach beyond the plain draft → scheduled → sending →\nsent path, and they share some states.\n\nA newsletter scheduled to land at a recipient-local wall-clock time\n(\"send in recipient's timezone\") rolls delivery out over roughly 24\nhours as each timezone reaches that time. `preparing` is audience\ngeneration, and it is the last point at which the send can be\nunscheduled; after that a merchant can only cancel the remaining\ndelivery windows, leaving `partially_sent` when some recipients were\nalready sent to and `canceled` when none were.\n\nAn A/B test runs\n`preparing` → `awaiting_winner` → `sending` → `sent`: it generates its\naudience, sends to the test cohort, then holds at `awaiting_winner`\nwhile the decision window runs, and only sends the winning version to\nthe remaining audience once a winner is committed. A test cancelled\nmid-flight also reports `canceled`. `awaiting_winner` occurs on A/B\ntests only.\n","example":"sent","uniqueKey":"data.status.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.status","typeLabel":"enum\u003cstring> | null"},"subject":{"oneOf":[{"type":"string","description":"Email subject line. `null` for SMS campaigns.","example":"The restock you asked for is here","uniqueKey":"data.subject.oneOf.0","typeLabel":"string"},{"type":"null","description":"Email subject line. `null` for SMS campaigns.","example":"The restock you asked for is here","uniqueKey":"data.subject.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.subject","typeLabel":"string | null"},"sms":{"oneOf":[{"type":"object","description":"Current message content and settings for SMS newsletters only; omitted for email and flow campaigns. Null if the message is missing. Link tags, short-link options, contact cards, and images can be read here but are edited in the dashboard.\n","properties":{"body":{"oneOf":[{"type":"string","uniqueKey":"data.sms.oneOf.0.body.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.sms.oneOf.0.body.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.sms.oneOf.0.body","typeLabel":"string | null"},"include_opt_out_footer":{"type":"boolean","uniqueKey":"data.sms.oneOf.0.include_opt_out_footer","typeLabel":"boolean"},"auto_shorten_links":{"type":"boolean","uniqueKey":"data.sms.oneOf.0.auto_shorten_links","typeLabel":"boolean"},"link_tags":{"type":"object","readOnly":true,"description":"Maps each raw URL or Liquid variable path to the contact tag IDs applied on click. These opaque tag_ IDs match the IDs in segment conditions and have no lookup endpoint.\n","additionalProperties":{"type":"array","items":{"type":"string","pattern":"^tag_[A-Za-z0-9]+$","uniqueKey":"data.sms.oneOf.0.link_tags.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.sms.oneOf.0.link_tags.additionalProperties","typeLabel":"string[]"},"uniqueKey":"data.sms.oneOf.0.link_tags","typeLabel":"object"},"short_link_options":{"type":"object","readOnly":true,"description":"Saved destination for the legacy short_url personalization tag; empty if unset.","properties":{"long_link_url":{"type":"string","uniqueKey":"data.sms.oneOf.0.short_link_options.long_link_url","typeLabel":"string"}},"uniqueKey":"data.sms.oneOf.0.short_link_options","typeLabel":"object"},"send_vcard":{"type":"boolean","readOnly":true,"description":"Whether the merchant's contact card is attached to the message.","uniqueKey":"data.sms.oneOf.0.send_vcard","typeLabel":"boolean"},"image":{"oneOf":[{"type":"object","readOnly":true,"description":"The attached image, or null when none is attached.","properties":{"url":{"type":"string","format":"uri","description":"A signed link to the image that expires shortly; read the campaign again for a fresh one.","uniqueKey":"data.sms.oneOf.0.image.oneOf.0.url","typeLabel":"string\u003curi>"},"filename":{"type":"string","uniqueKey":"data.sms.oneOf.0.image.oneOf.0.filename","typeLabel":"string"},"content_type":{"oneOf":[{"type":"string","uniqueKey":"data.sms.oneOf.0.image.oneOf.0.content_type.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.sms.oneOf.0.image.oneOf.0.content_type.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.sms.oneOf.0.image.oneOf.0.content_type","typeLabel":"string | null"}},"uniqueKey":"data.sms.oneOf.0.image.oneOf.0","typeLabel":"object"},{"type":"null","readOnly":true,"description":"The attached image, or null when none is attached.","properties":{"url":{"type":"string","format":"uri","description":"A signed link to the image that expires shortly; read the campaign again for a fresh one."},"filename":{"type":"string"},"content_type":{"oneOf":[{"type":"string"},{"type":"null"}]}},"uniqueKey":"data.sms.oneOf.0.image.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.sms.oneOf.0.image","typeLabel":"object | null"}},"uniqueKey":"data.sms.oneOf.0","typeLabel":"object"},{"type":"null","description":"Current message content and settings for SMS newsletters only; omitted for email and flow campaigns. Null if the message is missing. Link tags, short-link options, contact cards, and images can be read here but are edited in the dashboard.\n","properties":{"body":{"oneOf":[{"type":"string"},{"type":"null"}]},"include_opt_out_footer":{"type":"boolean"},"auto_shorten_links":{"type":"boolean"},"link_tags":{"type":"object","readOnly":true,"description":"Maps each raw URL or Liquid variable path to the contact tag IDs applied on click. These opaque tag_ IDs match the IDs in segment conditions and have no lookup endpoint.\n","additionalProperties":{"type":"array","items":{"type":"string","pattern":"^tag_[A-Za-z0-9]+$"}}},"short_link_options":{"type":"object","readOnly":true,"description":"Saved destination for the legacy short_url personalization tag; empty if unset.","properties":{"long_link_url":{"type":"string"}}},"send_vcard":{"type":"boolean","readOnly":true,"description":"Whether the merchant's contact card is attached to the message."},"image":{"oneOf":[{"type":"object","readOnly":true,"description":"The attached image, or null when none is attached.","properties":{"url":{"type":"string","format":"uri","description":"A signed link to the image that expires shortly; read the campaign again for a fresh one."},"filename":{"type":"string"},"content_type":{"oneOf":[{"type":"string"},{"type":"null"}]}}},{"type":"null","readOnly":true,"description":"The attached image, or null when none is attached.","properties":{"url":{"type":"string","format":"uri","description":"A signed link to the image that expires shortly; read the campaign again for a fresh one."},"filename":{"type":"string"},"content_type":{"oneOf":[{"type":"string"},{"type":"null"}]}}}]}},"uniqueKey":"data.sms.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.sms","typeLabel":"object | null"},"email":{"oneOf":[{"type":"object","description":"Current subject, preheader, and starting template for email newsletters only; omitted for SMS and flow campaigns.","properties":{"subject":{"oneOf":[{"type":"string","uniqueKey":"data.email.oneOf.0.subject.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.email.oneOf.0.subject.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.email.oneOf.0.subject","typeLabel":"string | null"},"preheader":{"oneOf":[{"type":"string","uniqueKey":"data.email.oneOf.0.preheader.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.email.oneOf.0.preheader.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.email.oneOf.0.preheader","typeLabel":"string | null"},"editor":{"type":"string","enum":["builder","html"],"description":"How the merchant edits the email: in the email builder, or as raw HTML. An html email has no design to revise.","uniqueKey":"data.email.oneOf.0.editor","typeLabel":"enum\u003cstring>"},"template":{"oneOf":[{"type":"object","description":"The template the API last applied to this draft. Null for drafts started in the dashboard, which does not record a template choice, and for deleted templates. A template the merchant picks in the dashboard afterward is not reflected here.","properties":{"id":{"type":"string","uniqueKey":"data.email.oneOf.0.template.oneOf.0.id","typeLabel":"string"},"name":{"type":"string","uniqueKey":"data.email.oneOf.0.template.oneOf.0.name","typeLabel":"string"}},"uniqueKey":"data.email.oneOf.0.template.oneOf.0","typeLabel":"object"},{"type":"null","description":"The template the API last applied to this draft. Null for drafts started in the dashboard, which does not record a template choice, and for deleted templates. A template the merchant picks in the dashboard afterward is not reflected here.","properties":{"id":{"type":"string"},"name":{"type":"string"}},"uniqueKey":"data.email.oneOf.0.template.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.email.oneOf.0.template","typeLabel":"object | null"},"design":{"oneOf":[{"type":"object","description":"The design as it now stands, with ids for revising. Returned only for newsletters, so it is null for flow campaign emails even though the builder made them, and null when the stored body is not an Unlayer design. Present on the detail, create, and revise responses; list rows omit it.","properties":{"body":{"type":"object","properties":{"style":{"type":"object","additionalProperties":true,"uniqueKey":"data.email.oneOf.0.design.oneOf.0.body.style","typeLabel":"object"}},"uniqueKey":"data.email.oneOf.0.design.oneOf.0.body","typeLabel":"object"},"rows":{"type":"array","items":{"type":"object","properties":{"id":{"oneOf":[{"type":"string","uniqueKey":"data.email.oneOf.0.design.oneOf.0.rows.items.[INDEX].id.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.email.oneOf.0.design.oneOf.0.rows.items.[INDEX].id.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.email.oneOf.0.design.oneOf.0.rows.items.[INDEX].id","typeLabel":"string | null"},"layout":{"type":"array","items":{"type":"number","uniqueKey":"data.email.oneOf.0.design.oneOf.0.rows.items.[INDEX].layout.items.[INDEX]","typeLabel":"number"},"description":"Relative column widths as stored.","uniqueKey":"data.email.oneOf.0.design.oneOf.0.rows.items.[INDEX].layout","typeLabel":"number[]"},"style":{"type":"object","additionalProperties":true,"uniqueKey":"data.email.oneOf.0.design.oneOf.0.rows.items.[INDEX].style","typeLabel":"object"},"columns":{"type":"array","items":{"type":"object","properties":{"id":{"oneOf":[{"type":"string","uniqueKey":"data.email.oneOf.0.design.oneOf.0.rows.items.[INDEX].columns.items.[INDEX].id.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.email.oneOf.0.design.oneOf.0.rows.items.[INDEX].columns.items.[INDEX].id.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.email.oneOf.0.design.oneOf.0.rows.items.[INDEX].columns.items.[INDEX].id","typeLabel":"string | null"},"blocks":{"type":"array","items":{"type":"object","required":["type"],"description":"A block as stored. `type` names the write vocabulary or `other`; the remaining fields are the block type's write fields as stored, and static product entries read back as objects with `id` and `title`. Only `id` and `type` are certain; the rest may fall outside the write limits. A button sized to a partial width omits `style.full_width`.\n","additionalProperties":true,"properties":{"type":{"type":"string","enum":["heading","text","image","button","divider","social","product","coupon","other"],"isRequired":true,"uniqueKey":"data.email.oneOf.0.design.oneOf.0.rows.items.[INDEX].columns.items.[INDEX].blocks.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"id":{"oneOf":[{"type":"string","uniqueKey":"data.email.oneOf.0.design.oneOf.0.rows.items.[INDEX].columns.items.[INDEX].blocks.items.[INDEX].id.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.email.oneOf.0.design.oneOf.0.rows.items.[INDEX].columns.items.[INDEX].blocks.items.[INDEX].id.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.email.oneOf.0.design.oneOf.0.rows.items.[INDEX].columns.items.[INDEX].blocks.items.[INDEX].id","typeLabel":"string | null"},"unlayer_type":{"type":"string","description":"For `other` blocks, the builder's own block type.","uniqueKey":"data.email.oneOf.0.design.oneOf.0.rows.items.[INDEX].columns.items.[INDEX].blocks.items.[INDEX].unlayer_type","typeLabel":"string"},"unsupported_links":{"type":"array","items":{"type":"string","uniqueKey":"data.email.oneOf.0.design.oneOf.0.rows.items.[INDEX].columns.items.[INDEX].blocks.items.[INDEX].unsupported_links.items.[INDEX]","typeLabel":"string"},"description":"On a `text` block, the targets of links the stored text holds that `paragraphs` cannot express, such as an sms link or a linked image. They are absent from `paragraphs`, and a `paragraphs` update removes them from the email. Read-only.","uniqueKey":"data.email.oneOf.0.design.oneOf.0.rows.items.[INDEX].columns.items.[INDEX].blocks.items.[INDEX].unsupported_links","typeLabel":"string[]"},"unsupported_formatting":{"type":"array","items":{"type":"string","enum":["inline_color","inline_font_size","inline_font_family","inline_alignment","inline_background","table","nested_list","block_element","spacer_paragraph","list_start","list_item_break","image","line_break","emphasis","link","other_formatting"],"uniqueKey":"data.email.oneOf.0.design.oneOf.0.rows.items.[INDEX].columns.items.[INDEX].blocks.items.[INDEX].unsupported_formatting.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"On a `text` or `heading` block, the kinds of formatting the stored text holds that its `paragraphs` or `text` cannot express, so an update of that field removes them from the email; the update still succeeds. Inline kinds mean inline styling that differs from the block's own value, on part of the text or all of it. `table`, `nested_list`, `block_element` (a heading tag, quote, or rule inside the text), `spacer_paragraph`, `list_start` (a numbered list not starting at 1), and `list_item_break` apply to text blocks. `image` is an image inside the text; on a text block, a linked image is in `unsupported_links` instead. `line_break`, `emphasis`, and `link` apply to headings. `other_formatting` means anything else not known to survive a rewrite, such as tag-on-click on a link, a reset of inherited emphasis, or letter spacing. Absent when there is nothing to report. Read-only: sending it back is refused as an unknown field, as `unsupported_links` is.","uniqueKey":"data.email.oneOf.0.design.oneOf.0.rows.items.[INDEX].columns.items.[INDEX].blocks.items.[INDEX].unsupported_formatting","typeLabel":"enum\u003cstring>[]"}},"uniqueKey":"data.email.oneOf.0.design.oneOf.0.rows.items.[INDEX].columns.items.[INDEX].blocks.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.email.oneOf.0.design.oneOf.0.rows.items.[INDEX].columns.items.[INDEX].blocks","typeLabel":"object[]"}},"uniqueKey":"data.email.oneOf.0.design.oneOf.0.rows.items.[INDEX].columns.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.email.oneOf.0.design.oneOf.0.rows.items.[INDEX].columns","typeLabel":"object[]"}},"uniqueKey":"data.email.oneOf.0.design.oneOf.0.rows.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.email.oneOf.0.design.oneOf.0.rows","typeLabel":"object[]"}},"uniqueKey":"data.email.oneOf.0.design.oneOf.0","typeLabel":"object"},{"type":"null","description":"The design as it now stands, with ids for revising. Returned only for newsletters, so it is null for flow campaign emails even though the builder made them, and null when the stored body is not an Unlayer design. Present on the detail, create, and revise responses; list rows omit it.","uniqueKey":"data.email.oneOf.0.design.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.email.oneOf.0.design","typeLabel":"object | null"}},"uniqueKey":"data.email.oneOf.0","typeLabel":"object"},{"type":"null","description":"Current subject, preheader, and starting template for email newsletters only; omitted for SMS and flow campaigns.","properties":{"subject":{"oneOf":[{"type":"string"},{"type":"null"}]},"preheader":{"oneOf":[{"type":"string"},{"type":"null"}]},"editor":{"type":"string","enum":["builder","html"],"description":"How the merchant edits the email: in the email builder, or as raw HTML. An html email has no design to revise."},"template":{"oneOf":[{"type":"object","description":"The template the API last applied to this draft. Null for drafts started in the dashboard, which does not record a template choice, and for deleted templates. A template the merchant picks in the dashboard afterward is not reflected here.","properties":{"id":{"type":"string"},"name":{"type":"string"}}},{"type":"null","description":"The template the API last applied to this draft. Null for drafts started in the dashboard, which does not record a template choice, and for deleted templates. A template the merchant picks in the dashboard afterward is not reflected here.","properties":{"id":{"type":"string"},"name":{"type":"string"}}}]},"design":{"oneOf":[{"type":"object","description":"The design as it now stands, with ids for revising. Returned only for newsletters, so it is null for flow campaign emails even though the builder made them, and null when the stored body is not an Unlayer design. Present on the detail, create, and revise responses; list rows omit it.","properties":{"body":{"type":"object","properties":{"style":{"type":"object","additionalProperties":true}}},"rows":{"type":"array","items":{"type":"object","properties":{"id":{"oneOf":[{"type":"string"},{"type":"null"}]},"layout":{"type":"array","items":{"type":"number"},"description":"Relative column widths as stored."},"style":{"type":"object","additionalProperties":true},"columns":{"type":"array","items":{"type":"object","properties":{"id":{"oneOf":[{"type":"string"},{"type":"null"}]},"blocks":{"type":"array","items":{"type":"object","required":["type"],"description":"A block as stored. `type` names the write vocabulary or `other`; the remaining fields are the block type's write fields as stored, and static product entries read back as objects with `id` and `title`. Only `id` and `type` are certain; the rest may fall outside the write limits. A button sized to a partial width omits `style.full_width`.\n","additionalProperties":true,"properties":{"id":{"oneOf":[{"type":"string"},{"type":"null"}]},"type":{"type":"string","enum":["heading","text","image","button","divider","social","product","coupon","other"]},"unlayer_type":{"type":"string","description":"For `other` blocks, the builder's own block type."},"unsupported_links":{"type":"array","items":{"type":"string"},"description":"On a `text` block, the targets of links the stored text holds that `paragraphs` cannot express, such as an sms link or a linked image. They are absent from `paragraphs`, and a `paragraphs` update removes them from the email. Read-only."},"unsupported_formatting":{"type":"array","items":{"type":"string","enum":["inline_color","inline_font_size","inline_font_family","inline_alignment","inline_background","table","nested_list","block_element","spacer_paragraph","list_start","list_item_break","image","line_break","emphasis","link","other_formatting"]},"description":"On a `text` or `heading` block, the kinds of formatting the stored text holds that its `paragraphs` or `text` cannot express, so an update of that field removes them from the email; the update still succeeds. Inline kinds mean inline styling that differs from the block's own value, on part of the text or all of it. `table`, `nested_list`, `block_element` (a heading tag, quote, or rule inside the text), `spacer_paragraph`, `list_start` (a numbered list not starting at 1), and `list_item_break` apply to text blocks. `image` is an image inside the text; on a text block, a linked image is in `unsupported_links` instead. `line_break`, `emphasis`, and `link` apply to headings. `other_formatting` means anything else not known to survive a rewrite, such as tag-on-click on a link, a reset of inherited emphasis, or letter spacing. Absent when there is nothing to report. Read-only: sending it back is refused as an unknown field, as `unsupported_links` is."}}}}}}}}}}}},{"type":"null","description":"The design as it now stands, with ids for revising. Returned only for newsletters, so it is null for flow campaign emails even though the builder made them, and null when the stored body is not an Unlayer design. Present on the detail, create, and revise responses; list rows omit it."}]}},"uniqueKey":"data.email.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.email","typeLabel":"object | null"},"send_date":{"oneOf":[{"type":"string","format":"date-time","description":"When the newsletter is scheduled to send (or sent). For a draft it is the proposed send time, which defaults to the draft's creation time when none was proposed, so read `status` to tell a scheduled campaign from a draft. For by_timezone delivery, target_local_date and target_wall_clock define the recipient-local send time; send_date is derived when scheduling. `null` for flow campaigns.\n","example":"2026-06-18T15:00:00Z","uniqueKey":"data.send_date.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"When the newsletter is scheduled to send (or sent). For a draft it is the proposed send time, which defaults to the draft's creation time when none was proposed, so read `status` to tell a scheduled campaign from a draft. For by_timezone delivery, target_local_date and target_wall_clock define the recipient-local send time; send_date is derived when scheduling. `null` for flow campaigns.\n","example":"2026-06-18T15:00:00Z","uniqueKey":"data.send_date.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.send_date","typeLabel":"string\u003cdate-time> | null"},"send_type":{"type":"string","enum":["normal","by_timezone","ab_test"],"readOnly":true,"description":"Newsletter delivery mode configured in the dashboard. Omitted for flow campaigns.","uniqueKey":"data.send_type","typeLabel":"enum\u003cstring>"},"target_local_date":{"oneOf":[{"type":"string","format":"date","readOnly":true,"description":"Saved recipient-local calendar date, used when send_type is by_timezone. `null` when unset. Edited in the dashboard. Omitted for flow campaigns.\n","uniqueKey":"data.target_local_date.oneOf.0","typeLabel":"string\u003cdate>"},{"type":"null","format":"date","readOnly":true,"description":"Saved recipient-local calendar date, used when send_type is by_timezone. `null` when unset. Edited in the dashboard. Omitted for flow campaigns.\n","uniqueKey":"data.target_local_date.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.target_local_date","typeLabel":"string\u003cdate> | null"},"target_wall_clock":{"oneOf":[{"type":"string","pattern":"^([01][0-9]|2[0-3]):[0-5][0-9]$","readOnly":true,"description":"Saved recipient-local time in HH:MM format, used when send_type is by_timezone. `null` when unset. Edited in the dashboard. Omitted for flow campaigns.\n","uniqueKey":"data.target_wall_clock.oneOf.0","typeLabel":"string"},{"type":"null","pattern":"^([01][0-9]|2[0-3]):[0-5][0-9]$","readOnly":true,"description":"Saved recipient-local time in HH:MM format, used when send_type is by_timezone. `null` when unset. Edited in the dashboard. Omitted for flow campaigns.\n","uniqueKey":"data.target_wall_clock.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.target_wall_clock","typeLabel":"string | null"},"flow":{"oneOf":[{"type":"object","description":"Flow campaigns only — the flow that sends this message, so naming it needs no follow-up request. Newsletters omit the field entirely; a flow campaign whose node has since been deleted carries `null`.\n","properties":{"id":{"type":"string","description":"The flow's identifier, as returned by `GET /v1/flows`.","example":"0Rqw3Z8","uniqueKey":"data.flow.oneOf.0.id","typeLabel":"string"},"title":{"oneOf":[{"type":"string","example":"Welcome Series","uniqueKey":"data.flow.oneOf.0.title.oneOf.0","typeLabel":"string"},{"type":"null","example":"Welcome Series","uniqueKey":"data.flow.oneOf.0.title.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.flow.oneOf.0.title","typeLabel":"string | null"}},"uniqueKey":"data.flow.oneOf.0","typeLabel":"object"},{"type":"null","description":"Flow campaigns only — the flow that sends this message, so naming it needs no follow-up request. Newsletters omit the field entirely; a flow campaign whose node has since been deleted carries `null`.\n","uniqueKey":"data.flow.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.flow","typeLabel":"object | null"},"dashboard_url":{"type":"string","format":"uri","description":"Newsletters only — the Privy dashboard page where a person reviews and sends the\ncampaign; a campaign that is no longer a draft links to its report instead.\nPresent on `GET /campaigns/{id}`; omitted from the list and from flow campaigns.\n\nThe number in its path is the\ndashboard's own route id, not an API id: address the campaign through the API\nwith the `id` field of this object.\n","uniqueKey":"data.dashboard_url","typeLabel":"string\u003curi>"},"audience":{"oneOf":[{"type":"object","description":"Audience segment references. `null` for flow campaigns — the flow's\ntrigger decides the audience. Each entry is `{id, name, prebuilt}`;\nsaved segments carry an id you can look up via `GET /v1/segments/{id}`\nfor counts and members. `prebuilt: true` marks Privy's\nbuilt-in smart segments (Potential Customers, Engaged Contacts, …) —\nwhen one hasn't been saved to the account, its `id` is the stable\nslug rather than a segments-API id.\n","properties":{"included_segments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"For saved segments, the segment id — pass it to `GET /v1/segments/{id}`\n(counts) or `GET /v1/segments/{id}/contacts` (members).\nA smart segment that has not been saved to the account has no\nsegment record; its `id` is the built-in segment's stable slug\n(e.g. `potential_customers`), with no segments-API detail read.\n","example":"aBc1234","uniqueKey":"data.audience.oneOf.0.included_segments.items.[INDEX].id","typeLabel":"string"},"name":{"type":"string","description":"Display name of the segment.","example":"Engaged 90d","uniqueKey":"data.audience.oneOf.0.included_segments.items.[INDEX].name","typeLabel":"string"},"prebuilt":{"type":"boolean","description":"Whether this is one of Privy's built-in smart segments (Potential\nCustomers, Engaged Contacts, …) — the same flag the segments API\nreturns, so refs match `GET /v1/segments` rows. `false` for segments\nyou created.\n","example":false,"uniqueKey":"data.audience.oneOf.0.included_segments.items.[INDEX].prebuilt","typeLabel":"boolean"}},"uniqueKey":"data.audience.oneOf.0.included_segments.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.audience.oneOf.0.included_segments","typeLabel":"object[]"},"excluded_segments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"For saved segments, the segment id — pass it to `GET /v1/segments/{id}`\n(counts) or `GET /v1/segments/{id}/contacts` (members).\nA smart segment that has not been saved to the account has no\nsegment record; its `id` is the built-in segment's stable slug\n(e.g. `potential_customers`), with no segments-API detail read.\n","example":"aBc1234","uniqueKey":"data.audience.oneOf.0.excluded_segments.items.[INDEX].id","typeLabel":"string"},"name":{"type":"string","description":"Display name of the segment.","example":"Engaged 90d","uniqueKey":"data.audience.oneOf.0.excluded_segments.items.[INDEX].name","typeLabel":"string"},"prebuilt":{"type":"boolean","description":"Whether this is one of Privy's built-in smart segments (Potential\nCustomers, Engaged Contacts, …) — the same flag the segments API\nreturns, so refs match `GET /v1/segments` rows. `false` for segments\nyou created.\n","example":false,"uniqueKey":"data.audience.oneOf.0.excluded_segments.items.[INDEX].prebuilt","typeLabel":"boolean"}},"uniqueKey":"data.audience.oneOf.0.excluded_segments.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.audience.oneOf.0.excluded_segments","typeLabel":"object[]"}},"uniqueKey":"data.audience.oneOf.0","typeLabel":"object"},{"type":"null","description":"Audience segment references. `null` for flow campaigns — the flow's\ntrigger decides the audience. Each entry is `{id, name, prebuilt}`;\nsaved segments carry an id you can look up via `GET /v1/segments/{id}`\nfor counts and members. `prebuilt: true` marks Privy's\nbuilt-in smart segments (Potential Customers, Engaged Contacts, …) —\nwhen one hasn't been saved to the account, its `id` is the stable\nslug rather than a segments-API id.\n","properties":{"included_segments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"For saved segments, the segment id — pass it to `GET /v1/segments/{id}`\n(counts) or `GET /v1/segments/{id}/contacts` (members).\nA smart segment that has not been saved to the account has no\nsegment record; its `id` is the built-in segment's stable slug\n(e.g. `potential_customers`), with no segments-API detail read.\n","example":"aBc1234"},"name":{"type":"string","description":"Display name of the segment.","example":"Engaged 90d"},"prebuilt":{"type":"boolean","description":"Whether this is one of Privy's built-in smart segments (Potential\nCustomers, Engaged Contacts, …) — the same flag the segments API\nreturns, so refs match `GET /v1/segments` rows. `false` for segments\nyou created.\n","example":false}}}},"excluded_segments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"For saved segments, the segment id — pass it to `GET /v1/segments/{id}`\n(counts) or `GET /v1/segments/{id}/contacts` (members).\nA smart segment that has not been saved to the account has no\nsegment record; its `id` is the built-in segment's stable slug\n(e.g. `potential_customers`), with no segments-API detail read.\n","example":"aBc1234"},"name":{"type":"string","description":"Display name of the segment.","example":"Engaged 90d"},"prebuilt":{"type":"boolean","description":"Whether this is one of Privy's built-in smart segments (Potential\nCustomers, Engaged Contacts, …) — the same flag the segments API\nreturns, so refs match `GET /v1/segments` rows. `false` for segments\nyou created.\n","example":false}}}}},"uniqueKey":"data.audience.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.audience","typeLabel":"object | null"},"coupon":{"oneOf":[{"type":"object","description":"The coupon pool attached to this campaign, `null` when none. A `{{ coupon_code }}` tag in the message body only renders when a pool is attached — a body using the tag with `coupon: null` will not render a code.\n","properties":{"id":{"type":"string","description":"The pool's identifier, as returned by `GET /v1/coupons`.","example":"Xk2fW9qLpV","uniqueKey":"data.coupon.oneOf.0.id","typeLabel":"string"},"title":{"type":"string","example":"Welcome 10%","uniqueKey":"data.coupon.oneOf.0.title","typeLabel":"string"},"kind":{"type":"string","enum":["master","unique"],"description":"`master` is a single shared code; `unique` is a pool of individually generated codes.","uniqueKey":"data.coupon.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"platform":{"type":"string","enum":["manual","shopify","bigcommerce","woocommerce"],"uniqueKey":"data.coupon.oneOf.0.platform","typeLabel":"enum\u003cstring>"}},"uniqueKey":"data.coupon.oneOf.0","typeLabel":"object"},{"type":"null","description":"The coupon pool attached to this campaign, `null` when none. A `{{ coupon_code }}` tag in the message body only renders when a pool is attached — a body using the tag with `coupon: null` will not render a code.\n","uniqueKey":"data.coupon.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.coupon","typeLabel":"object | null"},"ab_test":{"oneOf":[{"type":"object","description":"The A/B test's configuration when this newsletter is a test, `null` otherwise (flow campaigns never are). Per-version results live on `GET /v1/reports/campaigns/{campaign_id}`, joined by version `id`.\n","properties":{"winning_metric":{"oneOf":[{"type":"string","enum":["open_rate","click_rate","order_rate",null],"description":"The metric the winner is chosen on. `open_rate` only appears on older email tests and never on SMS.\n","example":"click_rate","uniqueKey":"data.ab_test.oneOf.0.winning_metric.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["open_rate","click_rate","order_rate",null],"description":"The metric the winner is chosen on. `open_rate` only appears on older email tests and never on SMS.\n","example":"click_rate","uniqueKey":"data.ab_test.oneOf.0.winning_metric.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.ab_test.oneOf.0.winning_metric","typeLabel":"enum\u003cstring> | null"},"test_duration_seconds":{"oneOf":[{"type":"integer","description":"How long the test cohort runs before a winner is chosen.","example":86400,"uniqueKey":"data.ab_test.oneOf.0.test_duration_seconds.oneOf.0","typeLabel":"integer"},{"type":"null","description":"How long the test cohort runs before a winner is chosen.","example":86400,"uniqueKey":"data.ab_test.oneOf.0.test_duration_seconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.ab_test.oneOf.0.test_duration_seconds","typeLabel":"integer | null"},"versions":{"type":"array","description":"The versions in labelled order (A, B, C…); the control is first.","items":{"type":"object","properties":{"id":{"type":"string","description":"Opaque, stable version identifier, prefixed `cpv_`. Matches the version's results on `GET /v1/reports/campaigns/{campaign_id}`.\n","example":"cpv_dkyYZmk","uniqueKey":"data.ab_test.oneOf.0.versions.items.[INDEX].id","typeLabel":"string"},"name":{"type":"string","example":"Version A","uniqueKey":"data.ab_test.oneOf.0.versions.items.[INDEX].name","typeLabel":"string"},"is_control":{"type":"boolean","example":true,"uniqueKey":"data.ab_test.oneOf.0.versions.items.[INDEX].is_control","typeLabel":"boolean"},"is_winner":{"type":"boolean","description":"Whether this version won. `false` on every version until a winner is committed.","example":false,"uniqueKey":"data.ab_test.oneOf.0.versions.items.[INDEX].is_winner","typeLabel":"boolean"},"audience_share":{"oneOf":[{"type":"number","description":"Share of the eligible audience (0–1) this version is sent to during the test. `null` until set on a draft. Shares sum to the test size; the remainder goes to the winner.\n","example":0.125,"uniqueKey":"data.ab_test.oneOf.0.versions.items.[INDEX].audience_share.oneOf.0","typeLabel":"number"},{"type":"null","description":"Share of the eligible audience (0–1) this version is sent to during the test. `null` until set on a draft. Shares sum to the test size; the remainder goes to the winner.\n","example":0.125,"uniqueKey":"data.ab_test.oneOf.0.versions.items.[INDEX].audience_share.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.ab_test.oneOf.0.versions.items.[INDEX].audience_share","typeLabel":"number | null"},"subject":{"oneOf":[{"type":"string","description":"This version's subject line, or its message body for SMS.","example":"The restock you asked for is here","uniqueKey":"data.ab_test.oneOf.0.versions.items.[INDEX].subject.oneOf.0","typeLabel":"string"},{"type":"null","description":"This version's subject line, or its message body for SMS.","example":"The restock you asked for is here","uniqueKey":"data.ab_test.oneOf.0.versions.items.[INDEX].subject.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.ab_test.oneOf.0.versions.items.[INDEX].subject","typeLabel":"string | null"},"preheader":{"oneOf":[{"type":"string","description":"This version's preheader. `null` for SMS or when none was set.","example":"Back in stock and going fast","uniqueKey":"data.ab_test.oneOf.0.versions.items.[INDEX].preheader.oneOf.0","typeLabel":"string"},{"type":"null","description":"This version's preheader. `null` for SMS or when none was set.","example":"Back in stock and going fast","uniqueKey":"data.ab_test.oneOf.0.versions.items.[INDEX].preheader.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.ab_test.oneOf.0.versions.items.[INDEX].preheader","typeLabel":"string | null"},"coupon":{"oneOf":[{"type":"object","description":"The coupon pool this version sends with, `null` when none.","properties":{"id":{"type":"string","description":"The pool's identifier, as returned by `GET /v1/coupons`.","example":"Xk2fW9qLpV","uniqueKey":"data.ab_test.oneOf.0.versions.items.[INDEX].coupon.oneOf.0.id","typeLabel":"string"},"title":{"type":"string","example":"Welcome 10%","uniqueKey":"data.ab_test.oneOf.0.versions.items.[INDEX].coupon.oneOf.0.title","typeLabel":"string"},"kind":{"type":"string","enum":["master","unique"],"description":"`master` is a single shared code; `unique` is a pool of individually generated codes.","uniqueKey":"data.ab_test.oneOf.0.versions.items.[INDEX].coupon.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"platform":{"type":"string","enum":["manual","shopify","bigcommerce","woocommerce"],"uniqueKey":"data.ab_test.oneOf.0.versions.items.[INDEX].coupon.oneOf.0.platform","typeLabel":"enum\u003cstring>"}},"uniqueKey":"data.ab_test.oneOf.0.versions.items.[INDEX].coupon.oneOf.0","typeLabel":"object"},{"type":"null","description":"The coupon pool this version sends with, `null` when none.","uniqueKey":"data.ab_test.oneOf.0.versions.items.[INDEX].coupon.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.ab_test.oneOf.0.versions.items.[INDEX].coupon","typeLabel":"object | null"}},"uniqueKey":"data.ab_test.oneOf.0.versions.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.ab_test.oneOf.0.versions","typeLabel":"object[]"}},"uniqueKey":"data.ab_test.oneOf.0","typeLabel":"object"},{"type":"null","description":"The A/B test's configuration when this newsletter is a test, `null` otherwise (flow campaigns never are). Per-version results live on `GET /v1/reports/campaigns/{campaign_id}`, joined by version `id`.\n","uniqueKey":"data.ab_test.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.ab_test","typeLabel":"object | null"},"created_at":{"type":"string","format":"date-time","example":"2026-06-10T09:00:00Z","uniqueKey":"data.created_at","typeLabel":"string\u003cdate-time>"},"updated_at":{"type":"string","format":"date-time","example":"2026-06-18T15:05:00Z","uniqueKey":"data.updated_at","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"data","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"ab_test_newsletter":{"title":"ab_test_newsletter","value":{"data":{"id":"Nw8K2rT5xY","type":"newsletter","title":"June Restock Announcement","channel":"email","status":"sent","subject":"The restock you asked for is here","send_date":"2026-06-18T15:00:00Z","audience":{"included_segments":[{"id":"aBc1234","name":"Engaged 90d","prebuilt":false},{"id":"potential_customers","name":"Potential Customers","prebuilt":true}],"excluded_segments":[{"id":"dEf5678","name":"Recent purchasers","prebuilt":false}]},"coupon":null,"ab_test":{"winning_metric":"click_rate","test_duration_seconds":86400,"versions":[{"id":"cpv_dkyYZmk","name":"Version A","is_control":true,"is_winner":false,"audience_share":0.125,"subject":"The restock you asked for is here","preheader":"Back in stock and going fast","coupon":null},{"id":"cpv_YJGOjpJ","name":"Version B","is_control":false,"is_winner":true,"audience_share":0.125,"subject":"Your size is back, but not for long","preheader":"We saved you a look","coupon":{"id":"7k2dG6Y","title":"RESTOCK20","kind":"master","platform":"manual"}}]},"created_at":"2026-06-10T09:00:00Z","updated_at":"2026-06-18T15:05:00Z"}}},"flow_campaign":{"title":"flow_campaign","value":{"data":{"id":"Xp4R7mQ2vB","type":"flow","title":"Cart reminder email","channel":"email","status":null,"subject":"You left something behind","send_date":null,"audience":null,"coupon":null,"ab_test":null,"created_at":"2026-04-02T15:00:00Z","updated_at":"2026-04-02T15:00:00Z"}}}},"exampleType":"examples"}},"exampleType":"examples"},"f372545f-2093-4bf6-8261-0d1bad0d8630":{"description":"Missing or invalid bearer token.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["invalid_client","invalid_scope","unauthorized","insufficient_scope","forbidden","paid_plan_required","api_access_required","segment_builder_required","not_found","no_connected_store","conflict","contacts_not_ready","validation_failed","idempotency_key_reused","rate_limited","store_unavailable","store_rate_limited","not_a_draft","design_changed","sms_missing","email_missing","ab_test_draft","idempotency_key_reused","template_unavailable","design_unavailable","render_failed"],"example":"validation_failed","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","example":"One or more fields are invalid","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","example":"email","uniqueKey":"error.details.items.[INDEX].field","typeLabel":"string"},"message":{"type":"string","example":"is required","uniqueKey":"error.details.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"error.details.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details","typeLabel":"object[]"}},"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"unauthorized","message":"Bearer token is missing or invalid"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"unauthorized","message":"Bearer token is missing or invalid"}}}},"exampleType":"examples"}},"exampleType":"examples"},"f25ca737-db60-4879-aa5a-10384121300a":{"description":"`insufficient_scope` when the token lacks the required scope for this endpoint.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["invalid_client","invalid_scope","unauthorized","insufficient_scope","forbidden","paid_plan_required","api_access_required","segment_builder_required","not_found","no_connected_store","conflict","contacts_not_ready","validation_failed","idempotency_key_reused","rate_limited","store_unavailable","store_rate_limited","not_a_draft","design_changed","sms_missing","email_missing","ab_test_draft","idempotency_key_reused","template_unavailable","design_unavailable","render_failed"],"example":"validation_failed","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","example":"One or more fields are invalid","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","example":"email","uniqueKey":"error.details.items.[INDEX].field","typeLabel":"string"},"message":{"type":"string","example":"is required","uniqueKey":"error.details.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"error.details.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details","typeLabel":"object[]"}},"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"insufficient_scope","message":"Token does not have the required scope"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"insufficient_scope","message":"Token does not have the required scope"}}}},"exampleType":"examples"}},"exampleType":"examples"},"d273fd7f-805a-4856-9d03-6c39be3ffcc4":{"description":"The requested resource does not exist or does not belong to your account.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["invalid_client","invalid_scope","unauthorized","insufficient_scope","forbidden","paid_plan_required","api_access_required","segment_builder_required","not_found","no_connected_store","conflict","contacts_not_ready","validation_failed","idempotency_key_reused","rate_limited","store_unavailable","store_rate_limited","not_a_draft","design_changed","sms_missing","email_missing","ab_test_draft","idempotency_key_reused","template_unavailable","design_unavailable","render_failed"],"example":"validation_failed","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","example":"One or more fields are invalid","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","example":"email","uniqueKey":"error.details.items.[INDEX].field","typeLabel":"string"},"message":{"type":"string","example":"is required","uniqueKey":"error.details.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"error.details.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details","typeLabel":"object[]"}},"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"not_found","message":"Not found"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"not_found","message":"Not found"}}}},"exampleType":"examples"}},"exampleType":"examples"},"54fcfd29-0005-495c-b1c6-60173cdc423b":{"description":"Rate limit exceeded. Retry after the specified time.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":42},"X-RateLimit-Limit-Minute":{"description":"Maximum requests allowed per minute.","schema":{"type":"integer"},"example":60},"X-RateLimit-Remaining-Minute":{"description":"Requests remaining in the current minute window.","schema":{"type":"integer"},"example":0},"X-RateLimit-Reset-Minute":{"description":"Unix timestamp when the minute window resets.","schema":{"type":"integer"},"example":1711929600},"X-RateLimit-Limit-Day":{"description":"Maximum requests allowed per day.","schema":{"type":"integer"},"example":10000},"X-RateLimit-Remaining-Day":{"description":"Requests remaining in the current day window.","schema":{"type":"integer"},"example":9500},"X-RateLimit-Reset-Day":{"description":"Unix timestamp when the day window resets.","schema":{"type":"integer"},"example":1712016000}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["invalid_client","invalid_scope","unauthorized","insufficient_scope","forbidden","paid_plan_required","api_access_required","segment_builder_required","not_found","no_connected_store","conflict","contacts_not_ready","validation_failed","idempotency_key_reused","rate_limited","store_unavailable","store_rate_limited","not_a_draft","design_changed","sms_missing","email_missing","ab_test_draft","idempotency_key_reused","template_unavailable","design_unavailable","render_failed"],"example":"validation_failed","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","example":"One or more fields are invalid","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","example":"email","uniqueKey":"error.details.items.[INDEX].field","typeLabel":"string"},"message":{"type":"string","example":"is required","uniqueKey":"error.details.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"error.details.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details","typeLabel":"object[]"}},"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"rate_limited","message":"Rate limit exceeded"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"rate_limited","message":"Rate limit exceeded"}}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"2211bf45-b646-44a8-8ffd-494afde82cd6":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"API token or OAuth access token","description":"Send either an API token or an OAuth access token as\n`Authorization: Bearer \u003ctoken>`. See the Authentication page for details.\n","scopes":[],"schemeName":"bearerAuth"}}},"servers":{"97f63e03-f020-41b7-a5b9-e312bbfed47d":{"url":"https://api.privy.com/v1","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"API token or OAuth access token","description":"Send either an API token or an OAuth access token as\n`Authorization: Bearer \u003ctoken>`. See the Authentication page for details.\n","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Send either an API token or an OAuth access token as\n`Authorization: Bearer \u003ctoken>`. See the Authentication page for details.\n","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"openapi/privy-api.yaml"},"subdomain":"privy","siteName":"Privy Knowledge Base","title":"Get a campaign - Privy Knowledge Base","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-22T23:08:30.129Z","originalFileLocation":"docs/api-reference/get-campaign.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Retrieve a single message campaign by its identifier. Resolves both newsletters and flow campaigns — no type parameter needed. A flow campaign names the flow that sends it in flow; newsletters omit that field. A /v1/campaigns row already carries this exact shape, so following up per campaign adds nothing — reach for this when the id came from somewhere else, such as a flow node\u0026#x27;s data.campaign_id or a report row\u0026#x27;s campaign_id. Performance is /v1/reports/campaigns/{campaign_id}. Required scope: campaigns_read\">\u003cmeta data-mint-head name=\"application-name\" content=\"Privy Knowledge Base\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/privy/fvbglk3MPcKWjtyG/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/privy/fvbglk3MPcKWjtyG/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/privy/fvbglk3MPcKWjtyG/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/privy/fvbglk3MPcKWjtyG/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/privy/fvbglk3MPcKWjtyG/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/privy/fvbglk3MPcKWjtyG/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/privy/fvbglk3MPcKWjtyG/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/privy/fvbglk3MPcKWjtyG/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/privy/fvbglk3MPcKWjtyG/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Get a campaign - Privy Knowledge Base\">\u003cmeta data-mint-head property=\"og:description\" content=\"Retrieve a single message campaign by its identifier. Resolves both newsletters and flow campaigns — no type parameter needed. A flow campaign names the flow that sends it in flow; newsletters omit that field. A /v1/campaigns row already carries this exact shape, so following up per campaign adds nothing — reach for this when the id came from somewhere else, such as a flow node\u0026#x27;s data.campaign_id or a report row\u0026#x27;s campaign_id. Performance is /v1/reports/campaigns/{campaign_id}. Required scope: campaigns_read\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Privy Knowledge Base\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://help.privy.com/docs/api-reference/get-campaign\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://privy.mintlify.site/_mintlify/api/og/v2?division=Campaigns\u0026amp;title=Get+a+campaign\u0026amp;description=Retrieve+a+single+message+campaign+by+its+identifier.+Resolves+both%0Anewsletters+and+flow+campaigns+%E2%80%94+no+%60type%60+parameter+needed.+A+flow%0Acampaign+names+the+flow+\u0026amp;theme=a5dbdd3119e247d04186b21c\u0026amp;signature=f7300fe0666ab04358c290e97107066710edcbbab01125a6de39e42b53efd7cf\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Get a campaign - Privy Knowledge Base\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Retrieve a single message campaign by its identifier. Resolves both newsletters and flow campaigns — no type parameter needed. A flow campaign names the flow that sends it in flow; newsletters omit that field. A /v1/campaigns row already carries this exact shape, so following up per campaign adds nothing — reach for this when the id came from somewhere else, such as a flow node\u0026#x27;s data.campaign_id or a report row\u0026#x27;s campaign_id. Performance is /v1/reports/campaigns/{campaign_id}. Required scope: campaigns_read\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://privy.mintlify.site/_mintlify/api/og/v2?division=Campaigns\u0026amp;title=Get+a+campaign\u0026amp;description=Retrieve+a+single+message+campaign+by+its+identifier.+Resolves+both%0Anewsletters+and+flow+campaigns+%E2%80%94+no+%60type%60+parameter+needed.+A+flow%0Acampaign+names+the+flow+\u0026amp;theme=a5dbdd3119e247d04186b21c\u0026amp;signature=f7300fe0666ab04358c290e97107066710edcbbab01125a6de39e42b53efd7cf\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/privy/fvbglk3MPcKWjtyG/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Privy Knowledge Base\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#254E5A\">\u003clink data-mint-head rel=\"canonical\" href=\"https://help.privy.com/docs/api-reference/get-campaign\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/api-reference/get-campaign.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://help.privy.com/#organization\",\"name\":\"Privy Knowledge Base\",\"url\":\"https://help.privy.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/privy/fGrkZt933tBjY_zl/logo/light.svg?fit=max\u0026auto=format\u0026n=fGrkZt933tBjY_zl\u0026q=85\u0026s=36a01db426b7c94fac423778765cd517\"}},{\"@type\":\"WebSite\",\"@id\":\"https://help.privy.com#website\",\"name\":\"Privy Knowledge Base\",\"url\":\"https://help.privy.com\",\"publisher\":{\"@id\":\"https://help.privy.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://help.privy.com/docs/api-reference/get-campaign#webpage\",\"url\":\"https://help.privy.com/docs/api-reference/get-campaign\",\"name\":\"Get a campaign\",\"description\":\"Retrieve a single message campaign by its identifier. Resolves both newsletters and flow campaigns — no type parameter needed. A flow campaign names the flow that sends it in flow; newsletters omit that field. A /v1/campaigns row already carries this exact shape, so following up per campaign adds nothing — reach for this when the id came from somewhere else, such as a flow node's data.campaign_id or a report row's campaign_id. Performance is /v1/reports/campaigns/{campaign_id}. Required scope: campaigns_read\",\"dateModified\":\"2026-10-22T23:08:30.129Z\",\"isPartOf\":{\"@id\":\"https://help.privy.com#website\"},\"breadcrumb\":{\"@id\":\"https://help.privy.com/docs/api-reference/get-campaign#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://help.privy.com/docs/api-reference/get-campaign#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Campaigns\",\"item\":\"https://help.privy.com/docs/api-reference/list-campaigns\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Get a campaign\",\"item\":\"https://help.privy.com/docs/api-reference/get-campaign\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://help.privy.com/docs/api-reference/get-campaign#apireference\",\"headline\":\"Get a campaign\",\"name\":\"Get a campaign\",\"description\":\"Retrieve a single message campaign by its identifier. Resolves both newsletters and flow campaigns — no type parameter needed. A flow campaign names the flow that sends it in flow; newsletters omit that field. A /v1/campaigns row already carries this exact shape, so following up per campaign adds nothing — reach for this when the id came from somewhere else, such as a flow node's data.campaign_id or a report row's campaign_id. Performance is /v1/reports/campaigns/{campaign_id}. Required scope: campaigns_read\",\"url\":\"https://help.privy.com/docs/api-reference/get-campaign\",\"mainEntityOfPage\":{\"@id\":\"https://help.privy.com/docs/api-reference/get-campaign#webpage\"},\"dateModified\":\"2026-10-22T23:08:30.129Z\",\"publisher\":{\"@id\":\"https://help.privy.com/#organization\"},\"isPartOf\":{\"@id\":\"https://help.privy.com#website\"}}]}\u003c/script>","agentPointerHref":"/docs/api-reference/get-campaign.md","siteName":"Privy Knowledge Base","nav":{"global":null,"tabs":[{"tab":"Learn","icon":"house","pages":[{"title":"Learn","href":"/docs/learn/home"}]},{"tab":"Developer","icon":"square-terminal","groups":[{"group":"API Reference","pages":[{"title":"API Overview","sidebarTitle":"Overview","icon":"book-open","href":"/docs/api-reference/overview"},{"title":"Authentication","sidebarTitle":"Authentication","icon":"lock","href":"/docs/api-reference/authentication"},{"title":"API Tokens","sidebarTitle":"API Tokens","icon":"key","href":"/docs/api-reference/api-tokens"},{"title":"Rate Limits","sidebarTitle":"Rate Limits","icon":"gauge","href":"/docs/api-reference/rate-limits"},{"title":"Errors","sidebarTitle":"Errors","icon":"triangle-exclamation","href":"/docs/api-reference/errors"},{"title":"API Changelog","sidebarTitle":"Changelog","icon":"clock-rotate-left","href":"/docs/api-reference/changelog"}]},{"group":"Account","pages":[{"title":"Get account","openapi":"openapi/privy-api.yaml GET /account","href":"/docs/api-reference/get-account"},{"title":"Get account setup","openapi":"openapi/privy-api.yaml GET /account/setup","href":"/docs/api-reference/get-account-setup"}]},{"group":"Contacts","pages":[{"title":"List contacts","openapi":"openapi/privy-api.yaml GET /contacts","href":"/docs/api-reference/list-contacts"},{"title":"Get a contact","openapi":"openapi/privy-api.yaml GET /contacts/{id}","href":"/docs/api-reference/get-contact"},{"title":"Create a contact","openapi":"openapi/privy-api.yaml POST /contacts","href":"/docs/api-reference/create-contact"},{"title":"Update a contact","openapi":"openapi/privy-api.yaml PATCH /contacts/{id}","href":"/docs/api-reference/update-contact"},{"title":"Delete a contact","openapi":"openapi/privy-api.yaml DELETE /contacts/{id}","href":"/docs/api-reference/delete-contact"},{"title":"List a contact's activity","openapi":"openapi/privy-api.yaml GET /contacts/{id}/events","href":"/docs/api-reference/list-contact-activity"}]},{"group":"Imports","pages":[{"title":"List contact imports","openapi":"openapi/privy-api.yaml GET /imports","href":"/docs/api-reference/list-imports"},{"title":"Get a contact import","openapi":"openapi/privy-api.yaml GET /imports/{id}","href":"/docs/api-reference/get-import"}]},{"group":"Tags","pages":[{"title":"List tags","openapi":"openapi/privy-api.yaml GET /tags","href":"/docs/api-reference/list-tags"},{"title":"Get a tag","openapi":"openapi/privy-api.yaml GET /tags/{id}","href":"/docs/api-reference/get-tag"}]},{"group":"Campaigns","pages":[{"title":"List campaigns","openapi":"openapi/privy-api.yaml GET /campaigns","description":"Retrieve a paginated list of your message campaigns, newest first.\n\nBy default the list contains your **newsletters** — email and SMS\nbroadcasts. Pass `type=flows` to instead list the **flow campaigns**:\nthe email and SMS messages your automation flows send, each naming its\nowning flow in `flow`.\n\nConfiguration only — no send statistics. `/v1/reports/campaigns` lists\nevery campaign sent in a period with its full stat block (revenue-ranked,\ntop 100); one campaign's funnel is\n`/v1/reports/campaigns/{campaign_id}`.\n\n**Required scope:** `campaigns_read`\n","href":"/docs/api-reference/list-campaigns"},{"title":"Get a campaign","openapi":"openapi/privy-api.yaml GET /campaigns/{id}","href":"/docs/api-reference/get-campaign"}]},{"group":"Displays","pages":[{"title":"List displays","openapi":"openapi/privy-api.yaml GET /displays","description":"Retrieve a paginated list of your on-site displays, newest first.\nArchived displays are excluded by default — pass `status=archived` to list them.\n\nThe display inventory — use it to enumerate or count displays, since\n`/v1/reports/displays` is a capped leaderboard that leaves out displays\nwith no activity. Configuration only: views, signups, and attributed\nrevenue come from `/v1/reports/displays` and\n`/v1/reports/displays/{display_id}`. Rows carry no show triggers or\naudience summary; `/v1/displays/{id}` adds those.\n\n**Required scope:** `displays_read`\n","href":"/docs/api-reference/list-displays"},{"title":"Get a display","openapi":"openapi/privy-api.yaml GET /displays/{id}","href":"/docs/api-reference/get-display"}]},{"group":"Coupons","pages":[{"title":"List coupons","openapi":"openapi/privy-api.yaml GET /coupons","href":"/docs/api-reference/list-coupons"},{"title":"Get a coupon","openapi":"openapi/privy-api.yaml GET /coupons/{id}","href":"/docs/api-reference/get-coupon"},{"title":"Check a coupon code","openapi":"openapi/privy-api.yaml GET /coupons/{id}/codes/{code}","href":"/docs/api-reference/check-coupon-code"}]},{"group":"Reports","pages":[{"title":"Get business report summary","openapi":"openapi/privy-api.yaml GET /reports/summary","href":"/docs/api-reference/get-report-summary"},{"title":"List campaign performance","openapi":"openapi/privy-api.yaml GET /reports/campaigns","href":"/docs/api-reference/list-campaign-performance"},{"title":"Get campaign performance","openapi":"openapi/privy-api.yaml GET /reports/campaigns/{campaign_id}","href":"/docs/api-reference/get-campaign-performance"},{"title":"List flow performance","openapi":"openapi/privy-api.yaml GET /reports/flows","href":"/docs/api-reference/list-flow-performance"},{"title":"Get flow performance","openapi":"openapi/privy-api.yaml GET /reports/flows/{flow_id}","href":"/docs/api-reference/get-flow-performance"},{"title":"List display performance","openapi":"openapi/privy-api.yaml GET /reports/displays","href":"/docs/api-reference/list-display-performance"},{"title":"Get display performance","openapi":"openapi/privy-api.yaml GET /reports/displays/{display_id}","href":"/docs/api-reference/get-display-performance"},{"title":"List top products","openapi":"openapi/privy-api.yaml GET /reports/top_products","href":"/docs/api-reference/list-top-products"}]},{"group":"Flows","pages":[{"title":"List flows","openapi":"openapi/privy-api.yaml GET /flows","href":"/docs/api-reference/list-flows"},{"title":"Get a flow","openapi":"openapi/privy-api.yaml GET /flows/{id}","href":"/docs/api-reference/get-flow"}]},{"group":"Segments","pages":[{"title":"List segments","openapi":"openapi/privy-api.yaml GET /segments","href":"/docs/api-reference/list-segments"},{"title":"Get a segment","openapi":"openapi/privy-api.yaml GET /segments/{id}","href":"/docs/api-reference/get-segment"},{"title":"List a segment's contacts","openapi":"openapi/privy-api.yaml GET /segments/{id}/contacts","href":"/docs/api-reference/list-segment-contacts"}]},{"group":"Orders","pages":[{"title":"Order placed","openapi":"openapi/privy-api.yaml POST /orders/placed","href":"/docs/api-reference/order-placed"},{"title":"List orders","openapi":"openapi/privy-api.yaml GET /orders","href":"/docs/api-reference/list-orders"},{"title":"Get an order","openapi":"openapi/privy-api.yaml GET /orders/{order_id}","href":"/docs/api-reference/get-order"}]},{"group":"Products","pages":[{"title":"List products","openapi":"openapi/privy-api.yaml GET /products","href":"/docs/api-reference/list-products"},{"title":"Get a product","openapi":"openapi/privy-api.yaml GET /products/{id}","href":"/docs/api-reference/get-product"},{"title":"List product collections","openapi":"openapi/privy-api.yaml GET /product_collections","href":"/docs/api-reference/list-product-collections"},{"title":"Get a product collection","openapi":"openapi/privy-api.yaml GET /product_collections/{id}","href":"/docs/api-reference/get-product-collection"},{"title":"List a collection's products","openapi":"openapi/privy-api.yaml GET /product_collections/{id}/products","href":"/docs/api-reference/list-collection-products"},{"title":"List a product's collections","openapi":"openapi/privy-api.yaml GET /products/{id}/collections","href":"/docs/api-reference/list-collections-for-product"}]},{"group":"Events","pages":[{"title":"Ingest an event","openapi":"openapi/privy-api.yaml POST /events","href":"/docs/api-reference/ingest-event"},{"title":"Send cart events from your storefront","sidebarTitle":"Browser events","href":"/docs/api-reference/browser-events"}]}]}]},"basePath":"","title":"Get a campaign - Privy Knowledge Base","buildId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","deploymentId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-CybtLBIt.js","utils-BMLj2fvV.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-B6In562Y.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-Dr8Mfhp9.js","snippetPresets-2rmQvMVl.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-WMqJYdZj.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-CJ-MlPHu.js","shallow-dY3TMRCk.js","getApiPlaygroundDisplay-v-1B2bKm.js","CodeSnippet-BDhiTB7U.js","CodeSnippets-D9hnzQcS.js","Page-C4GwDT3_.js","getPastedJson-Th2V45jI.js","icon-BQXch1W9.js","MethodPill-BCqUneP3.js","DuplicateIcon-Q_-bhurZ.js","createIcon-DUjLHRqp.js","DynamicMarkdown-B-f2cqXQ.js","SectionHeading-Da5NsV4v.js","axios-vUo_bRtp.js","Markdown-D13FWkIM.js","clsx-D3Isdib3.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-C-XZBk9h.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink--qIqmmVG.js"]}