Takes contact ids, not numbers: a campaign must not conjure customer records as a side effect of being filled in. Idempotent — a contact already on the list is skipped. At most 10,000 per request.
Optional module: Outbound. Served only where the module is installed and switched on; elsewhere this operation is absent from the server’s own spec, and answers 403 module_disabled while the module is switched off or unlicensed, or 404 where the server was built without it.
Every request sends Authorization: Bearer <token>. The token is either a panel session (a JWT from /auth/login, 12 hours) or an API key ft_<id>_<secret>. An API key is accepted only from an address on its IP allowlist (403 ip_not_allowed otherwise; 403 ip_allowlist_required for an old key that has none), is limited to its rate per minute (429 rate_limited with Retry-After; X-RateLimit-Limit/Remaining/Reset on every response), and at most 60 call placements a minute.
Any string up to 255 characters. A retry with the same key and the same body gets the first answer again (with Idempotent-Replayed: true) instead of doing it twice; the same key with a different body is 409 idempotency_mismatch; while the first is still running, 409 idempotency_in_progress. Kept 24 hours.
People one by one, each with your reference and variables. A number with no contact creates one (contact.created). variables are the call's own ({{name}} in the message or workflow, and an AI agent's brief) and come back with the result.
Load everyone in this segment. A COPY, not a reference: the campaign's list is a state machine recording whether each person has been dialled, so a list that read a segment live would change under a running campaign and could re-offer somebody already called. There is no size limit on this form, because the work happens in the database.
How many on the list will never be dialled -- do-not-call or blacklisted. Reported here rather than left to be found on the call sheet: it is the difference between the list somebody chose and the calls that will happen.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"FireTone","colors":{"primary":"#ff4a1c","light":"#fb923c","dark":"#c2410c"},"logo":{"light":"https://mintcdn.com/firetone/u4xTBZEDCoIufOWT/images/firetone-wordmark.svg?fit=max\u0026auto=format\u0026n=u4xTBZEDCoIufOWT\u0026q=85\u0026s=c5a3d1e942e8000d644aefc1cf3811d2","dark":"https://mintcdn.com/firetone/u4xTBZEDCoIufOWT/images/firetone-wordmark-white.svg?fit=max\u0026auto=format\u0026n=u4xTBZEDCoIufOWT\u0026q=85\u0026s=25c875c165cbfe994b4b47bf98c6bc84"},"favicon":"https://mintcdn.com/firetone/u4xTBZEDCoIufOWT/images/firetone-mark.svg?fit=max\u0026auto=format\u0026n=u4xTBZEDCoIufOWT\u0026q=85\u0026s=92060d948b746862cf08f204277bc4ef","api":{"playground":{"display":"none"},"examples":{"languages":["curl","javascript","python"]}},"navbar":{"primary":{"type":"button","label":"Control panel","href":"https://firet.one"}},"footer":{"socials":{"github":"https://github.com/RemotiQ"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"firetone","hasAudioNarration":false,"actualSubdomain":"firetone","customDomains":["docs.firetone.com.au"],"gitSource":{"type":"github","owner":"remotiq","repo":"firetone-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6ac34d3dde45b430245d2a62","collectionId":"736d1bca-eddc-48af-8f67-ed57fbb706f6","liveDeploymentHistoryId":"6ac34d3dde45b430245d2a62","schemaVersion":"v3"},"entitlements":{},"buildId":"6ac34d3dde45b430245d2a62","clientVersion":"0.0.4076","searchFilterCounts":[{"language":"default","tag":"API","count":116},{"language":"default","tag":"API reference","count":100},{"language":"default","tag":"Running a tenant","count":30},{"language":"default","tag":"Provisioning","count":21},{"language":"default","tag":"Running the platform","count":17},{"language":"default","tag":"Calls","count":14},{"language":"default","tag":"Operating","count":13},{"language":"default","tag":"Campaigns","count":13},{"language":"default","tag":"Live","count":12},{"language":"default","tag":"Integrations","count":11}]},"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":"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},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/campaigns/load-contacts-into-a-campaign","slug":"/api-reference/campaigns/load-contacts-into-a-campaign","pageMetadata":{"title":"Load contacts into a campaign","description":"Takes contact ids, not numbers: a campaign must not conjure customer records as a side effect of being filled in. Idempotent -- a contact already on the list is skipped. At most 10,000 per request.\n\n**Optional module: Outbound.** Served only where the module is installed and switched on; elsewhere this operation is absent from the server's own spec, and answers 403 `module_disabled` while the module is switched off or unlicensed, or 404 where the server was built without it.","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json post /campaigns/{id}/contacts","href":"/api-reference/campaigns/load-contacts-into-a-campaign","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n strong: \"strong\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"Takes contact ids, not numbers: a campaign must not conjure customer records as a side effect of being filled in. Idempotent — a contact already on the list is skipped. At most 10,000 per request.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Optional module: Outbound.\"\n }), \" Served only where the module is installed and switched on; elsewhere this operation is absent from the server’s own spec, and answers 403 \", _jsx(_components.code, {\n children: \"module_disabled\"\n }), \" while the module is switched off or unlicensed, or 404 where the server was built without it.\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Load contacts into a campaign","description":"Takes contact ids, not numbers: a campaign must not conjure customer records as a side effect of being filled in. Idempotent -- a contact already on the list is skipped. At most 10,000 per request.\n\n**Optional module: Outbound.** Served only where the module is installed and switched on; elsewhere this operation is absent from the server's own spec, and answers 403 `module_disabled` while the module is switched off or unlicensed, or 404 where the server was built without it.","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json post /campaigns/{id}/contacts","href":"/api-reference/campaigns/load-contacts-into-a-campaign","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"description":"Takes contact ids, not numbers: a campaign must not conjure customer records as a side effect of being filled in. Idempotent -- a contact already on the list is skipped. At most 10,000 per request.\n\n**Optional module: Outbound.** Served only where the module is installed and switched on; elsewhere this operation is absent from the server's own spec, and answers 403 `module_disabled` while the module is switched off or unlicensed, or 404 where the server was built without it.","operationId":"postCampaignsIdContacts","parameters":["0e36029a-d50c-4272-9b22-4d1143253a66","f61d580f-72ad-4197-bf34-2d4283cccc16"],"requestBody":"391f5fad-b960-4fad-b4d8-53762566a99a","responses":{"200":"68a3f08a-8dbc-4067-a496-7540c8e3ac4b","400":"75c7adf8-9319-44bd-9583-e2d27ebaac6a","401":"affb312f-3377-4419-a20b-433a86141f63","403":"8e076c90-706c-4b19-b9b1-a7c049123d73","404":"d073f5d5-1423-4383-9679-1449313fab8e"},"summary":"Load contacts into a campaign","tags":["Campaigns"],"x-module":"outbound","method":"post","type":"path","servers":["de7ae319-dad5-4ccd-81a0-92f2ed82202e"],"security":["241f09be-a9f2-4825-90d6-a7c0f34aa08e"],"path":"/campaigns/{id}/contacts","baseUrlOptions":["https://{host}/api/v1"],"title":"Load contacts into a campaign","codeSamples":[],"requestExampleLanguages":["bash","javascript","python"],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"0e36029a-d50c-4272-9b22-4d1143253a66":{"description":"Any string up to 255 characters. A retry with the same key and the same body gets the first answer again (with Idempotent-Replayed: true) instead of doing it twice; the same key with a different body is 409 idempotency_mismatch; while the first is still running, 409 idempotency_in_progress. Kept 24 hours.","in":"header","name":"Idempotency-Key","required":false,"schema":{"maxLength":255,"type":"string","isRequired":false,"description":"Any string up to 255 characters. A retry with the same key and the same body gets the first answer again (with Idempotent-Replayed: true) instead of doing it twice; the same key with a different body is 409 idempotency_mismatch; while the first is still running, 409 idempotency_in_progress. Kept 24 hours.","uniqueKey":"","typeLabel":"string"}},"f61d580f-72ad-4197-bf34-2d4283cccc16":{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string","isRequired":true,"uniqueKey":"","typeLabel":"string\u003cuuid>"}}},"requestBody":{"content":{"application/json":{"schema":{"description":"Send one of items, contact_ids or segment_id.","properties":{"contact_ids":{"items":{"format":"uuid","type":"string","uniqueKey":"contact_ids.items.[INDEX]","typeLabel":"string\u003cuuid>"},"maxItems":10000,"type":"array","uniqueKey":"contact_ids","typeLabel":"string\u003cuuid>[]"},"items":{"description":"People one by one, each with your reference and variables. A number with no contact creates one (contact.created). variables are the call's own ({{name}} in the message or workflow, and an AI agent's brief) and come back with the result.","items":{"properties":{"contact_id":{"format":"uuid","type":"string","uniqueKey":"\\items.items.[INDEX].contact_id","typeLabel":"string\u003cuuid>"},"e164":{"type":"string","uniqueKey":"\\items.items.[INDEX].e164","typeLabel":"string"},"name":{"type":"string","uniqueKey":"\\items.items.[INDEX].name","typeLabel":"string"},"reference":{"maxLength":128,"type":"string","uniqueKey":"\\items.items.[INDEX].reference","typeLabel":"string"},"variables":{"additionalProperties":{"type":"string","uniqueKey":"\\items.items.[INDEX].variables.additionalProperties","typeLabel":"string"},"maxProperties":30,"type":"object","uniqueKey":"\\items.items.[INDEX].variables","typeLabel":"object"}},"type":"object","uniqueKey":"\\items.items.[INDEX]","typeLabel":"object"},"maxItems":10000,"type":"array","uniqueKey":"\\items","typeLabel":"object[]"},"segment_id":{"description":"Load everyone in this segment. A COPY, not a reference: the campaign's list is a state machine recording whether each person has been dialled, so a list that read a segment live would change under a running campaign and could re-offer somebody already called. There is no size limit on this form, because the work happens in the database.","format":"uuid","type":"string","uniqueKey":"segment_id","typeLabel":"string\u003cuuid>"}},"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"contact_ids":["3c90c3cc-0d44-4b50-8888-8dd25736052a"],"items":[{"contact_id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","e164":"\u003cstring>","name":"\u003cstring>","reference":"\u003cstring>","variables":{}}],"segment_id":"3c90c3cc-0d44-4b50-8888-8dd25736052a"}}},"exampleType":"generated"}},"required":true,"exampleType":"generated"},"responses":{"68a3f08a-8dbc-4067-a496-7540c8e3ac4b":{"content":{"application/json":{"schema":{"properties":{"added":{"type":"integer","uniqueKey":"added","typeLabel":"integer"},"offered":{"description":"How many ids were sent. Zero when loading from a segment.","type":"integer","uniqueKey":"offered","typeLabel":"integer"},"suppressed":{"description":"How many on the list will never be dialled -- do-not-call or blacklisted. Reported here rather than left to be found on the call sheet: it is the difference between the list somebody chose and the calls that will happen.","type":"integer","uniqueKey":"suppressed","typeLabel":"integer"}},"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"added":123,"offered":123,"suppressed":123}}},"exampleType":"generated"}},"description":"OK","exampleType":"generated"},"75c7adf8-9319-44bd-9583-e2d27ebaac6a":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"enum":["invalid_request","invalid_credentials","unauthenticated","forbidden","not_found","conflict","internal"],"type":"string","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"}},"required":["code","message"],"type":"object","isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"invalid_request","message":"\u003cstring>"}}}},"exampleType":"generated"}},"description":"The request is not valid. The message names every field that is wrong.","exampleType":"generated"},"affb312f-3377-4419-a20b-433a86141f63":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"enum":["invalid_request","invalid_credentials","unauthenticated","forbidden","not_found","conflict","internal"],"type":"string","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"}},"required":["code","message"],"type":"object","isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"invalid_request","message":"\u003cstring>"}}}},"exampleType":"generated"}},"description":"Missing, invalid or expired token","exampleType":"generated"},"8e076c90-706c-4b19-b9b1-a7c049123d73":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"enum":["invalid_request","invalid_credentials","unauthenticated","forbidden","not_found","conflict","internal"],"type":"string","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"}},"required":["code","message"],"type":"object","isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"invalid_request","message":"\u003cstring>"}}}},"exampleType":"generated"}},"description":"Outside the caller's scope, or insufficient role","exampleType":"generated"},"d073f5d5-1423-4383-9679-1449313fab8e":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"enum":["invalid_request","invalid_credentials","unauthenticated","forbidden","not_found","conflict","internal"],"type":"string","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"}},"required":["code","message"],"type":"object","isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"invalid_request","message":"\u003cstring>"}}}},"exampleType":"generated"}},"description":"Not found, or not visible to the caller","exampleType":"generated"}},"security":{"241f09be-a9f2-4825-90d6-a7c0f34aa08e":{"bearerAuth":{"bearerFormat":"JWT or API key","description":"Every request sends `Authorization: Bearer \u003ctoken>`. The token is either a panel session (a JWT from /auth/login, 12 hours) or an API key `ft_\u003cid>_\u003csecret>`. An API key is accepted only from an address on its IP allowlist (403 ip_not_allowed otherwise; 403 ip_allowlist_required for an old key that has none), is limited to its rate per minute (429 rate_limited with Retry-After; X-RateLimit-Limit/Remaining/Reset on every response), and at most 60 call placements a minute.","scheme":"bearer","type":"http","scopes":[]}}},"servers":{"de7ae319-dad5-4ccd-81a0-92f2ed82202e":{"description":"Your platform's API host","url":"https://{host}/api/v1","variables":{"host":{"default":"api.firet.one"}}}},"processedSecurityOptions":[{"schemes":[{"scheme":{"bearerFormat":"JWT or API key","description":"Every request sends `Authorization: Bearer \u003ctoken>`. The token is either a panel session (a JWT from /auth/login, 12 hours) or an API key `ft_\u003cid>_\u003csecret>`. An API key is accepted only from an address on its IP allowlist (403 ip_not_allowed otherwise; 403 ip_allowlist_required for an old key that has none), is limited to its rate per minute (429 rate_limited with Retry-After; X-RateLimit-Limit/Remaining/Reset on every response), and at most 60 call placements a minute.","scheme":"bearer","type":"http","scopes":[]},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Every request sends `Authorization: Bearer \u003ctoken>`. The token is either a panel session (a JWT from /auth/login, 12 hours) or an API key `ft_\u003cid>_\u003csecret>`. An API key is accepted only from an address on its IP allowlist (403 ip_not_allowed otherwise; 403 ip_allowlist_required for an old key that has none), is limited to its rate per minute (429 rate_limited with Retry-After; X-RateLimit-Limit/Remaining/Reset on every response), and at most 60 call placements a minute.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"api-reference/openapi-public.json"},"subdomain":"firetone","siteName":"FireTone","title":"Load contacts into a campaign - FireTone","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-05T07:09:54.424Z","originalFileLocation":"api-reference/campaigns/load-contacts-into-a-campaign.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Takes contact ids, not numbers: a campaign must not conjure customer records as a side effect of being filled in. Idempotent -- a contact already on the list is skipped. At most 10,000 per request. Optional module: Outbound. Served only where the module is installed and switched on; elsewhere this operation is absent from the server\u0026#x27;s own spec, and answers 403 module_disabled while the module is switched off or unlicensed, or 404 where the server was built without it.\">\u003cmeta data-mint-head name=\"application-name\" content=\"FireTone\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/firetone/PKz9Lg6FVpLn28Sy/_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/firetone/PKz9Lg6FVpLn28Sy/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/firetone/PKz9Lg6FVpLn28Sy/_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/firetone/PKz9Lg6FVpLn28Sy/_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/firetone/PKz9Lg6FVpLn28Sy/_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/firetone/PKz9Lg6FVpLn28Sy/_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/firetone/PKz9Lg6FVpLn28Sy/_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/firetone/PKz9Lg6FVpLn28Sy/_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/firetone/PKz9Lg6FVpLn28Sy/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Load contacts into a campaign - FireTone\">\u003cmeta data-mint-head property=\"og:description\" content=\"Takes contact ids, not numbers: a campaign must not conjure customer records as a side effect of being filled in. Idempotent -- a contact already on the list is skipped. At most 10,000 per request. Optional module: Outbound. Served only where the module is installed and switched on; elsewhere this operation is absent from the server\u0026#x27;s own spec, and answers 403 module_disabled while the module is switched off or unlicensed, or 404 where the server was built without it.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"FireTone\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.firetone.com.au/api-reference/campaigns/load-contacts-into-a-campaign\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://firetone.mintlify.site/_mintlify/api/og/v2?division=Campaigns\u0026amp;title=Load+contacts+into+a+campaign\u0026amp;description=Takes+contact+ids%2C+not+numbers%3A+a+campaign+must+not+conjure+customer+records+as+a+side+effect+of+being+filled+in.+Idempotent+--+a+contact+already+on+the+list+is\u0026amp;theme=8bd671d7f61e2dd25bf8b1f2\u0026amp;signature=a796f8e945e0484ef81e5bba33b29a6114ff04fe8808f04511365f76852da5a7\">\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=\"Load contacts into a campaign - FireTone\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Takes contact ids, not numbers: a campaign must not conjure customer records as a side effect of being filled in. Idempotent -- a contact already on the list is skipped. At most 10,000 per request. Optional module: Outbound. Served only where the module is installed and switched on; elsewhere this operation is absent from the server\u0026#x27;s own spec, and answers 403 module_disabled while the module is switched off or unlicensed, or 404 where the server was built without it.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://firetone.mintlify.site/_mintlify/api/og/v2?division=Campaigns\u0026amp;title=Load+contacts+into+a+campaign\u0026amp;description=Takes+contact+ids%2C+not+numbers%3A+a+campaign+must+not+conjure+customer+records+as+a+side+effect+of+being+filled+in.+Idempotent+--+a+contact+already+on+the+list+is\u0026amp;theme=8bd671d7f61e2dd25bf8b1f2\u0026amp;signature=a796f8e945e0484ef81e5bba33b29a6114ff04fe8808f04511365f76852da5a7\">\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/firetone/PKz9Lg6FVpLn28Sy/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"FireTone\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#ff4a1c\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.firetone.com.au/api-reference/campaigns/load-contacts-into-a-campaign\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/campaigns/load-contacts-into-a-campaign.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.firetone.com.au/#organization\",\"name\":\"FireTone\",\"url\":\"https://docs.firetone.com.au\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/firetone/u4xTBZEDCoIufOWT/images/firetone-wordmark.svg?fit=max\u0026auto=format\u0026n=u4xTBZEDCoIufOWT\u0026q=85\u0026s=c5a3d1e942e8000d644aefc1cf3811d2\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.firetone.com.au#website\",\"name\":\"FireTone\",\"url\":\"https://docs.firetone.com.au\",\"publisher\":{\"@id\":\"https://docs.firetone.com.au/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.firetone.com.au/api-reference/campaigns/load-contacts-into-a-campaign#webpage\",\"url\":\"https://docs.firetone.com.au/api-reference/campaigns/load-contacts-into-a-campaign\",\"name\":\"Load contacts into a campaign\",\"description\":\"Takes contact ids, not numbers: a campaign must not conjure customer records as a side effect of being filled in. Idempotent -- a contact already on the list is skipped. At most 10,000 per request. Optional module: Outbound. Served only where the module is installed and switched on; elsewhere this operation is absent from the server's own spec, and answers 403 module_disabled while the module is switched off or unlicensed, or 404 where the server was built without it.\",\"dateModified\":\"2026-10-05T07:09:54.424Z\",\"isPartOf\":{\"@id\":\"https://docs.firetone.com.au#website\"},\"breadcrumb\":{\"@id\":\"https://docs.firetone.com.au/api-reference/campaigns/load-contacts-into-a-campaign#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.firetone.com.au/api-reference/campaigns/load-contacts-into-a-campaign#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"API reference\",\"item\":\"https://docs.firetone.com.au/api-reference/provisioning/list-agents\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Campaigns\",\"item\":\"https://docs.firetone.com.au/api-reference/campaigns/list-campaigns\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Load contacts into a campaign\",\"item\":\"https://docs.firetone.com.au/api-reference/campaigns/load-contacts-into-a-campaign\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.firetone.com.au/api-reference/campaigns/load-contacts-into-a-campaign#apireference\",\"headline\":\"Load contacts into a campaign\",\"name\":\"Load contacts into a campaign\",\"description\":\"Takes contact ids, not numbers: a campaign must not conjure customer records as a side effect of being filled in. Idempotent -- a contact already on the list is skipped. At most 10,000 per request. Optional module: Outbound. Served only where the module is installed and switched on; elsewhere this operation is absent from the server's own spec, and answers 403 module_disabled while the module is switched off or unlicensed, or 404 where the server was built without it.\",\"url\":\"https://docs.firetone.com.au/api-reference/campaigns/load-contacts-into-a-campaign\",\"mainEntityOfPage\":{\"@id\":\"https://docs.firetone.com.au/api-reference/campaigns/load-contacts-into-a-campaign#webpage\"},\"dateModified\":\"2026-10-05T07:09:54.424Z\",\"publisher\":{\"@id\":\"https://docs.firetone.com.au/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.firetone.com.au#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"FireTone\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"FireTone","nav":{"global":null,"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":""}]},{"tab":"Running a tenant","pages":[{"title":"Running a tenant","href":"/tenant/inbound/processes"}]},{"tab":"On the phones","pages":[{"title":"On the phones","href":"/agent/signing-in"}]},{"tab":"Supervising","pages":[{"title":"Supervising","href":"/supervisor/what-you-can-do"}]},{"tab":"FireTone Agent","pages":[{"title":"FireTone Agent","href":"/mobile"}]},{"tab":"Running the platform","pages":[{"title":"Running the platform","href":"/operator/organisations"}]},{"tab":"API","groups":[{"group":"Start","pages":[{"title":"Quickstart","href":"/api/quickstart"},{"title":"Authentication","href":"/api/authentication"},{"title":"Conventions","href":"/api/conventions"},{"title":"Errors and limits","href":"/api/errors"}]},{"group":"Building","pages":[{"title":"Placing calls","href":"/api/calls"},{"title":"IVRs and numbers","href":"/api/ivr-and-numbers"},{"title":"Conference rooms","href":"/api/conferences"},{"title":"Running campaigns","href":"/api/campaigns"},{"title":"Contacts and call data","href":"/api/contacts-and-data"},{"title":"Webhooks","href":"/api/webhooks"},{"title":"Messages to the phone","href":"/api/call-info"},{"title":"Live events","href":"/api/events"},{"title":"Recipes","href":"/api/recipes"}]},{"group":"Tools","pages":[{"title":"The Developer section","href":"/api/developer"},{"title":"Reference","href":"/api/reference"},{"title":"Changelog","href":"/api/changelog"}]},{"group":"API reference","pages":[{"group":"Provisioning","pages":[{"title":"List agents","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /agents","href":"/api-reference/provisioning/list-agents"},{"title":"List conference rooms","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /conference-rooms","href":"/api-reference/provisioning/list-conference-rooms"},{"title":"Create a conference room","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json post /conference-rooms","href":"/api-reference/provisioning/create-a-conference-room"},{"title":"Get a conference room","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /conference-rooms/{id}","href":"/api-reference/provisioning/get-a-conference-room"},{"title":"Delete a conference room","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json delete /conference-rooms/{id}","href":"/api-reference/provisioning/delete-a-conference-room"},{"title":"Update a conference room","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json patch /conference-rooms/{id}","href":"/api-reference/provisioning/update-a-conference-room"},{"title":"Dial somebody into a room","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json post /conference-rooms/{id}/dial","href":"/api-reference/provisioning/dial-somebody-into-a-room"},{"title":"Set which extensions need no PIN for a room","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json put /conference-rooms/{id}/exemptions","href":"/api-reference/provisioning/set-which-extensions-need-no-pin-for-a-room"},{"title":"Which of a room's sessions a virtual agent sat in","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /conference-rooms/{id}/meetings","href":"/api-reference/provisioning/which-of-a-rooms-sessions-a-virtual-agent-sat-in"},{"title":"Set a room's default members","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json put /conference-rooms/{id}/members","href":"/api-reference/provisioning/set-a-rooms-default-members"},{"title":"A room's history","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /conference-rooms/{id}/sessions","href":"/api-reference/provisioning/a-rooms-history"},{"title":"What the virtual agent made of a session","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /conference-rooms/{id}/sessions/{sid}/meeting","href":"/api-reference/provisioning/what-the-virtual-agent-made-of-a-session"},{"title":"Play a session's recording","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /conference-rooms/{id}/sessions/{sid}/recording/audio","href":"/api-reference/provisioning/play-a-sessions-recording"},{"title":"List DIDs","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /dids","href":"/api-reference/provisioning/list-dids"},{"title":"Assign a number","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json post /dids","href":"/api-reference/provisioning/assign-a-number"},{"title":"Get a number","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /dids/{id}","href":"/api-reference/provisioning/get-a-number"},{"title":"Delete a number","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json delete /dids/{id}","href":"/api-reference/provisioning/delete-a-number"},{"title":"Update a number","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json patch /dids/{id}","href":"/api-reference/provisioning/update-a-number"},{"title":"List extensions","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /extensions","href":"/api-reference/provisioning/list-extensions"},{"title":"One extension","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /extensions/{id}","href":"/api-reference/provisioning/one-extension"},{"title":"List virtual agent profiles","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /virtual-agent-profiles","href":"/api-reference/provisioning/list-virtual-agent-profiles"}]},{"group":"Auth","pages":[{"title":"Resolved scope for the current token","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /auth/me","href":"/api-reference/auth/resolved-scope-for-the-current-token"}]},{"group":"Live","pages":[{"title":"A call request's progress","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /call-requests/{id}","href":"/api-reference/live/a-call-requests-progress"},{"title":"Click to call","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json post /calls","href":"/api-reference/live/click-to-call"},{"title":"Live channels","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /calls/active","href":"/api-reference/live/live-channels"},{"title":"An AI agent calls a number","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json post /calls/ai","href":"/api-reference/live/an-ai-agent-calls-a-number"},{"title":"Ring a number into an IVR","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json post /calls/ivr","href":"/api-reference/live/ring-a-number-into-an-ivr"},{"title":"One call","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /calls/{uuid}","href":"/api-reference/live/one-call"},{"title":"Hang up a live call","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json delete /calls/{uuid}","href":"/api-reference/live/hang-up-a-live-call"},{"title":"What was posted to a call's callback URL","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /calls/{uuid}/callbacks","href":"/api-reference/live/what-was-posted-to-a-calls-callback-url"},{"title":"Put a live call on hold","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json post /calls/{uuid}/hold","href":"/api-reference/live/put-a-live-call-on-hold"},{"title":"Transfer a live call to an extension or queue","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json post /calls/{uuid}/transfer","href":"/api-reference/live/transfer-a-live-call-to-an-extension-or-queue"},{"title":"Take a live call off hold","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json post /calls/{uuid}/unhold","href":"/api-reference/live/take-a-live-call-off-hold"},{"title":"WebSocket event stream","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /events","href":"/api-reference/live/websocket-event-stream"}]},{"group":"Calls","pages":[{"title":"Merge two of your calls, or dial a third party into this one","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json post /calls/{uuid}/conference","href":"/api-reference/calls/merge-two-of-your-calls-or-dial-a-third-party-into-this-one"},{"title":"Get one call","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /cdrs/{uuid}","href":"/api-reference/calls/get-one-call"},{"title":"Download the recording","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /cdrs/{uuid}/recording/audio","href":"/api-reference/calls/download-the-recording"},{"title":"Rooms live right now","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /conferences","href":"/api-reference/calls/rooms-live-right-now"},{"title":"The live room a call is in","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /conferences/by-call/{uuid}","href":"/api-reference/calls/the-live-room-a-call-is-in"},{"title":"Who is in a room now","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /conferences/{room}","href":"/api-reference/calls/who-is-in-a-room-now"},{"title":"End a room","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json post /conferences/{room}/end","href":"/api-reference/calls/end-a-room"},{"title":"Lock a room","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json post /conferences/{room}/lock","href":"/api-reference/calls/lock-a-room"},{"title":"Remove a member","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json post /conferences/{room}/members/{member}/kick","href":"/api-reference/calls/remove-a-member"},{"title":"Mute a member","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json post /conferences/{room}/members/{member}/mute","href":"/api-reference/calls/mute-a-member"},{"title":"Unmute a member","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json post /conferences/{room}/members/{member}/unmute","href":"/api-reference/calls/unmute-a-member"},{"title":"Mute or unmute everyone but the moderators","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json post /conferences/{room}/mute-all","href":"/api-reference/calls/mute-or-unmute-everyone-but-the-moderators"},{"title":"Start or stop recording a room","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json post /conferences/{room}/record","href":"/api-reference/calls/start-or-stop-recording-a-room"},{"title":"Unlock a room","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json post /conferences/{room}/unlock","href":"/api-reference/calls/unlock-a-room"}]},{"group":"Campaigns","pages":[{"title":"List campaigns","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /campaigns","href":"/api-reference/campaigns/list-campaigns"},{"title":"Create a campaign","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json post /campaigns","href":"/api-reference/campaigns/create-a-campaign"},{"title":"Get one campaign","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /campaigns/{id}","href":"/api-reference/campaigns/get-one-campaign"},{"title":"Update a campaign","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json patch /campaigns/{id}","href":"/api-reference/campaigns/update-a-campaign"},{"title":"The campaign's call list","description":"Paged, sortable and searchable, because this is what an operator reads BEFORE launching a campaign rather than a diagnostic dump afterwards. It was capped at 500 with no paging, no sort and no filter: a list of fifty thousand showed the first five hundred by state and gave no way to find anybody, which is a sample rather than a review.\n\nEach contact carries `fields` -- the columns their uploaded row had, the same values the agent sees mid-call -- and the campaign carries `list_columns`, the file's header in its own order, so the list renders as the table that was uploaded rather than as a phone book.\n\nA contact whose record is marked do-not-call shows as `suppressed`, so the list says why somebody will never be called rather than leaving an operator to wonder. Sort keys: attempt_count, e164, last_attempt_at, name, state.\n\n**Optional module: Outbound.** Served only where the module is installed and switched on; elsewhere this operation is absent from the server's own spec, and answers 403 `module_disabled` while the module is switched off or unlicensed, or 404 where the server was built without it.","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /campaigns/{id}/contacts","href":"/api-reference/campaigns/the-campaigns-call-list"},{"title":"Load contacts into a campaign","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json post /campaigns/{id}/contacts","href":"/api-reference/campaigns/load-contacts-into-a-campaign"},{"title":"What agents recorded about this campaign's calls","description":"Paged. An agent reads back what THEY recorded rather than the floor's; a supervisor sees their teams. The campaign's form supplies the field ORDER -- the answers cannot, because they are a jsonb object and jsonb does not preserve key order, a defect this codebase has already paid for once on the agent's own screen. Sort keys: agent, e164, submitted_at.","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /campaigns/{id}/dispositions","href":"/api-reference/campaigns/what-agents-recorded-about-this-campaigns-calls"},{"title":"Pause a campaign","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json post /campaigns/{id}/pause","href":"/api-reference/campaigns/pause-a-campaign"},{"title":"Each contact's final outcome","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /campaigns/{id}/results","href":"/api-reference/campaigns/each-contacts-final-outcome"},{"title":"Resume a campaign","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json post /campaigns/{id}/resume","href":"/api-reference/campaigns/resume-a-campaign"},{"title":"Start a campaign","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json post /campaigns/{id}/start","href":"/api-reference/campaigns/start-a-campaign"},{"title":"What a campaign is doing right now","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /campaigns/{id}/stats","href":"/api-reference/campaigns/what-a-campaign-is-doing-right-now"},{"title":"Stop a campaign","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json post /campaigns/{id}/stop","href":"/api-reference/campaigns/stop-a-campaign"}]},{"group":"Reporting","pages":[{"title":"List call detail records","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /cdrs","href":"/api-reference/reporting/list-call-detail-records"},{"title":"Export a period's calls","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /cdrs/export","href":"/api-reference/reporting/export-a-periods-calls"}]},{"group":"Conversations","pages":[{"title":"The conversation for a call","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /cdrs/{uuid}/conversation","href":"/api-reference/conversations/the-conversation-for-a-call"},{"title":"List conversations","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /conversations","href":"/api-reference/conversations/list-conversations"},{"title":"One conversation with its transcript","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /conversations/{id}","href":"/api-reference/conversations/one-conversation-with-its-transcript"}]},{"group":"Contacts","pages":[{"title":"List contacts","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /contacts","href":"/api-reference/contacts/list-contacts"},{"title":"Create a contact","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json post /contacts","href":"/api-reference/contacts/create-a-contact"},{"title":"Create or update a contact by your id","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json put /contacts/by-reference/{reference}","href":"/api-reference/contacts/create-or-update-a-contact-by-your-id"},{"title":"Who is this number","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /contacts/lookup","href":"/api-reference/contacts/who-is-this-number"},{"title":"One contact","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /contacts/{id}","href":"/api-reference/contacts/one-contact"},{"title":"Delete a contact","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json delete /contacts/{id}","href":"/api-reference/contacts/delete-a-contact"},{"title":"Update a contact","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json patch /contacts/{id}","href":"/api-reference/contacts/update-a-contact"}]},{"group":"Integrations","pages":[{"title":"Whether the callback secret is set","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /integration/callback-secret","href":"/api-reference/integrations/whether-the-callback-secret-is-set"},{"title":"Create or rotate the callback secret","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json post /integration/callback-secret","href":"/api-reference/integrations/create-or-rotate-the-callback-secret"},{"title":"List webhooks","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /webhooks","href":"/api-reference/integrations/list-webhooks"},{"title":"Create a webhook","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json post /webhooks","href":"/api-reference/integrations/create-a-webhook"},{"title":"The events a webhook can subscribe to","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /webhooks/events","href":"/api-reference/integrations/the-events-a-webhook-can-subscribe-to"},{"title":"Delete a webhook","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json delete /webhooks/{id}","href":"/api-reference/integrations/delete-a-webhook"},{"title":"Update a webhook","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json patch /webhooks/{id}","href":"/api-reference/integrations/update-a-webhook"},{"title":"A webhook's deliveries","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /webhooks/{id}/deliveries","href":"/api-reference/integrations/a-webhooks-deliveries"},{"title":"One delivery, with the exact body sent","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /webhooks/{id}/deliveries/{deliveryID}","href":"/api-reference/integrations/one-delivery-with-the-exact-body-sent"},{"title":"Send a delivery again","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json post /webhooks/{id}/deliveries/{deliveryID}/redeliver","href":"/api-reference/integrations/send-a-delivery-again"},{"title":"Send a test event","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json post /webhooks/{id}/test","href":"/api-reference/integrations/send-a-test-event"}]},{"group":"IVR","pages":[{"title":"List IVR flows","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /ivr-flows","href":"/api-reference/ivr/list-ivr-flows"},{"title":"Create an IVR flow","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json post /ivr-flows","href":"/api-reference/ivr/create-an-ivr-flow"},{"title":"Get one IVR flow with its graph","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /ivr-flows/{id}","href":"/api-reference/ivr/get-one-ivr-flow-with-its-graph"},{"title":"Delete an IVR flow","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json delete /ivr-flows/{id}","href":"/api-reference/ivr/delete-an-ivr-flow"},{"title":"Update an IVR flow's metadata","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json patch /ivr-flows/{id}","href":"/api-reference/ivr/update-an-ivr-flows-metadata"},{"title":"Get a one-time link to the IVR designer","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json post /ivr-flows/{id}/designer-session","href":"/api-reference/ivr/get-a-one-time-link-to-the-ivr-designer"},{"title":"Publish the draft revision","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json post /ivr-flows/{id}/publish","href":"/api-reference/ivr/publish-the-draft-revision"}]},{"group":"Tickets","pages":[{"title":"List tickets","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /tickets","href":"/api-reference/tickets/list-tickets"},{"title":"Raise a ticket","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json post /tickets","href":"/api-reference/tickets/raise-a-ticket"},{"title":"One ticket","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /tickets/{id}","href":"/api-reference/tickets/one-ticket"},{"title":"Update a ticket","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json patch /tickets/{id}","href":"/api-reference/tickets/update-a-ticket"},{"title":"Ticket history","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /tickets/{id}/updates","href":"/api-reference/tickets/ticket-history"},{"title":"Add a note","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json post /tickets/{id}/updates","href":"/api-reference/tickets/add-a-note"}]},{"group":"Voicemail","pages":[{"title":"List voicemail messages","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /voicemail","href":"/api-reference/voicemail/list-voicemail-messages"},{"title":"Get one voicemail message","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /voicemail/{id}","href":"/api-reference/voicemail/get-one-voicemail-message"},{"title":"Play a voicemail recording","deprecated":null,"version":null,"openapi":"/api-reference/openapi-public.json get /voicemail/{id}/audio","href":"/api-reference/voicemail/play-a-voicemail-recording"}]}]}]}]},"basePath":"","title":"Load contacts into a campaign - FireTone","buildId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","deploymentId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-i2a3QZ8E.js","utils-ChLwp8m0.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DRktVTDc.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-CA2pEs4T.js","snippetPresets-ClQ6XrKD.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-Ct_Lv36y.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-Cn2PYw9e.js","shallow-rkyymjXQ.js","getApiPlaygroundDisplay-BB9vkXtE.js","CodeSnippet-Bm5RU7m1.js","CodeSnippets-BgU9Deuz.js","Page-BUDYNlhG.js","getPastedJson-BD-6NNum.js","icon-8Z6tud2e.js","MethodPill-Tuzr4g3V.js","DuplicateIcon-0ceWFYhN.js","createIcon-FBXow_ST.js","DynamicMarkdown-CD8713Yy.js","SectionHeading-7zgzQbH-.js","axios-vUo_bRtp.js","Markdown-D7Ofw1oz.js","clsx-eKJ4rcii.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CwjSCXIK.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-9EK5IAXV.js"]}