Idempotency-Key is mandatory: async producers retry, and a replay
must return the same batch rather than dial the list twice. A replay
answers 202 with Idempotent-Replay: true; the same key with a
different body is 409.
Rows are admitted or reported, never silently dropped. A row whose
prompt says “your balance is ” with no balance is refused
here, where the caller can fix it, rather than dialed and reported as a
normal call. At most 10,000 rows per request — append the rest, or
upload a CSV.
Quota is checked at submission rather than 4,000 dials later.
Required. A retry with the same key and body replays the stored 2xx response; the same key with a different body is 409. A failed attempt releases the key.
How many calls to run at the same time. Cannot exceed the account's calls-at-once limit (maxConcurrentCalls on GET /v1/usage) — 2 on a new account; Vodex support raises it per customer. Omitted means the account's limit, up to 10.
When this batch may dial — outside it, rows wait rather than fail. A row's own timezone (the timezoneField variable) wins over timezone; a row with neither fails with no_timezone.
Dial the rows in blocks of this size, one at a time: only the first block dials, and POST /v1/batches/{id}/blocks/next clears each next one. Omitted dials the whole list at once.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Vodex API","description":"The public Vodex /v1 REST API — assistants, telephony, calls, batches, SMS and webhooks.","colors":{"primary":"#FF4D00","light":"#FF4D00","dark":"#FF4D00"},"logo":{"light":"https://mintcdn.com/vodex/78No6_lqTF_DicwD/logo/vodex-full.svg?fit=max\u0026auto=format\u0026n=78No6_lqTF_DicwD\u0026q=85\u0026s=abc36083e47f9332141ac1141d1cbe4a","dark":"https://mintcdn.com/vodex/78No6_lqTF_DicwD/logo/vodex-full.svg?fit=max\u0026auto=format\u0026n=78No6_lqTF_DicwD\u0026q=85\u0026s=abc36083e47f9332141ac1141d1cbe4a"},"favicon":"https://mintcdn.com/vodex/78No6_lqTF_DicwD/favicon.png?fit=max\u0026auto=format\u0026n=78No6_lqTF_DicwD\u0026q=85\u0026s=a3598c2265371fff3cd08244e8e6cf66","appearance":{"default":"system"},"navbar":{"links":[{"href":"mailto:support@vodex.ai","label":"Support"},{"href":"https://vodex.ai","label":"vodex.ai"}],"primary":{"type":"button","label":"Console","href":"https://console.vodex.ai"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"vodex","hasAudioNarration":false,"actualSubdomain":"vodex","customDomains":["apidocs.vodex.ai"],"gitSource":{"type":"github","owner":"lilchirpio","repo":"vodex","deployBranch":"main","contentDirectory":"docs-site","isPrivate":true,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6ae4c8c238fcbf2314c7045c","collectionId":"d3294b7d-8c93-44c2-95a0-17739dc4bfb2","liveDeploymentHistoryId":"6ae4c8c238fcbf2314c7045c","schemaVersion":"v3"},"entitlements":{},"buildId":"6ae4c8c238fcbf2314c7045c","clientVersion":"0.0.4044","searchFilterCounts":[{"language":"default","tag":"API Reference","count":155},{"language":"default","tag":"Contacts","count":27},{"language":"default","tag":"Batches","count":16},{"language":"default","tag":"Campaigns","count":14},{"language":"default","tag":"Assistants","count":12},{"language":"default","tag":"SMS","count":12},{"language":"default","tag":"Audiences","count":8},{"language":"default","tag":"Do Not Contact","count":8},{"language":"default","tag":"Integrations","count":8},{"language":"default","tag":"Payments","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":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/batches/create-a-batch","slug":"/api-reference/batches/create-a-batch","pageMetadata":{"title":"Create a batch","description":"`Idempotency-Key` is **mandatory**: async producers retry, and a replay\nmust return the same batch rather than dial the list twice. A replay\nanswers `202` with `Idempotent-Replay: true`; the same key with a\ndifferent body is `409`.\n\nRows are **admitted or reported, never silently dropped**. A row whose\nprompt says \"your balance is {{balance}}\" with no `balance` is refused\nhere, where the caller can fix it, rather than dialed and reported as a\nnormal call. At most 10,000 rows per request — append the rest, or\nupload a CSV.\n\nQuota is checked at submission rather than 4,000 dials later.\n","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /batches","href":"/api-reference/batches/create-a-batch","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: [_jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"Idempotency-Key\"\n }), \" is \", _jsx(_components.strong, {\n children: \"mandatory\"\n }), \": async producers retry, and a replay\\nmust return the same batch rather than dial the list twice. A replay\\nanswers \", _jsx(_components.code, {\n children: \"202\"\n }), \" with \", _jsx(_components.code, {\n children: \"Idempotent-Replay: true\"\n }), \"; the same key with a\\ndifferent body is \", _jsx(_components.code, {\n children: \"409\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Rows are \", _jsx(_components.strong, {\n children: \"admitted or reported, never silently dropped\"\n }), \". A row whose\\nprompt says “your balance is \", \"” with no \", _jsx(_components.code, {\n children: \"balance\"\n }), \" is refused\\nhere, where the caller can fix it, rather than dialed and reported as a\\nnormal call. At most 10,000 rows per request — append the rest, or\\nupload a CSV.\"]\n }), \"\\n\", _jsx(_components.p, {\n children: \"Quota is checked at submission rather than 4,000 dials later.\"\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":"Create a batch","description":"`Idempotency-Key` is **mandatory**: async producers retry, and a replay\nmust return the same batch rather than dial the list twice. A replay\nanswers `202` with `Idempotent-Replay: true`; the same key with a\ndifferent body is `409`.\n\nRows are **admitted or reported, never silently dropped**. A row whose\nprompt says \"your balance is {{balance}}\" with no `balance` is refused\nhere, where the caller can fix it, rather than dialed and reported as a\nnormal call. At most 10,000 rows per request — append the rest, or\nupload a CSV.\n\nQuota is checked at submission rather than 4,000 dials later.\n","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /batches","href":"/api-reference/batches/create-a-batch","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"createBatch","tags":["Batches"],"summary":"Create a batch","description":"`Idempotency-Key` is **mandatory**: async producers retry, and a replay\nmust return the same batch rather than dial the list twice. A replay\nanswers `202` with `Idempotent-Replay: true`; the same key with a\ndifferent body is `409`.\n\nRows are **admitted or reported, never silently dropped**. A row whose\nprompt says \"your balance is {{balance}}\" with no `balance` is refused\nhere, where the caller can fix it, rather than dialed and reported as a\nnormal call. At most 10,000 rows per request — append the rest, or\nupload a CSV.\n\nQuota is checked at submission rather than 4,000 dials later.\n","parameters":["936aa433-ca20-4561-a914-db891c30f94e"],"requestBody":"d6540a7c-4886-4268-bdb9-fdcfe45bcf56","responses":{"202":"0d7df4c3-361d-4605-a601-085f6534dd79","400":"99d1a7fb-669f-4589-89e4-d29933274efb","401":"4a2644c0-ca28-4ab2-9487-67bae3e6001c","402":"c5b95693-61ca-4de0-a1bf-735ab30d7f24","404":"0cd79ebb-5883-43a3-84f5-1f074f10acf1","409":"6457dd54-eae7-4572-88a1-bf0df9292629","422":"762e2356-2351-4897-9ad9-d47eb71aafd6"},"method":"post","type":"path","servers":["454f84ff-3690-4156-8c58-c64805db6548"],"security":["986b34dc-9d64-43d6-addf-8d27adc5ae4e"],"path":"/batches","baseUrlOptions":["https://apiv2.vodex.ai/v1"],"title":"Create a batch","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"936aa433-ca20-4561-a914-db891c30f94e":{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":255,"isRequired":true,"description":"Required. A retry with the same key and body replays the stored 2xx response; the same key with a different body is `409`. A failed attempt releases the key.","uniqueKey":"","typeLabel":"string"},"description":"Required. A retry with the same key and body replays the stored 2xx response; the same key with a different body is `409`. A failed attempt releases the key."}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name","assistantId"],"properties":{"name":{"type":"string","maxLength":200,"isRequired":true,"uniqueKey":"name","typeLabel":"string"},"assistantId":{"type":"string","format":"uuid","description":"The assistant's uuid, shown on its configure page in the console. Names and slugs are not accepted.","isRequired":true,"uniqueKey":"assistantId","typeLabel":"string\u003cuuid>"},"concurrency":{"type":"integer","minimum":1,"maximum":100,"description":"How many calls to run at the same time. Cannot exceed the account's calls-at-once limit (`maxConcurrentCalls` on `GET /v1/usage`) — 2 on a new account; Vodex support raises it per customer. Omitted means the account's limit, up to 10.","uniqueKey":"concurrency","typeLabel":"integer"},"retry":{"type":"object","properties":{"on":{"type":"array","items":{"type":"string","uniqueKey":"retry.on.items.[INDEX]","typeLabel":"string"},"description":"End reasons worth retrying (e.g. `no_answer`, `busy`, `caller_ended`). `caller_ended` retries only a call the caller hung up on right after the greeting, before any back-and-forth. A row whose call booked a callback is not called again in that run.","uniqueKey":"retry.on","typeLabel":"string[]"},"schedule":{"type":"array","maxItems":10,"items":{"type":"object","required":["gapMinutes"],"properties":{"gapMinutes":{"type":"number","minimum":1,"maximum":10080,"description":"Minutes after the previous call ended.","isRequired":true,"uniqueKey":"retry.schedule.items.[INDEX].gapMinutes","typeLabel":"number"},"timeOfDay":{"type":"string","enum":["morning","afternoon"],"description":"Moves the retry to the next 09:00–12:00 (morning) or 12:00–18:00 (afternoon) at or after the gap, in the row's timezone — its `tz` variable, else the calling window's zone. With neither, the plain gap is used.","uniqueKey":"retry.schedule.items.[INDEX].timeOfDay","typeLabel":"enum\u003cstring>"},"leaveVoicemail":{"type":"boolean","description":"Overrides the agent's voicemail setting for this retry. Absent uses the agent's own setting. `true` only works if the agent has voicemail detection on and a voicemail message set.","uniqueKey":"retry.schedule.items.[INDEX].leaveVoicemail","typeLabel":"boolean"}},"uniqueKey":"retry.schedule.items.[INDEX]","typeLabel":"object"},"description":"One step per retry, in order: step 1 governs the first retry after the original call. Send this OR `attempts` + `backoffMinutes`, not both. Responses always carry it, alongside `attempts` and `backoffMinutes` mirrored from it.","uniqueKey":"retry.schedule","typeLabel":"object[]"},"attempts":{"type":"integer","minimum":0,"maximum":10,"description":"Retries after the first call, all with the same gap. Ignored when `schedule` is sent.","uniqueKey":"retry.attempts","typeLabel":"integer"},"backoffMinutes":{"type":"number","minimum":1,"maximum":10080,"description":"The gap for every retry. Ignored when `schedule` is sent.","uniqueKey":"retry.backoffMinutes","typeLabel":"number"},"surveyCutOff":{"type":"boolean","default":false,"description":"Call back a survey that stopped part-way: an answer the respondent gave was recorded, the survey never reached its end, and the call ended by the caller hanging up or dropping, the time limit or silence, not by the agent. Uses the same steps as the other retries, and a row whose call booked a callback is not called again. Only matters when the agent runs a survey.","uniqueKey":"retry.surveyCutOff","typeLabel":"boolean"}},"uniqueKey":"retry","typeLabel":"object"},"window":{"oneOf":[{"type":"object","description":"When this batch may dial — outside it, rows wait rather than fail. A row's own timezone (the `timezoneField` variable) wins over `timezone`; a row with neither fails with `no_timezone`.","required":["localStart","localEnd"],"properties":{"localStart":{"type":"string","example":"09:00","description":"HH:MM, local to the row.","isRequired":true,"uniqueKey":"window.oneOf.0.localStart","typeLabel":"string"},"localEnd":{"type":"string","example":"20:00","description":"HH:MM, local to the row. Earlier than localStart means the window wraps midnight.","isRequired":true,"uniqueKey":"window.oneOf.0.localEnd","typeLabel":"string"},"timezoneField":{"type":"string","default":"tz","description":"Row variable that carries the IANA zone.","uniqueKey":"window.oneOf.0.timezoneField","typeLabel":"string"},"timezone":{"type":"string","example":"America/New_York","description":"Zone for rows that carry none of their own.","uniqueKey":"window.oneOf.0.timezone","typeLabel":"string"},"days":{"oneOf":[{"type":"array","items":{"type":"integer","minimum":0,"maximum":6,"uniqueKey":"window.oneOf.0.days.oneOf.0.items.[INDEX]","typeLabel":"integer"},"example":[1,2,3,4,5],"description":"Days calls may go out, in the row's zone: 0 = Sunday to 6 = Saturday, each once. Omit or null for every day. A call or retry that falls on another day waits for the next allowed one, and a callback asked for on one is refused on the call with the next allowed time. An overnight window belongs to the day it opens on, and a daily campaign repeat skips the days left out.","uniqueKey":"window.oneOf.0.days.oneOf.0","typeLabel":"integer[]"},{"type":"null","items":{"type":"integer","minimum":0,"maximum":6},"example":[1,2,3,4,5],"description":"Days calls may go out, in the row's zone: 0 = Sunday to 6 = Saturday, each once. Omit or null for every day. A call or retry that falls on another day waits for the next allowed one, and a callback asked for on one is refused on the call with the next allowed time. An overnight window belongs to the day it opens on, and a daily campaign repeat skips the days left out.","uniqueKey":"window.oneOf.0.days.oneOf.1","typeLabel":"null"}],"uniqueKey":"window.oneOf.0.days","typeLabel":"integer[] | null"}},"uniqueKey":"window.oneOf.0","typeLabel":"object"},{"type":"null","description":"When this batch may dial — outside it, rows wait rather than fail. A row's own timezone (the `timezoneField` variable) wins over `timezone`; a row with neither fails with `no_timezone`.","required":["localStart","localEnd"],"properties":{"localStart":{"type":"string","example":"09:00","description":"HH:MM, local to the row."},"localEnd":{"type":"string","example":"20:00","description":"HH:MM, local to the row. Earlier than localStart means the window wraps midnight."},"timezoneField":{"type":"string","default":"tz","description":"Row variable that carries the IANA zone."},"timezone":{"type":"string","example":"America/New_York","description":"Zone for rows that carry none of their own."},"days":{"oneOf":[{"type":"array","items":{"type":"integer","minimum":0,"maximum":6},"example":[1,2,3,4,5],"description":"Days calls may go out, in the row's zone: 0 = Sunday to 6 = Saturday, each once. Omit or null for every day. A call or retry that falls on another day waits for the next allowed one, and a callback asked for on one is refused on the call with the next allowed time. An overnight window belongs to the day it opens on, and a daily campaign repeat skips the days left out."},{"type":"null","items":{"type":"integer","minimum":0,"maximum":6},"example":[1,2,3,4,5],"description":"Days calls may go out, in the row's zone: 0 = Sunday to 6 = Saturday, each once. Omit or null for every day. A call or retry that falls on another day waits for the next allowed one, and a callback asked for on one is refused on the call with the next allowed time. An overnight window belongs to the day it opens on, and a daily campaign repeat skips the days left out."}]}},"uniqueKey":"window.oneOf.1","typeLabel":"null"}],"uniqueKey":"window","typeLabel":"object | null"},"suppress":{"type":"array","items":{"type":"string","uniqueKey":"suppress.items.[INDEX]","typeLabel":"string"},"description":"E.164 numbers this batch must never dial.","uniqueKey":"suppress","typeLabel":"string[]"},"from":{"type":"object","properties":{"strategy":{"type":"string","enum":["fixed","round_robin","weighted","sticky"],"default":"sticky","uniqueKey":"from.strategy","typeLabel":"enum\u003cstring>"},"numbers":{"type":"array","items":{"type":"object","required":["e164"],"properties":{"e164":{"type":"string","isRequired":true,"uniqueKey":"from.numbers.items.[INDEX].e164","typeLabel":"string"},"weight":{"type":"integer","minimum":1,"default":1,"uniqueKey":"from.numbers.items.[INDEX].weight","typeLabel":"integer"}},"uniqueKey":"from.numbers.items.[INDEX]","typeLabel":"object"},"uniqueKey":"from.numbers","typeLabel":"object[]"}},"uniqueKey":"from","typeLabel":"object"},"rows":{"type":"array","maxItems":10000,"items":{"type":"object","required":["to"],"properties":{"to":{"type":"string","description":"E.164. `toE164` is accepted as an alias.","isRequired":true,"uniqueKey":"rows.items.[INDEX].to","typeLabel":"string"},"rowRef":{"type":"string","maxLength":256,"description":"The consumer's own reference, echoed on attempts.","uniqueKey":"rows.items.[INDEX].rowRef","typeLabel":"string"},"assistantId":{"type":"string","description":"Overrides the batch's assistant for this row.","uniqueKey":"rows.items.[INDEX].assistantId","typeLabel":"string"},"from":{"type":"string","description":"E.164 caller ID for this row.","uniqueKey":"rows.items.[INDEX].from","typeLabel":"string"},"variables":{"type":"object","additionalProperties":{"type":"string","uniqueKey":"rows.items.[INDEX].variables.additionalProperties","typeLabel":"string"},"description":"At most 16 kB serialized. A row missing a variable the prompt references is rejected — a blank where a number should be is indistinguishable from a working call.","uniqueKey":"rows.items.[INDEX].variables","typeLabel":"object"}},"uniqueKey":"rows.items.[INDEX]","typeLabel":"object"},"uniqueKey":"rows","typeLabel":"object[]"},"startPaused":{"type":"boolean","default":false,"uniqueKey":"startPaused","typeLabel":"boolean"},"blockSize":{"oneOf":[{"type":"integer","minimum":1,"maximum":10000,"description":"Dial the rows in blocks of this size, one at a time: only the first block dials, and `POST /v1/batches/{id}/blocks/next` clears each next one. Omitted dials the whole list at once.","uniqueKey":"blockSize.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"maximum":10000,"description":"Dial the rows in blocks of this size, one at a time: only the first block dials, and `POST /v1/batches/{id}/blocks/next` clears each next one. Omitted dials the whole list at once.","uniqueKey":"blockSize.oneOf.1","typeLabel":"null"}],"uniqueKey":"blockSize","typeLabel":"integer | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"name":"\u003cstring>","assistantId":"3c90c3cc-0d44-4b50-8888-8dd25736052a","concurrency":50,"retry":{"on":["\u003cstring>"],"schedule":[{"gapMinutes":5040.5,"leaveVoicemail":true}],"attempts":5,"backoffMinutes":5040.5,"surveyCutOff":false},"window":{"localStart":"09:00","localEnd":"20:00","timezoneField":"tz","timezone":"America/New_York","days":[1,2,3,4,5]},"suppress":["\u003cstring>"],"from":{"strategy":"sticky","numbers":[{"e164":"\u003cstring>","weight":1}]},"rows":[{"to":"\u003cstring>","rowRef":"\u003cstring>","assistantId":"\u003cstring>","from":"\u003cstring>","variables":{}}],"startPaused":false,"blockSize":5000}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"0d7df4c3-361d-4605-a601-085f6534dd79":{"description":"Accepted. `Idempotent-Replay: true` on a replay.","content":{"application/json":{"schema":{"type":"object","properties":{"batch":{"type":"object","properties":{"id":{"type":"string","format":"uuid","uniqueKey":"batch.id","typeLabel":"string\u003cuuid>"},"name":{"type":"string","uniqueKey":"batch.name","typeLabel":"string"},"status":{"type":"string","enum":["running","paused","completed","cancelled","failed"],"uniqueKey":"batch.status","typeLabel":"enum\u003cstring>"},"runNo":{"type":"integer","uniqueKey":"batch.runNo","typeLabel":"integer"},"assistantId":{"type":"string","format":"uuid","description":"The assistant's uuid, shown on its configure page in the console. Names and slugs are not accepted.","uniqueKey":"batch.assistantId","typeLabel":"string\u003cuuid>"},"concurrency":{"type":"integer","uniqueKey":"batch.concurrency","typeLabel":"integer"},"retry":{"type":"object","properties":{"on":{"type":"array","items":{"type":"string","uniqueKey":"batch.retry.on.items.[INDEX]","typeLabel":"string"},"description":"End reasons worth retrying (e.g. `no_answer`, `busy`, `caller_ended`). `caller_ended` retries only a call the caller hung up on right after the greeting, before any back-and-forth. A row whose call booked a callback is not called again in that run.","uniqueKey":"batch.retry.on","typeLabel":"string[]"},"schedule":{"type":"array","maxItems":10,"items":{"type":"object","required":["gapMinutes"],"properties":{"gapMinutes":{"type":"number","minimum":1,"maximum":10080,"description":"Minutes after the previous call ended.","isRequired":true,"uniqueKey":"batch.retry.schedule.items.[INDEX].gapMinutes","typeLabel":"number"},"timeOfDay":{"type":"string","enum":["morning","afternoon"],"description":"Moves the retry to the next 09:00–12:00 (morning) or 12:00–18:00 (afternoon) at or after the gap, in the row's timezone — its `tz` variable, else the calling window's zone. With neither, the plain gap is used.","uniqueKey":"batch.retry.schedule.items.[INDEX].timeOfDay","typeLabel":"enum\u003cstring>"},"leaveVoicemail":{"type":"boolean","description":"Overrides the agent's voicemail setting for this retry. Absent uses the agent's own setting. `true` only works if the agent has voicemail detection on and a voicemail message set.","uniqueKey":"batch.retry.schedule.items.[INDEX].leaveVoicemail","typeLabel":"boolean"}},"uniqueKey":"batch.retry.schedule.items.[INDEX]","typeLabel":"object"},"description":"One step per retry, in order: step 1 governs the first retry after the original call. Send this OR `attempts` + `backoffMinutes`, not both. Responses always carry it, alongside `attempts` and `backoffMinutes` mirrored from it.","uniqueKey":"batch.retry.schedule","typeLabel":"object[]"},"attempts":{"type":"integer","minimum":0,"maximum":10,"description":"Retries after the first call, all with the same gap. Ignored when `schedule` is sent.","uniqueKey":"batch.retry.attempts","typeLabel":"integer"},"backoffMinutes":{"type":"number","minimum":1,"maximum":10080,"description":"The gap for every retry. Ignored when `schedule` is sent.","uniqueKey":"batch.retry.backoffMinutes","typeLabel":"number"},"surveyCutOff":{"type":"boolean","default":false,"description":"Call back a survey that stopped part-way: an answer the respondent gave was recorded, the survey never reached its end, and the call ended by the caller hanging up or dropping, the time limit or silence, not by the agent. Uses the same steps as the other retries, and a row whose call booked a callback is not called again. Only matters when the agent runs a survey.","uniqueKey":"batch.retry.surveyCutOff","typeLabel":"boolean"}},"uniqueKey":"batch.retry","typeLabel":"object"},"window":{"oneOf":[{"type":"object","description":"When this batch may dial — outside it, rows wait rather than fail. A row's own timezone (the `timezoneField` variable) wins over `timezone`; a row with neither fails with `no_timezone`.","required":["localStart","localEnd"],"properties":{"localStart":{"type":"string","example":"09:00","description":"HH:MM, local to the row.","isRequired":true,"uniqueKey":"batch.window.oneOf.0.localStart","typeLabel":"string"},"localEnd":{"type":"string","example":"20:00","description":"HH:MM, local to the row. Earlier than localStart means the window wraps midnight.","isRequired":true,"uniqueKey":"batch.window.oneOf.0.localEnd","typeLabel":"string"},"timezoneField":{"type":"string","default":"tz","description":"Row variable that carries the IANA zone.","uniqueKey":"batch.window.oneOf.0.timezoneField","typeLabel":"string"},"timezone":{"type":"string","example":"America/New_York","description":"Zone for rows that carry none of their own.","uniqueKey":"batch.window.oneOf.0.timezone","typeLabel":"string"},"days":{"oneOf":[{"type":"array","items":{"type":"integer","minimum":0,"maximum":6,"uniqueKey":"batch.window.oneOf.0.days.oneOf.0.items.[INDEX]","typeLabel":"integer"},"example":[1,2,3,4,5],"description":"Days calls may go out, in the row's zone: 0 = Sunday to 6 = Saturday, each once. Omit or null for every day. A call or retry that falls on another day waits for the next allowed one, and a callback asked for on one is refused on the call with the next allowed time. An overnight window belongs to the day it opens on, and a daily campaign repeat skips the days left out.","uniqueKey":"batch.window.oneOf.0.days.oneOf.0","typeLabel":"integer[]"},{"type":"null","items":{"type":"integer","minimum":0,"maximum":6},"example":[1,2,3,4,5],"description":"Days calls may go out, in the row's zone: 0 = Sunday to 6 = Saturday, each once. Omit or null for every day. A call or retry that falls on another day waits for the next allowed one, and a callback asked for on one is refused on the call with the next allowed time. An overnight window belongs to the day it opens on, and a daily campaign repeat skips the days left out.","uniqueKey":"batch.window.oneOf.0.days.oneOf.1","typeLabel":"null"}],"uniqueKey":"batch.window.oneOf.0.days","typeLabel":"integer[] | null"}},"uniqueKey":"batch.window.oneOf.0","typeLabel":"object"},{"type":"null","description":"When this batch may dial — outside it, rows wait rather than fail. A row's own timezone (the `timezoneField` variable) wins over `timezone`; a row with neither fails with `no_timezone`.","required":["localStart","localEnd"],"properties":{"localStart":{"type":"string","example":"09:00","description":"HH:MM, local to the row."},"localEnd":{"type":"string","example":"20:00","description":"HH:MM, local to the row. Earlier than localStart means the window wraps midnight."},"timezoneField":{"type":"string","default":"tz","description":"Row variable that carries the IANA zone."},"timezone":{"type":"string","example":"America/New_York","description":"Zone for rows that carry none of their own."},"days":{"oneOf":[{"type":"array","items":{"type":"integer","minimum":0,"maximum":6},"example":[1,2,3,4,5],"description":"Days calls may go out, in the row's zone: 0 = Sunday to 6 = Saturday, each once. Omit or null for every day. A call or retry that falls on another day waits for the next allowed one, and a callback asked for on one is refused on the call with the next allowed time. An overnight window belongs to the day it opens on, and a daily campaign repeat skips the days left out."},{"type":"null","items":{"type":"integer","minimum":0,"maximum":6},"example":[1,2,3,4,5],"description":"Days calls may go out, in the row's zone: 0 = Sunday to 6 = Saturday, each once. Omit or null for every day. A call or retry that falls on another day waits for the next allowed one, and a callback asked for on one is refused on the call with the next allowed time. An overnight window belongs to the day it opens on, and a daily campaign repeat skips the days left out."}]}},"uniqueKey":"batch.window.oneOf.1","typeLabel":"null"}],"uniqueKey":"batch.window","typeLabel":"object | null"},"suppress":{"type":"array","items":{"type":"string","uniqueKey":"batch.suppress.items.[INDEX]","typeLabel":"string"},"uniqueKey":"batch.suppress","typeLabel":"string[]"},"blockSize":{"oneOf":[{"type":"integer","description":"Rows per block, or null to dial the whole list at once. Set at create.","uniqueKey":"batch.blockSize.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Rows per block, or null to dial the whole list at once. Set at create.","uniqueKey":"batch.blockSize.oneOf.1","typeLabel":"null"}],"uniqueKey":"batch.blockSize","typeLabel":"integer | null"},"activeBlock":{"type":"integer","description":"The highest block cleared to dial (1-based); only meaningful with a blockSize.","uniqueKey":"batch.activeBlock","typeLabel":"integer"},"createdAt":{"oneOf":[{"type":"string","format":"date-time","uniqueKey":"batch.createdAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","uniqueKey":"batch.createdAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"batch.createdAt","typeLabel":"string\u003cdate-time> | null"},"startedAt":{"oneOf":[{"type":"string","format":"date-time","uniqueKey":"batch.startedAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","uniqueKey":"batch.startedAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"batch.startedAt","typeLabel":"string\u003cdate-time> | null"},"completedAt":{"oneOf":[{"type":"string","format":"date-time","uniqueKey":"batch.completedAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","uniqueKey":"batch.completedAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"batch.completedAt","typeLabel":"string\u003cdate-time> | null"},"counts":{"type":"object","additionalProperties":{"type":"integer","uniqueKey":"batch.counts.additionalProperties","typeLabel":"integer"},"description":"Row counts by status, plus `total`.","uniqueKey":"batch.counts","typeLabel":"object"}},"uniqueKey":"batch","typeLabel":"object"},"accepted":{"type":"integer","uniqueKey":"accepted","typeLabel":"integer"},"rejected":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","description":"Position in the request (or the CSV line number).","uniqueKey":"rejected.items.[INDEX].index","typeLabel":"integer"},"rowRef":{"type":"string","uniqueKey":"rejected.items.[INDEX].rowRef","typeLabel":"string"},"to":{"type":"string","description":"The number as submitted, echoed back. `index` counts PARSED rows, so blank lines and column-count failures have already shifted it away from the line number the editor shows — this is the value the person fixing a four-thousand-row list can actually search for.","uniqueKey":"rejected.items.[INDEX].to","typeLabel":"string"},"reason":{"type":"string","uniqueKey":"rejected.items.[INDEX].reason","typeLabel":"string"}},"uniqueKey":"rejected.items.[INDEX]","typeLabel":"object"},"uniqueKey":"rejected","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"batch":{"id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","name":"\u003cstring>","status":"running","runNo":123,"assistantId":"3c90c3cc-0d44-4b50-8888-8dd25736052a","concurrency":123,"retry":{"on":["\u003cstring>"],"schedule":[{"gapMinutes":5040.5,"timeOfDay":"morning","leaveVoicemail":true}],"attempts":5,"backoffMinutes":5040.5,"surveyCutOff":false},"window":{"localStart":"09:00","localEnd":"20:00","timezoneField":"tz","timezone":"America/New_York","days":[1,2,3,4,5]},"suppress":["\u003cstring>"],"blockSize":123,"activeBlock":123,"createdAt":"2023-11-07T05:31:56Z","startedAt":"2023-11-07T05:31:56Z","completedAt":"2023-11-07T05:31:56Z","counts":{}},"accepted":123,"rejected":[{"index":123,"rowRef":"\u003cstring>","to":"\u003cstring>","reason":"\u003cstring>"}]}}},"exampleType":"generated"}},"exampleType":"generated"},"99d1a7fb-669f-4589-89e4-d29933274efb":{"description":"Validation failed.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"not found","uniqueKey":"error","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"not found"}}},"exampleType":"generated"}},"exampleType":"generated"},"4a2644c0-ca28-4ab2-9487-67bae3e6001c":{"description":"No usable credential.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"not found","uniqueKey":"error","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"not found"}}},"exampleType":"generated"}},"exampleType":"generated"},"c5b95693-61ca-4de0-a1bf-735ab30d7f24":{"description":"Out of minutes — top up before submitting a batch.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"not found","uniqueKey":"error","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"not found"}}},"exampleType":"generated"}},"exampleType":"generated"},"0cd79ebb-5883-43a3-84f5-1f074f10acf1":{"description":"Unknown assistant, or a `from` number that is not yours.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"not found","uniqueKey":"error","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"not found"}}},"exampleType":"generated"}},"exampleType":"generated"},"6457dd54-eae7-4572-88a1-bf0df9292629":{"description":"This `Idempotency-Key` was used with a different body.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"not found","uniqueKey":"error","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"not found"}}},"exampleType":"generated"}},"exampleType":"generated"},"762e2356-2351-4897-9ad9-d47eb71aafd6":{"description":"Every row was rejected — a batch that can dial nobody is a mistake.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","uniqueKey":"error","typeLabel":"string"},"rejected":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","description":"Position in the request (or the CSV line number).","uniqueKey":"rejected.items.[INDEX].index","typeLabel":"integer"},"rowRef":{"type":"string","uniqueKey":"rejected.items.[INDEX].rowRef","typeLabel":"string"},"to":{"type":"string","description":"The number as submitted, echoed back. `index` counts PARSED rows, so blank lines and column-count failures have already shifted it away from the line number the editor shows — this is the value the person fixing a four-thousand-row list can actually search for.","uniqueKey":"rejected.items.[INDEX].to","typeLabel":"string"},"reason":{"type":"string","uniqueKey":"rejected.items.[INDEX].reason","typeLabel":"string"}},"uniqueKey":"rejected.items.[INDEX]","typeLabel":"object"},"uniqueKey":"rejected","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","rejected":[{"index":123,"rowRef":"\u003cstring>","to":"\u003cstring>","reason":"\u003cstring>"}]}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"986b34dc-9d64-43d6-addf-8d27adc5ae4e":{"ApiKeyBearer":{"type":"http","scheme":"bearer","description":"Tenant API key (`vdx_live_…`) as `Authorization: Bearer`.","scopes":[],"schemeName":"ApiKeyBearer"}}},"servers":{"454f84ff-3690-4156-8c58-c64805db6548":{"url":"https://apiv2.vodex.ai/v1","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"Tenant API key (`vdx_live_…`) as `Authorization: Bearer`.","scopes":[],"schemeName":"ApiKeyBearer"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Tenant API key (`vdx_live_…`) as `Authorization: Bearer`.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"ApiKeyBearer","name":"Authorization"}],"title":"ApiKeyBearer"}]},"originalFileLocation":"openapi/api-public-v1.yaml"},"subdomain":"vodex","siteName":"Vodex API","title":"Create a batch - Vodex API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-30T16:41:44.476Z","originalFileLocation":"api-reference/batches/create-a-batch.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=\"Idempotency-Key is mandatory: async producers retry, and a replay must return the same batch rather than dial the list twice. A replay answers 202 with Idempotent-Replay: true; the same key with a different body is 409. Rows are admitted or reported, never silently dropped. A row whose prompt says \u0026quot;your balance is {{balance}}\u0026quot; with no balance is refused here, where the caller can fix it, rather than dialed and reported as a normal call. At most 10,000 rows per request — append the rest, or upload a CSV. Quota is checked at submission rather than 4,000 dials later.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Vodex API\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/vodex/lIjSc2yqSN3yLkge/_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/vodex/lIjSc2yqSN3yLkge/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/vodex/lIjSc2yqSN3yLkge/_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/vodex/lIjSc2yqSN3yLkge/_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/vodex/lIjSc2yqSN3yLkge/_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/vodex/lIjSc2yqSN3yLkge/_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/vodex/lIjSc2yqSN3yLkge/_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/vodex/lIjSc2yqSN3yLkge/_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/vodex/lIjSc2yqSN3yLkge/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Create a batch - Vodex API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Idempotency-Key is mandatory: async producers retry, and a replay must return the same batch rather than dial the list twice. A replay answers 202 with Idempotent-Replay: true; the same key with a different body is 409. Rows are admitted or reported, never silently dropped. A row whose prompt says \u0026quot;your balance is {{balance}}\u0026quot; with no balance is refused here, where the caller can fix it, rather than dialed and reported as a normal call. At most 10,000 rows per request — append the rest, or upload a CSV. Quota is checked at submission rather than 4,000 dials later.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Vodex API\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://apidocs.vodex.ai/api-reference/batches/create-a-batch\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://vodex.mintlify.app/_mintlify/api/og/v2?division=Batches\u0026amp;title=Create+a+batch\u0026amp;description=%60Idempotency-Key%60+is+**mandatory**%3A+async+producers+retry%2C+and+a+replay%0Amust+return+the+same+batch+rather+than+dial+the+list+twice.+A+replay%0Aanswers+%60202%60+with+\u0026amp;theme=6d89815cfe9107c7cb0143e4\u0026amp;signature=757af02aa3cb0d2f26141c9a46ff0e019227fa8e605956cba9317563b4bd079a\">\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=\"Create a batch - Vodex API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Idempotency-Key is mandatory: async producers retry, and a replay must return the same batch rather than dial the list twice. A replay answers 202 with Idempotent-Replay: true; the same key with a different body is 409. Rows are admitted or reported, never silently dropped. A row whose prompt says \u0026quot;your balance is {{balance}}\u0026quot; with no balance is refused here, where the caller can fix it, rather than dialed and reported as a normal call. At most 10,000 rows per request — append the rest, or upload a CSV. Quota is checked at submission rather than 4,000 dials later.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://vodex.mintlify.app/_mintlify/api/og/v2?division=Batches\u0026amp;title=Create+a+batch\u0026amp;description=%60Idempotency-Key%60+is+**mandatory**%3A+async+producers+retry%2C+and+a+replay%0Amust+return+the+same+batch+rather+than+dial+the+list+twice.+A+replay%0Aanswers+%60202%60+with+\u0026amp;theme=6d89815cfe9107c7cb0143e4\u0026amp;signature=757af02aa3cb0d2f26141c9a46ff0e019227fa8e605956cba9317563b4bd079a\">\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/vodex/lIjSc2yqSN3yLkge/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Vodex API\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#FF4D00\">\u003clink data-mint-head rel=\"canonical\" href=\"https://apidocs.vodex.ai/api-reference/batches/create-a-batch\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/batches/create-a-batch.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://apidocs.vodex.ai/#organization\",\"name\":\"Vodex API\",\"url\":\"https://apidocs.vodex.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/vodex/78No6_lqTF_DicwD/logo/vodex-full.svg?fit=max\u0026auto=format\u0026n=78No6_lqTF_DicwD\u0026q=85\u0026s=abc36083e47f9332141ac1141d1cbe4a\"}},{\"@type\":\"WebSite\",\"@id\":\"https://apidocs.vodex.ai#website\",\"name\":\"Vodex API\",\"url\":\"https://apidocs.vodex.ai\",\"publisher\":{\"@id\":\"https://apidocs.vodex.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://apidocs.vodex.ai/api-reference/batches/create-a-batch#webpage\",\"url\":\"https://apidocs.vodex.ai/api-reference/batches/create-a-batch\",\"name\":\"Create a batch\",\"description\":\"Idempotency-Key is mandatory: async producers retry, and a replay must return the same batch rather than dial the list twice. A replay answers 202 with Idempotent-Replay: true; the same key with a different body is 409. Rows are admitted or reported, never silently dropped. A row whose prompt says \\\"your balance is {{balance}}\\\" with no balance is refused here, where the caller can fix it, rather than dialed and reported as a normal call. At most 10,000 rows per request — append the rest, or upload a CSV. Quota is checked at submission rather than 4,000 dials later.\",\"dateModified\":\"2026-10-30T16:41:44.476Z\",\"isPartOf\":{\"@id\":\"https://apidocs.vodex.ai#website\"},\"breadcrumb\":{\"@id\":\"https://apidocs.vodex.ai/api-reference/batches/create-a-batch#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://apidocs.vodex.ai/api-reference/batches/create-a-batch#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Batches\",\"item\":\"https://apidocs.vodex.ai/api-reference/batches/list-batches\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Create a batch\",\"item\":\"https://apidocs.vodex.ai/api-reference/batches/create-a-batch\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://apidocs.vodex.ai/api-reference/batches/create-a-batch#apireference\",\"headline\":\"Create a batch\",\"name\":\"Create a batch\",\"description\":\"Idempotency-Key is mandatory: async producers retry, and a replay must return the same batch rather than dial the list twice. A replay answers 202 with Idempotent-Replay: true; the same key with a different body is 409. Rows are admitted or reported, never silently dropped. A row whose prompt says \\\"your balance is {{balance}}\\\" with no balance is refused here, where the caller can fix it, rather than dialed and reported as a normal call. At most 10,000 rows per request — append the rest, or upload a CSV. Quota is checked at submission rather than 4,000 dials later.\",\"url\":\"https://apidocs.vodex.ai/api-reference/batches/create-a-batch\",\"mainEntityOfPage\":{\"@id\":\"https://apidocs.vodex.ai/api-reference/batches/create-a-batch#webpage\"},\"dateModified\":\"2026-10-30T16:41:44.476Z\",\"publisher\":{\"@id\":\"https://apidocs.vodex.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://apidocs.vodex.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Vodex API\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Vodex API","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":"/introduction"}]},{"tab":"API Reference","groups":[{"group":"Assistants","pages":[{"title":"List assistants","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /console/assistants","href":"/api-reference/assistants/list-assistants"},{"title":"Create or replace an assistant","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /console/assistants","href":"/api-reference/assistants/create-or-replace-an-assistant"},{"title":"Fetch one assistant's full config","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /console/assistants/{id}","href":"/api-reference/assistants/fetch-one-assistants-full-config"},{"title":"Delete an assistant","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml delete /console/assistants/{id}","href":"/api-reference/assistants/delete-an-assistant"},{"title":"List this assistant's outcomes","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /console/assistants/{id}/outcomes","href":"/api-reference/assistants/list-this-assistants-outcomes"},{"title":"Add an outcome","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /console/assistants/{id}/outcomes","href":"/api-reference/assistants/add-an-outcome"},{"title":"Remove an outcome","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml delete /console/assistants/{id}/outcomes/{key}","href":"/api-reference/assistants/remove-an-outcome"},{"title":"Rename an outcome, or reword when it applies","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml patch /console/assistants/{id}/outcomes/{key}","href":"/api-reference/assistants/rename-an-outcome-or-reword-when-it-applies"},{"title":"A CSV template for the survey importer","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /surveys/template.csv","href":"/api-reference/assistants/a-csv-template-for-the-survey-importer"},{"title":"Parse a survey CSV without saving it","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /console/assistants/{id}/survey.csv/preview","href":"/api-reference/assistants/parse-a-survey-csv-without-saving-it"},{"title":"Replace the assistant's questionnaire from a CSV","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /console/assistants/{id}/survey.csv","href":"/api-reference/assistants/replace-the-assistants-questionnaire-from-a-csv"},{"title":"Test a custom tool","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /console/tools/test","href":"/api-reference/assistants/test-a-custom-tool"}]},{"group":"Console","pages":[{"title":"The model catalog","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /console/catalog","href":"/api-reference/console/the-model-catalog"},{"title":"List voices","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /console/voices","href":"/api-reference/console/list-voices"},{"title":"Mint a LiveKit token for a web call","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /console/token","href":"/api-reference/console/mint-a-livekit-token-for-a-web-call"}]},{"group":"Usage","pages":[{"title":"Minute usage this period","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /usage","href":"/api-reference/usage/minute-usage-this-period"}]},{"group":"Calls","pages":[{"title":"List calls","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /calls","href":"/api-reference/calls/list-calls"},{"title":"Place an outbound call","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /calls","href":"/api-reference/calls/place-an-outbound-call"},{"title":"Fetch a call with its trace","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /calls/{id}","href":"/api-reference/calls/fetch-a-call-with-its-trace"},{"title":"Stream a call recording","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /recordings/{id}","href":"/api-reference/calls/stream-a-call-recording"}]},{"group":"Phone Numbers","pages":[{"title":"List numbers","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /phone-numbers","href":"/api-reference/phone-numbers/list-numbers"},{"title":"Add a number","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /phone-numbers","href":"/api-reference/phone-numbers/add-a-number"},{"title":"Remove a number","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml delete /phone-numbers/{id}","href":"/api-reference/phone-numbers/remove-a-number"},{"title":"Reassign or relabel a number","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml patch /phone-numbers/{id}","href":"/api-reference/phone-numbers/reassign-or-relabel-a-number"}]},{"group":"SIP Trunks","pages":[{"title":"List BYO SIP trunks","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /sip-trunks","href":"/api-reference/sip-trunks/list-byo-sip-trunks"},{"title":"Create a BYO SIP trunk","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /sip-trunks","href":"/api-reference/sip-trunks/create-a-byo-sip-trunk"},{"title":"Delete a trunk","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml delete /sip-trunks/{id}","href":"/api-reference/sip-trunks/delete-a-trunk"},{"title":"Update a SIP trunk","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml patch /sip-trunks/{id}","href":"/api-reference/sip-trunks/update-a-sip-trunk"},{"title":"Rotate trunk credentials","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /sip-trunks/{id}/rotate","href":"/api-reference/sip-trunks/rotate-trunk-credentials"}]},{"group":"Carriers","pages":[{"title":"The carrier registry","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /carriers","href":"/api-reference/carriers/the-carrier-registry"}]},{"group":"Integrations","pages":[{"title":"List connected carrier accounts","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /integrations","href":"/api-reference/integrations/list-connected-carrier-accounts"},{"title":"Connect a carrier account","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /integrations","href":"/api-reference/integrations/connect-a-carrier-account"},{"title":"One integration, with its numbers","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /integrations/{id}","href":"/api-reference/integrations/one-integration-with-its-numbers"},{"title":"Disconnect","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml delete /integrations/{id}","href":"/api-reference/integrations/disconnect"},{"title":"Replace integration credentials","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /integrations/{id}/credentials","href":"/api-reference/integrations/replace-integration-credentials"},{"title":"Change how a gateway is dialed","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /integrations/{id}/gateway","href":"/api-reference/integrations/change-how-a-gateway-is-dialed"},{"title":"List available numbers","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /integrations/{id}/available-numbers","href":"/api-reference/integrations/list-available-numbers"},{"title":"Add numbers to an integration","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /integrations/{id}/numbers","href":"/api-reference/integrations/add-numbers-to-an-integration"}]},{"group":"Batches","pages":[{"title":"List batches","description":"Newest first, each with its row-status counts (one grouped query for the\nwhole page, not one per batch).\n","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /batches","href":"/api-reference/batches/list-batches"},{"title":"Create a batch","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /batches","href":"/api-reference/batches/create-a-batch"},{"title":"Fetch a batch","description":"Counts, the number pool, every run, and why the batch is pacing the way\nit is.\n\n`pacing.limitedBy` answers \"why is my batch slow\" without a human:\n`tenant_cap`, `concurrency`, `number_pool`, `window`, or `none`. A\ncustomer whose batch says concurrency 20 and is somehow running six at a\ntime is usually looking at five other batches using the rest.\n\n`estimate` answers the other half of it — when this will be done. The\narithmetic people do by hand (rows x talk time / concurrency) is wrong\nby about half, because an unanswered call holds a concurrency slot for\nthe whole ring window rather than the length of a conversation.\n\n`?run=` scopes the **outcome histogram** only. It cannot scope `counts`:\nrows hold current state, so after a restart their statuses describe the\nnewest run and nothing can make them describe an older one — which is\nwhat `countsScope` says out loud.\n","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /batches/{id}","href":"/api-reference/batches/fetch-a-batch"},{"title":"List rows","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /batches/{id}/rows","href":"/api-reference/batches/list-rows"},{"title":"Append rows","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /batches/{id}/rows","href":"/api-reference/batches/append-rows"},{"title":"Check a CSV before creating anything","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /batches/rows.csv/preview","href":"/api-reference/batches/check-a-csv-before-creating-anything"},{"title":"Append rows from a CSV","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /batches/{id}/rows.csv","href":"/api-reference/batches/append-rows-from-a-csv"},{"title":"Cancel one row","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml delete /batches/{id}/rows/{rowId}","href":"/api-reference/batches/cancel-one-row"},{"title":"Pause a running batch","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /batches/{id}/pause","href":"/api-reference/batches/pause-a-running-batch"},{"title":"Resume a paused batch","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /batches/{id}/resume","href":"/api-reference/batches/resume-a-paused-batch"},{"title":"Cancel a batch","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /batches/{id}/cancel","href":"/api-reference/batches/cancel-a-batch"},{"title":"Requeue rows as a new run","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /batches/{id}/restart","href":"/api-reference/batches/requeue-rows-as-a-new-run"},{"title":"The block plan","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /batches/{id}/blocks","href":"/api-reference/batches/the-block-plan"},{"title":"Resize a block","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml patch /batches/{id}/blocks/{blockNo}","href":"/api-reference/batches/resize-a-block"},{"title":"Dial the next block","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /batches/{id}/blocks/next","href":"/api-reference/batches/dial-the-next-block"},{"title":"List dial attempts","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /batches/{id}/attempts","href":"/api-reference/batches/list-dial-attempts"}]},{"group":"Callbacks","pages":[{"title":"List callbacks","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /callbacks","href":"/api-reference/callbacks/list-callbacks"},{"title":"One callback","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /callbacks/{id}","href":"/api-reference/callbacks/one-callback"},{"title":"Update a callback","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml patch /callbacks/{id}","href":"/api-reference/callbacks/update-a-callback"},{"title":"Let campaigns call a number again","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /callbacks/{id}/release","href":"/api-reference/callbacks/let-campaigns-call-a-number-again"}]},{"group":"Reports","pages":[{"title":"List reports","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /reports","href":"/api-reference/reports/list-reports"},{"title":"Create a report","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /reports","href":"/api-reference/reports/create-a-report"},{"title":"One report","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /reports/{id}","href":"/api-reference/reports/one-report"},{"title":"Delete a report","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml delete /reports/{id}","href":"/api-reference/reports/delete-a-report"},{"title":"Update a report","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml patch /reports/{id}","href":"/api-reference/reports/update-a-report"}]},{"group":"Number Rotation","pages":[{"title":"Per-number spacing, caps, and cooldown","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /number-rotation","href":"/api-reference/number-rotation/per-number-spacing-caps-and-cooldown"},{"title":"Set rotation for one number","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml put /number-rotation/{e164}","href":"/api-reference/number-rotation/set-rotation-for-one-number"}]},{"group":"Payments","pages":[{"title":"List payment attempts","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /payments","href":"/api-reference/payments/list-payment-attempts"},{"title":"Get a payment attempt","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /payments/{id}","href":"/api-reference/payments/get-a-payment-attempt"},{"title":"The workspace's payment carrier","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /payment-carriers/twilio-stripe","href":"/api-reference/payments/the-workspaces-payment-carrier"},{"title":"Set up or change the payment carrier","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml put /payment-carriers/twilio-stripe","href":"/api-reference/payments/set-up-or-change-the-payment-carrier"},{"title":"Remove the payment carrier","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml delete /payment-carriers/twilio-stripe","href":"/api-reference/payments/remove-the-payment-carrier"},{"title":"Numbers in the Twilio account that could be Pay numbers","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /payment-carriers/twilio-stripe/available-numbers","href":"/api-reference/payments/numbers-in-the-twilio-account-that-could-be-pay-numbers"},{"title":"Choose the workspace's Pay numbers","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml put /payment-carriers/twilio-stripe/numbers","href":"/api-reference/payments/choose-the-workspaces-pay-numbers"},{"title":"Point a Pay number at the payment webhook","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /payment-carriers/twilio-stripe/numbers/{e164}/webhook","href":"/api-reference/payments/point-a-pay-number-at-the-payment-webhook"}]},{"group":"SMS","pages":[{"title":"SMS provider capabilities","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /sms/capabilities","href":"/api-reference/sms/sms-provider-capabilities"},{"title":"Store provider credentials","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml put /sms/providers/{provider}","href":"/api-reference/sms/store-provider-credentials"},{"title":"Remove provider credentials","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml delete /sms/providers/{provider}","href":"/api-reference/sms/remove-provider-credentials"},{"title":"List SMS configurations","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /sms/configurations","href":"/api-reference/sms/list-sms-configurations"},{"title":"Create an SMS configuration","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /sms/configurations","href":"/api-reference/sms/create-an-sms-configuration"},{"title":"Delete an SMS configuration","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml delete /sms/configurations/{id}","href":"/api-reference/sms/delete-an-sms-configuration"},{"title":"Update an SMS configuration","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml patch /sms/configurations/{id}","href":"/api-reference/sms/update-an-sms-configuration"},{"title":"List SMS senders","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /sms/senders","href":"/api-reference/sms/list-sms-senders"},{"title":"Provider content templates","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /sms/templates","href":"/api-reference/sms/provider-content-templates"},{"title":"Render exactly what a send would produce","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /sms/preview","href":"/api-reference/sms/render-exactly-what-a-send-would-produce"},{"title":"Send an SMS","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /sms","href":"/api-reference/sms/send-an-sms"},{"title":"Message log","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /sms/messages","href":"/api-reference/sms/message-log"}]},{"group":"Webhooks","pages":[{"title":"Read the tenant's webhook endpoint","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /webhook-config","href":"/api-reference/webhooks/read-the-tenants-webhook-endpoint"},{"title":"Set the webhook endpoint","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml put /webhook-config","href":"/api-reference/webhooks/set-the-webhook-endpoint"},{"title":"Stop deliveries","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml delete /webhook-config","href":"/api-reference/webhooks/stop-deliveries"},{"title":"Rotate the signing secret","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /signing-secret/rotate","href":"/api-reference/webhooks/rotate-the-signing-secret"},{"title":"Rotate the signing secret (alias)","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /webhook-config/rotate-secret","href":"/api-reference/webhooks/rotate-the-signing-secret-alias"},{"title":"Delivery records","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /webhook-deliveries","href":"/api-reference/webhooks/delivery-records"},{"title":"Fetch a delivery","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /webhook-deliveries/{id}","href":"/api-reference/webhooks/fetch-a-delivery"},{"title":"Resend a delivery","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /webhook-deliveries/{id}/resend","href":"/api-reference/webhooks/resend-a-delivery"}]},{"group":"Tenants","pages":[{"title":"Read this customer's retention period","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /retention","href":"/api-reference/tenants/read-this-customers-retention-period"},{"title":"Set this customer's retention period","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml put /retention","href":"/api-reference/tenants/set-this-customers-retention-period"},{"title":"Read recording retention","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /tenants/retention","href":"/api-reference/tenants/read-recording-retention"},{"title":"Set this tenant's recording retention","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml put /tenants/{id}/retention","href":"/api-reference/tenants/set-this-tenants-recording-retention"},{"title":"Fall back to the bucket default","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml delete /tenants/{id}/retention","href":"/api-reference/tenants/fall-back-to-the-bucket-default"}]},{"group":"Contacts","pages":[{"title":"List contacts","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /contacts/accounts","href":"/api-reference/contacts/list-contacts"},{"title":"Create a contact","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /contacts/accounts","href":"/api-reference/contacts/create-a-contact"},{"title":"Fetch one contact","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /contacts/accounts/{id}","href":"/api-reference/contacts/fetch-one-contact"},{"title":"Delete a contact","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml delete /contacts/accounts/{id}","href":"/api-reference/contacts/delete-a-contact"},{"title":"Update a contact","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml patch /contacts/accounts/{id}","href":"/api-reference/contacts/update-a-contact"},{"title":"Delete many contacts at once","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /contacts/accounts/bulk-delete","href":"/api-reference/contacts/delete-many-contacts-at-once"},{"title":"Add a phone number or email to a contact","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /contacts/accounts/{id}/channels","href":"/api-reference/contacts/add-a-phone-number-or-email-to-a-contact"},{"title":"Remove a channel","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml delete /contacts/accounts/{id}/channels/{channelId}","href":"/api-reference/contacts/remove-a-channel"},{"title":"Update a channel","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml patch /contacts/accounts/{id}/channels/{channelId}","href":"/api-reference/contacts/update-a-channel"},{"title":"Everything that has happened to this contact","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /contacts/accounts/{id}/timeline","href":"/api-reference/contacts/everything-that-has-happened-to-this-contact"},{"title":"Consent, local time, and attempt counts","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /contacts/accounts/{id}/compliance","href":"/api-reference/contacts/consent-local-time-and-attempt-counts"},{"title":"Record the consent basis","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml put /contacts/accounts/{id}/compliance","href":"/api-reference/contacts/record-the-consent-basis"},{"title":"List custom attribute definitions","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /contacts/attributes","href":"/api-reference/contacts/list-custom-attribute-definitions"},{"title":"Define a custom attribute","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /contacts/attributes","href":"/api-reference/contacts/define-a-custom-attribute"},{"title":"Delete an attribute definition","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml delete /contacts/attributes/{id}","href":"/api-reference/contacts/delete-an-attribute-definition"},{"title":"Rename, re-option, or archive an attribute","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml patch /contacts/attributes/{id}","href":"/api-reference/contacts/rename-re-option-or-archive-an-attribute"},{"title":"List a contact's files","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /contacts/accounts/{id}/files","href":"/api-reference/contacts/list-a-contacts-files"},{"title":"Attach a file to a contact","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /contacts/accounts/{id}/files","href":"/api-reference/contacts/attach-a-file-to-a-contact"},{"title":"Download a file","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /contacts/files/{fileId}","href":"/api-reference/contacts/download-a-file"},{"title":"Delete a file","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml delete /contacts/files/{fileId}","href":"/api-reference/contacts/delete-a-file"},{"title":"Past imports","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /contacts/imports","href":"/api-reference/contacts/past-imports"},{"title":"Import contacts from a CSV","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /contacts/imports","href":"/api-reference/contacts/import-contacts-from-a-csv"},{"title":"A CSV template with the recognised headers","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /contacts/imports/template","href":"/api-reference/contacts/a-csv-template-with-the-recognised-headers"},{"title":"One import's receipt","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /contacts/imports/{id}","href":"/api-reference/contacts/one-imports-receipt"},{"title":"Tenant contact settings","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /contacts/settings","href":"/api-reference/contacts/tenant-contact-settings"},{"title":"Choose which detail tabs to show, and in what order","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml put /contacts/settings","href":"/api-reference/contacts/choose-which-detail-tabs-to-show-and-in-what-order"},{"title":"The tab registry, and which are enabled","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /contacts/tabs","href":"/api-reference/contacts/the-tab-registry-and-which-are-enabled"}]},{"group":"Do Not Contact","pages":[{"title":"The suppression list","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /contacts/dnc","href":"/api-reference/do-not-contact/the-suppression-list"},{"title":"Suppress one address","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /contacts/dnc","href":"/api-reference/do-not-contact/suppress-one-address"},{"title":"Ask whether addresses are suppressed","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /contacts/dnc/check","href":"/api-reference/do-not-contact/ask-whether-addresses-are-suppressed"},{"title":"Upload a suppression list","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /contacts/dnc/import","href":"/api-reference/do-not-contact/upload-a-suppression-list"},{"title":"Lift a suppression","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml delete /contacts/dnc/{id}","href":"/api-reference/do-not-contact/lift-a-suppression"},{"title":"Correct an entry's value or reason","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml patch /contacts/dnc/{id}","href":"/api-reference/do-not-contact/correct-an-entrys-value-or-reason"},{"title":"The person-level decision, and which of their addresses are suppressed","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /contacts/accounts/{id}/dnc","href":"/api-reference/do-not-contact/the-person-level-decision-and-which-of-their-addresses-are-suppressed"},{"title":"Mark a person do-not-contact, or clear it","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml put /contacts/accounts/{id}/dnc","href":"/api-reference/do-not-contact/mark-a-person-do-not-contact-or-clear-it"}]},{"group":"Audiences","pages":[{"title":"List audiences","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /contacts/audiences","href":"/api-reference/audiences/list-audiences"},{"title":"Save a filter as an audience","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /contacts/audiences","href":"/api-reference/audiences/save-a-filter-as-an-audience"},{"title":"The fields a filter may reach, and their comparators","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /contacts/audiences/fields","href":"/api-reference/audiences/the-fields-a-filter-may-reach-and-their-comparators"},{"title":"Count and sample who a filter matches","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /contacts/audiences/preview","href":"/api-reference/audiences/count-and-sample-who-a-filter-matches"},{"title":"Fetch one audience","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /contacts/audiences/{id}","href":"/api-reference/audiences/fetch-one-audience"},{"title":"Delete an audience","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml delete /contacts/audiences/{id}","href":"/api-reference/audiences/delete-an-audience"},{"title":"Rename an audience or change its filter","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml patch /contacts/audiences/{id}","href":"/api-reference/audiences/rename-an-audience-or-change-its-filter"},{"title":"Who is in an audience right now","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /contacts/audiences/{id}/members","href":"/api-reference/audiences/who-is-in-an-audience-right-now"}]},{"group":"Campaigns","pages":[{"title":"List campaigns","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /contacts/campaigns","href":"/api-reference/campaigns/list-campaigns"},{"title":"Create a campaign","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /contacts/campaigns","href":"/api-reference/campaigns/create-a-campaign"},{"title":"What a prompt variable can be filled from","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /contacts/campaigns/variable-sources","href":"/api-reference/campaigns/what-a-prompt-variable-can-be-filled-from"},{"title":"The source each prompt variable name-matches to","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /contacts/campaigns/resolve-variables","href":"/api-reference/campaigns/the-source-each-prompt-variable-name-matches-to"},{"title":"Delete many campaigns at once","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /contacts/campaigns/bulk-delete","href":"/api-reference/campaigns/delete-many-campaigns-at-once"},{"title":"Fetch one campaign","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml get /contacts/campaigns/{id}","href":"/api-reference/campaigns/fetch-one-campaign"},{"title":"Delete a campaign","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml delete /contacts/campaigns/{id}","href":"/api-reference/campaigns/delete-a-campaign"},{"title":"Edit a campaign that has not launched","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml patch /contacts/campaigns/{id}","href":"/api-reference/campaigns/edit-a-campaign-that-has-not-launched"},{"title":"Change a running campaign, safely","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml patch /contacts/campaigns/{id}/live","href":"/api-reference/campaigns/change-a-running-campaign-safely"},{"title":"Turn the audience into calls","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /contacts/campaigns/{id}/launch","href":"/api-reference/campaigns/turn-the-audience-into-calls"},{"title":"Dial the next block","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /contacts/campaigns/{id}/runs/next","href":"/api-reference/campaigns/dial-the-next-block"},{"title":"Pause a running campaign","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /contacts/campaigns/{id}/pause","href":"/api-reference/campaigns/pause-a-running-campaign"},{"title":"Resume a paused campaign","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /contacts/campaigns/{id}/resume","href":"/api-reference/campaigns/resume-a-paused-campaign"},{"title":"Stop a campaign for good","deprecated":null,"version":null,"openapi":"/openapi/api-public-v1.yaml post /contacts/campaigns/{id}/stop","href":"/api-reference/campaigns/stop-a-campaign-for-good"}]}]}]},"basePath":"","title":"Create a batch - Vodex API","buildId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","deploymentId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-CS552b7R.js","utils-DDTCYAF2.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-De8ttokP.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-DrwRDvAh.js","snippetPresets-DtAN0nWx.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-D5rWArI6.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-O2i12wsz.js","shallow-DV8xABTt.js","getApiPlaygroundDisplay-DBZ0B5Jx.js","CodeSnippet-BVi0tPUX.js","CodeSnippets-CqASbIwY.js","Page-m07pfKpT.js","getPastedJson-DG9vsMS8.js","icon-CXzRSCr8.js","MethodPill-BdKVtEuX.js","DuplicateIcon-CZlmBrJI.js","createIcon-biFEUKPL.js","DynamicMarkdown-B54_zNBF.js","SectionHeading-DwwHK3Pt.js","axios-vUo_bRtp.js","Markdown-DfhCTwyA.js","clsx-xpJZXxdP.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-BTZUMDnx.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-DqdKa2R4.js"]}