Submit a list of phone numbers. Use multipart/form-data to upload a
CSV file (max 100 MB), or application/json to send phone numbers
directly. Either way, the upload requires at least 100 valid US/CA
phone numbers and at most 250,000.
Map a name column to enable OptimalDial Identity, which additionally
judges whether each number belongs to the contact named on that row.
Identity does not change what an upload costs.
OptimalDial API key, prefixed od_live_, sent as Authorization: Bearer ....
Mint keys in the in-app developer panel; they are scoped to a single organization.
Body
multipart/form-dataapplication/json
Requires file plus either phone_column or phone_columns. Supplying both is allowed only when they agree.
Comma-separated names of up to 10 columns containing phone numbers, e.g. mobile,direct. Every number is validated and billed separately, so a contact with a number in two mapped columns costs 2 credits (3 at max). The same number appearing in several columns is charged once. Results come back as one row per contact with a {column}_OptimalDial_Status column per mapped column. A column name containing a comma cannot be expressed here — use JSON mode, where this is a real array.
Billable phone numbers. Equals valid_row_count when one phone column is mapped; larger when several are. This is the count credits are charged on, so do not derive an invalid count by subtracting it from validation_results.total_rows.
true if this upload was submitted after your organization had already used its plan's daily processing capacity, measured in phone numbers on a midnight America/New_York day boundary. Advisory only — the upload is accepted and processed in full, and the remainder carries into the next processing day at no extra charge. Before 2026-09-04 this was measured per uploading user and per UTC day.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"OptimalDial","colors":{"primary":"#0a0436"},"logo":{"light":"https://mintcdn.com/neeloptimaldialcom/0TTegglm6A11jkFF/logo/light.svg?fit=max\u0026auto=format\u0026n=0TTegglm6A11jkFF\u0026q=85\u0026s=ae33049d862b1b21cb9361bbcf855ebb","dark":"https://mintcdn.com/neeloptimaldialcom/0TTegglm6A11jkFF/logo/dark.svg?fit=max\u0026auto=format\u0026n=0TTegglm6A11jkFF\u0026q=85\u0026s=dc5af00025e85e5271eb42b8d6147b05","href":"https://docs.optimaldial.com"},"favicon":"https://mintcdn.com/neeloptimaldialcom/0TTegglm6A11jkFF/favicon.ico?fit=max\u0026auto=format\u0026n=0TTegglm6A11jkFF\u0026q=85\u0026s=9604492a61cdf83fc172f3ba6e9603a3","navbar":{"primary":{"type":"button","label":"Open app","href":"https://app.optimaldial.com"}},"footer":{"socials":{}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"neeloptimaldialcom","hasAudioNarration":false,"actualSubdomain":"neeloptimaldialcom","customDomains":["docs.optimaldial.com"],"gitSource":{"type":"github","owner":"neel-rawlani","repo":"optimaldial-app","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6aaa2c98e06921fec696e81c","collectionId":"148b4a30-79e6-4443-bda8-ecb5f4693344","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aaa2c98e06921fec696e81c"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6aaa2c98e06921fec696e81c","clientVersion":"0.0.3966","searchFilterCounts":[{"language":"default","tag":"API Reference","count":27},{"language":"default","tag":"spam","count":8},{"language":"default","tag":"contacts","count":6},{"language":"default","tag":"uploads","count":6},{"language":"default","tag":"webhooks","count":6},{"language":"default","tag":"Endpoint guides","count":5},{"language":"default","tag":"Get started","count":3},{"language":"default","tag":"Resources","count":2},{"language":"default","tag":"Webhooks","count":2},{"language":"default","tag":"credits","count":1}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"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":"editor-v7-file-tree","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":"pause-universal-search-reconcile","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":"per-site-search-delta","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":"editor-private-page-search","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":"editor-nav-generations","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":"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":"editor-agent-model-picker","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":"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}],"isAtlas":false,"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"endpoints/uploads/create-an-upload","slug":"/endpoints/uploads/create-an-upload","pageMetadata":{"title":"Create an upload","description":"Submit a list of phone numbers. Use `multipart/form-data` to upload a\nCSV file (max 100 MB), or `application/json` to send phone numbers\ndirectly. Either way, the upload requires at least 100 valid US/CA\nphone numbers and at most 250,000.\n\nMap a name column to enable **OptimalDial Identity**, which additionally\njudges whether each number belongs to the contact named on that row.\nIdentity does not change what an upload costs.\n","deprecated":null,"version":null,"openapi":"https://api.optimaldial.com/openapi/v1/spec.yaml post /api/v1/uploads","href":"/endpoints/uploads/create-an-upload","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: [\"Submit a list of phone numbers. Use \", _jsx(_components.code, {\n children: \"multipart/form-data\"\n }), \" to upload a\\nCSV file (max 100 MB), or \", _jsx(_components.code, {\n children: \"application/json\"\n }), \" to send phone numbers\\ndirectly. Either way, the upload requires at least 100 valid US/CA\\nphone numbers and at most 250,000.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Map a name column to enable \", _jsx(_components.strong, {\n children: \"OptimalDial Identity\"\n }), \", which additionally\\njudges whether each number belongs to the contact named on that row.\\nIdentity does not change what an upload costs.\"]\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 an upload","description":"Submit a list of phone numbers. Use `multipart/form-data` to upload a\nCSV file (max 100 MB), or `application/json` to send phone numbers\ndirectly. Either way, the upload requires at least 100 valid US/CA\nphone numbers and at most 250,000.\n\nMap a name column to enable **OptimalDial Identity**, which additionally\njudges whether each number belongs to the contact named on that row.\nIdentity does not change what an upload costs.\n","deprecated":null,"version":null,"openapi":"https://api.optimaldial.com/openapi/v1/spec.yaml post /api/v1/uploads","href":"/endpoints/uploads/create-an-upload","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["uploads"],"summary":"Create an upload","description":"Submit a list of phone numbers. Use `multipart/form-data` to upload a\nCSV file (max 100 MB), or `application/json` to send phone numbers\ndirectly. Either way, the upload requires at least 100 valid US/CA\nphone numbers and at most 250,000.\n\nMap a name column to enable **OptimalDial Identity**, which additionally\njudges whether each number belongs to the contact named on that row.\nIdentity does not change what an upload costs.\n","operationId":"createUpload","requestBody":"66212fe2-3801-4a1d-9656-b54ce14ed0e9","responses":{"200":"c282725a-29df-4058-808f-ed6ab3da4b1e","400":"9c5346b4-bbd7-4d9a-8548-94827912b474","401":"2e47c5e7-9a0d-48db-b997-372948f29984","402":"5c4086a7-9a8d-4541-9a28-e8d9e289922b","403":"048b2693-4bc4-4fca-83d6-4a8ab64933d6","413":"7e2d1376-ca77-4e45-bcc4-4334bd3d50a2","415":"f54245ef-431a-4630-8849-41daa606a88c","422":"84e26f69-b820-4a0e-be9c-782ce2ffcb36","429":"2126825b-8e85-49a5-b688-97c6e5763079"},"method":"post","type":"path","servers":["a9a380bc-2e8e-4e03-961e-d527e5f51a4e"],"security":["a15c37a2-8163-4b8c-96ef-64e57d0723da"],"path":"/api/v1/uploads","baseUrlOptions":["https://api.optimaldial.com"],"title":"Create an upload","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["file"],"description":"Requires `file` plus either `phone_column` or `phone_columns`. Supplying both is allowed only when they agree.","properties":{"file":{"type":"string","format":"binary","description":"CSV file (≤100 MB, must include a header row).","isRequired":true,"uniqueKey":"file","typeLabel":"file"},"phone_column":{"type":"string","description":"Name of the column containing phone numbers. Use this OR `phone_columns`.","uniqueKey":"phone_column","typeLabel":"string"},"phone_columns":{"type":"string","description":"Comma-separated names of up to 10 columns containing phone numbers, e.g. `mobile,direct`. Every number is validated and billed separately, so a contact with a number in two mapped columns costs 2 credits (3 at `max`). The same number appearing in several columns is charged once. Results come back as one row per contact with a `{column}_OptimalDial_Status` column per mapped column. A column name containing a comma cannot be expressed here — use JSON mode, where this is a real array.","uniqueKey":"phone_columns","typeLabel":"string"},"skip_mobile_lookup":{"type":"boolean","default":false,"uniqueKey":"skip_mobile_lookup","typeLabel":"boolean"},"validation_tier":{"type":"string","enum":["standard","max"],"default":"standard","description":"Validation tier. `standard` charges 1 credit/contact; `max` is more thorough and charges 1.5 credits/contact (billed as ceil(valid_count × 1.5)).","uniqueKey":"validation_tier","typeLabel":"enum\u003cstring>"},"filename_override":{"type":"string","description":"Override the file's original name.","uniqueKey":"filename_override","typeLabel":"string"},"full_name_column":{"type":"string","description":"Enables OptimalDial Identity. Name of the column holding the contact's full name. Supply this OR both `first_name_column` and `last_name_column`.","uniqueKey":"full_name_column","typeLabel":"string"},"first_name_column":{"type":"string","description":"Enables OptimalDial Identity when supplied together with `last_name_column`. Supplying only one half returns 400.","uniqueKey":"first_name_column","typeLabel":"string"},"last_name_column":{"type":"string","description":"Enables OptimalDial Identity when supplied together with `first_name_column`. Supplying only one half returns 400.","uniqueKey":"last_name_column","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"file":"\u003cstring>","phone_column":"\u003cstring>","phone_columns":"\u003cstring>","skip_mobile_lookup":false,"validation_tier":"standard","filename_override":"\u003cstring>","full_name_column":"\u003cstring>","first_name_column":"\u003cstring>","last_name_column":"\u003cstring>"}}},"exampleType":"generated"},"application/json":{"schema":{"type":"object","description":"Provide exactly one of `phone_numbers` (flat string array) OR\n`contacts` (rich objects). When using `contacts`, `phone_column`\n(or `phone_columns`) is required.\n\nThe 100-item minimum counts NUMBERS, not contacts: 50 contacts with two\nmapped phone columns each qualifies.\n","properties":{"filename":{"type":"string","description":"Used as `original_filename`. Defaults to a synthesized name.","uniqueKey":"filename","typeLabel":"string"},"skip_mobile_lookup":{"type":"boolean","default":false,"uniqueKey":"skip_mobile_lookup","typeLabel":"boolean"},"validation_tier":{"type":"string","enum":["standard","max"],"default":"standard","description":"Validation tier. `standard` charges 1 credit/contact; `max` charges 1.5 credits/contact (billed as ceil(valid_count × 1.5)).","uniqueKey":"validation_tier","typeLabel":"enum\u003cstring>"},"phone_numbers":{"type":"array","items":{"type":"string","uniqueKey":"phone_numbers.items.[INDEX]","typeLabel":"string"},"minItems":100,"maxItems":250000,"uniqueKey":"phone_numbers","typeLabel":"string[]"},"contacts":{"type":"array","items":{"type":"object","additionalProperties":true,"uniqueKey":"contacts.items.[INDEX]","typeLabel":"object"},"minItems":100,"maxItems":250000,"uniqueKey":"contacts","typeLabel":"object[]"},"phone_column":{"type":"string","description":"Required when using `contacts`, unless `phone_columns` is supplied.","uniqueKey":"phone_column","typeLabel":"string"},"phone_columns":{"type":"array","items":{"type":"string","uniqueKey":"phone_columns.items.[INDEX]","typeLabel":"string"},"maxItems":10,"description":"Up to 10 keys on each contact object holding a phone number. Every number is validated and billed separately; the same number appearing under several keys is charged once. Requires `contacts` — a flat `phone_numbers` array has exactly one column.","uniqueKey":"phone_columns","typeLabel":"string[]"},"full_name_column":{"type":"string","description":"Enables OptimalDial Identity. The key on each contact object holding the contact's full name. Requires `contacts` — a flat `phone_numbers` array carries no name to match against.","uniqueKey":"full_name_column","typeLabel":"string"},"first_name_column":{"type":"string","description":"Enables OptimalDial Identity together with `last_name_column`.","uniqueKey":"first_name_column","typeLabel":"string"},"last_name_column":{"type":"string","description":"Enables OptimalDial Identity together with `first_name_column`.","uniqueKey":"last_name_column","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"phoneNumbers":{"title":"phoneNumbers","value":{"filename":"april-cohort.csv","phone_numbers":["+15551234567","+15551234568"]}},"contacts":{"title":"contacts","value":{"filename":"april-cohort.csv","contacts":[{"phone":"+15551234567","first_name":"Alex","list":"april"},{"phone":"+15551234568","first_name":"Bea","list":"april"}],"phone_column":"phone"}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"c282725a-29df-4058-808f-ed6ab3da4b1e":{"description":"Upload created, credits charged, ready for processing.","content":{"application/json":{"schema":{"type":"object","required":["id","user_id","original_filename","status","created_at","updated_at"],"properties":{"id":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"id","typeLabel":"string\u003cuuid>"},"user_id":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"user_id","typeLabel":"string\u003cuuid>"},"original_filename":{"type":"string","isRequired":true,"uniqueKey":"original_filename","typeLabel":"string"},"status":{"type":"string","description":"`cancelled` is a legacy value retained so historical uploads still\nparse — no new upload can enter it.\n","enum":["pending_mapping","validating","validation_failed","awaiting_confirmation","ready_for_processing","processing","completed","failed","cancelled"],"isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"created_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"created_at","typeLabel":"string\u003cdate-time>"},"updated_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"updated_at","typeLabel":"string\u003cdate-time>"},"organization_id":{"oneOf":[{"type":"string","format":"uuid","uniqueKey":"organization_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","format":"uuid","uniqueKey":"organization_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"organization_id","typeLabel":"string\u003cuuid> | null"},"file_size_bytes":{"oneOf":[{"type":"integer","uniqueKey":"file_size_bytes.oneOf.0","typeLabel":"integer"},{"type":"null","uniqueKey":"file_size_bytes.oneOf.1","typeLabel":"null"}],"uniqueKey":"file_size_bytes","typeLabel":"integer | null"},"valid_row_count":{"oneOf":[{"type":"integer","description":"Contact rows processed.","uniqueKey":"valid_row_count.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Contact rows processed.","uniqueKey":"valid_row_count.oneOf.1","typeLabel":"null"}],"uniqueKey":"valid_row_count","typeLabel":"integer | null"},"valid_number_count":{"oneOf":[{"type":"integer","description":"Billable phone numbers. Equals `valid_row_count` when one phone column is mapped; larger when several are. This is the count credits are charged on, so do not derive an invalid count by subtracting it from `validation_results.total_rows`.","uniqueKey":"valid_number_count.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Billable phone numbers. Equals `valid_row_count` when one phone column is mapped; larger when several are. This is the count credits are charged on, so do not derive an invalid count by subtracting it from `validation_results.total_rows`.","uniqueKey":"valid_number_count.oneOf.1","typeLabel":"null"}],"uniqueKey":"valid_number_count","typeLabel":"integer | null"},"invalid_row_count":{"oneOf":[{"type":"integer","uniqueKey":"invalid_row_count.oneOf.0","typeLabel":"integer"},{"type":"null","uniqueKey":"invalid_row_count.oneOf.1","typeLabel":"null"}],"uniqueKey":"invalid_row_count","typeLabel":"integer | null"},"credits_required":{"oneOf":[{"type":"integer","uniqueKey":"credits_required.oneOf.0","typeLabel":"integer"},{"type":"null","uniqueKey":"credits_required.oneOf.1","typeLabel":"null"}],"uniqueKey":"credits_required","typeLabel":"integer | null"},"credits_charged":{"oneOf":[{"type":"integer","uniqueKey":"credits_charged.oneOf.0","typeLabel":"integer"},{"type":"null","uniqueKey":"credits_charged.oneOf.1","typeLabel":"null"}],"uniqueKey":"credits_charged","typeLabel":"integer | null"},"credits_refunded":{"oneOf":[{"type":"integer","description":"Credits returned to the organization when OptimalDial refunds an upload.","uniqueKey":"credits_refunded.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Credits returned to the organization when OptimalDial refunds an upload.","uniqueKey":"credits_refunded.oneOf.1","typeLabel":"null"}],"uniqueKey":"credits_refunded","typeLabel":"integer | null"},"source":{"oneOf":[{"type":"string","enum":["web","api","api_pool",null],"description":"`web` for in-app uploads, `api` for direct `/api/v1/uploads` calls,\n`api_pool` for uploads synthesized from the Contacts API.\n","uniqueKey":"source.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["web","api","api_pool",null],"description":"`web` for in-app uploads, `api` for direct `/api/v1/uploads` calls,\n`api_pool` for uploads synthesized from the Contacts API.\n","uniqueKey":"source.oneOf.1","typeLabel":"null"}],"uniqueKey":"source","typeLabel":"enum\u003cstring> | null"},"api_key_id":{"oneOf":[{"type":"string","format":"uuid","uniqueKey":"api_key_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","format":"uuid","uniqueKey":"api_key_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"api_key_id","typeLabel":"string\u003cuuid> | null"},"skip_mobile_lookup":{"oneOf":[{"type":"boolean","uniqueKey":"skip_mobile_lookup.oneOf.0","typeLabel":"boolean"},{"type":"null","uniqueKey":"skip_mobile_lookup.oneOf.1","typeLabel":"null"}],"uniqueKey":"skip_mobile_lookup","typeLabel":"boolean | null"},"validation_tier":{"oneOf":[{"type":"string","enum":["standard","max",null],"description":"Validation tier used for this upload (`standard` or `max`).","uniqueKey":"validation_tier.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["standard","max",null],"description":"Validation tier used for this upload (`standard` or `max`).","uniqueKey":"validation_tier.oneOf.1","typeLabel":"null"}],"uniqueKey":"validation_tier","typeLabel":"enum\u003cstring> | null"},"identity_enabled":{"oneOf":[{"type":"boolean","description":"Whether OptimalDial Identity was requested for this upload, i.e. a name column was mapped at creation.","uniqueKey":"identity_enabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Whether OptimalDial Identity was requested for this upload, i.e. a name column was mapped at creation.","uniqueKey":"identity_enabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"identity_enabled","typeLabel":"boolean | null"},"result_summary":{"oneOf":[{"type":"object","description":"Distribution of the results, populated once `status == \"completed\"`. Lets you see the shape of a list without downloading it.","properties":{"format":{"type":"string","enum":["identity","answer_intent"],"uniqueKey":"result_summary.oneOf.0.format","typeLabel":"enum\u003cstring>"},"total_rows":{"type":"integer","uniqueKey":"result_summary.oneOf.0.total_rows","typeLabel":"integer"},"status_counts":{"type":"object","additionalProperties":{"type":"integer","uniqueKey":"result_summary.oneOf.0.status_counts.additionalProperties","typeLabel":"integer"},"example":{"1 - Likely Right-Party Answer":303,"5 - Likely Right-Party Voicemail":891,"8 - Likely Wrong Number":463},"uniqueKey":"result_summary.oneOf.0.status_counts","typeLabel":"object"},"identity_counts":{"type":"object","additionalProperties":{"type":"integer","uniqueKey":"result_summary.oneOf.0.identity_counts.additionalProperties","typeLabel":"integer"},"example":{"Very High":344,"High":846,"Low":463},"uniqueKey":"result_summary.oneOf.0.identity_counts","typeLabel":"object"},"has_answer_intent_column":{"type":"boolean","uniqueKey":"result_summary.oneOf.0.has_answer_intent_column","typeLabel":"boolean"},"has_identity_column":{"type":"boolean","uniqueKey":"result_summary.oneOf.0.has_identity_column","typeLabel":"boolean"},"total_numbers":{"type":"integer","description":"Results in the file — one per number. Equals `total_rows` for a single-column upload. Absent on summaries cached before multiple phone columns shipped.","uniqueKey":"result_summary.oneOf.0.total_numbers","typeLabel":"integer"},"per_column":{"type":"object","description":"Status distribution split by mapped phone column. Only present when the upload mapped more than one.","additionalProperties":{"type":"object","additionalProperties":{"type":"integer","uniqueKey":"result_summary.oneOf.0.per_column.additionalProperties.additionalProperties","typeLabel":"integer"},"uniqueKey":"result_summary.oneOf.0.per_column.additionalProperties","typeLabel":"object"},"uniqueKey":"result_summary.oneOf.0.per_column","typeLabel":"object"}},"uniqueKey":"result_summary.oneOf.0","typeLabel":"object"},{"type":"null","description":"Distribution of the results, populated once `status == \"completed\"`. Lets you see the shape of a list without downloading it.","uniqueKey":"result_summary.oneOf.1","typeLabel":"null"}],"uniqueKey":"result_summary","typeLabel":"object | null"},"export_count":{"type":"integer","description":"How many times these results have been downloaded, counting both the web app and this API.","uniqueKey":"export_count","typeLabel":"integer"},"last_exported_at":{"oneOf":[{"type":"string","format":"date-time","uniqueKey":"last_exported_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","uniqueKey":"last_exported_at.oneOf.1","typeLabel":"null"}],"uniqueKey":"last_exported_at","typeLabel":"string\u003cdate-time> | null"},"processed_available":{"type":"boolean","description":"`true` once the processed file can be downloaded. Storage keys are deliberately not exposed — use the download endpoints.","uniqueKey":"processed_available","typeLabel":"boolean"},"processed_filtered_available":{"type":"boolean","description":"`true` once the deprecated `download/processed-filtered` endpoint will succeed, whether from a stored file or generated on demand.","uniqueKey":"processed_filtered_available","typeLabel":"boolean"},"error_message":{"oneOf":[{"type":"string","uniqueKey":"error_message.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error_message.oneOf.1","typeLabel":"null"}],"uniqueKey":"error_message","typeLabel":"string | null"},"exceeded_daily_limit":{"oneOf":[{"type":"boolean","description":"`true` if this upload was submitted after your organization had already used its plan's daily processing capacity, measured in phone numbers on a midnight America/New_York day boundary. Advisory only — the upload is accepted and processed in full, and the remainder carries into the next processing day at no extra charge. Before 2026-09-04 this was measured per uploading user and per UTC day.","uniqueKey":"exceeded_daily_limit.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"`true` if this upload was submitted after your organization had already used its plan's daily processing capacity, measured in phone numbers on a midnight America/New_York day boundary. Advisory only — the upload is accepted and processed in full, and the remainder carries into the next processing day at no extra charge. Before 2026-09-04 this was measured per uploading user and per UTC day.","uniqueKey":"exceeded_daily_limit.oneOf.1","typeLabel":"null"}],"uniqueKey":"exceeded_daily_limit","typeLabel":"boolean | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","user_id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","original_filename":"\u003cstring>","status":"pending_mapping","created_at":"2023-11-07T05:31:56Z","updated_at":"2023-11-07T05:31:56Z","organization_id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","file_size_bytes":123,"valid_row_count":123,"valid_number_count":123,"invalid_row_count":123,"credits_required":123,"credits_charged":123,"credits_refunded":123,"source":"web","api_key_id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","skip_mobile_lookup":true,"validation_tier":"standard","identity_enabled":true,"result_summary":{"format":"identity","total_rows":123,"status_counts":{"1 - Likely Right-Party Answer":303,"5 - Likely Right-Party Voicemail":891,"8 - Likely Wrong Number":463},"identity_counts":{"Very High":344,"High":846,"Low":463},"has_answer_intent_column":true,"has_identity_column":true,"total_numbers":123,"per_column":{}},"export_count":123,"last_exported_at":"2023-11-07T05:31:56Z","processed_available":true,"processed_filtered_available":true,"error_message":"\u003cstring>","exceeded_daily_limit":true}}},"exampleType":"generated"}},"exampleType":"generated"},"9c5346b4-bbd7-4d9a-8548-94827912b474":{"description":"Invalid request.","content":{"application/json":{"schema":{"type":"object","required":["detail"],"properties":{"detail":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"detail.oneOf.0","typeLabel":"string"},{"type":"object","isRequired":true,"uniqueKey":"detail.oneOf.1","typeLabel":"object"}],"isRequired":true,"uniqueKey":"detail","typeLabel":"string | object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"detail":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"2e47c5e7-9a0d-48db-b997-372948f29984":{"description":"Missing or invalid API key.","headers":{"WWW-Authenticate":{"schema":{"type":"string","example":"Bearer"}}},"content":{"application/json":{"schema":{"type":"object","required":["detail"],"properties":{"detail":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"detail.oneOf.0","typeLabel":"string"},{"type":"object","isRequired":true,"uniqueKey":"detail.oneOf.1","typeLabel":"object"}],"isRequired":true,"uniqueKey":"detail","typeLabel":"string | object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"detail":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"5c4086a7-9a8d-4541-9a28-e8d9e289922b":{"description":"Insufficient credits.","content":{"application/json":{"schema":{"type":"object","required":["detail"],"properties":{"detail":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"detail.oneOf.0","typeLabel":"string"},{"type":"object","isRequired":true,"uniqueKey":"detail.oneOf.1","typeLabel":"object"}],"isRequired":true,"uniqueKey":"detail","typeLabel":"string | object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"detail":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"048b2693-4bc4-4fca-83d6-4a8ab64933d6":{"description":"No active subscription on the organization.","content":{"application/json":{"schema":{"type":"object","required":["detail"],"properties":{"detail":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"detail.oneOf.0","typeLabel":"string"},{"type":"object","isRequired":true,"uniqueKey":"detail.oneOf.1","typeLabel":"object"}],"isRequired":true,"uniqueKey":"detail","typeLabel":"string | object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"detail":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"7e2d1376-ca77-4e45-bcc4-4334bd3d50a2":{"description":"CSV >100 MB or array >250,000 entries.","content":{"application/json":{"schema":{"type":"object","required":["detail"],"properties":{"detail":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"detail.oneOf.0","typeLabel":"string"},{"type":"object","isRequired":true,"uniqueKey":"detail.oneOf.1","typeLabel":"object"}],"isRequired":true,"uniqueKey":"detail","typeLabel":"string | object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"detail":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"f54245ef-431a-4630-8849-41daa606a88c":{"description":"Unsupported Content-Type. Use multipart/form-data or application/json.","content":{"application/json":{"schema":{"type":"object","required":["detail"],"properties":{"detail":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"detail.oneOf.0","typeLabel":"string"},{"type":"object","isRequired":true,"uniqueKey":"detail.oneOf.1","typeLabel":"object"}],"isRequired":true,"uniqueKey":"detail","typeLabel":"string | object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"detail":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"84e26f69-b820-4a0e-be9c-782ce2ffcb36":{"description":"Fewer than 100 valid phone numbers after server validation.","content":{"application/json":{"schema":{"type":"object","required":["detail"],"properties":{"detail":{"type":"object","required":["error","min","got","message"],"properties":{"error":{"type":"string","enum":["min_contacts_required"],"isRequired":true,"uniqueKey":"detail.error","typeLabel":"enum\u003cstring>"},"min":{"type":"integer","isRequired":true,"uniqueKey":"detail.min","typeLabel":"integer"},"got":{"type":"integer","isRequired":true,"uniqueKey":"detail.got","typeLabel":"integer"},"message":{"type":"string","isRequired":true,"uniqueKey":"detail.message","typeLabel":"string"}},"isRequired":true,"uniqueKey":"detail","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"detail":{"error":"min_contacts_required","min":123,"got":123,"message":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"2126825b-8e85-49a5-b688-97c6e5763079":{"description":"A rate-limit bucket was exhausted (per-key, per-org, or the system-wide ceiling). See the `scope` field.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds to wait before retrying."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"The per-minute limit for the scope that was exceeded."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Tokens remaining in that bucket (0 on a 429)."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until at least one token is available again."}},"content":{"application/json":{"schema":{"type":"object","required":["detail"],"properties":{"detail":{"type":"object","required":["error","scope","limit","retry_after_seconds"],"properties":{"error":{"type":"string","enum":["rate_limit_exceeded"],"isRequired":true,"uniqueKey":"detail.error","typeLabel":"enum\u003cstring>"},"scope":{"type":"string","enum":["per_key","per_org","global"],"description":"Which limit was hit: the per-API-key cap, the per-organization cap, or the system-wide ceiling.","isRequired":true,"uniqueKey":"detail.scope","typeLabel":"enum\u003cstring>"},"limit":{"type":"integer","description":"The per-minute limit for the scope that was exceeded.","isRequired":true,"uniqueKey":"detail.limit","typeLabel":"integer"},"retry_after_seconds":{"type":"integer","description":"Seconds to wait before retrying (also returned as the Retry-After header).","isRequired":true,"uniqueKey":"detail.retry_after_seconds","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"detail","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"detail":{"error":"rate_limit_exceeded","scope":"per_key","limit":123,"retry_after_seconds":123}}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"a15c37a2-8163-4b8c-96ef-64e57d0723da":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"od_live_xxxxxxxx","description":"OptimalDial API key, prefixed `od_live_`, sent as `Authorization: Bearer ...`.\nMint keys in the in-app developer panel; they are scoped to a single organization.\n","scopes":[]}}},"servers":{"a9a380bc-2e8e-4e03-961e-d527e5f51a4e":{"url":"https://api.optimaldial.com","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"od_live_xxxxxxxx","description":"OptimalDial API key, prefixed `od_live_`, sent as `Authorization: Bearer ...`.\nMint keys in the in-app developer panel; they are scoped to a single organization.\n","scopes":[]},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"OptimalDial API key, prefixed `od_live_`, sent as `Authorization: Bearer ...`.\nMint keys in the in-app developer panel; they are scoped to a single organization.\n","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"https://api.optimaldial.com/openapi/v1/spec.yaml"},"subdomain":"neeloptimaldialcom","siteName":"OptimalDial","title":"Create an upload - OptimalDial","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-16T05:44:03.950Z","originalFileLocation":"endpoints/uploads/create-an-upload.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=\"Submit a list of phone numbers. Use multipart/form-data to upload a CSV file (max 100 MB), or application/json to send phone numbers directly. Either way, the upload requires at least 100 valid US/CA phone numbers and at most 250,000. Map a name column to enable OptimalDial Identity, which additionally judges whether each number belongs to the contact named on that row. Identity does not change what an upload costs.\">\u003cmeta data-mint-head name=\"application-name\" content=\"OptimalDial\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/neeloptimaldialcom/uXVieaPmn4jALVLf/_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/neeloptimaldialcom/uXVieaPmn4jALVLf/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/neeloptimaldialcom/uXVieaPmn4jALVLf/_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/neeloptimaldialcom/uXVieaPmn4jALVLf/_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/neeloptimaldialcom/uXVieaPmn4jALVLf/_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/neeloptimaldialcom/uXVieaPmn4jALVLf/_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/neeloptimaldialcom/uXVieaPmn4jALVLf/_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/neeloptimaldialcom/uXVieaPmn4jALVLf/_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/neeloptimaldialcom/uXVieaPmn4jALVLf/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Create an upload - OptimalDial\">\u003cmeta data-mint-head property=\"og:description\" content=\"Submit a list of phone numbers. Use multipart/form-data to upload a CSV file (max 100 MB), or application/json to send phone numbers directly. Either way, the upload requires at least 100 valid US/CA phone numbers and at most 250,000. Map a name column to enable OptimalDial Identity, which additionally judges whether each number belongs to the contact named on that row. Identity does not change what an upload costs.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"OptimalDial\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.optimaldial.com/endpoints/uploads/create-an-upload\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://neeloptimaldialcom.mintlify.app/_mintlify/api/og/v2?division=uploads\u0026amp;title=Create+an+upload\u0026amp;description=Submit+a+list+of+phone+numbers.+Use+%60multipart%2Fform-data%60+to+upload+a%0ACSV+file+%28max+100+MB%29%2C+or+%60application%2Fjson%60+to+send+phone+numbers%0Adirectly.+Either+way%2C+t\u0026amp;theme=cf3bc0346dc51be3d8e8f822\u0026amp;signature=2bf2d9395894a158d465cbead65a267d8c4eae9a5e04dab1d0e04ab6d1501073\">\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 an upload - OptimalDial\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Submit a list of phone numbers. Use multipart/form-data to upload a CSV file (max 100 MB), or application/json to send phone numbers directly. Either way, the upload requires at least 100 valid US/CA phone numbers and at most 250,000. Map a name column to enable OptimalDial Identity, which additionally judges whether each number belongs to the contact named on that row. Identity does not change what an upload costs.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://neeloptimaldialcom.mintlify.app/_mintlify/api/og/v2?division=uploads\u0026amp;title=Create+an+upload\u0026amp;description=Submit+a+list+of+phone+numbers.+Use+%60multipart%2Fform-data%60+to+upload+a%0ACSV+file+%28max+100+MB%29%2C+or+%60application%2Fjson%60+to+send+phone+numbers%0Adirectly.+Either+way%2C+t\u0026amp;theme=cf3bc0346dc51be3d8e8f822\u0026amp;signature=2bf2d9395894a158d465cbead65a267d8c4eae9a5e04dab1d0e04ab6d1501073\">\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/neeloptimaldialcom/uXVieaPmn4jALVLf/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"OptimalDial\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0a0436\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.optimaldial.com/endpoints/uploads/create-an-upload\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/endpoints/uploads/create-an-upload.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.optimaldial.com/#organization\",\"name\":\"OptimalDial\",\"url\":\"https://docs.optimaldial.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/neeloptimaldialcom/0TTegglm6A11jkFF/logo/light.svg?fit=max\u0026auto=format\u0026n=0TTegglm6A11jkFF\u0026q=85\u0026s=ae33049d862b1b21cb9361bbcf855ebb\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.optimaldial.com#website\",\"name\":\"OptimalDial\",\"url\":\"https://docs.optimaldial.com\",\"publisher\":{\"@id\":\"https://docs.optimaldial.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.optimaldial.com/endpoints/uploads/create-an-upload#webpage\",\"url\":\"https://docs.optimaldial.com/endpoints/uploads/create-an-upload\",\"name\":\"Create an upload\",\"description\":\"Submit a list of phone numbers. Use multipart/form-data to upload a CSV file (max 100 MB), or application/json to send phone numbers directly. Either way, the upload requires at least 100 valid US/CA phone numbers and at most 250,000. Map a name column to enable OptimalDial Identity, which additionally judges whether each number belongs to the contact named on that row. Identity does not change what an upload costs.\",\"dateModified\":\"2026-09-16T05:44:03.950Z\",\"isPartOf\":{\"@id\":\"https://docs.optimaldial.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.optimaldial.com/endpoints/uploads/create-an-upload#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.optimaldial.com/endpoints/uploads/create-an-upload#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"API Reference\",\"item\":\"https://docs.optimaldial.com/endpoints/uploads/list-uploads\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"uploads\",\"item\":\"https://docs.optimaldial.com/endpoints/uploads/list-uploads\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Create an upload\",\"item\":\"https://docs.optimaldial.com/endpoints/uploads/create-an-upload\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.optimaldial.com/endpoints/uploads/create-an-upload#apireference\",\"headline\":\"Create an upload\",\"name\":\"Create an upload\",\"description\":\"Submit a list of phone numbers. Use multipart/form-data to upload a CSV file (max 100 MB), or application/json to send phone numbers directly. Either way, the upload requires at least 100 valid US/CA phone numbers and at most 250,000. Map a name column to enable OptimalDial Identity, which additionally judges whether each number belongs to the contact named on that row. Identity does not change what an upload costs.\",\"url\":\"https://docs.optimaldial.com/endpoints/uploads/create-an-upload\",\"mainEntityOfPage\":{\"@id\":\"https://docs.optimaldial.com/endpoints/uploads/create-an-upload#webpage\"},\"dateModified\":\"2026-09-16T05:44:03.950Z\",\"publisher\":{\"@id\":\"https://docs.optimaldial.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.optimaldial.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"OptimalDial\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"OptimalDial","nav":{"global":null,"groups":[{"group":"Get started","pages":[{"title":"Introduction","href":"/index"},{"title":"Getting started","href":"/getting-started"},{"title":"Authentication","href":"/authentication"}]},{"group":"Endpoint guides","pages":[{"title":"Uploads","href":"/api-reference/uploads"},{"title":"Contacts","href":"/api-reference/contacts"},{"title":"Webhooks","href":"/api-reference/webhooks"},{"title":"Spam monitoring","href":"/api-reference/spam-monitoring"},{"title":"Credit balance","href":"/api-reference/credit-balance"}]},{"group":"Webhooks","pages":[{"title":"Receiving webhooks","href":"/guides/webhooks"},{"title":"Errors and rate limits","href":"/guides/errors-and-rate-limits"}]},{"group":"API Reference","pages":[{"group":"uploads","pages":[{"title":"List uploads","description":null,"deprecated":null,"version":null,"openapi":"https://api.optimaldial.com/openapi/v1/spec.yaml get /api/v1/uploads","href":"/endpoints/uploads/list-uploads"},{"title":"Create an upload","deprecated":null,"version":null,"openapi":"https://api.optimaldial.com/openapi/v1/spec.yaml post /api/v1/uploads","href":"/endpoints/uploads/create-an-upload"},{"title":"Retrieve an upload","description":null,"deprecated":null,"version":null,"openapi":"https://api.optimaldial.com/openapi/v1/spec.yaml get /api/v1/uploads/{upload_id}","href":"/endpoints/uploads/retrieve-an-upload"},{"title":"Get a signed download URL for the original submitted file","deprecated":null,"version":null,"openapi":"https://api.optimaldial.com/openapi/v1/spec.yaml get /api/v1/uploads/{upload_id}/download/original","href":"/endpoints/uploads/get-a-signed-download-url-for-the-original-submitted-file"},{"title":"Get a signed download URL for the processed file","deprecated":null,"version":null,"openapi":"https://api.optimaldial.com/openapi/v1/spec.yaml get /api/v1/uploads/{upload_id}/download/processed","href":"/endpoints/uploads/get-a-signed-download-url-for-the-processed-file"},{"title":"Get a signed download URL for the \"likely answer only\" filtered file","deprecated":true,"version":null,"openapi":"https://api.optimaldial.com/openapi/v1/spec.yaml get /api/v1/uploads/{upload_id}/download/processed-filtered","href":"/endpoints/uploads/get-a-signed-download-url-for-the-\"likely-answer-only\"-filtered-file"}]},{"group":"webhooks","pages":[{"title":"List webhook endpoints","deprecated":null,"version":null,"openapi":"https://api.optimaldial.com/openapi/v1/spec.yaml get /api/v1/webhooks","href":"/endpoints/webhooks/list-webhook-endpoints"},{"title":"Create a webhook endpoint","deprecated":null,"version":null,"openapi":"https://api.optimaldial.com/openapi/v1/spec.yaml post /api/v1/webhooks","href":"/endpoints/webhooks/create-a-webhook-endpoint"},{"title":"Retrieve a webhook endpoint","deprecated":null,"version":null,"openapi":"https://api.optimaldial.com/openapi/v1/spec.yaml get /api/v1/webhooks/{webhook_id}","href":"/endpoints/webhooks/retrieve-a-webhook-endpoint"},{"title":"Delete a webhook endpoint","deprecated":null,"version":null,"openapi":"https://api.optimaldial.com/openapi/v1/spec.yaml delete /api/v1/webhooks/{webhook_id}","href":"/endpoints/webhooks/delete-a-webhook-endpoint"},{"title":"Update a webhook endpoint","deprecated":null,"version":null,"openapi":"https://api.optimaldial.com/openapi/v1/spec.yaml patch /api/v1/webhooks/{webhook_id}","href":"/endpoints/webhooks/update-a-webhook-endpoint"},{"title":"List recent deliveries for a webhook endpoint","deprecated":null,"version":null,"openapi":"https://api.optimaldial.com/openapi/v1/spec.yaml get /api/v1/webhooks/{webhook_id}/deliveries","href":"/endpoints/webhooks/list-recent-deliveries-for-a-webhook-endpoint"}]},{"group":"contacts","pages":[{"title":"List contacts (legacy — no identity)","deprecated":null,"version":null,"openapi":"https://api.optimaldial.com/openapi/v1/spec.yaml get /api/v1/contacts","href":"/endpoints/contacts/list-contacts-legacy-—-no-identity"},{"title":"Create a contact (legacy — no identity)","deprecated":null,"version":null,"openapi":"https://api.optimaldial.com/openapi/v1/spec.yaml post /api/v1/contacts","href":"/endpoints/contacts/create-a-contact-legacy-—-no-identity"},{"title":"Retrieve a contact (legacy — no identity)","deprecated":null,"version":null,"openapi":"https://api.optimaldial.com/openapi/v1/spec.yaml get /api/v1/contacts/{contact_id}","href":"/endpoints/contacts/retrieve-a-contact-legacy-—-no-identity"},{"title":"List contacts","deprecated":null,"version":null,"openapi":"https://api.optimaldial.com/openapi/v1/spec.yaml get /api/v2/contacts","href":"/endpoints/contacts/list-contacts"},{"title":"Create a contact","deprecated":null,"version":null,"openapi":"https://api.optimaldial.com/openapi/v1/spec.yaml post /api/v2/contacts","href":"/endpoints/contacts/create-a-contact"},{"title":"Retrieve a contact","deprecated":null,"version":null,"openapi":"https://api.optimaldial.com/openapi/v1/spec.yaml get /api/v2/contacts/{contact_id}","href":"/endpoints/contacts/retrieve-a-contact"}]},{"group":"credits","pages":[{"title":"Get credit balance","deprecated":null,"version":null,"openapi":"https://api.optimaldial.com/openapi/v1/spec.yaml get /api/v1/credits/balance","href":"/endpoints/credits/get-credit-balance"}]},{"group":"spam","pages":[{"title":"List monitored numbers","deprecated":null,"version":null,"openapi":"https://api.optimaldial.com/openapi/v1/spec.yaml get /api/v1/spam/numbers","href":"/endpoints/spam/list-monitored-numbers"},{"title":"Add a monitored number","deprecated":null,"version":null,"openapi":"https://api.optimaldial.com/openapi/v1/spec.yaml post /api/v1/spam/numbers","href":"/endpoints/spam/add-a-monitored-number"},{"title":"Retrieve a monitored number","deprecated":null,"version":null,"openapi":"https://api.optimaldial.com/openapi/v1/spec.yaml get /api/v1/spam/numbers/{number_id}","href":"/endpoints/spam/retrieve-a-monitored-number"},{"title":"Stop monitoring a number","deprecated":null,"version":null,"openapi":"https://api.optimaldial.com/openapi/v1/spec.yaml delete /api/v1/spam/numbers/{number_id}","href":"/endpoints/spam/stop-monitoring-a-number"},{"title":"Submit a verification code","deprecated":null,"version":null,"openapi":"https://api.optimaldial.com/openapi/v1/spec.yaml post /api/v1/spam/numbers/{number_id}/verify","href":"/endpoints/spam/submit-a-verification-code"},{"title":"Resend a verification code","deprecated":null,"version":null,"openapi":"https://api.optimaldial.com/openapi/v1/spec.yaml post /api/v1/spam/numbers/{number_id}/verify/resend","href":"/endpoints/spam/resend-a-verification-code"},{"title":"List recent test runs","deprecated":null,"version":null,"openapi":"https://api.optimaldial.com/openapi/v1/spec.yaml get /api/v1/spam/numbers/{number_id}/history","href":"/endpoints/spam/list-recent-test-runs"},{"title":"Get the latest screenshot","deprecated":null,"version":null,"openapi":"https://api.optimaldial.com/openapi/v1/spec.yaml get /api/v1/spam/numbers/{number_id}/screenshot","href":"/endpoints/spam/get-the-latest-screenshot"}]}]},{"group":"Resources","pages":[{"title":"Changelog","href":"/changelog"},{"title":"OpenAPI specification","href":"/openapi"}]}]},"title":"Create an upload - OptimalDial","buildId":"dpl_cadrRc5H9XQiJQbDFN5mcYRs2PAj","deploymentId":"dpl_cadrRc5H9XQiJQbDFN5mcYRs2PAj","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-DKJwRUt2.js","utils-CWD_VS3u.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-oFjciODD.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-C76WsxC3.js","snippetPresets-DvPMxpX_.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-CuNQfndH.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BVFpVUoF.js","shallow-t59Jg5Kr.js","getApiPlaygroundDisplay-C_JZ4amX.js","CodeSnippet-CLRDnx_h.js","CodeSnippets-C2myU4kc.js","Page-7TwLLapg.js","getPastedJson-B-JaVXw7.js","icon-BA-iDhH3.js","MethodPill-D4qZABFp.js","DuplicateIcon-THIDKO1O.js","createIcon-CYYJwgFd.js","DynamicMarkdown-UGQuxDKp.js","SectionHeading-jYELb23h.js","axios-vUo_bRtp.js","Markdown-DKsLa3wy.js","clsx-CefdjKz2.js","lib--scc4DXi.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-BaREnp3o.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-sgx_0XzF.js"]}