Add or update up to 1,000 email members in one call. A list with no emails gains an email side, so a phone list can take emails later. Invalid rows do not fail the request: every row comes back with its own outcome so you can fix just the rejected ones. Yahoo-run mailboxes (Yahoo, AOL, AT&T, Verizon, Cox, Frontier) are never added and come back rejected with reason yahoo_family. Recipients at providers whose mailboxes report spam at an unusually high rate (currently windstream.net) come back rejected with reason high_complaint_domain. Both are the rules every upload applies. Requires the email feature for the list’s organization.
Optional idempotency key: a unique string of 16-200 printable ASCII characters (a UUID is recommended). Retrying the write with the same key within 24 hours returns the stored response of the first call with an X-Idempotent-Replayed: true response header instead of executing it again. Reusing a key with a different request body returns 422 (IDEMPOTENCY_MISMATCH); a duplicate sent while the first call is still running returns 409 with a Retry-After header. Keys are scoped per endpoint and organization.
Per-row outcome of a bulk contact upsert. Invalid rows are reported, not fatal: the call still returns 200 and writes the valid rows.
Show child attributes
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Political Comms","description":"Documentation for the Political Comms P2P texting platform - help center, onboarding, compliance, and API reference.","colors":{"primary":"#1E3A8A","light":"#3B82F6","dark":"#1E3A8A"},"logo":{"light":"https://mintcdn.com/politicalcomms/EWPdkQOGp2k4Npo5/logo/main.png?fit=max\u0026auto=format\u0026n=EWPdkQOGp2k4Npo5\u0026q=85\u0026s=694b5108d71882d5774bc62c478bc370","dark":"https://mintcdn.com/politicalcomms/EWPdkQOGp2k4Npo5/logo/main.png?fit=max\u0026auto=format\u0026n=EWPdkQOGp2k4Npo5\u0026q=85\u0026s=694b5108d71882d5774bc62c478bc370","href":"/"},"favicon":"https://mintcdn.com/politicalcomms/EWPdkQOGp2k4Npo5/favicon.png?fit=max\u0026auto=format\u0026n=EWPdkQOGp2k4Npo5\u0026q=85\u0026s=63a87e09739757db232880f7adfda947","navbar":{"links":[{"href":"mailto:support@politicalcomms.com","label":"Support"}],"primary":{"type":"button","label":"Sign in","href":"https://app.politicalcomms.com"}},"footer":{"socials":{"website":"https://politicalcomms.com"},"links":[{"header":"Product","items":[{"label":"Dashboard","href":"https://app.politicalcomms.com"},{"label":"Pricing","href":"https://politicalcomms.com/pricing"},{"label":"Status","href":"https://status.politicalcomms.com"}]},{"header":"Resources","items":[{"label":"Help Center","href":"/help/getting-started"},{"label":"Onboarding","href":"/onboarding/overview"},{"label":"Compliance","href":"/compliance/overview"},{"label":"API Reference","href":"/api-reference/introduction"}]},{"header":"Legal","items":[{"label":"Terms of Use","href":"/legal/terms"},{"label":"Privacy Policy","href":"/legal/privacy"}]}]},"seo":{"metatags":{"og:site_name":"Political Comms Docs","og:type":"website","og:locale":"en_US","og:image":"https://politicalcomms.com/opengraph-image","og:image:width":"1200","og:image:height":"630","og:image:alt":"Political Comms. The direct-to-carrier political texting platform.","twitter:card":"summary_large_image","twitter:image":"https://politicalcomms.com/opengraph-image","twitter:image:alt":"Political Comms. The direct-to-carrier political texting platform.","robots":"index, follow, max-image-preview:large, max-snippet:-1","author":"Political Comms","publisher":"Political Comms","application-name":"Political Comms Docs","apple-mobile-web-app-title":"Political Comms Docs","theme-color":"#254692","msapplication-TileColor":"#254692","category":"Political Technology, Communications Infrastructure","keywords":"political texting, political SMS, P2P messaging, 10DLC registration, Campaign Verify, TCPA compliance, FCC political rules, MCP server, AI agent integration"},"indexing":"all"},"styling":{"latex":true},"navigation":{"global":{"anchors":[{"anchor":"Dashboard","icon":"arrow-up-right-from-square","href":"https://app.politicalcomms.com"},{"anchor":"Status","icon":"signal","href":"https://status.politicalcomms.com"},{"anchor":"Changelog","icon":"clock-rotate-left","href":"/changelog"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"politicalcomms","hasAudioNarration":false,"actualSubdomain":"politicalcomms","customDomains":["docs.politicalcomms.com"],"gitSource":{"type":"github","owner":"political-comms","repo":"political-comms-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6af47d08f70ad676a5c62756","clientVersion":"0.0.4102","searchFilterCounts":[{"language":"default","tag":"API Reference","count":68},{"language":"default","tag":"Endpoints","count":55},{"language":"default","tag":"Documentation","count":40},{"language":"default","tag":"Email","count":22},{"language":"default","tag":"Text","count":19},{"language":"default","tag":"Assets","count":14},{"language":"default","tag":"Help Center","count":13},{"language":"default","tag":"Projects","count":13},{"language":"default","tag":"Get Started","count":8},{"language":"default","tag":"Compliance","count":8}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":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":"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":[],"page":{"pagePath":"api-reference/contact-lists/add-contact-list-emails","slug":"/api-reference/contact-lists/add-contact-list-emails","pageMetadata":{"title":"Add Contact List Emails","description":"Add or update up to 1,000 email members in one call. A list with no emails gains an email side, so a phone list can take emails later. Invalid rows do not fail the request: every row comes back with its own outcome so you can fix just the rejected ones. Yahoo-run mailboxes (Yahoo, AOL, AT\u0026T, Verizon, Cox, Frontier) are never added and come back `rejected` with reason `yahoo_family`. Recipients at providers whose mailboxes report spam at an unusually high rate (currently windstream.net) come back `rejected` with reason `high_complaint_domain`. Both are the rules every upload applies. Requires the email feature for the list's organization.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /contact-lists/{id}/emails","href":"/api-reference/contact-lists/add-contact-list-emails","autogeneratedByOpenApi":true},"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: [\"Add or update up to 1,000 email members in one call. A list with no emails gains an email side, so a phone list can take emails later. Invalid rows do not fail the request: every row comes back with its own outcome so you can fix just the rejected ones. Yahoo-run mailboxes (Yahoo, AOL, AT\u0026T, Verizon, Cox, Frontier) are never added and come back \", _jsx(_components.code, {\n children: \"rejected\"\n }), \" with reason \", _jsx(_components.code, {\n children: \"yahoo_family\"\n }), \". Recipients at providers whose mailboxes report spam at an unusually high rate (currently windstream.net) come back \", _jsx(_components.code, {\n children: \"rejected\"\n }), \" with reason \", _jsx(_components.code, {\n children: \"high_complaint_domain\"\n }), \". Both are the rules every upload applies. Requires the email feature for the list’s organization.\"]\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":"Add Contact List Emails","description":"Add or update up to 1,000 email members in one call. A list with no emails gains an email side, so a phone list can take emails later. Invalid rows do not fail the request: every row comes back with its own outcome so you can fix just the rejected ones. Yahoo-run mailboxes (Yahoo, AOL, AT\u0026T, Verizon, Cox, Frontier) are never added and come back `rejected` with reason `yahoo_family`. Recipients at providers whose mailboxes report spam at an unusually high rate (currently windstream.net) come back `rejected` with reason `high_complaint_domain`. Both are the rules every upload applies. Requires the email feature for the list's organization.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /contact-lists/{id}/emails","href":"/api-reference/contact-lists/add-contact-list-emails","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Contact Lists"],"summary":"Add Contact List Emails","description":"Add or update up to 1,000 email members in one call. A list with no emails gains an email side, so a phone list can take emails later. Invalid rows do not fail the request: every row comes back with its own outcome so you can fix just the rejected ones. Yahoo-run mailboxes (Yahoo, AOL, AT\u0026T, Verizon, Cox, Frontier) are never added and come back `rejected` with reason `yahoo_family`. Recipients at providers whose mailboxes report spam at an unusually high rate (currently windstream.net) come back `rejected` with reason `high_complaint_domain`. Both are the rules every upload applies. Requires the email feature for the list's organization.","operationId":"addContactListEmails","parameters":["fddab382-cc29-458d-b022-1c412e943fce","0031bca2-2a80-40c4-b786-f02c4c56ab6c"],"requestBody":"4825fdb4-7acb-469d-aab3-b44c3fd4cc00","responses":{"200":"6263c359-b45f-416f-b25e-e6cdf56e0a89","400":"f007c39b-ac9e-46f3-ac8e-7cac278e5ad4","401":"0f8b3398-e49e-4dd5-8e1d-9e7ea928fab0","403":"78d2d337-62f7-46ff-b7cf-8b5a3e9465fd","404":"7452d98d-56d3-4cd7-b3b2-d46bc2321fed","429":"99a43aa1-67ed-4d49-9427-be59cea11638","500":"2d0c65eb-7d9e-4d71-a080-25ee71251158"},"method":"post","type":"path","servers":["8bdcc1b9-051f-42cc-9c68-f222085fa98e"],"security":["88c9bcce-6679-4bf9-b723-391c13d09147"],"path":"/contact-lists/{id}/emails","baseUrlOptions":["https://api.politicalcomms.com/v1"],"title":"Add Contact List Emails","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"fddab382-cc29-458d-b022-1c412e943fce":{"name":"id","in":"path","required":true,"description":"Resource ID","schema":{"type":"string","isRequired":true,"description":"Resource ID","uniqueKey":"","typeLabel":"string"}},"0031bca2-2a80-40c4-b786-f02c4c56ab6c":{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":16,"maxLength":200,"isRequired":false,"description":"Optional idempotency key: a unique string of 16-200 printable ASCII characters (a UUID is recommended). Retrying the write with the same key within 24 hours returns the stored response of the first call with an `X-Idempotent-Replayed: true` response header instead of executing it again. Reusing a key with a different request body returns `422` (`IDEMPOTENCY_MISMATCH`); a duplicate sent while the first call is still running returns `409` with a `Retry-After` header. Keys are scoped per endpoint and organization.","uniqueKey":"","typeLabel":"string"},"description":"Optional idempotency key: a unique string of 16-200 printable ASCII characters (a UUID is recommended). Retrying the write with the same key within 24 hours returns the stored response of the first call with an `X-Idempotent-Replayed: true` response header instead of executing it again. Reusing a key with a different request body returns `422` (`IDEMPOTENCY_MISMATCH`); a duplicate sent while the first call is still running returns `409` with a `Retry-After` header. Keys are scoped per endpoint and organization."}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"contacts":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"object","properties":{"email":{"type":"string","maxLength":320,"isRequired":true,"uniqueKey":"contacts.items.[INDEX].email","typeLabel":"string"},"fields":{"type":"object","properties":{},"description":"Merge fields.","additionalProperties":true,"uniqueKey":"contacts.items.[INDEX].fields","typeLabel":"object"},"consent_source":{"type":"string","maxLength":255,"uniqueKey":"contacts.items.[INDEX].consent_source","typeLabel":"string"},"consent_at":{"type":"string","format":"date-time","uniqueKey":"contacts.items.[INDEX].consent_at","typeLabel":"string\u003cdate-time>"}},"required":["email"],"additionalProperties":true,"uniqueKey":"contacts.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"contacts","typeLabel":"object[]"}},"required":["contacts"],"additionalProperties":true,"uniqueKey":"","typeLabel":"object"},"example":{"contacts":[{"email":"voter@example.com","fields":{"first_name":"Ada"},"consent_source":"webform"}]},"examples":{"Example":{"title":"Example","value":{"contacts":[{"email":"voter@example.com","fields":{"first_name":"Ada"},"consent_source":"webform"}]}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"6263c359-b45f-416f-b25e-e6cdf56e0a89":{"description":"Per-row upsert results.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"data":{"type":"object","properties":{"written":{"type":"integer","uniqueKey":"data.written","typeLabel":"integer"},"accepted":{"type":"integer","uniqueKey":"data.accepted","typeLabel":"integer"},"rejected":{"type":"integer","uniqueKey":"data.rejected","typeLabel":"integer"},"duplicates":{"type":"integer","uniqueKey":"data.duplicates","typeLabel":"integer"},"results":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","description":"Position of the row in the request array.","uniqueKey":"data.results.items.[INDEX].index","typeLabel":"integer"},"email":{"type":"string","uniqueKey":"data.results.items.[INDEX].email","typeLabel":"string"},"status":{"type":"string","enum":["accepted","rejected","duplicate"],"uniqueKey":"data.results.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"reason":{"oneOf":[{"type":"string","uniqueKey":"data.results.items.[INDEX].reason.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.results.items.[INDEX].reason.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.results.items.[INDEX].reason","typeLabel":"string | null"}},"additionalProperties":true,"uniqueKey":"data.results.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.results","typeLabel":"object[]"}},"description":"Per-row outcome of a bulk contact upsert. Invalid rows are reported, not fatal: the call still returns 200 and writes the valid rows.","additionalProperties":true,"isRequired":true,"uniqueKey":"data","typeLabel":"object"}},"required":["success","data"],"additionalProperties":true,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"success":true,"data":{"written":123,"accepted":123,"rejected":123,"duplicates":123,"results":[{"index":123,"email":"\u003cstring>","status":"accepted","reason":"\u003cstring>"}]}}}},"exampleType":"generated"}},"exampleType":"generated"},"f007c39b-ac9e-46f3-ac8e-7cac278e5ad4":{"description":"Invalid request (validation failure, malformed parameters, or a request the resource state does not allow).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"Machine-readable error code, e.g. VALIDATION_ERROR, ORG_ACCESS_DENIED, PROJECT_NOT_FOUND.","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"correlationId":{"type":"string","description":"Request correlation ID; include it in support requests.","uniqueKey":"correlationId","typeLabel":"string"},"details":{"oneOf":[{"type":"array","description":"Present on some errors. For VALIDATION_ERROR, an array of { field, message, code } with one entry per rejected field (field is the dotted path); an object for other codes (e.g. insufficient-balance shortfall).","uniqueKey":"details.oneOf.0","typeLabel":"array"},{"type":"object","description":"Present on some errors. For VALIDATION_ERROR, an array of { field, message, code } with one entry per rejected field (field is the dotted path); an object for other codes (e.g. insufficient-balance shortfall).","uniqueKey":"details.oneOf.1","typeLabel":"object"}],"uniqueKey":"details","typeLabel":"array | object"}},"required":["error","code"],"additionalProperties":true,"description":"Standard error body produced by the API error handler for 4xx/5xx responses.","uniqueKey":"","typeLabel":"object"},"example":{"error":"Validation failed","code":"VALIDATION_ERROR","correlationId":"030bf857-922f-4b82-8fca-c5b0769c1590","details":[{"field":"organization_id","message":"Invalid UUID","code":"invalid_format"}]},"examples":{"Example":{"title":"Example","value":{"error":"Validation failed","code":"VALIDATION_ERROR","correlationId":"030bf857-922f-4b82-8fca-c5b0769c1590","details":[{"field":"organization_id","message":"Invalid UUID","code":"invalid_format"}]}}},"exampleType":"examples"}},"exampleType":"examples"},"0f8b3398-e49e-4dd5-8e1d-9e7ea928fab0":{"description":"Missing, malformed, revoked, or expired API key.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Short error summary.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"message":{"type":"string","description":"Human-readable detail.","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"required":["error","message"],"additionalProperties":true,"description":"Error body returned by the API-key authentication layer (401 and permission 403s).","uniqueKey":"","typeLabel":"object"},"example":{"error":"API key required","message":"Please provide an API key in the X-API-Key header"},"examples":{"Example":{"title":"Example","value":{"error":"API key required","message":"Please provide an API key in the X-API-Key header"}}},"exampleType":"examples"}},"exampleType":"examples"},"78d2d337-62f7-46ff-b7cf-8b5a3e9465fd":{"description":"The API key lacks the required permission scope, the requested resource belongs to an organization outside the key's hierarchy, or the organization is not entitled to this feature.","content":{"application/json":{"schema":{"oneOf":[{"type":"object","description":"Error body returned by the API-key authentication layer (401 and permission 403s).","required":["error","message"],"properties":{"error":{"type":"string","description":"Short error summary.","isRequired":true,"uniqueKey":"oneOf.0.error","typeLabel":"string"},"message":{"type":"string","description":"Human-readable detail.","isRequired":true,"uniqueKey":"oneOf.0.message","typeLabel":"string"}},"additionalProperties":true,"uniqueKey":"oneOf.0","typeLabel":"object"},{"type":"object","description":"Standard error body produced by the API error handler for 4xx/5xx responses.","required":["error","code"],"properties":{"error":{"type":"string","description":"Human-readable error message.","isRequired":true,"uniqueKey":"oneOf.1.error","typeLabel":"string"},"code":{"type":"string","description":"Machine-readable error code, e.g. VALIDATION_ERROR, ORG_ACCESS_DENIED, PROJECT_NOT_FOUND.","isRequired":true,"uniqueKey":"oneOf.1.code","typeLabel":"string"},"correlationId":{"type":"string","description":"Request correlation ID; include it in support requests.","uniqueKey":"oneOf.1.correlationId","typeLabel":"string"},"details":{"oneOf":[{"type":"array","description":"Present on some errors. For VALIDATION_ERROR, an array of { field, message, code } with one entry per rejected field (field is the dotted path); an object for other codes (e.g. insufficient-balance shortfall).","uniqueKey":"oneOf.1.details.oneOf.0","typeLabel":"array"},{"type":"object","description":"Present on some errors. For VALIDATION_ERROR, an array of { field, message, code } with one entry per rejected field (field is the dotted path); an object for other codes (e.g. insufficient-balance shortfall).","uniqueKey":"oneOf.1.details.oneOf.1","typeLabel":"object"}],"uniqueKey":"oneOf.1.details","typeLabel":"array | object"}},"additionalProperties":true,"uniqueKey":"oneOf.1","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"examples":{"missingScope":{"title":"missingScope","value":{"error":"Insufficient permissions","message":"This API key does not have the required permissions: public:read"}},"orgAccessDenied":{"title":"orgAccessDenied","value":{"error":"Access denied: You do not have permission to access this organization's data","code":"ORG_ACCESS_DENIED","correlationId":"de038205-7c9c-4d4a-99bc-d7275a52f07e"}},"entitlementRequired":{"title":"entitlementRequired","value":{"error":"This feature requires enablement by Political Comms","code":"ENTITLEMENT_REQUIRED","details":{"entitlement":"email"}}}},"exampleType":"examples"}},"exampleType":"examples"},"7452d98d-56d3-4cd7-b3b2-d46bc2321fed":{"description":"Resource not found or not visible to this API key.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"Machine-readable error code, e.g. VALIDATION_ERROR, ORG_ACCESS_DENIED, PROJECT_NOT_FOUND.","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"correlationId":{"type":"string","description":"Request correlation ID; include it in support requests.","uniqueKey":"correlationId","typeLabel":"string"},"details":{"oneOf":[{"type":"array","description":"Present on some errors. For VALIDATION_ERROR, an array of { field, message, code } with one entry per rejected field (field is the dotted path); an object for other codes (e.g. insufficient-balance shortfall).","uniqueKey":"details.oneOf.0","typeLabel":"array"},{"type":"object","description":"Present on some errors. For VALIDATION_ERROR, an array of { field, message, code } with one entry per rejected field (field is the dotted path); an object for other codes (e.g. insufficient-balance shortfall).","uniqueKey":"details.oneOf.1","typeLabel":"object"}],"uniqueKey":"details","typeLabel":"array | object"}},"required":["error","code"],"additionalProperties":true,"description":"Standard error body produced by the API error handler for 4xx/5xx responses.","uniqueKey":"","typeLabel":"object"},"example":{"error":"Project not found","code":"PROJECT_NOT_FOUND","correlationId":"de038205-7c9c-4d4a-99bc-d7275a52f07e"},"examples":{"Example":{"title":"Example","value":{"error":"Project not found","code":"PROJECT_NOT_FOUND","correlationId":"de038205-7c9c-4d4a-99bc-d7275a52f07e"}}},"exampleType":"examples"}},"exampleType":"examples"},"99a43aa1-67ed-4d49-9427-be59cea11638":{"description":"Rate limit exceeded. Check the Retry-After header.","headers":{"Retry-After":{"description":"Seconds until the window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false],"isRequired":true,"uniqueKey":"success","typeLabel":"enum\u003cboolean>"},"error":{"type":"string","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","enum":["RATE_LIMIT_EXCEEDED"],"isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"statusCode":{"type":"integer","enum":[429],"isRequired":true,"uniqueKey":"statusCode","typeLabel":"enum\u003cinteger>"},"retryAfter":{"type":"integer","description":"Seconds until the rate-limit window resets. Also sent as the Retry-After header.","isRequired":true,"uniqueKey":"retryAfter","typeLabel":"integer"},"message":{"type":"string","uniqueKey":"message","typeLabel":"string"}},"required":["success","error","code","statusCode","retryAfter"],"additionalProperties":true,"uniqueKey":"","typeLabel":"object"},"example":{"success":false,"error":"Rate limit exceeded","message":"Maximum 600 requests per 60 seconds","code":"RATE_LIMIT_EXCEEDED","statusCode":429,"retryAfter":3},"examples":{"Example":{"title":"Example","value":{"success":false,"error":"Rate limit exceeded","message":"Maximum 600 requests per 60 seconds","code":"RATE_LIMIT_EXCEEDED","statusCode":429,"retryAfter":3}}},"exampleType":"examples"}},"exampleType":"examples"},"2d0c65eb-7d9e-4d71-a080-25ee71251158":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"Machine-readable error code, e.g. VALIDATION_ERROR, ORG_ACCESS_DENIED, PROJECT_NOT_FOUND.","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"correlationId":{"type":"string","description":"Request correlation ID; include it in support requests.","uniqueKey":"correlationId","typeLabel":"string"},"details":{"oneOf":[{"type":"array","description":"Present on some errors. For VALIDATION_ERROR, an array of { field, message, code } with one entry per rejected field (field is the dotted path); an object for other codes (e.g. insufficient-balance shortfall).","uniqueKey":"details.oneOf.0","typeLabel":"array"},{"type":"object","description":"Present on some errors. For VALIDATION_ERROR, an array of { field, message, code } with one entry per rejected field (field is the dotted path); an object for other codes (e.g. insufficient-balance shortfall).","uniqueKey":"details.oneOf.1","typeLabel":"object"}],"uniqueKey":"details","typeLabel":"array | object"}},"required":["error","code"],"additionalProperties":true,"description":"Standard error body produced by the API error handler for 4xx/5xx responses.","uniqueKey":"","typeLabel":"object"},"example":{"error":"An unexpected error occurred. Please try again later.","code":"INTERNAL_ERROR","correlationId":"de038205-7c9c-4d4a-99bc-d7275a52f07e"},"examples":{"Example":{"title":"Example","value":{"error":"An unexpected error occurred. Please try again later.","code":"INTERNAL_ERROR","correlationId":"de038205-7c9c-4d4a-99bc-d7275a52f07e"}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"88c9bcce-6679-4bf9-b723-391c13d09147":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Authenticate every request by passing your API key in the X-API-Key header. Keys are scoped to your organization hierarchy.","scopes":[],"schemeName":"ApiKeyAuth"}}},"servers":{"8bdcc1b9-051f-42cc-9c68-f222085fa98e":{"url":"https://api.politicalcomms.com/v1","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Authenticate every request by passing your API key in the X-API-Key header. Keys are scoped to your organization hierarchy.","scopes":[],"schemeName":"ApiKeyAuth"},"schema":{"title":"X-API-Key","type":"string","description":"Authenticate every request by passing your API key in the X-API-Key header. Keys are scoped to your organization hierarchy.","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"ApiKeyAuth","name":"X-API-Key"}],"title":"ApiKeyAuth"}]},"originalFileLocation":"api-reference/openapi.json"},"subdomain":"politicalcomms","siteName":"Political Comms","title":"Add Contact List Emails - Political Comms","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-11T14:35:30.389Z","originalFileLocation":"api-reference/contact-lists/add-contact-list-emails.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Add or update up to 1,000 email members in one call. A list with no emails gains an email side, so a phone list can take emails later. Invalid rows do not fail the request: every row comes back with its own outcome so you can fix just the rejected ones. Yahoo-run mailboxes (Yahoo, AOL, AT\u0026amp;T, Verizon, Cox, Frontier) are never added and come back rejected with reason yahoo_family. Recipients at providers whose mailboxes report spam at an unusually high rate (currently windstream.net) come back rejected with reason high_complaint_domain. Both are the rules every upload applies. Requires the email feature for the list\u0026#x27;s organization.\">\u003cmeta data-mint-head name=\"keywords\" content=\"political texting, political SMS, P2P messaging, 10DLC registration, Campaign Verify, TCPA compliance, FCC political rules, MCP server, AI agent integration\">\u003cmeta data-mint-head name=\"application-name\" content=\"Political Comms\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003cmeta data-mint-head name=\"robots\" content=\"index, follow, max-image-preview:large, max-snippet:-1\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/politicalcomms/3u6PEpheVhjd9O_C/_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/politicalcomms/3u6PEpheVhjd9O_C/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/politicalcomms/3u6PEpheVhjd9O_C/_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/politicalcomms/3u6PEpheVhjd9O_C/_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/politicalcomms/3u6PEpheVhjd9O_C/_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/politicalcomms/3u6PEpheVhjd9O_C/_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/politicalcomms/3u6PEpheVhjd9O_C/_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/politicalcomms/3u6PEpheVhjd9O_C/_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/politicalcomms/3u6PEpheVhjd9O_C/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Add Contact List Emails - Political Comms\">\u003cmeta data-mint-head property=\"og:description\" content=\"Add or update up to 1,000 email members in one call. A list with no emails gains an email side, so a phone list can take emails later. Invalid rows do not fail the request: every row comes back with its own outcome so you can fix just the rejected ones. Yahoo-run mailboxes (Yahoo, AOL, AT\u0026amp;T, Verizon, Cox, Frontier) are never added and come back rejected with reason yahoo_family. Recipients at providers whose mailboxes report spam at an unusually high rate (currently windstream.net) come back rejected with reason high_complaint_domain. Both are the rules every upload applies. Requires the email feature for the list\u0026#x27;s organization.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Political Comms Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.politicalcomms.com/api-reference/contact-lists/add-contact-list-emails\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://politicalcomms.com/opengraph-image\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Add Contact List Emails - Political Comms\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Add or update up to 1,000 email members in one call. A list with no emails gains an email side, so a phone list can take emails later. Invalid rows do not fail the request: every row comes back with its own outcome so you can fix just the rejected ones. Yahoo-run mailboxes (Yahoo, AOL, AT\u0026amp;T, Verizon, Cox, Frontier) are never added and come back rejected with reason yahoo_family. Recipients at providers whose mailboxes report spam at an unusually high rate (currently windstream.net) come back rejected with reason high_complaint_domain. Both are the rules every upload applies. Requires the email feature for the list\u0026#x27;s organization.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://politicalcomms.com/opengraph-image\">\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/politicalcomms/3u6PEpheVhjd9O_C/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Political Comms Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#254692\">\u003cmeta data-mint-head name=\"og:locale\" content=\"en_US\">\u003cmeta data-mint-head name=\"og:image:alt\" content=\"Political Comms. The direct-to-carrier political texting platform.\">\u003cmeta data-mint-head name=\"twitter:image:alt\" content=\"Political Comms. The direct-to-carrier political texting platform.\">\u003cmeta data-mint-head name=\"author\" content=\"Political Comms\">\u003cmeta data-mint-head name=\"publisher\" content=\"Political Comms\">\u003cmeta data-mint-head name=\"application-name\" content=\"Political Comms Docs\">\u003cmeta data-mint-head name=\"theme-color\" content=\"#254692\">\u003cmeta data-mint-head name=\"category\" content=\"Political Technology, Communications Infrastructure\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.politicalcomms.com/api-reference/contact-lists/add-contact-list-emails\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/contact-lists/add-contact-list-emails.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.politicalcomms.com/#organization\",\"name\":\"Political Comms\",\"url\":\"https://docs.politicalcomms.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/politicalcomms/EWPdkQOGp2k4Npo5/logo/main.png?fit=max\u0026auto=format\u0026n=EWPdkQOGp2k4Npo5\u0026q=85\u0026s=694b5108d71882d5774bc62c478bc370\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.politicalcomms.com#website\",\"name\":\"Political Comms\",\"url\":\"https://docs.politicalcomms.com\",\"publisher\":{\"@id\":\"https://docs.politicalcomms.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.politicalcomms.com/api-reference/contact-lists/add-contact-list-emails#webpage\",\"url\":\"https://docs.politicalcomms.com/api-reference/contact-lists/add-contact-list-emails\",\"name\":\"Add Contact List Emails\",\"description\":\"Add or update up to 1,000 email members in one call. A list with no emails gains an email side, so a phone list can take emails later. Invalid rows do not fail the request: every row comes back with its own outcome so you can fix just the rejected ones. Yahoo-run mailboxes (Yahoo, AOL, AT\u0026T, Verizon, Cox, Frontier) are never added and come back rejected with reason yahoo_family. Recipients at providers whose mailboxes report spam at an unusually high rate (currently windstream.net) come back rejected with reason high_complaint_domain. Both are the rules every upload applies. Requires the email feature for the list's organization.\",\"dateModified\":\"2026-11-11T14:35:30.389Z\",\"isPartOf\":{\"@id\":\"https://docs.politicalcomms.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.politicalcomms.com/api-reference/contact-lists/add-contact-list-emails#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.politicalcomms.com/api-reference/contact-lists/add-contact-list-emails#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Endpoints\",\"item\":\"https://docs.politicalcomms.com/api-reference/projects/list-projects\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Assets\",\"item\":\"https://docs.politicalcomms.com/api-reference/contact-lists/list-contact-lists\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Contact Lists\",\"item\":\"https://docs.politicalcomms.com/api-reference/contact-lists/list-contact-lists\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Add Contact List Emails\",\"item\":\"https://docs.politicalcomms.com/api-reference/contact-lists/add-contact-list-emails\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.politicalcomms.com/api-reference/contact-lists/add-contact-list-emails#apireference\",\"headline\":\"Add Contact List Emails\",\"name\":\"Add Contact List Emails\",\"description\":\"Add or update up to 1,000 email members in one call. A list with no emails gains an email side, so a phone list can take emails later. Invalid rows do not fail the request: every row comes back with its own outcome so you can fix just the rejected ones. Yahoo-run mailboxes (Yahoo, AOL, AT\u0026T, Verizon, Cox, Frontier) are never added and come back rejected with reason yahoo_family. Recipients at providers whose mailboxes report spam at an unusually high rate (currently windstream.net) come back rejected with reason high_complaint_domain. Both are the rules every upload applies. Requires the email feature for the list's organization.\",\"url\":\"https://docs.politicalcomms.com/api-reference/contact-lists/add-contact-list-emails\",\"mainEntityOfPage\":{\"@id\":\"https://docs.politicalcomms.com/api-reference/contact-lists/add-contact-list-emails#webpage\"},\"image\":\"https://politicalcomms.com/opengraph-image\",\"dateModified\":\"2026-11-11T14:35:30.389Z\",\"publisher\":{\"@id\":\"https://docs.politicalcomms.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.politicalcomms.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Political Comms\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Political Comms\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/api-reference/contact-lists/add-contact-list-emails.md","siteName":"Political Comms","nav":{"global":{"anchors":[{"anchor":"Dashboard","icon":"arrow-up-right-from-square","href":"https://app.politicalcomms.com"},{"anchor":"Status","icon":"signal","href":"https://status.politicalcomms.com"},{"anchor":"Changelog","icon":"clock-rotate-left","href":"/changelog"}]},"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":"/introduction"}]},{"tab":"API Reference","groups":[{"group":"Introduction","pages":[{"title":"Introduction","icon":"code","href":"/api-reference/introduction"},{"title":"Authentication","icon":"key","href":"/api-reference/authentication"},{"title":"Rate Limits","icon":"gauge-high","href":"/api-reference/rate-limits"},{"title":"Error Handling","icon":"circle-exclamation","href":"/api-reference/errors"},{"title":"Versioning \u0026 Deprecation","href":"/api-reference/versioning"},{"title":"Best Practices","icon":"stars","href":"/api-reference/best-practices"},{"title":"Two-Way Conversations","icon":"messages","href":"/api-reference/two-way-conversations"}]},{"group":"Webhooks","pages":[{"title":"Overview","icon":"webhook","href":"/api-reference/webhooks/overview"},{"title":"Setup \u0026 Configuration","icon":"plug","href":"/api-reference/webhooks/setup"},{"title":"Signature Validation","icon":"shield-check","href":"/api-reference/webhooks/signature-validation"},{"title":"Event Types","icon":"code","href":"/api-reference/webhooks/events"},{"title":"Delivery Error Codes","icon":"triangle-exclamation","href":"/api-reference/webhooks/error-codes"},{"title":"Retry Policy","icon":"rotate-right","href":"/api-reference/webhooks/retry-policy"}]},{"group":"Endpoints","pages":[{"group":"Text","pages":[{"group":"Projects","pages":[{"title":"List Projects","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /projects","href":"/api-reference/projects/list-projects"},{"title":"Create Project","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /projects","href":"/api-reference/projects/create-project"},{"title":"Get Project Stats (all)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /projects/stats","href":"/api-reference/projects/get-project-stats-all"},{"title":"Get Project","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /projects/{id}","href":"/api-reference/projects/get-project"},{"title":"Update Project","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /projects/{id}","href":"/api-reference/projects/update-project"},{"title":"Get Project Stats (single)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /projects/{id}/stats","href":"/api-reference/projects/get-project-stats-single"},{"title":"Get Project Throughput","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /projects/{id}/throughput","href":"/api-reference/projects/get-project-throughput"},{"title":"Get Survey Results","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /projects/{id}/survey-results","href":"/api-reference/projects/get-survey-results"},{"title":"Test Project","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /projects/{id}/test","href":"/api-reference/projects/test-project"},{"title":"Schedule Project","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /projects/{id}/schedule","href":"/api-reference/projects/schedule-project"},{"title":"Unschedule Project","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /projects/{id}/unschedule","href":"/api-reference/projects/unschedule-project"},{"title":"Pause Project","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /projects/{id}/pause","href":"/api-reference/projects/pause-project"},{"title":"Copy Project","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /projects/{id}/copy","href":"/api-reference/projects/copy-project"}]},{"group":"Phone Numbers","pages":[{"title":"List Phone Numbers","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /phone-numbers","href":"/api-reference/phone-numbers/list-phone-numbers"}]},{"group":"Toll-Free Verifications","pages":[{"title":"List Toll-Free Verifications","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /toll-free-verifications","href":"/api-reference/toll-free-verifications/list-toll-free-verifications"},{"title":"Get Toll-Free Verification","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /toll-free-verifications/{id}","href":"/api-reference/toll-free-verifications/get-toll-free-verification"}]},{"group":"Brands","pages":[{"title":"List Brands","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /brands","href":"/api-reference/brands/list-brands"}]},{"group":"10DLC Campaigns","pages":[{"title":"List Campaigns","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /campaigns","href":"/api-reference/10dlc-campaigns/list-campaigns"},{"title":"Get Campaign Throughput","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /campaigns/{id}/throughput","href":"/api-reference/10dlc-campaigns/get-campaign-throughput"}]}]},{"group":"Email","pages":[{"group":"Email Campaigns","pages":[{"title":"List Campaigns","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /email/campaigns","href":"/api-reference/email-campaigns/list-campaigns"},{"title":"Create Campaign","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /email/campaigns","href":"/api-reference/email-campaigns/create-campaign"},{"title":"Get Campaign","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /email/campaigns/{id}","href":"/api-reference/email-campaigns/get-campaign"},{"title":"Schedule Campaign","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /email/campaigns/{id}/schedule","href":"/api-reference/email-campaigns/schedule-campaign"},{"title":"Unschedule Campaign","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /email/campaigns/{id}/unschedule","href":"/api-reference/email-campaigns/unschedule-campaign"},{"title":"Get Campaign Stats","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /email/campaigns/{id}/stats","href":"/api-reference/email-campaigns/get-campaign-stats"}]},{"group":"Email Templates","pages":[{"title":"List Email Templates","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /email/templates","href":"/api-reference/email-templates/list-email-templates"},{"title":"Create Email Template","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /email/templates","href":"/api-reference/email-templates/create-email-template"},{"title":"Get Email Template","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /email/templates/{id}","href":"/api-reference/email-templates/get-email-template"}]},{"group":"Email Senders","pages":[{"title":"List Sender Identities","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /email/senders","href":"/api-reference/email-senders/list-sender-identities"},{"title":"Get Sender Identity","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /email/senders/{id}","href":"/api-reference/email-senders/get-sender-identity"}]},{"group":"Email Suppressions","pages":[{"title":"List Suppressions","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /email/suppressions","href":"/api-reference/email-suppressions/list-suppressions"},{"title":"Add Suppressions","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /email/suppressions","href":"/api-reference/email-suppressions/add-suppressions"},{"title":"Remove Suppressions","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /email/suppressions","href":"/api-reference/email-suppressions/remove-suppressions"}]}]},{"group":"Assets","pages":[{"group":"Contact Lists","pages":[{"title":"List Contact Lists","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /contact-lists","href":"/api-reference/contact-lists/list-contact-lists"},{"title":"Create Contact List","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /contact-lists","href":"/api-reference/contact-lists/create-contact-list"},{"title":"Get Contact List","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /contact-lists/{id}","href":"/api-reference/contact-lists/get-contact-list"},{"title":"Delete Contact List","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /contact-lists/{id}","href":"/api-reference/contact-lists/delete-contact-list"},{"title":"Import List","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /contact-lists/import","href":"/api-reference/contact-lists/import-list"},{"title":"List Contact List Emails","description":"List a list's email members, newest id last. Page with `cursor`: pass the previous page's `next_cursor` until it is null. A list with no emails returns an empty page.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /contact-lists/{id}/emails","href":"/api-reference/contact-lists/list-contact-list-emails"},{"title":"Add Contact List Emails","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /contact-lists/{id}/emails","href":"/api-reference/contact-lists/add-contact-list-emails"},{"title":"Analyze Contact List","description":"Asynchronous, billable job: trigger LRN mobile/landline/VoIP/invalid analysis for an imported list. Charged per lookup to the list's organization for the numbers not yet analyzed; the wallet is checked first, and `402` `INSUFFICIENT_BALANCE` queues nothing. Send an `Idempotency-Key` so a retried call is not charged twice. Returns immediately with `202` and the `cost_cents` and `numbers_queued` for the run. If nothing is left to analyze it returns `200` with `analysis.status` `complete`, `numbers_queued` 0 and `cost_cents` 0. If analysis is already running it returns `202` with `cost_cents` 0 and charges nothing. Poll `GET /contact-lists/{id}` until `analysis.status` is `complete`, or subscribe to the `contact_list.analyzed` webhook, then fetch the results with `GET /contact-lists/{id}/download?type=analyzed`. A project cannot be created, updated with, or scheduled on a list whose analysis is in progress; the request fails with `409` `LIST_ANALYSIS_IN_PROGRESS`.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /contact-lists/{id}/analyze","href":"/api-reference/contact-lists/analyze-contact-list"},{"title":"Download Contact List CSV","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /contact-lists/{id}/download","href":"/api-reference/contact-lists/download-contact-list-csv"}]},{"group":"Media Files","pages":[{"title":"List Media Files","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /media","href":"/api-reference/media-files/list-media-files"},{"title":"Import Media","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /media","href":"/api-reference/media-files/import-media"},{"title":"Get Media File","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /media/{id}","href":"/api-reference/media-files/get-media-file"},{"title":"Delete Media File","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /media/{id}","href":"/api-reference/media-files/delete-media-file"}]}]},{"group":"Billing \u0026 Usage","pages":[{"group":"Billing","pages":[{"title":"Get Usage","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /ledger/usage","href":"/api-reference/billing/get-usage"},{"title":"Get Usage by Initiator","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /ledger/usage/by-initiator","href":"/api-reference/billing/get-usage-by-initiator"}]},{"group":"Analytics","pages":[{"title":"Get Message Stats","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /messages/stats","href":"/api-reference/analytics/get-message-stats"}]}]},{"group":"Admin","pages":[{"group":"Sending Domains","pages":[{"title":"List Sending Domains","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /email/domains","href":"/api-reference/sending-domains/list-sending-domains"},{"title":"Get Sending Domain","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /email/domains/{id}","href":"/api-reference/sending-domains/get-sending-domain"}]},{"group":"Tracking Domains","pages":[{"title":"List Tracking Domains","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /tracking-domains","href":"/api-reference/tracking-domains/list-tracking-domains"}]},{"group":"Organizations","pages":[{"title":"List Organizations","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /organizations","href":"/api-reference/organizations/list-organizations"},{"title":"Get Hierarchy","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /hierarchy","href":"/api-reference/organizations/get-hierarchy"}]}]}]}]}]},"basePath":"","title":"Add Contact List Emails - Political Comms","buildId":"dpl_596ePT575z4qnAFksq1biRW97aLY","deploymentId":"dpl_596ePT575z4qnAFksq1biRW97aLY","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-C9Wu0MeN.js","utils-jWgu-6Qf.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DBD8f9qn.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-BGuX1ui5.js","snippetPresets-Evy63nQB.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BQHO1lnV.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-B6C8m-t_.js","shallow-BG4cT0fH.js","getApiPlaygroundDisplay-CgEPrE-D.js","CodeSnippet-CU8JyZ9N.js","CodeSnippets-BnxHU32T.js","Page-D6S0Yh6q.js","getPastedJson-CwiYOonh.js","icon-DYDpWmDf.js","MethodPill-C-J-l7_c.js","DuplicateIcon-B6ARwg9w.js","createIcon-Dsv4MtDq.js","DynamicMarkdown-CtasenyM.js","SectionHeading-YNcgYwjB.js","axios-vUo_bRtp.js","Markdown-CwLx6PAg.js","clsx-C3kuh_dz.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CmKHfscc.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-U3mI6Ljh.js"]}