{
"code": 400,
"type": "MISSING_FIELD",
"message": "Required field 'address_country' is missing"
}
{
"code": 404,
"type": "CUSTOMER_NOT_FOUND",
"message": "Customer not found"
}
{
"code": 400,
"type": "MISSING_FIELD",
"message": "Required field 'address_country' is missing"
}
{
"code": 400,
"type": "MISSING_FIELD",
"message": "Required field 'address_country' is missing"
}
{
"code": 400,
"type": "MISSING_FIELD",
"message": "Required field 'address_country' is missing"
}
Submit an exemption certificate document for asynchronous processing. You
provide an https URL to the document (typically a presigned URL to your own
storage); Numeral downloads it, stores it, and runs the classification
pipeline. The certificate type and jurisdiction are determined from the
document itself — there is no certificate_type_id input.The response is a tax.certificate_upload, a processing job. Poll
GET /tax/certificate-uploads/{upload_id}
until its status leaves processing, then read certificate_ids to find
the resulting certificates.
Remember to include the X-API-Version: 2026-11-01 header — older versions
return INVALID_REQUEST (400). Certificate endpoints are live-only — using a
sk_test_* key returns TESTMODE_NOT_SUPPORTED (400).
document_url is fetched server-side, so it must be reachable by Numeral’s
servers without any session or cookie:
https only. Redirects are followed up to 3 hops, and every hop must
also be https.
PDF, PNG, or JPEG. The type is detected from the file content, not the
extension or Content-Type header.
10 MB max, checked against both Content-Length and the downloaded
bytes.
Share or viewer links (Google Drive, Dropbox, and similar) return an HTML
page rather than the file and fail with UNSUPPORTED_FILE_TYPE. Use a
direct download link or a presigned URL instead.
Pass customer to attribute the certificate to a buyer up front. Either
identifier alone is sufficient:
customer.id — an existing Numeral customer id. An unknown id returns
CUSTOMER_NOT_FOUND (404).
customer.reference_customer_id — your own customer identifier. An
unknown value creates the customer, so you can pre-map a certificate
before the customer exists in Numeral.
If both are present and resolve to different customers, the request fails
with BUYER_IDENTITY_CONFLICT (409) and nothing is written.
Pre-mapping is the headline feature. Submit with a
reference_customer_id, and once the resulting certificate is active, any
POST /tax/calculations carrying the same reference_customer_id applies
the exemption automatically. No further wiring is needed.
Omitting customer is valid. The upload processes unattributed, Numeral
matches it to a buyer during processing, and the response customer is
null.
Resubmitting a byte-identical document with the same file_name returns
201 with status: "duplicate" rather than reprocessing the document. The
duplicate upload’s certificate_ids stays empty — use your original upload
id to retrieve its certificates. When the original upload had failed,
error_message on the duplicate carries the same reason so you can see why
resubmitting the same bytes will not help.
An https URL that Numeral's servers can GET — typically a presigned URL to your own storage. Fetched server-side. The file must be a PDF, PNG, or JPEG (detected from content, not extension or Content-Type), at most 10 MB, reachable within 3 redirects (each hop must also be https).
Display name for the document (1–255 characters). Defaults to the URL's basename when it has an extension, otherwise to a generic name derived from the detected file type.
Pre-maps the resulting certificate to a customer. Supply at least one of id or reference_customer_id. Either alone is sufficient; if both are present and resolve to different customers the request fails with BUYER_IDENTITY_CONFLICT (409) and nothing is written.
Show child attributes
Response
Upload accepted. status is processing or duplicate; certificate_ids is always empty at this point — poll GET /tax/certificate-uploads/{upload_id} for results.
A certificate upload — the asynchronous processing job created by POST /tax/certificates.
Processing state of a certificate upload. This is a separate vocabulary from certificate status — an upload is a processing job, a certificate is its output. processing is the only non-terminal state; completed (certificates produced), failed (see error_message), and duplicate (same document already submitted) are terminal.
Certificates produced by this upload, usable with the certificate endpoints. Empty while status is processing; populated at completed. One document can yield multiple certificates.
Human-readable reason processing failed. Also set on duplicate uploads when the original upload had failed, so you can see why re-submitting the same bytes will not help.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Numeral API","colors":{"primary":"#0D9373","light":"#07C983","dark":"#0D9373"},"logo":{"light":"https://mintcdn.com/numeralhq/w35K7dUKWBDiixfd/logo/logo.svg?fit=max\u0026auto=format\u0026n=w35K7dUKWBDiixfd\u0026q=85\u0026s=2330fe2568887c273331c4846f7a4d1e","dark":"https://mintcdn.com/numeralhq/w35K7dUKWBDiixfd/logo/logo-dark.svg?fit=max\u0026auto=format\u0026n=w35K7dUKWBDiixfd\u0026q=85\u0026s=3c46c5bdc314577d1ce3660b957c0ad8"},"favicon":"https://mintcdn.com/numeralhq/NAgHCHKl6ucev5Pu/favicon.ico?fit=max\u0026auto=format\u0026n=NAgHCHKl6ucev5Pu\u0026q=85\u0026s=a6ecac944d1933a8432a8b2234eed9a4","api":{"openapi":["api-reference/v2026-03-01/openapi.json","api-reference/v2026-01-01/openapi.json","api-reference/v2025-05-12/openapi.json","api-reference/v2024-09-01/openapi.json","api-reference/v2026-11-01/openapi.json"]},"navbar":{"links":[{"href":"mailto:hi@mintlify.com","label":"Support"}],"primary":{"type":"button","label":"Dashboard","href":"https://dashboard.mintlify.com"}},"interaction":{"drilldown":false},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"numeralhq","hasAudioNarration":false,"actualSubdomain":"numeralhq","customDomains":["docs.numeral.com"],"gitSource":{"type":"github","owner":"numeralhq","repo":"tax-engine-documentation","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae27c81d56b3c07efab159a","collectionId":"623087f7-94a8-47ab-94bd-032bc5ea9868","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae27c81d56b3c07efab159a"},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae27c81d56b3c07efab159a","clientVersion":"0.0.4006","searchFilterCounts":[{"language":"default","tag":"API Documentation","count":56},{"language":"default","tag":"Integrations","count":53},{"language":"default","tag":"Platform Integrations","count":48},{"language":"default","tag":"API Reference","count":46},{"language":"default","tag":"Getting Started","count":10},{"language":"default","tag":"Stripe","count":8},{"language":"default","tag":"Numeral for Stripe Checkout","count":6},{"language":"default","tag":"Integration Guides","count":5},{"language":"default","tag":"Shopify","count":5},{"language":"default","tag":"MCP","count":5}]},"assistantConfig":{},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"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":"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":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"src/style.css","content":".text-gray-100{color:#c1c2c5}[class*=max-w-8xl]{max-width:112rem!important}#content-container{max-width:none!important}td:first-child code{white-space:nowrap}"},{"filePath":"src/resource-pages.css","content":".sx-section{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:3rem;padding:2.5rem 0;border-top:1px solid rgb(127 127 127/.2)}.sx-section:first-of-type{border-top:none;padding-top:0}.sx-right{position:sticky;top:8rem;align-self:start;max-height:calc(100vh - 9rem);overflow-y:auto}.sx-wide{grid-template-columns:minmax(0,1fr);gap:0}.sx-wide .sx-right{position:static;max-height:none}.sx-wide td code{white-space:nowrap}.sx-left>h2:first-child{margin-top:0}@media (max-width:1024px){.sx-section{grid-template-columns:minmax(0,1fr)}.sx-right{position:static;max-height:none}}.sx-endpoints{border:1px solid rgb(127 127 127/.25);border-radius:.75rem;padding:.75rem 1rem .25rem}.sx-endpoints-title{font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;opacity:.7;margin-bottom:.5rem}div.sx-endpoints a{display:block;position:relative;font-family:inherit;font-size:inherit;padding:.6rem 1.5rem .6rem 0;border-top:1px solid rgb(127 127 127/.2);border-bottom:none!important;text-decoration:none}.sx-endpoints a::after{content:\"›\";position:absolute;right:.25rem;top:50%;transform:translateY(-50%);font-size:1.25rem;opacity:.5}.sx-endpoints a:hover::after{opacity:1}.sx-ep-name{display:block;font-weight:600;font-size:.9rem}.sx-ep-path{display:block;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.8rem;margin-top:.15rem}.sx-ep-url{opacity:.65}.sx-endpoints .sx-method{display:inline-block;min-width:3.75rem;margin-right:0;font-weight:700}.sx-endpoints .sx-get{color:#3b82f6}.sx-endpoints .sx-post{color:#16a34a}.sx-endpoints .sx-delete{color:#ef4444}.sx-nav-sub{list-style:none;margin:.15rem 0 .5rem;padding:0 0 0 1.75rem}.sx-nav-sub a{display:flex;align-items:baseline;gap:.5rem;padding:.3rem .5rem;border-radius:.5rem;font-size:.8125rem;line-height:1.3;opacity:.7}.sx-nav-sub a.sx-current,.sx-nav-sub a:hover{opacity:1;background:rgb(127 127 127/.1)}.sx-nav-sub a:focus{outline:0}.sx-nav-sub a:focus-visible{outline:2px solid rgb(127 127 127/.5)}.sx-nav-method.sx-nav-spacer{visibility:hidden}.sx-nav-method{flex:none;min-width:2.4rem;padding:.05rem .3rem;border-radius:.3rem;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.625rem;font-weight:700;text-align:center}.sx-nav-method.sx-get{color:#3b82f6;background:rgb(59 130 246/.15)}.sx-nav-method.sx-post{color:#16a34a;background:rgb(22 163 74/.15)}.sx-nav-method.sx-delete{color:#ef4444;background:rgb(239 68 68/.15)}.sx-page-end{height:4rem}.sx-children,.sx-toggle{border:1px solid rgb(127 127 127/.3)}.sx-toggle{margin-top:.75rem;border-radius:9999px;padding:.3rem .9rem;font-size:.85rem;font-weight:500;white-space:pre;cursor:pointer}.sx-toggle.sx-open{border-radius:.75rem .75rem 0 0;border-bottom:none}.sx-children{border-radius:0 .75rem .75rem .75rem;padding:0 1rem .5rem}.sx-children[hidden]{border:0;padding:0}"}],"page":{"pagePath":"api-reference/v2026-11-01/endpoint/submit_certificate","slug":"/api-reference/v2026-11-01/endpoint/submit_certificate","pageMetadata":{"title":"Submit Certificate","openapi":"api-reference/v2026-11-01/openapi.json POST /tax/certificates","description":"Submit a certificate document for asynchronous processing","href":"/api-reference/v2026-11-01/endpoint/submit_certificate"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Submit a certificate document for asynchronous processing\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Heading,Note,Table,Tip}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Submit an exemption certificate document for asynchronous processing. You\nprovide an `,_jsx(_components.code,{children:`https`}),` URL to the document (typically a presigned URL to your own\nstorage); Numeral downloads it, stores it, and runs the classification\npipeline. The certificate type and jurisdiction are determined from the\ndocument itself — there is no `,_jsx(_components.code,{children:`certificate_type_id`}),` input.`]}),`\n`,_jsxs(_components.p,{children:[`The response is a `,_jsx(_components.code,{children:`tax.certificate_upload`}),`, a processing job. Poll\n`,_jsx(_components.a,{href:`/api-reference/v2026-11-01/endpoint/get_certificate_upload`,children:_jsx(_components.code,{children:`GET /tax/certificate-uploads/{upload_id}`})}),`\nuntil its `,_jsx(_components.code,{children:`status`}),` leaves `,_jsx(_components.code,{children:`processing`}),`, then read `,_jsx(_components.code,{children:`certificate_ids`}),` to find\nthe resulting certificates.`]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`Remember to include the `,_jsx(_components.code,{children:`X-API-Version: 2026-11-01`}),` header — older versions\nreturn `,_jsx(_components.code,{children:`INVALID_REQUEST`}),` (400). Certificate endpoints are live-only — using a\n`,_jsx(_components.code,{children:`sk_test_*`}),` key returns `,_jsx(_components.code,{children:`TESTMODE_NOT_SUPPORTED`}),` (400).`]})}),`\n`,_jsxs(Heading,{level:`2`,id:`the-document_url-field`,children:[`The `,_jsx(_components.code,{children:`document_url`}),` field`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`document_url`}),` is fetched server-side, so it must be reachable by Numeral’s\nservers without any session or cookie:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[_jsx(_components.code,{children:`https`}),` only.`]}),` Redirects are followed up to 3 hops, and every hop must\nalso be `,_jsx(_components.code,{children:`https`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`PDF, PNG, or JPEG.`}),` The type is detected from the file content, not the\nextension or `,_jsx(_components.code,{children:`Content-Type`}),` header.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`10 MB max`}),`, checked against both `,_jsx(_components.code,{children:`Content-Length`}),` and the downloaded\nbytes.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Share or viewer links (Google Drive, Dropbox, and similar) return an HTML\npage rather than the file and fail with `,_jsx(_components.code,{children:`UNSUPPORTED_FILE_TYPE`}),`. Use a\ndirect download link or a presigned URL instead.`]}),`\n`,_jsx(Heading,{level:`2`,id:`pre-mapping-to-a-customer`,children:`Pre-mapping to a customer`}),`\n`,_jsxs(_components.p,{children:[`Pass `,_jsx(_components.code,{children:`customer`}),` to attribute the certificate to a buyer up front. Either\nidentifier alone is sufficient:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`customer.id`}),` — an existing Numeral customer id. An unknown id returns\n`,_jsx(_components.code,{children:`CUSTOMER_NOT_FOUND`}),` (404).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`customer.reference_customer_id`}),` — your own customer identifier. An\nunknown value creates the customer, so you can pre-map a certificate\nbefore the customer exists in Numeral.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`If both are present and resolve to different customers, the request fails\nwith `,_jsx(_components.code,{children:`BUYER_IDENTITY_CONFLICT`}),` (409) and nothing is written.`]}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Pre-mapping is the headline feature.`}),` Submit with a\n`,_jsx(_components.code,{children:`reference_customer_id`}),`, and once the resulting certificate is `,_jsx(_components.code,{children:`active`}),`, any\n`,_jsx(_components.code,{children:`POST /tax/calculations`}),` carrying the same `,_jsx(_components.code,{children:`reference_customer_id`}),` applies\nthe exemption automatically. No further wiring is needed.`]})}),`\n`,_jsxs(_components.p,{children:[`Omitting `,_jsx(_components.code,{children:`customer`}),` is valid. The upload processes unattributed, Numeral\nmatches it to a buyer during processing, and the response `,_jsx(_components.code,{children:`customer`}),` is\n`,_jsx(_components.code,{children:`null`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`duplicate-submissions`,children:`Duplicate submissions`}),`\n`,_jsxs(_components.p,{children:[`Resubmitting a byte-identical document with the same `,_jsx(_components.code,{children:`file_name`}),` returns\n`,_jsx(_components.code,{children:`201`}),` with `,_jsx(_components.code,{children:`status: \"duplicate\"`}),` rather than reprocessing the document. The\nduplicate upload’s `,_jsx(_components.code,{children:`certificate_ids`}),` stays empty — use your original upload\nid to retrieve its certificates. When the original upload had failed,\n`,_jsx(_components.code,{children:`error_message`}),` on the duplicate carries the same reason so you can see why\nresubmitting the same bytes will not help.`]}),`\n`,_jsx(Heading,{level:`2`,id:`response`,children:`Response`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`201 Created`}),` with the `,_jsx(_components.code,{children:`tax.certificate_upload`}),` object. `,_jsx(_components.code,{children:`status`}),` is\n`,_jsx(_components.code,{children:`processing`}),` or `,_jsx(_components.code,{children:`duplicate`}),` on create, and `,_jsx(_components.code,{children:`certificate_ids`}),` is always empty\nat this point.`]}),`\n`,_jsx(Heading,{level:`2`,id:`errors`,children:`Errors`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`HTTP`}),_jsx(_components.th,{children:`Type`}),_jsx(_components.th,{children:`When`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`INVALID_DOCUMENT_URL`})}),_jsxs(_components.td,{children:[`Not a valid URL, not `,_jsx(_components.code,{children:`https`}),`, blocked or unresolvable host, or private address.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`DOCUMENT_FETCH_FAILED`})}),_jsx(_components.td,{children:`Download failed — network error, too many redirects, HTTP error from the document host, or empty file.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`422`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`DOCUMENT_URL_UNAUTHORIZED`})}),_jsx(_components.td,{children:`The document host returned 401 or 403, most commonly an expired presigned URL. Mint a fresh one and retry.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`UNSUPPORTED_FILE_TYPE`})}),_jsx(_components.td,{children:`Content is not PDF, PNG, or JPEG. HTML gets a targeted message about share/viewer links.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`FILE_TOO_LARGE`})}),_jsx(_components.td,{children:`Over 10 MB.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`404`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`CUSTOMER_NOT_FOUND`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`customer.id`}),` does not exist for this account.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`409`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`BUYER_IDENTITY_CONFLICT`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`customer.id`}),` and `,_jsx(_components.code,{children:`customer.reference_customer_id`}),` resolve to different customers. Nothing was written.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`TESTMODE_NOT_SUPPORTED`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`sk_test_*`}),` key.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`INVALID_REQUEST`})}),_jsxs(_components.td,{children:[`API version below 2026-03-01, or a schema violation (missing `,_jsx(_components.code,{children:`document_url`}),`, empty `,_jsx(_components.code,{children:`customer`}),` object, etc.).`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`500`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`NUMERAL_ERROR`})}),_jsx(_components.td,{children:`The upload was stored but processing could not start. Retry the submission.`})]})]})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Submit Certificate","openapi":"api-reference/v2026-11-01/openapi.json POST /tax/certificates","description":"Submit a certificate document for asynchronous processing","href":"/api-reference/v2026-11-01/endpoint/submit_certificate"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"The document_url field","slug":"the-document_url-field","depth":2,"children":[]},{"title":"Pre-mapping to a customer","slug":"pre-mapping-to-a-customer","depth":2,"children":[]},{"title":"Duplicate submissions","slug":"duplicate-submissions","depth":2,"children":[]},{"title":"Response","slug":"response","depth":2,"children":[]},{"title":"Errors","slug":"errors","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/numeralhq/f4a41b99b7afe396/src/version-refresh.js","/_mintlify/custom/numeralhq/4721c15820461e09/src/resource-pages.js"],"openApiReferenceData":{"operation":{"summary":"Submit Certificate","description":"Submit a certificate document for asynchronous processing","operationId":"submitCertificate_v20261101","parameters":["a520d02b-cfc9-43df-9795-94018016f988"],"requestBody":"261f4fee-a394-492a-8b18-97d5218adde0","responses":{"201":"6acfac32-f3bc-4405-8acf-7a26348ae58a","400":"67daa6fc-cad5-479f-8ae6-a4d06fbaabc8","404":"0709cbc6-3392-4a1a-b62f-e22d9d315593","409":"b4b359c8-913e-4feb-98df-99daca7f9347","422":"33f94c45-207d-4e41-a088-589e35583427","500":"e16ab2bc-7b4b-4167-8b60-ee87f2a63f9a"},"method":"post","type":"path","servers":["d3db3deb-e04d-4d36-bd09-6cab37404789"],"security":["b4782b25-0821-4684-a511-1dad9c1762cf"],"path":"/tax/certificates","baseUrlOptions":["https://api.numeralhq.com/"],"title":"Submit Certificate","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"a520d02b-cfc9-43df-9795-94018016f988":{"name":"X-API-Version","in":"header","required":true,"schema":{"type":"string","enum":["2026-11-01"],"isRequired":true,"description":"Must be `2026-03-01` or later. Older versions return `INVALID_REQUEST` (400).","uniqueKey":"","typeLabel":"enum\u003cstring>"},"description":"Must be `2026-03-01` or later. Older versions return `INVALID_REQUEST` (400)."}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"document_url":{"type":"string","format":"uri","description":"An `https` URL that Numeral's servers can `GET` — typically a presigned URL to your own storage. Fetched server-side. The file must be a PDF, PNG, or JPEG (detected from content, not extension or `Content-Type`), at most 10 MB, reachable within 3 redirects (each hop must also be `https`).","example":"https://your-bucket.s3.amazonaws.com/certs/resale.pdf?X-Amz-Signature=...","isRequired":true,"uniqueKey":"document_url","typeLabel":"string\u003curi>"},"file_name":{"type":"string","minLength":1,"maxLength":255,"description":"Display name for the document (1–255 characters). Defaults to the URL's basename when it has an extension, otherwise to a generic name derived from the detected file type.","example":"resale.pdf","uniqueKey":"file_name","typeLabel":"string"},"customer":{"type":"object","description":"Pre-maps the resulting certificate to a customer. Supply at least one of `id` or `reference_customer_id`. Either alone is sufficient; if both are present and resolve to different customers the request fails with `BUYER_IDENTITY_CONFLICT` (409) and nothing is written.","properties":{"id":{"type":"string","description":"Existing Numeral customer id. An unknown id returns `CUSTOMER_NOT_FOUND` (404).","example":"cust_6126acaf-7379-411a-8ada-00005bac0715","uniqueKey":"customer.id","typeLabel":"string"},"reference_customer_id":{"type":"string","description":"Your own identifier for the customer. An unknown value creates the customer, so pre-mapping works before the customer exists in Numeral.","example":"20506","uniqueKey":"customer.reference_customer_id","typeLabel":"string"}},"minProperties":1,"uniqueKey":"customer","typeLabel":"object"}},"required":["document_url"],"uniqueKey":"","typeLabel":"object"},"example":{"document_url":"https://your-bucket.s3.amazonaws.com/certs/resale.pdf?X-Amz-Signature=...","file_name":"resale.pdf","customer":{"reference_customer_id":"20506"}},"examples":{"Example":{"title":"Example","value":{"document_url":"https://your-bucket.s3.amazonaws.com/certs/resale.pdf?X-Amz-Signature=...","file_name":"resale.pdf","customer":{"reference_customer_id":"20506"}}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"6acfac32-f3bc-4405-8acf-7a26348ae58a":{"description":"Upload accepted. `status` is `processing` or `duplicate`; `certificate_ids` is always empty at this point — poll `GET /tax/certificate-uploads/{upload_id}` for results.","content":{"application/json":{"schema":{"type":"object","description":"A certificate upload — the asynchronous processing job created by `POST /tax/certificates`.","properties":{"id":{"type":"string","description":"Upload id, `upl_\u003cnumber>`. Endpoints that accept an upload id also accept the bare numeric form.","example":"upl_4471","isRequired":true,"uniqueKey":"id","typeLabel":"string"},"object":{"type":"string","description":"The type of object: `tax.certificate_upload`","example":"tax.certificate_upload","isRequired":true,"uniqueKey":"object","typeLabel":"string"},"status":{"type":"string","enum":["processing","completed","failed","duplicate"],"description":"Processing state of a certificate upload. This is a separate vocabulary from certificate `status` — an upload is a processing job, a certificate is its output. `processing` is the only non-terminal state; `completed` (certificates produced), `failed` (see `error_message`), and `duplicate` (same document already submitted) are terminal.","isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"customer":{"oneOf":[{"type":"object","description":"The customer supplied at submission. `null` when the upload was submitted without a customer — attribution then happens during processing.","required":["id","reference_customer_id"],"properties":{"id":{"type":"string","example":"cust_6126acaf-7379-411a-8ada-00005bac0715","isRequired":true,"uniqueKey":"customer.oneOf.0.id","typeLabel":"string"},"reference_customer_id":{"oneOf":[{"type":"string","example":"20506","isRequired":true,"uniqueKey":"customer.oneOf.0.reference_customer_id.oneOf.0","typeLabel":"string"},{"type":"null","example":"20506","isRequired":true,"uniqueKey":"customer.oneOf.0.reference_customer_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.oneOf.0.reference_customer_id","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"customer.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"customer.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer","typeLabel":"object | null"},"certificate_ids":{"type":"array","items":{"type":"string","example":"cert_a8f3d2c1-1b9a-4c5e-8d7e-6f4a3b2c1d0e","uniqueKey":"certificate_ids.items.[INDEX]","typeLabel":"string"},"description":"Certificates produced by this upload, usable with the certificate endpoints. Empty while `status` is `processing`; populated at `completed`. One document can yield multiple certificates.","isRequired":true,"uniqueKey":"certificate_ids","typeLabel":"string[]"},"error_message":{"oneOf":[{"type":"string","description":"Human-readable reason processing failed. Also set on `duplicate` uploads when the original upload had failed, so you can see why re-submitting the same bytes will not help.","isRequired":true,"uniqueKey":"error_message.oneOf.0","typeLabel":"string"},{"type":"null","description":"Human-readable reason processing failed. Also set on `duplicate` uploads when the original upload had failed, so you can see why re-submitting the same bytes will not help.","isRequired":true,"uniqueKey":"error_message.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error_message","typeLabel":"string | null"},"created_at":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"created_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"created_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"created_at","typeLabel":"string\u003cdate-time> | null"},"livemode":{"type":"boolean","enum":[true],"description":"Always `true` — these endpoints are live-only.","isRequired":true,"uniqueKey":"livemode","typeLabel":"enum\u003cboolean>"}},"required":["id","object","status","customer","certificate_ids","error_message","created_at","livemode"],"uniqueKey":"","typeLabel":"object"},"example":{"id":"upl_4471","object":"tax.certificate_upload","status":"processing","customer":{"id":"cust_6126acaf-7379-411a-8ada-00005bac0715","reference_customer_id":"20506"},"certificate_ids":[],"error_message":null,"created_at":"2026-09-15T17:04:11.000Z","livemode":true},"examples":{"Example":{"title":"Example","value":{"id":"upl_4471","object":"tax.certificate_upload","status":"processing","customer":{"id":"cust_6126acaf-7379-411a-8ada-00005bac0715","reference_customer_id":"20506"},"certificate_ids":[],"error_message":null,"created_at":"2026-09-15T17:04:11.000Z","livemode":true}}},"exampleType":"examples"}},"exampleType":"examples"},"67daa6fc-cad5-479f-8ae6-a4d06fbaabc8":{"description":"`INVALID_DOCUMENT_URL`, `DOCUMENT_FETCH_FAILED`, `UNSUPPORTED_FILE_TYPE`, `FILE_TOO_LARGE`, `TESTMODE_NOT_SUPPORTED`, or `INVALID_REQUEST` (schema violation or API version below 2026-03-01)","content":{"application/json":{"schema":{"type":"object","description":"Standard error response format for API version 2026-01-01","properties":{"code":{"type":"integer","description":"HTTP status code","example":400,"isRequired":true,"uniqueKey":"code","typeLabel":"integer"},"type":{"type":"string","description":"Machine-readable error type","example":"MISSING_FIELD","isRequired":true,"uniqueKey":"type","typeLabel":"string"},"message":{"type":"string","description":"Human-readable error message","example":"Required field 'address_country' is missing","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"required":["code","type","message"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":400,"type":"MISSING_FIELD","message":"Required field 'address_country' is missing"}}},"exampleType":"generated"}},"exampleType":"generated"},"0709cbc6-3392-4a1a-b62f-e22d9d315593":{"description":"`CUSTOMER_NOT_FOUND` — `customer.id` does not exist for this account","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":404,"uniqueKey":"code","typeLabel":"integer"},"type":{"type":"string","example":"CUSTOMER_NOT_FOUND","uniqueKey":"type","typeLabel":"string"},"message":{"type":"string","example":"Customer not found","uniqueKey":"message","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":404,"type":"CUSTOMER_NOT_FOUND","message":"Customer not found"}}},"exampleType":"generated"}},"exampleType":"generated"},"b4b359c8-913e-4feb-98df-99daca7f9347":{"description":"`BUYER_IDENTITY_CONFLICT` — `customer.id` and `customer.reference_customer_id` resolve to different customers; nothing was written","content":{"application/json":{"schema":{"type":"object","description":"Standard error response format for API version 2026-01-01","properties":{"code":{"type":"integer","description":"HTTP status code","example":400,"isRequired":true,"uniqueKey":"code","typeLabel":"integer"},"type":{"type":"string","description":"Machine-readable error type","example":"MISSING_FIELD","isRequired":true,"uniqueKey":"type","typeLabel":"string"},"message":{"type":"string","description":"Human-readable error message","example":"Required field 'address_country' is missing","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"required":["code","type","message"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":400,"type":"MISSING_FIELD","message":"Required field 'address_country' is missing"}}},"exampleType":"generated"}},"exampleType":"generated"},"33f94c45-207d-4e41-a088-589e35583427":{"description":"`DOCUMENT_URL_UNAUTHORIZED` — the document host returned 401/403, most commonly an expired presigned URL. Mint a fresh URL and retry.","content":{"application/json":{"schema":{"type":"object","description":"Standard error response format for API version 2026-01-01","properties":{"code":{"type":"integer","description":"HTTP status code","example":400,"isRequired":true,"uniqueKey":"code","typeLabel":"integer"},"type":{"type":"string","description":"Machine-readable error type","example":"MISSING_FIELD","isRequired":true,"uniqueKey":"type","typeLabel":"string"},"message":{"type":"string","description":"Human-readable error message","example":"Required field 'address_country' is missing","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"required":["code","type","message"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":400,"type":"MISSING_FIELD","message":"Required field 'address_country' is missing"}}},"exampleType":"generated"}},"exampleType":"generated"},"e16ab2bc-7b4b-4167-8b60-ee87f2a63f9a":{"description":"`NUMERAL_ERROR` — the upload was stored but processing could not start. Retry the submission.","content":{"application/json":{"schema":{"type":"object","description":"Standard error response format for API version 2026-01-01","properties":{"code":{"type":"integer","description":"HTTP status code","example":400,"isRequired":true,"uniqueKey":"code","typeLabel":"integer"},"type":{"type":"string","description":"Machine-readable error type","example":"MISSING_FIELD","isRequired":true,"uniqueKey":"type","typeLabel":"string"},"message":{"type":"string","description":"Human-readable error message","example":"Required field 'address_country' is missing","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"required":["code","type","message"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":400,"type":"MISSING_FIELD","message":"Required field 'address_country' is missing"}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"b4782b25-0821-4684-a511-1dad9c1762cf":{"bearerAuth":{"type":"http","scheme":"bearer","scopes":[],"schemeName":"bearerAuth"}}},"servers":{"d3db3deb-e04d-4d36-bd09-6cab37404789":{"url":"https://api.numeralhq.com/"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Bearer authentication header of the form `Bearer \u003ctoken>`, where `\u003ctoken>` is your auth token.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"api-reference/v2026-11-01/openapi.json"},"subdomain":"numeralhq","siteName":"Numeral API","title":"Submit Certificate - Numeral API","navMaps":{"firstHrefInVersion":{"2026-11-01":{"href":"/api-reference/v2026-11-01/endpoint/submit_certificate","matchLevel":0},"2026-03-01":{"href":"/introduction","matchLevel":4},"2026-01-01":{"href":"/introduction","matchLevel":4},"2025-05-12":{"href":"/introduction","matchLevel":4},"2024-09-01":{"href":"/introduction","matchLevel":4}},"firstHrefInLanguage":{}},"lastModified":"2026-10-28T21:02:43.122Z","originalFileLocation":"api-reference/v2026-11-01/endpoint/submit_certificate.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 certificate document for asynchronous processing\">\u003cmeta data-mint-head name=\"application-name\" content=\"Numeral 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/numeralhq/T60dQ7B6WxiReCVN/_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/numeralhq/T60dQ7B6WxiReCVN/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/numeralhq/T60dQ7B6WxiReCVN/_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/numeralhq/T60dQ7B6WxiReCVN/_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/numeralhq/T60dQ7B6WxiReCVN/_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/numeralhq/T60dQ7B6WxiReCVN/_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/numeralhq/T60dQ7B6WxiReCVN/_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/numeralhq/T60dQ7B6WxiReCVN/_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/numeralhq/T60dQ7B6WxiReCVN/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Submit Certificate - Numeral API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Submit a certificate document for asynchronous processing\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Numeral API\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.numeral.com/api-reference/v2026-11-01/endpoint/submit_certificate\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://numeralhq.mintlify.app/_mintlify/api/og/v2?division=Documentation\u0026amp;title=Submit+Certificate\u0026amp;description=Submit+a+certificate+document+for+asynchronous+processing\u0026amp;theme=db0aa42568482bdcbfb10a73\u0026amp;signature=deeee5dc9908d4335e45fadd996a39915a61c09d9a36eca5546b47e677cc1f18\">\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=\"Submit Certificate - Numeral API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Submit a certificate document for asynchronous processing\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://numeralhq.mintlify.app/_mintlify/api/og/v2?division=Documentation\u0026amp;title=Submit+Certificate\u0026amp;description=Submit+a+certificate+document+for+asynchronous+processing\u0026amp;theme=db0aa42568482bdcbfb10a73\u0026amp;signature=deeee5dc9908d4335e45fadd996a39915a61c09d9a36eca5546b47e677cc1f18\">\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/numeralhq/T60dQ7B6WxiReCVN/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Numeral API\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0D9373\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.numeral.com/api-reference/v2026-11-01/endpoint/submit_certificate\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/v2026-11-01/endpoint/submit_certificate.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Numeral API\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Numeral API","nav":{"global":null,"versions":[{"version":"2026-11-01","tabs":[{"tab":"API Documentation","groups":[{"group":"Getting Started","pages":[{"title":"Introduction","icon":"hand-wave","href":"/introduction"},{"title":"Quickstart","icon":"rabbit","href":"/essentials/quickstart/quickstart"},{"title":"Changelog","icon":"wind","href":"/api-reference/v2026-11-01/changelog"},{"title":"API Keys","icon":"key","href":"/essentials/api-keys"},{"title":"API Versioning","icon":"code-branch","href":"/api-reference/versioning"},{"title":"Currencies","icon":"money-bill","href":"/essentials/currencies"},{"title":"Product Categories","icon":"tag","href":"/essentials/product-categories"},{"title":"Tax IDs","icon":"id-card","href":"/essentials/tax-ids"},{"title":"FAQs","icon":"question","href":"/essentials/faqs"},{"title":"AI help","icon":"robot","href":"/ai-help/overview"}]},{"group":"API Reference","pages":[{"title":"Introduction v2026-11-01","href":"/api-reference/v2026-11-01/introduction"},{"title":"Error Codes","icon":"triangle-exclamation","href":"/api-reference/v2026-11-01/error-codes"},{"title":"Calculations","icon":"calculator","mode":"wide","href":"/v2026-11-01/objects/calculations"},{"title":"Transactions","icon":"cash-register","mode":"wide","href":"/v2026-11-01/objects/transactions"},{"title":"Platform","icon":"store","mode":"wide","href":"/v2026-11-01/objects/platform"},{"title":"Merchants","icon":"store","mode":"wide","href":"/v2026-11-01/objects/merchants"},{"title":"Products","icon":"boxes-stacked","mode":"wide","href":"/v2026-11-01/objects/products"},{"title":"Customers","icon":"person","mode":"wide","href":"/v2026-11-01/objects/customers"},{"title":"Exemption (Resale) Certificates","icon":"file-certificate","mode":"wide","href":"/v2026-11-01/objects/exemption-certificates"},{"title":"Exchange Rates","icon":"money-bill-transfer","mode":"wide","href":"/v2026-11-01/objects/exchange-rates"},{"title":"Health Check","openapi":"api-reference/v2026-11-01/openapi.json GET /tax/ping","href":"/api-reference/v2026-11-01/endpoint/ping"}]}]},{"tab":"Integrations","groups":[{"group":"Integration Guides","pages":[{"title":"Reference Objects","icon":"link","href":"/essentials/integration-guides/reference-objects-faq"},{"title":"Managing Product Categories","icon":"bucket","href":"/essentials/integration-guides/products-and-categories"},{"title":"Exemptions Behavior","icon":"circle-xmark","href":"/essentials/integration-guides/exemptions-behavior"},{"title":"Submit Certificates via API","icon":"file-arrow-up","href":"/essentials/integration-guides/submit-certificates-via-api"},{"title":"Best Practices for a Successful Launch","icon":"circle-check","href":"/essentials/integration-guides/best-practices"}]},{"group":"Platform Integrations","pages":[{"title":"Integrations Overview","href":"/integrations/overview"},{"title":"Marketplaces","href":"/integrations/marketplaces"},{"title":"HR Systems","href":"/integrations/hr-systems"},{"title":"Acumatica","href":"/integrations/acumatica"},{"title":"Adobe Commerce","href":"/integrations/adobe-commerce"},{"title":"BigCommerce","href":"/integrations/bigcommerce"},{"title":"Microsoft Business Central","href":"/integrations/business-central"},{"title":"Campfire","href":"/integrations/campfire"},{"title":"Chargebee","href":"/integrations/chargebee"},{"title":"CheckoutChamp","href":"/integrations/checkoutchamp"},{"title":"Fulfil","href":"/integrations/fulfil"},{"title":"HubSpot","href":"/integrations/hubspot"},{"title":"Infor M3","href":"/integrations/infor-m3"},{"title":"JustPaid","href":"/integrations/justpaid"},{"title":"Maxio","href":"/integrations/maxio"},{"title":"Measure","href":"/integrations/measure"},{"title":"NetSuite","href":"/integrations/netsuite"},{"title":"Odoo","href":"/integrations/odoo"},{"title":"Orb","href":"/integrations/orb"},{"title":"QuickBooks Online","href":"/integrations/quickbooks-online"},{"title":"Rillet","href":"/integrations/rillet"},{"title":"SaaSGrid","href":"/integrations/saasgrid"},{"title":"Sage Intacct","href":"/integrations/sage-intacct"},{"title":"Salesforce Commerce Cloud","href":"/integrations/salesforce-commerce-cloud"},{"title":"Salesforce Sales Cloud","href":"/integrations/salesforce-sales-cloud"},{"title":"SAP S/4HANA","href":"/integrations/sap-s4hana"},{"title":"Sequence","href":"/integrations/sequence"},{"group":"Shopify","pages":[{"title":"Shopify Partner Access","href":"/integrations/shopify/shopify-partner-access"},{"title":"Shopify Tax Services and Troubleshooting","href":"/integrations/shopify/shopify-tax-services"},{"title":"Shopify Apps","href":"/integrations/shopify/shopify-apps"},{"title":"Configuring Shopify Sales Channels","href":"/integrations/shopify/shopify-sales-channels"},{"title":"Shopify Settings for Schedule C Reporting in California","href":"/integrations/shopify/shopify-schedule-c-california"}]},{"title":"SKU.io","href":"/integrations/skuio"},{"title":"Solidus","href":"/integrations/solidus"},{"group":"Stripe","pages":[{"group":"Numeral for Stripe Checkout","pages":[{"title":"Numeral for Stripe Checkout","href":"/integrations/stripe/stripe-checkout"},{"title":"Customer location and address validation","href":"/integrations/stripe/stripe-checkout-location"},{"title":"Embed address collection","href":"/integrations/stripe/stripe-checkout-embedded"},{"title":"Branding and appearance","href":"/integrations/stripe/stripe-checkout-branding"},{"title":"Discounts and promotion codes","href":"/integrations/stripe/stripe-checkout-discounts"},{"title":"Metadata and saved cards","href":"/integrations/stripe/stripe-checkout-metadata"}]},{"title":"Using Numeral's Tax Engine on Stripe Invoices","href":"/integrations/stripe/stripe-invoices"},{"title":"How Stripe Tax Works with Numeral","href":"/integrations/stripe/stripe-tax"}]},{"title":"Subscript","href":"/integrations/subscript"},{"title":"Tabs","href":"/integrations/tabs"},{"title":"WooCommerce","href":"/integrations/woocommerce"},{"title":"Xero","href":"/integrations/xero"},{"title":"Zoho Billing","href":"/integrations/zoho-billing"},{"title":"Zoho Books","href":"/integrations/zoho-books"}]}]},{"tab":"MCP","groups":[{"group":"Get Started","pages":[{"title":"MCP Overview","icon":"plug","href":"/mcp/overview"},{"title":"MCP Quickstart","icon":"rocket","href":"/mcp/quickstart"}]},{"group":"Reference","pages":[{"title":"MCP Tool Reference","icon":"wrench","href":"/mcp/tools"},{"title":"MCP Authentication \u0026 Limits","icon":"shield","href":"/mcp/authentication"}]},{"group":"Build with MCP","pages":[{"title":"MCP Demo Application","icon":"github","href":"/mcp/demo-app"}]}]}]},{"version":"2026-03-01","pages":[{"title":"2026-03-01","href":"/introduction"}]},{"version":"2026-01-01","pages":[{"title":"2026-01-01","href":"/introduction"}]},{"version":"2025-05-12","pages":[{"title":"2025-05-12","href":"/introduction"}]},{"version":"2024-09-01","pages":[{"title":"2024-09-01","href":"/introduction"}]}]},"title":"Submit Certificate - Numeral API","buildId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","deploymentId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-DmVyH30O.js","utils-BHQqGGOd.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-CD-E4BIt.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-Bp5Lq9Ds.js","snippetPresets-C4xAVCFP.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-CgXVLxUC.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BF8I5oUf.js","shallow-Byd0lWnC.js","getApiPlaygroundDisplay-BGOZG1OK.js","CodeSnippet-CpvQL0CY.js","CodeSnippets-B8wkBKXa.js","Page-CBCH2P7b.js","getPastedJson-Ry3scI3Y.js","icon-D7a9HcdD.js","MethodPill-CJ8pmHhz.js","DuplicateIcon-rh1HJF0t.js","createIcon-DvGznqYs.js","DynamicMarkdown-Cc6AuSHS.js","SectionHeading-B4A0S-ep.js","axios-vUo_bRtp.js","Markdown-Cc16CX65.js","clsx-Cs6nMGht.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-zbf22OZA.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-C_fs-y5n.js"]}