Subscribe every combination of contact_ids × topic_ids (up to 1000 contacts × 50 topics). Pairs that already exist are reported in already_subscribed. Requires the audience:write scope and is blocked for sandbox API keys.
Subscribe every combination of contact_ids × topic_ids (up to 1000 contacts × 50 topics). Pairs that already exist are reported in already_subscribed. Requires the audience:write scope and is blocked for sandbox API keys.
The contacts array returned by bulk create contacts gives you the ids to pass here, so you can import and subscribe without a lookup in between.
Authorizations
Authorization
string
header
required
API key for authentication
Body
application/json
Bulk subscribe/unsubscribe contacts to/from topics. All combinations of contact_ids × topic_ids are processed.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/schema.json","name":"Lettr","colors":{"primary":"#EC104B","light":"#F04070","dark":"#D00E43"},"logo":{"light":"https://mintcdn.com/lettr/w6cQMnBCGTvjJ4__/logo/light.svg?fit=max\u0026auto=format\u0026n=w6cQMnBCGTvjJ4__\u0026q=85\u0026s=2cad5a94a80e61999cf9feaeac06e9c6","dark":"https://mintcdn.com/lettr/w6cQMnBCGTvjJ4__/logo/dark.svg?fit=max\u0026auto=format\u0026n=w6cQMnBCGTvjJ4__\u0026q=85\u0026s=2d94948c6f2c26d1375758ec890ccd4b","href":"/introduction"},"favicon":"https://mintcdn.com/lettr/MeT4pWpyRN-RhvgL/favicon.svg?fit=max\u0026auto=format\u0026n=MeT4pWpyRN-RhvgL\u0026q=85\u0026s=800c7fba1be1e2324447ed3b67ef0a48","api":{},"appearance":{"default":"dark"},"navbar":{"links":[{"href":"https://status.lettr.com/","label":"Status"},{"href":"https://lettr.com/support","label":"Support"}],"primary":{"type":"button","label":"Dashboard","href":"https://app.lettr.com"}},"footer":{"socials":{"x":"https://x.com/lettr_com","linkedin":"https://www.linkedin.com/company/lettr-com","github":"https://github.com/lettr-com"}},"fonts":{"heading":{"family":"Manrope","weight":400},"body":{"family":"Manrope"}},"integrations":{"ga4":{"measurementId":"G-GMH8JTRY9Q"},"posthog":{"apiKey":"phc_67BYz5Uv0uoiydQyaN3OyeK9OPx6LjmFDFvF0mNaTy9","apiHost":"https://eu.i.posthog.com","sessionRecording":true}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity"],"display":"header"},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"lettr","hasAudioNarration":false,"actualSubdomain":"lettr","customDomains":["docs.lettr.com"],"gitSource":{"type":"github","owner":"lettr-com","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"feedback":{"edits":true,"thumbs":true,"issues":true},"entitlements":{},"buildId":"6ae891273630049289fee76e","clientVersion":"0.0.4143","searchFilterCounts":[{"language":"default","tag":"Documentation","count":186},{"language":"default","tag":"Learn","count":110},{"language":"default","tag":"Knowledge Base","count":87},{"language":"default","tag":"API Reference","count":72},{"language":"default","tag":"Quickstart","count":68},{"language":"default","tag":"DNS Guides","count":19},{"language":"default","tag":"Templates","count":18},{"language":"default","tag":"Domains","count":16},{"language":"default","tag":"Email Fundamentals","count":15},{"language":"default","tag":"Troubleshooting","count":15}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"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":"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},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[{"filePath":"style.css","content":":root{--rounded: 0px;--rounded-sm: 0px;--rounded-md: 0px;--rounded-lg: 0px;--rounded-xl: 0px;--rounded-2xl: 0px;--rounded-3xl: 0px;--rounded-search: 0px;--c15t-radius-sm: 0px;--c15t-radius-md: 0px;--c15t-radius-lg: 0px;--cdt-radius: 0px;--accordion-radius: 0px;--button-border-radius: 0px;--consent-banner-border-radius: 0px;--consent-dialog-card-radius: 0px;--consent-widget-radius: 0px;--consent-widget-accordion-radius: 0px;--frame-placeholder-border-radius: 0px;--scrollbar-track-radius: 0px;--scrollbar-thumb-radius: 0px;--scrollbar-corner-radius: 0px}*,*::before,*::after,::backdrop,::file-selector-button{border-radius:0!important}[class~=\"rounded-full\"],[class~=\"rounded-full!\"]{border-radius:9999px!important}.prose :where(ul>li)::before,.prose-sm :where(ul>li)::before,.latex-style ul>li::before{border-radius:50%!important}.sdk-list{--sdk-fg: rgb(24 14 19);--sdk-muted: rgb(24 14 19 / 0.55);--sdk-line: rgb(60 20 35 / 0.1);--sdk-hover: rgb(236 16 75 / 0.035);--sdk-code-bg: rgb(60 20 35 / 0.035);--sdk-code-line: rgb(60 20 35 / 0.12);--sdk-accent: #d00e43;--sdk-ease: cubic-bezier(0.22, 1, 0.36, 1);margin:1.25rem 0 2.5rem;border-top:1px solid var(--sdk-line)}.dark .sdk-list{--sdk-fg: rgb(250 242 245);--sdk-muted: rgb(250 242 245 / 0.5);--sdk-line: rgb(255 225 235 / 0.09);--sdk-hover: rgb(240 64 112 / 0.05);--sdk-code-bg: rgb(255 225 235 / 0.035);--sdk-code-line: rgb(255 225 235 / 0.1);--sdk-accent: #f04070}.sdk-row{position:relative;display:grid;grid-template-columns:1.25rem 8.75rem minmax(0, 1fr) 1rem;align-items:center;column-gap:1rem;padding:0.875rem 0.75rem;border-bottom:1px solid var(--sdk-line);transition:background-color 180ms var(--sdk-ease)}.sdk-row:hover{background-color:var(--sdk-hover)}.sdk-row:has(.sdk-row__name:focus-visible){outline:2px solid var(--sdk-accent);outline-offset:-2px}.sdk-row__logo{display:flex;align-items:center;justify-content:center;color:var(--sdk-muted);transition:color 180ms var(--sdk-ease)}.sdk-row__logo svg,.sdk-row__logo span{background-color:currentColor!important}.sdk-row:hover .sdk-row__logo{color:var(--sdk-fg)}.sdk-row__name{position:static!important;z-index:auto!important;font-size:0.9375rem;font-weight:600;letter-spacing:-0.005em;color:var(--sdk-fg);text-decoration:none;white-space:nowrap}.sdk-row__name:focus-visible{outline:none}.sdk-row__name::after{content:\"\";position:absolute;inset:0}.sdk-row__install{position:relative;z-index:1;justify-self:start;display:inline-flex;align-items:center;gap:0.625rem;max-width:100%;min-width:0;padding:0.3125rem 0.5rem 0.3125rem 0.625rem;border:1px solid var(--sdk-code-line);background:var(--sdk-code-bg);color:var(--sdk-fg);cursor:pointer;transition:border-color 180ms var(--sdk-ease)}.sdk-row__install:hover{border-color:var(--sdk-accent)}.sdk-row__install:focus-visible{outline:2px solid var(--sdk-accent);outline-offset:2px}.sdk-row__install code{padding:0!important;border:0!important;background:none!important;color:inherit!important;overflow:hidden;font-size:0.8125rem;line-height:1.4;text-overflow:ellipsis;white-space:nowrap}.sdk-row__copy{display:flex;flex-shrink:0;color:var(--sdk-muted);transition:color 180ms var(--sdk-ease)}.sdk-row__install:hover .sdk-row__copy,.sdk-row__copy[data-copied=\"true\"]{color:var(--sdk-accent)}.sdk-row__arrow{color:var(--sdk-muted);transition:transform 220ms var(--sdk-ease),\n color 180ms var(--sdk-ease)}.sdk-row:hover .sdk-row__arrow{color:var(--sdk-accent);transform:translate(2px, -2px)}.sdk-row__sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.sdk-list--inline{margin:0 0 1.25rem}:has(+.sdk-list--inline){margin-bottom:0.625rem!important}@media (max-width: 640px){.sdk-row{grid-template-columns:1.25rem minmax(0, 1fr) 1rem;row-gap:0.625rem;padding:0.875rem 0.5rem}.sdk-row__install{grid-row:2;grid-column:2 / 4;justify-self:stretch;justify-content:space-between;min-height:2.75rem;padding-block:0.5rem;text-align:left}.sdk-row__install code{white-space:normal;overflow-wrap:anywhere}}@media (prefers-reduced-motion: reduce){.sdk-row,.sdk-row__logo,.sdk-row__install,.sdk-row__copy,.sdk-row__arrow{transition:none}.sdk-row:hover .sdk-row__arrow{transform:none}}.whitespace-pre-wrap>pre.shiki,.whitespace-pre-wrap>pre.shiki code{white-space:pre-wrap!important;overflow-wrap:anywhere}"}],"page":{"pagePath":"api-reference/audience/bulk-subscribe-contacts-to-topics","slug":"/api-reference/audience/bulk-subscribe-contacts-to-topics","pageMetadata":{"title":"Bulk subscribe contacts to topics","openapi":"POST /audience/contacts/topics/bulk","description":"Subscribe every combination of `contact_ids × topic_ids` (up to 1000 contacts × 50 topics). Pairs that already exist are reported in `already_subscribed`. Requires the `audience:write` scope and is blocked for sandbox API keys.","href":"/api-reference/audience/bulk-subscribe-contacts-to-topics"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_components.p, {\n children: [\"Subscribe every combination of \", _jsx(_components.code, {\n children: \"contact_ids × topic_ids\"\n }), \" (up to 1000 contacts × 50 topics). Pairs that already exist are reported in \", _jsx(_components.code, {\n children: \"already_subscribed\"\n }), \". Requires the \", _jsx(_components.code, {\n children: \"audience:write\"\n }), \" scope and is blocked for sandbox API keys.\"]\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},{Tip}=_components;if(!Tip)_missingMdxReference(`Tip`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Subscribe every combination of `,_jsx(_components.code,{children:`contact_ids × topic_ids`}),` (up to 1000 contacts × 50 topics). Pairs that already exist are reported in `,_jsx(_components.code,{children:`already_subscribed`}),`. Requires the `,_jsx(_components.code,{children:`audience:write`}),` scope and is blocked for sandbox API keys.`]}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`contacts`}),` array returned by `,_jsx(_components.a,{href:`/api-reference/audience/bulk-create-contacts`,children:`bulk create contacts`}),` gives you the ids to pass here, so you can import and subscribe without a lookup in between.`]})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Bulk subscribe contacts to topics","openapi":"POST /audience/contacts/topics/bulk","description":"Subscribe every combination of `contact_ids × topic_ids` (up to 1000 contacts × 50 topics). Pairs that already exist are reported in `already_subscribed`. Requires the `audience:write` scope and is blocked for sandbox API keys.","href":"/api-reference/audience/bulk-subscribe-contacts-to-topics"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"bulkSubscribeContactsToTopics","summary":"Bulk subscribe contacts to topics","description":"Subscribe every combination of `contact_ids × topic_ids` (up to 1000 contacts × 50 topics). Pairs that already exist are reported in `already_subscribed`. Requires the `audience:write` scope and is blocked for sandbox API keys.","tags":["Audience"],"security":["6ba0c5db-b193-4285-b03d-d24b0f0182c5"],"requestBody":"c874fadf-72b0-4c4f-8492-5cd0ad7cc616","responses":{"200":"8769529a-bdb0-48f8-aff4-7557366ba44d","401":"1ee050ac-ba1c-4ed7-8512-ab8b72a1e9f0","403":"9fabd40c-5c37-4842-8373-85ce0acddb2e","422":"ed081c6b-1162-459e-bd60-aad6cb72bf62","500":"5467565e-98cd-4b50-95de-f1333c48522c","503":"d2a63f66-1dbf-4588-be38-2c00fc0fe085"},"method":"post","type":"path","servers":["3a9a6297-5f46-49ab-955a-fb22c45ca41c"],"path":"/audience/contacts/topics/bulk","baseUrlOptions":["https://app.lettr.com/api"],"title":"Bulk subscribe contacts to topics","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Bulk subscribe/unsubscribe contacts to/from topics. All combinations of contact_ids × topic_ids are processed.","required":["contact_ids","topic_ids"],"properties":{"contact_ids":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"string","format":"uuid","uniqueKey":"contact_ids.items.[INDEX]","typeLabel":"string\u003cuuid>"},"isRequired":true,"uniqueKey":"contact_ids","typeLabel":"string\u003cuuid>[]"},"topic_ids":{"type":"array","minItems":1,"maxItems":50,"items":{"type":"string","format":"uuid","uniqueKey":"topic_ids.items.[INDEX]","typeLabel":"string\u003cuuid>"},"isRequired":true,"uniqueKey":"topic_ids","typeLabel":"string\u003cuuid>[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"contact_ids":["3c90c3cc-0d44-4b50-8888-8dd25736052a"],"topic_ids":["3c90c3cc-0d44-4b50-8888-8dd25736052a"]}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"8769529a-bdb0-48f8-aff4-7557366ba44d":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["message","data"],"properties":{"message":{"type":"string","example":"Contacts subscribed to topics.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"data":{"type":"object","required":["subscribed","already_subscribed","total_pairs"],"properties":{"subscribed":{"type":"integer","minimum":0,"description":"Newly subscribed pairs","isRequired":true,"uniqueKey":"data.subscribed","typeLabel":"integer"},"already_subscribed":{"type":"integer","minimum":0,"description":"Pairs that already existed","isRequired":true,"uniqueKey":"data.already_subscribed","typeLabel":"integer"},"total_pairs":{"type":"integer","minimum":0,"description":"Total contact × topic pairs processed","isRequired":true,"uniqueKey":"data.total_pairs","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"data","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"message":"Contacts subscribed to topics.","data":{"subscribed":1,"already_subscribed":1,"total_pairs":1}}}},"exampleType":"generated"}},"exampleType":"generated"},"1ee050ac-ba1c-4ed7-8512-ab8b72a1e9f0":{"description":"Unauthorized - Missing or invalid API key","content":{"application/json":{"schema":{"type":"object","required":["message"],"description":"Error response for authentication failures (401).","properties":{"message":{"type":"string","description":"Human-readable error message","example":"API key is required.","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"missing_key":{"title":"missing_key","summary":"Missing API key","value":{"message":"API key is required."}},"invalid_key":{"title":"invalid_key","summary":"Invalid API key","value":{"message":"Invalid API key."}}},"exampleType":"examples"}},"exampleType":"examples"},"9fabd40c-5c37-4842-8373-85ce0acddb2e":{"description":"Forbidden - API key does not have the required scope","content":{"application/json":{"schema":{"type":"object","required":["message","error_code"],"description":"Error response for non-validation errors (400, 409, 500, 502).","properties":{"message":{"type":"string","description":"Human-readable error message","example":"The sender domain could not be determined from the email address.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"error_code":{"type":"string","description":"Error codes returned by the API.\n\n| Code | HTTP Status | Description |\n|------|-------------|-------------|\n| `validation_error` | 422 | Request validation failed. Check the `errors` object for field-specific messages. |\n| `invalid_domain` | 400 | The sender domain could not be determined from the email address. |\n| `unconfigured_domain` | 400 | The sender domain is not configured or approved for sending. |\n| `send_error` | 400, 500 | General error during email send preparation or domain registration. |\n| `retrieval_error` | 400, 500 | Failed to retrieve resources (e.g., sandbox key without associated user, upstream error). |\n| `internal_error` | 500 | An unexpected error on our side. The `message` names what failed; retry later. |\n| `transmission_failed` | 502 | Email transmission to the upstream provider failed. |\n| `resource_already_exists` | 409 | The resource (e.g., domain) already exists. |\n| `not_found` | 404 | The specified resource was not found. |\n| `template_not_found` | 404 | The specified template, project, or template version was not found. |\n| `insufficient_scope` | 403 | The API key does not have the required scope for this endpoint. |\n| `domain_not_allowed` | 403 | The sender domain is not in the API key's allowed sender domains. |\n| `schedule_cancellation_failed` | 409, 500 | The scheduled email can no longer be cancelled (already sent, already cancelled, or being injected right now), or the cancellation itself failed. |\n| `quota_exceeded` | 429 | Monthly sending quota exceeded. Upgrade your plan to continue sending. |\n| `daily_quota_exceeded` | 429 | Daily sending quota exceeded. Try again tomorrow. |\n| `campaign_not_sendable` | 422 | The campaign cannot be sent in its current state (not a draft, or missing subject/sender/content). |\n| `campaign_not_scheduled` | 422 | The campaign is not scheduled, so it cannot be unscheduled. |","enum":["validation_error","idempotency_key_conflict","idempotency_in_progress","invalid_domain","unconfigured_domain","send_error","retrieval_error","internal_error","transmission_failed","resource_already_exists","not_found","template_not_found","insufficient_scope","domain_not_allowed","schedule_cancellation_failed","quota_exceeded","daily_quota_exceeded","campaign_not_sendable","campaign_not_scheduled"],"example":"invalid_domain","isRequired":true,"uniqueKey":"error_code","typeLabel":"enum\u003cstring>"}},"uniqueKey":"","typeLabel":"object"},"example":{"message":"Your API key does not have the required permissions for this action.","error_code":"insufficient_scope"},"examples":{"Example":{"title":"Example","value":{"message":"Your API key does not have the required permissions for this action.","error_code":"insufficient_scope"}}},"exampleType":"examples"}},"exampleType":"examples"},"ed081c6b-1162-459e-bd60-aad6cb72bf62":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","required":["message","error_code","errors"],"properties":{"message":{"type":"string","description":"Human-readable error message","example":"Validation failed.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"error_code":{"type":"string","description":"Error code (always `validation_error` for 422 responses)","const":"validation_error","example":"validation_error","isRequired":true,"uniqueKey":"error_code","typeLabel":"string"},"errors":{"type":"object","description":"Field-specific validation errors","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"errors.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"errors.additionalProperties","typeLabel":"string[]"},"example":{"from":["The sender email address is required."],"to":["At least one recipient email address is required."]},"isRequired":true,"uniqueKey":"errors","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"message":"Validation failed.","error_code":"validation_error","errors":{"from":["The sender email address is required."],"to":["At least one recipient email address is required."]}}}},"exampleType":"generated"}},"exampleType":"generated"},"5467565e-98cd-4b50-95de-f1333c48522c":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","required":["message","error_code"],"description":"Error response for non-validation errors (400, 409, 500, 502).","properties":{"message":{"type":"string","description":"Human-readable error message","example":"The sender domain could not be determined from the email address.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"error_code":{"type":"string","description":"Error codes returned by the API.\n\n| Code | HTTP Status | Description |\n|------|-------------|-------------|\n| `validation_error` | 422 | Request validation failed. Check the `errors` object for field-specific messages. |\n| `invalid_domain` | 400 | The sender domain could not be determined from the email address. |\n| `unconfigured_domain` | 400 | The sender domain is not configured or approved for sending. |\n| `send_error` | 400, 500 | General error during email send preparation or domain registration. |\n| `retrieval_error` | 400, 500 | Failed to retrieve resources (e.g., sandbox key without associated user, upstream error). |\n| `internal_error` | 500 | An unexpected error on our side. The `message` names what failed; retry later. |\n| `transmission_failed` | 502 | Email transmission to the upstream provider failed. |\n| `resource_already_exists` | 409 | The resource (e.g., domain) already exists. |\n| `not_found` | 404 | The specified resource was not found. |\n| `template_not_found` | 404 | The specified template, project, or template version was not found. |\n| `insufficient_scope` | 403 | The API key does not have the required scope for this endpoint. |\n| `domain_not_allowed` | 403 | The sender domain is not in the API key's allowed sender domains. |\n| `schedule_cancellation_failed` | 409, 500 | The scheduled email can no longer be cancelled (already sent, already cancelled, or being injected right now), or the cancellation itself failed. |\n| `quota_exceeded` | 429 | Monthly sending quota exceeded. Upgrade your plan to continue sending. |\n| `daily_quota_exceeded` | 429 | Daily sending quota exceeded. Try again tomorrow. |\n| `campaign_not_sendable` | 422 | The campaign cannot be sent in its current state (not a draft, or missing subject/sender/content). |\n| `campaign_not_scheduled` | 422 | The campaign is not scheduled, so it cannot be unscheduled. |","enum":["validation_error","idempotency_key_conflict","idempotency_in_progress","invalid_domain","unconfigured_domain","send_error","retrieval_error","internal_error","transmission_failed","resource_already_exists","not_found","template_not_found","insufficient_scope","domain_not_allowed","schedule_cancellation_failed","quota_exceeded","daily_quota_exceeded","campaign_not_sendable","campaign_not_scheduled"],"example":"invalid_domain","isRequired":true,"uniqueKey":"error_code","typeLabel":"enum\u003cstring>"}},"uniqueKey":"","typeLabel":"object"},"example":{"message":"An unexpected error occurred. Please try again later.","error_code":"send_error"},"examples":{"Example":{"title":"Example","value":{"message":"An unexpected error occurred. Please try again later.","error_code":"send_error"}}},"exampleType":"examples"}},"exampleType":"examples"},"d2a63f66-1dbf-4588-be38-2c00fc0fe085":{"description":"Service unavailable - the API key could not be verified, so the request was not processed. This does not mean the key is invalid; retry after the delay given in the Retry-After header.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","example":5}}},"content":{"application/json":{"schema":{"type":"object","required":["message","error_code"],"description":"Error response for non-validation errors (400, 409, 500, 502).","properties":{"message":{"type":"string","description":"Human-readable error message","example":"The sender domain could not be determined from the email address.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"error_code":{"type":"string","description":"Error codes returned by the API.\n\n| Code | HTTP Status | Description |\n|------|-------------|-------------|\n| `validation_error` | 422 | Request validation failed. Check the `errors` object for field-specific messages. |\n| `invalid_domain` | 400 | The sender domain could not be determined from the email address. |\n| `unconfigured_domain` | 400 | The sender domain is not configured or approved for sending. |\n| `send_error` | 400, 500 | General error during email send preparation or domain registration. |\n| `retrieval_error` | 400, 500 | Failed to retrieve resources (e.g., sandbox key without associated user, upstream error). |\n| `internal_error` | 500 | An unexpected error on our side. The `message` names what failed; retry later. |\n| `transmission_failed` | 502 | Email transmission to the upstream provider failed. |\n| `resource_already_exists` | 409 | The resource (e.g., domain) already exists. |\n| `not_found` | 404 | The specified resource was not found. |\n| `template_not_found` | 404 | The specified template, project, or template version was not found. |\n| `insufficient_scope` | 403 | The API key does not have the required scope for this endpoint. |\n| `domain_not_allowed` | 403 | The sender domain is not in the API key's allowed sender domains. |\n| `schedule_cancellation_failed` | 409, 500 | The scheduled email can no longer be cancelled (already sent, already cancelled, or being injected right now), or the cancellation itself failed. |\n| `quota_exceeded` | 429 | Monthly sending quota exceeded. Upgrade your plan to continue sending. |\n| `daily_quota_exceeded` | 429 | Daily sending quota exceeded. Try again tomorrow. |\n| `campaign_not_sendable` | 422 | The campaign cannot be sent in its current state (not a draft, or missing subject/sender/content). |\n| `campaign_not_scheduled` | 422 | The campaign is not scheduled, so it cannot be unscheduled. |","enum":["validation_error","idempotency_key_conflict","idempotency_in_progress","invalid_domain","unconfigured_domain","send_error","retrieval_error","internal_error","transmission_failed","resource_already_exists","not_found","template_not_found","insufficient_scope","domain_not_allowed","schedule_cancellation_failed","quota_exceeded","daily_quota_exceeded","campaign_not_sendable","campaign_not_scheduled"],"example":"invalid_domain","isRequired":true,"uniqueKey":"error_code","typeLabel":"enum\u003cstring>"}},"uniqueKey":"","typeLabel":"object"},"example":{"message":"Unable to verify your API key right now. Please retry shortly.","error_code":"auth_unavailable"},"examples":{"Example":{"title":"Example","value":{"message":"Unable to verify your API key right now. Please retry shortly.","error_code":"auth_unavailable"}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"6ba0c5db-b193-4285-b03d-d24b0f0182c5":{"bearerAuth":{"type":"http","scheme":"bearer","description":"API key for authentication","scopes":[],"schemeName":"bearerAuth"}}},"servers":{"3a9a6297-5f46-49ab-955a-fb22c45ca41c":{"url":"https://app.lettr.com/api","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"API key for authentication","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"API key for authentication","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"openapi.json"},"subdomain":"lettr","siteName":"Lettr","title":"Bulk subscribe contacts to topics - Lettr","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-08-14T17:46:44.620Z","originalFileLocation":"api-reference/audience/bulk-subscribe-contacts-to-topics.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=\"dark\"}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=\"Subscribe every combination of contact_ids × topic_ids (up to 1000 contacts × 50 topics). Pairs that already exist are reported in already_subscribed. Requires the audience:write scope and is blocked for sandbox API keys.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Lettr\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/lettr/dSsCtMUFma4ICJBo/_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/lettr/dSsCtMUFma4ICJBo/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/lettr/dSsCtMUFma4ICJBo/_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/lettr/dSsCtMUFma4ICJBo/_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/lettr/dSsCtMUFma4ICJBo/_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/lettr/dSsCtMUFma4ICJBo/_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/lettr/dSsCtMUFma4ICJBo/_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/lettr/dSsCtMUFma4ICJBo/_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/lettr/dSsCtMUFma4ICJBo/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Bulk subscribe contacts to topics - Lettr\">\u003cmeta data-mint-head property=\"og:description\" content=\"Subscribe every combination of contact_ids × topic_ids (up to 1000 contacts × 50 topics). Pairs that already exist are reported in already_subscribed. Requires the audience:write scope and is blocked for sandbox API keys.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Lettr\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.lettr.com/api-reference/audience/bulk-subscribe-contacts-to-topics\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://lettr.mintlify.site/_mintlify/api/og/v2?division=Audience+Contacts\u0026amp;title=Bulk+subscribe+contacts+to+topics\u0026amp;description=Subscribe+every+combination+of+%60contact_ids+%C3%97+topic_ids%60+%28up+to+1000+contacts+%C3%97+50+topics%29.+Pairs+that+already+exist+are+reported+in+%60already_subscribed%60.+Requi\u0026amp;theme=6d36e4ae9c92b67d8136c8c1\u0026amp;signature=8259fc9bd741af1a42d75e60dcb4ecc5f81be5c1ba8faf3836d3a9cb69b1fa4f\">\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=\"Bulk subscribe contacts to topics - Lettr\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Subscribe every combination of contact_ids × topic_ids (up to 1000 contacts × 50 topics). Pairs that already exist are reported in already_subscribed. Requires the audience:write scope and is blocked for sandbox API keys.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://lettr.mintlify.site/_mintlify/api/og/v2?division=Audience+Contacts\u0026amp;title=Bulk+subscribe+contacts+to+topics\u0026amp;description=Subscribe+every+combination+of+%60contact_ids+%C3%97+topic_ids%60+%28up+to+1000+contacts+%C3%97+50+topics%29.+Pairs+that+already+exist+are+reported+in+%60already_subscribed%60.+Requi\u0026amp;theme=6d36e4ae9c92b67d8136c8c1\u0026amp;signature=8259fc9bd741af1a42d75e60dcb4ecc5f81be5c1ba8faf3836d3a9cb69b1fa4f\">\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/lettr/dSsCtMUFma4ICJBo/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Lettr\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#EC104B\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.lettr.com/api-reference/audience/bulk-subscribe-contacts-to-topics\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/audience/bulk-subscribe-contacts-to-topics.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.lettr.com/#organization\",\"name\":\"Lettr\",\"url\":\"https://docs.lettr.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/lettr/w6cQMnBCGTvjJ4__/logo/light.svg?fit=max\u0026auto=format\u0026n=w6cQMnBCGTvjJ4__\u0026q=85\u0026s=2cad5a94a80e61999cf9feaeac06e9c6\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.lettr.com#website\",\"name\":\"Lettr\",\"url\":\"https://docs.lettr.com\",\"publisher\":{\"@id\":\"https://docs.lettr.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.lettr.com/api-reference/audience/bulk-subscribe-contacts-to-topics#webpage\",\"url\":\"https://docs.lettr.com/api-reference/audience/bulk-subscribe-contacts-to-topics\",\"name\":\"Bulk subscribe contacts to topics\",\"description\":\"Subscribe every combination of contact_ids × topic_ids (up to 1000 contacts × 50 topics). Pairs that already exist are reported in already_subscribed. Requires the audience:write scope and is blocked for sandbox API keys.\",\"dateModified\":\"2026-08-14T17:46:44.620Z\",\"isPartOf\":{\"@id\":\"https://docs.lettr.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.lettr.com/api-reference/audience/bulk-subscribe-contacts-to-topics#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.lettr.com/api-reference/audience/bulk-subscribe-contacts-to-topics#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Audience Contacts\",\"item\":\"https://docs.lettr.com/api-reference/audience/list-audience-contacts\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Bulk subscribe contacts to topics\",\"item\":\"https://docs.lettr.com/api-reference/audience/bulk-subscribe-contacts-to-topics\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.lettr.com/api-reference/audience/bulk-subscribe-contacts-to-topics#apireference\",\"headline\":\"Bulk subscribe contacts to topics\",\"name\":\"Bulk subscribe contacts to topics\",\"description\":\"Subscribe every combination of contact_ids × topic_ids (up to 1000 contacts × 50 topics). Pairs that already exist are reported in already_subscribed. Requires the audience:write scope and is blocked for sandbox API keys.\",\"url\":\"https://docs.lettr.com/api-reference/audience/bulk-subscribe-contacts-to-topics\",\"mainEntityOfPage\":{\"@id\":\"https://docs.lettr.com/api-reference/audience/bulk-subscribe-contacts-to-topics#webpage\"},\"dateModified\":\"2026-08-14T17:46:44.620Z\",\"publisher\":{\"@id\":\"https://docs.lettr.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.lettr.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Lettr\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Lettr\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/api-reference/audience/bulk-subscribe-contacts-to-topics.md","siteName":"Lettr","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":"/introduction"}]},{"tab":"API Reference","groups":[{"group":"API Reference","pages":[{"title":"Introduction","href":"/api-reference/introduction"},{"title":"Rate Limit","href":"/api-reference/rate-limit"}]},{"group":"Emails","pages":[{"title":"Send Email","openapi":"POST /emails","href":"/api-reference/emails/send-email"},{"title":"Get Email Detail","openapi":"GET /emails/{requestId}","href":"/api-reference/emails/get-email-detail"},{"title":"List Email Events","openapi":"GET /emails/events","href":"/api-reference/emails/list-email-events"}]},{"group":"Scheduled Emails","pages":[{"title":"Schedule Email","openapi":"POST /emails/scheduled","href":"/api-reference/emails/schedule-email"},{"title":"List Scheduled Emails","openapi":"GET /emails/scheduled","href":"/api-reference/emails/list-scheduled-emails"},{"title":"Get Scheduled Email","openapi":"GET /emails/scheduled/{transmissionId}","href":"/api-reference/emails/get-scheduled-email"},{"title":"Cancel Scheduled Email","openapi":"DELETE /emails/scheduled/{transmissionId}","href":"/api-reference/emails/cancel-scheduled-email"}]},{"group":"Domains","pages":[{"title":"List Domains","openapi":"GET /domains","href":"/api-reference/domains/list-domains"},{"title":"Create Domain","openapi":"POST /domains","href":"/api-reference/domains/create-domain"},{"title":"Get Domain","openapi":"GET /domains/{domain}","href":"/api-reference/domains/get-domain"},{"title":"Delete Domain","openapi":"DELETE /domains/{domain}","href":"/api-reference/domains/delete-domain"},{"title":"Verify Domain","openapi":"POST /domains/{domain}/verify","href":"/api-reference/domains/verify-domain"}]},{"group":"Templates","pages":[{"title":"List Templates","openapi":"GET /templates","href":"/api-reference/templates/list-templates"},{"title":"Create Template","openapi":"POST /templates","href":"/api-reference/templates/create-template"},{"title":"Get Template","openapi":"GET /templates/{slug}","href":"/api-reference/templates/get-template"},{"title":"Update Template","openapi":"PUT /templates/{slug}","href":"/api-reference/templates/update-template"},{"title":"Delete Template","openapi":"DELETE /templates/{slug}","href":"/api-reference/templates/delete-template"},{"title":"Get Merge Tags","openapi":"GET /templates/{slug}/merge-tags","href":"/api-reference/templates/get-merge-tags"},{"title":"List Folders","openapi":"GET /folders","href":"/api-reference/templates/list-folders"}]},{"group":"Webhooks","pages":[{"title":"List Webhooks","openapi":"GET /webhooks","href":"/api-reference/webhooks/list-webhooks"},{"title":"Create Webhook","openapi":"POST /webhooks","href":"/api-reference/webhooks/create-webhook"},{"title":"Get Webhook","openapi":"GET /webhooks/{webhookId}","href":"/api-reference/webhooks/get-webhook"},{"title":"Update Webhook","openapi":"PUT /webhooks/{webhookId}","href":"/api-reference/webhooks/update-webhook"},{"title":"Delete Webhook","openapi":"DELETE /webhooks/{webhookId}","href":"/api-reference/webhooks/delete-webhook"}]},{"group":"System","pages":[{"title":"Health Check","openapi":"GET /health","href":"/api-reference/system/health-check"},{"title":"Auth Check","openapi":"GET /auth/check","href":"/api-reference/system/auth-check"}]},{"group":"Campaigns","pages":[{"title":"Create a campaign","openapi":"POST /campaigns","href":"/api-reference/campaigns/create-a-campaign"},{"title":"List campaigns","openapi":"GET /campaigns","href":"/api-reference/campaigns/list-campaigns"},{"title":"Show a campaign","openapi":"GET /campaigns/{campaignId}","href":"/api-reference/campaigns/show-a-campaign"},{"title":"List campaign engagement events","openapi":"GET /campaigns/{campaignId}/events","href":"/api-reference/campaigns/list-campaign-engagement-events"},{"title":"Send a campaign now","openapi":"POST /campaigns/{campaignId}/send","href":"/api-reference/campaigns/send-a-campaign-now"},{"title":"Schedule a campaign","openapi":"POST /campaigns/{campaignId}/schedule","href":"/api-reference/campaigns/schedule-a-campaign"},{"title":"Unschedule a campaign","openapi":"POST /campaigns/{campaignId}/unschedule","href":"/api-reference/campaigns/unschedule-a-campaign"}]},{"group":"Audience Lists","pages":[{"title":"List audience lists","openapi":"GET /audience/lists","href":"/api-reference/audience/list-audience-lists"},{"title":"Create an audience list","openapi":"POST /audience/lists","href":"/api-reference/audience/create-an-audience-list"},{"title":"Bulk delete audience lists","openapi":"DELETE /audience/lists/bulk","href":"/api-reference/audience/bulk-delete-audience-lists"},{"title":"Show an audience list","openapi":"GET /audience/lists/{listId}","href":"/api-reference/audience/show-an-audience-list"},{"title":"Update an audience list","openapi":"PATCH /audience/lists/{listId}","href":"/api-reference/audience/update-an-audience-list"},{"title":"Delete an audience list","openapi":"DELETE /audience/lists/{listId}","href":"/api-reference/audience/delete-an-audience-list"}]},{"group":"Audience Contacts","pages":[{"title":"List audience contacts","openapi":"GET /audience/contacts","href":"/api-reference/audience/list-audience-contacts"},{"title":"Create a contact","openapi":"POST /audience/contacts","href":"/api-reference/audience/create-a-contact"},{"title":"Bulk create contacts","openapi":"POST /audience/contacts/bulk","href":"/api-reference/audience/bulk-create-contacts"},{"title":"Bulk attach contacts to lists","openapi":"POST /audience/contacts/lists/bulk","href":"/api-reference/audience/bulk-attach-contacts-to-lists"},{"title":"Bulk detach contacts from lists","openapi":"DELETE /audience/contacts/lists/bulk","description":"Detach every combination of `contact_ids × list_ids` (up to 1000 contacts × 50 lists). Pairs that were not attached are reported in `not_present`. Requires the `audience:write` scope and is blocked for sandbox API keys.","href":"/api-reference/audience/bulk-detach-contacts-from-lists"},{"title":"Bulk subscribe contacts to topics","openapi":"POST /audience/contacts/topics/bulk","href":"/api-reference/audience/bulk-subscribe-contacts-to-topics"},{"title":"Bulk unsubscribe contacts from topics","openapi":"DELETE /audience/contacts/topics/bulk","description":"Remove every combination of `contact_ids × topic_ids`. Pairs that did not exist are ignored. Requires the `audience:write` scope and is blocked for sandbox API keys.","href":"/api-reference/audience/bulk-unsubscribe-contacts-from-topics"},{"title":"Show a contact","openapi":"GET /audience/contacts/{contactId}","href":"/api-reference/audience/show-a-contact"},{"title":"Update a contact","openapi":"PATCH /audience/contacts/{contactId}","href":"/api-reference/audience/update-a-contact"},{"title":"Delete a contact","openapi":"DELETE /audience/contacts/{contactId}","href":"/api-reference/audience/delete-a-contact"},{"title":"Attach contact to list","openapi":"POST /audience/contacts/{contactId}/lists/{listId}","href":"/api-reference/audience/attach-contact-to-list"},{"title":"Detach contact from list","openapi":"DELETE /audience/contacts/{contactId}/lists/{listId}","href":"/api-reference/audience/detach-contact-from-list"},{"title":"Subscribe contact to topic","openapi":"POST /audience/contacts/{contactId}/topics/{topicId}","href":"/api-reference/audience/subscribe-contact-to-topic"},{"title":"Unsubscribe contact from topic","openapi":"DELETE /audience/contacts/{contactId}/topics/{topicId}","href":"/api-reference/audience/unsubscribe-contact-from-topic"}]},{"group":"Audience Topics","pages":[{"title":"List audience topics","openapi":"GET /audience/topics","href":"/api-reference/audience/list-audience-topics"},{"title":"Create a topic","openapi":"POST /audience/topics","href":"/api-reference/audience/create-a-topic"},{"title":"Show a topic","openapi":"GET /audience/topics/{topicId}","href":"/api-reference/audience/show-a-topic"},{"title":"Update a topic","openapi":"PATCH /audience/topics/{topicId}","href":"/api-reference/audience/update-a-topic"},{"title":"Delete a topic","openapi":"DELETE /audience/topics/{topicId}","href":"/api-reference/audience/delete-a-topic"}]},{"group":"Audience Properties","pages":[{"title":"List audience properties","openapi":"GET /audience/properties","href":"/api-reference/audience/list-audience-properties"},{"title":"Create a property","openapi":"POST /audience/properties","href":"/api-reference/audience/create-a-property"},{"title":"Show a property","openapi":"GET /audience/properties/{propertyId}","href":"/api-reference/audience/show-a-property"},{"title":"Update a property","openapi":"PATCH /audience/properties/{propertyId}","href":"/api-reference/audience/update-a-property"},{"title":"Delete a property","openapi":"DELETE /audience/properties/{propertyId}","href":"/api-reference/audience/delete-a-property"}]},{"group":"Audience Segments","pages":[{"title":"List audience segments","openapi":"GET /audience/segments","href":"/api-reference/audience/list-audience-segments"},{"title":"Create a segment","openapi":"POST /audience/segments","href":"/api-reference/audience/create-a-segment"},{"title":"Show a segment","openapi":"GET /audience/segments/{segmentId}","href":"/api-reference/audience/show-a-segment"},{"title":"Update a segment","openapi":"PATCH /audience/segments/{segmentId}","href":"/api-reference/audience/update-a-segment"},{"title":"Delete a segment","openapi":"DELETE /audience/segments/{segmentId}","href":"/api-reference/audience/delete-a-segment"}]}]},{"tab":"Knowledge Base","pages":[{"title":"Knowledge Base","href":"/knowledge-base/introduction"}]}]},"basePath":"","title":"Bulk subscribe contacts to topics - Lettr","buildId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","deploymentId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-DdEMm2kG.js","utils-BMo572L7.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-C-4m9KAx.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-DPLK2Oq9.js","snippetPresets-BKjfJMC9.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-DTsgtCEj.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-C8vmhyQM.js","shallow-r9w8LQGS.js","getApiPlaygroundDisplay-DjPI64HQ.js","CodeSnippet-C8Bvhl16.js","CodeSnippets-BtWUwcMy.js","Page-BIYvYBgk.js","getPastedJson-Dcm_3Pgl.js","icon-BXwrTpjc.js","MethodPill-CcjfVmmy.js","DuplicateIcon-BuKIbXAQ.js","createIcon-DaL9yXsO.js","DynamicMarkdown-Co5nikxh.js","SectionHeading-P4UNTsMZ.js","axios-vUo_bRtp.js","Markdown-CEfymfIH.js","clsx-Dq9TQuNi.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-D2J8knkn.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BgZ2ThuU.js"]}