{
"type": "https://errors.invoiceapi.mx/auth_unauthorized",
"title": "Authentication required",
"status": 401,
"code": "auth.unauthorized",
"detail": "Missing or invalid API key.",
"remediation": "Send `Authorization: Bearer sk_test_...` (or sk_live_...) with a valid API key.",
"doc_url": "/docs/errors#auth-unauthorized",
"request_id": "req_2P9K3sample"
}
{
"type": "https://errors.invoiceapi.mx/idempotency_key_reuse",
"title": "Idempotency-Key reused with a different request body",
"status": 409,
"code": "idempotency.key_reuse",
"detail": "This Idempotency-Key was already used for a different payload.",
"remediation": "Reuse an Idempotency-Key only for byte-identical retries; use a fresh key otherwise.",
"doc_url": "/docs/errors#idempotency-key_reuse",
"request_id": "req_2P9K3sample"
}
{
"type": "https://errors.invoiceapi.mx/request_validation_failed",
"title": "Request validation failed",
"status": 422,
"code": "request.validation_failed",
"detail": "One or more fields did not satisfy the schema.",
"remediation": "Fix the fields listed in `errors` and resubmit.",
"doc_url": "/docs/errors#request-validation_failed",
"request_id": "req_2P9K3sample"
}
{
"type": "https://errors.invoiceapi.mx/rate_limit_exceeded",
"title": "Rate limit exceeded",
"status": 429,
"code": "rate_limit.exceeded",
"detail": "Too many requests for this key + request class (reads and writes are limited separately).",
"remediation": "Back off and retry after the number of seconds in the Retry-After header; batch work or lower your request rate.",
"doc_url": "/docs/errors#rate_limit-exceeded",
"request_id": "req_2P9K3sample"
}
{
"type": "https://errors.invoiceapi.mx/internal_error",
"title": "Internal server error",
"status": 500,
"code": "internal.error",
"detail": "An unexpected error occurred.",
"remediation": "Retry later; contact support with the request_id if it persists.",
"doc_url": "/docs/errors#internal-error",
"request_id": "req_2P9K3sample"
}
fiscal_documents
Request a constancia
Request the taxpayer’s constancia de situación fiscal as a PDF, using the SAT credential saved on the fiscal profile. Requires a verified, unexpired credential. Answers immediately with a pending resource; wait for the fiscal_document.ready webhook or poll GET. If a request for this profile is already in flight it is returned with 200 and no new SAT job starts. In live mode one constancia per RFC is free each calendar quarter (Mexico City time), and only a delivered PDF uses it; a further request gets 402 fiscal_document.free_quota_exceeded before anything is sent to SAT. Test-mode and sandbox profiles get a simulated PDF that is not a SAT document, and nothing leaves this API.
{
"type": "https://errors.invoiceapi.mx/auth_unauthorized",
"title": "Authentication required",
"status": 401,
"code": "auth.unauthorized",
"detail": "Missing or invalid API key.",
"remediation": "Send `Authorization: Bearer sk_test_...` (or sk_live_...) with a valid API key.",
"doc_url": "/docs/errors#auth-unauthorized",
"request_id": "req_2P9K3sample"
}
{
"type": "https://errors.invoiceapi.mx/idempotency_key_reuse",
"title": "Idempotency-Key reused with a different request body",
"status": 409,
"code": "idempotency.key_reuse",
"detail": "This Idempotency-Key was already used for a different payload.",
"remediation": "Reuse an Idempotency-Key only for byte-identical retries; use a fresh key otherwise.",
"doc_url": "/docs/errors#idempotency-key_reuse",
"request_id": "req_2P9K3sample"
}
{
"type": "https://errors.invoiceapi.mx/request_validation_failed",
"title": "Request validation failed",
"status": 422,
"code": "request.validation_failed",
"detail": "One or more fields did not satisfy the schema.",
"remediation": "Fix the fields listed in `errors` and resubmit.",
"doc_url": "/docs/errors#request-validation_failed",
"request_id": "req_2P9K3sample"
}
{
"type": "https://errors.invoiceapi.mx/rate_limit_exceeded",
"title": "Rate limit exceeded",
"status": 429,
"code": "rate_limit.exceeded",
"detail": "Too many requests for this key + request class (reads and writes are limited separately).",
"remediation": "Back off and retry after the number of seconds in the Retry-After header; batch work or lower your request rate.",
"doc_url": "/docs/errors#rate_limit-exceeded",
"request_id": "req_2P9K3sample"
}
{
"type": "https://errors.invoiceapi.mx/internal_error",
"title": "Internal server error",
"status": 500,
"code": "internal.error",
"detail": "An unexpected error occurred.",
"remediation": "Retry later; contact support with the request_id if it persists.",
"doc_url": "/docs/errors#internal-error",
"request_id": "req_2P9K3sample"
}
Pin a dated API release (Stripe-style). Omit to use the current version. An unknown value returns 400 request.invalid_version. Echoed back on every response.
Safely retry any POST. A successful (2xx) response is stored for 24h and replayed byte-for-byte for identical retries (the replay adds an idempotent-replayed: true header). A non-2xx releases the key, so you can fix the cause and retry with the same key; pac.stamp_outcome_unknown, pac.auth_failed and download.request_failed are the exceptions and replay like a success. Reusing the key of a stored response with a different body is 409 idempotency.key_reuse; an in-flight duplicate is 409 idempotency.key_processing.
pending: accepted, not started yet (also the state while our SAT document service is at capacity). processing: the document is being fetched. ready: the PDF can be downloaded. needs_action: stopped until someone acts, see error. failed: did not complete. cancelled: the request was cancelled. expired: the PDF was removed after the retention period.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Invoice API","description":"Mexican CFDI 4.0 invoicing API — stamp, cancel, validate, and bulk-download.","colors":{"primary":"#16a34a","light":"#4ade80","dark":"#15803d"},"favicon":"https://mintcdn.com/invoiceapi/zn1ZuSpkXG_1Rv6s/favicon.svg?fit=max\u0026auto=format\u0026n=zn1ZuSpkXG_1Rv6s\u0026q=85\u0026s=77fb818571243295fe27cfc2fc5a1479","navbar":{"primary":{"type":"button","label":"Quickstart","href":"/quickstart"}},"footer":{"socials":{}},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"invoiceapi","hasAudioNarration":false,"actualSubdomain":"invoiceapi","customDomains":["docs.newinvoice.dev"],"gitSource":{"type":"github","owner":"disruptive-learning","repo":"invoice_api","deployBranch":"main","contentDirectory":"mintlify","isPrivate":true,"mountPath":"","label":""},"entitlements":{},"buildId":"6af358e37449a8e2dc9bd3ba","clientVersion":"0.0.4102","searchFilterCounts":[{"language":"default","tag":"API Reference","count":77},{"language":"default","tag":"Documentation","count":17},{"language":"default","tag":"Guides","count":12},{"language":"default","tag":"fiscal_profiles","count":11},{"language":"default","tag":"invoices","count":7},{"language":"default","tag":"downloads","count":6},{"language":"default","tag":"webhook_endpoints","count":6},{"language":"default","tag":"accounts","count":5},{"language":"default","tag":"ticket_invoices","count":5},{"language":"default","tag":"api_keys","count":4}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/fiscal_documents/request-a-constancia","slug":"/api-reference/fiscal_documents/request-a-constancia","pageMetadata":{"title":"Request a constancia","description":"Request the taxpayer's constancia de situación fiscal as a PDF, using the SAT credential saved on the fiscal profile. Requires a `verified`, unexpired credential. Answers immediately with a `pending` resource; wait for the `fiscal_document.ready` webhook or poll GET. If a request for this profile is already in flight it is returned with 200 and no new SAT job starts. In live mode one constancia per RFC is free each calendar quarter (Mexico City time), and only a delivered PDF uses it; a further request gets 402 `fiscal_document.free_quota_exceeded` before anything is sent to SAT. Test-mode and sandbox profiles get a simulated PDF that is not a SAT document, and nothing leaves this API.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/fiscal_documents","href":"/api-reference/fiscal_documents/request-a-constancia","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_components.p, {\n children: [\"Request the taxpayer’s constancia de situación fiscal as a PDF, using the SAT credential saved on the fiscal profile. Requires a \", _jsx(_components.code, {\n children: \"verified\"\n }), \", unexpired credential. Answers immediately with a \", _jsx(_components.code, {\n children: \"pending\"\n }), \" resource; wait for the \", _jsx(_components.code, {\n children: \"fiscal_document.ready\"\n }), \" webhook or poll GET. If a request for this profile is already in flight it is returned with 200 and no new SAT job starts. In live mode one constancia per RFC is free each calendar quarter (Mexico City time), and only a delivered PDF uses it; a further request gets 402 \", _jsx(_components.code, {\n children: \"fiscal_document.free_quota_exceeded\"\n }), \" before anything is sent to SAT. Test-mode and sandbox profiles get a simulated PDF that is not a SAT document, and nothing leaves this API.\"]\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":"Request a constancia","description":"Request the taxpayer's constancia de situación fiscal as a PDF, using the SAT credential saved on the fiscal profile. Requires a `verified`, unexpired credential. Answers immediately with a `pending` resource; wait for the `fiscal_document.ready` webhook or poll GET. If a request for this profile is already in flight it is returned with 200 and no new SAT job starts. In live mode one constancia per RFC is free each calendar quarter (Mexico City time), and only a delivered PDF uses it; a further request gets 402 `fiscal_document.free_quota_exceeded` before anything is sent to SAT. Test-mode and sandbox profiles get a simulated PDF that is not a SAT document, and nothing leaves this API.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/fiscal_documents","href":"/api-reference/fiscal_documents/request-a-constancia","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"summary":"Request a constancia","tags":["fiscal_documents"],"description":"Request the taxpayer's constancia de situación fiscal as a PDF, using the SAT credential saved on the fiscal profile. Requires a `verified`, unexpired credential. Answers immediately with a `pending` resource; wait for the `fiscal_document.ready` webhook or poll GET. If a request for this profile is already in flight it is returned with 200 and no new SAT job starts. In live mode one constancia per RFC is free each calendar quarter (Mexico City time), and only a delivered PDF uses it; a further request gets 402 `fiscal_document.free_quota_exceeded` before anything is sent to SAT. Test-mode and sandbox profiles get a simulated PDF that is not a SAT document, and nothing leaves this API.","requestBody":"39fa22b6-9d65-45a0-a50b-946c65b7949c","responses":{"200":"5bbcf718-8f04-41ef-914a-517ccd16c73f","201":"d6aeb255-5943-4626-87b4-7807584f7477","401":"9c5cb452-bf56-4a23-8f56-b33660eff66d","409":"033fa11b-fa5e-4fb1-be33-7f081dba2b1c","422":"d6bb7798-9d55-40af-adca-357baf40e063","429":"b1f9384d-8746-4c96-990e-32d11abb5a0d","500":"ab25ff99-a47b-44ce-a269-6ea11682505c"},"parameters":["2eb6a790-4829-482d-81a9-38ef66b2f801","92df0045-32cb-45ee-acde-26df6184f9d6","f952ea31-77bd-4318-a6a5-03dfac84beba"],"method":"post","type":"path","servers":["27cbbabf-b868-4dd7-9f42-82ed41e06a45","22831049-409c-435a-9033-cccf2eda1b9e"],"security":["e1ec91d2-3bec-4f58-a497-048f82e6106b"],"path":"/v1/fiscal_documents","baseUrlOptions":["https://api.newinvoice.dev","http://localhost:3000"],"title":"Request a constancia","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"2eb6a790-4829-482d-81a9-38ef66b2f801":{"name":"Invoice-Version","in":"header","required":false,"description":"Pin a dated API release (Stripe-style). Omit to use the current version. An unknown value returns 400 `request.invalid_version`. Echoed back on every response.","schema":{"type":"string","example":"2026-07-10","isRequired":false,"description":"Pin a dated API release (Stripe-style). Omit to use the current version. An unknown value returns 400 `request.invalid_version`. Echoed back on every response.","uniqueKey":"","typeLabel":"string"}},"92df0045-32cb-45ee-acde-26df6184f9d6":{"name":"Invoice-Account","in":"header","required":false,"description":"Connect: act on behalf of one of your connected accounts (its `acct_…`/`org_…` id). Omit to act as your own organization. Not honored on /v1/api_keys.","schema":{"type":"string","example":"org_2P9connectedacct","isRequired":false,"description":"Connect: act on behalf of one of your connected accounts (its `acct_…`/`org_…` id). Omit to act as your own organization. Not honored on /v1/api_keys.","uniqueKey":"","typeLabel":"string"}},"f952ea31-77bd-4318-a6a5-03dfac84beba":{"name":"Idempotency-Key","in":"header","required":false,"description":"Safely retry any POST. A successful (2xx) response is stored for 24h and replayed byte-for-byte for identical retries (the replay adds an `idempotent-replayed: true` header). A non-2xx releases the key, so you can fix the cause and retry with the same key; `pac.stamp_outcome_unknown`, `pac.auth_failed` and `download.request_failed` are the exceptions and replay like a success. Reusing the key of a stored response with a different body is 409 `idempotency.key_reuse`; an in-flight duplicate is 409 `idempotency.key_processing`.","schema":{"type":"string","example":"a1b2c3d4-e5f6-4789-8abc-1234567890ab","isRequired":false,"description":"Safely retry any POST. A successful (2xx) response is stored for 24h and replayed byte-for-byte for identical retries (the replay adds an `idempotent-replayed: true` header). A non-2xx releases the key, so you can fix the cause and retry with the same key; `pac.stamp_outcome_unknown`, `pac.auth_failed` and `download.request_failed` are the exceptions and replay like a success. Reusing the key of a stored response with a different body is 409 `idempotency.key_reuse`; an in-flight duplicate is 409 `idempotency.key_processing`.","uniqueKey":"","typeLabel":"string"}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"fiscal_profile_id":{"type":"string","minLength":1,"description":"Fiscal profile whose saved SAT credential is used, e.g. \"fp_2P9K3sample\".","isRequired":true,"uniqueKey":"fiscal_profile_id","typeLabel":"string"},"type":{"type":"string","description":"Always \"constancia\" for now.","enum":["constancia"],"isRequired":true,"uniqueKey":"type","typeLabel":"enum\u003cstring>"},"simulate":{"description":"Test mode only: force this outcome. A live key that sends it gets 422 `fiscal_document.simulate_test_only`. See the Testing guide.","type":"string","enum":["failed","needs_action","cancelled","credential_rejected","capacity_reached"],"uniqueKey":"simulate","typeLabel":"enum\u003cstring>"}},"required":["fiscal_profile_id","type"],"uniqueKey":"","typeLabel":"object"},"example":{"fiscal_profile_id":"fp_2P9K3sample","type":"constancia","simulate":"failed"},"examples":{"Example":{"title":"Example","value":{"fiscal_profile_id":"fp_2P9K3sample","type":"constancia","simulate":"failed"}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"5bbcf718-8f04-41ef-914a-517ccd16c73f":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"type":"string","description":"Always \"fiscal_document\".","enum":["fiscal_document"],"isRequired":true,"uniqueKey":"object","typeLabel":"enum\u003cstring>"},"id":{"type":"string","description":"Fiscal document id, e.g. \"fdoc_2P9K3sample\".","isRequired":true,"uniqueKey":"id","typeLabel":"string"},"fiscal_profile_id":{"type":"string","description":"The fiscal profile this document belongs to.","isRequired":true,"uniqueKey":"fiscal_profile_id","typeLabel":"string"},"type":{"type":"string","description":"Always \"constancia\" for now.","enum":["constancia"],"isRequired":true,"uniqueKey":"type","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["pending","processing","ready","needs_action","failed","cancelled","expired"],"description":"pending: accepted, not started yet (also the state while our SAT document service is at capacity). processing: the document is being fetched. ready: the PDF can be downloaded. needs_action: stopped until someone acts, see `error`. failed: did not complete. cancelled: the request was cancelled. expired: the PDF was removed after the retention period.","isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"livemode":{"type":"boolean","description":"False for test mode: the PDF is simulated and is not a SAT document.","isRequired":true,"uniqueKey":"livemode","typeLabel":"boolean"},"deadline":{"type":"string","description":"When we stop working on this request, ISO-8601 UTC.","isRequired":true,"uniqueKey":"deadline","typeLabel":"string"},"sha256":{"oneOf":[{"type":"string","description":"SHA-256 (hex) of the PDF once it is ready.","isRequired":true,"uniqueKey":"sha256.oneOf.0","typeLabel":"string"},{"type":"null","description":"SHA-256 (hex) of the PDF once it is ready.","isRequired":true,"uniqueKey":"sha256.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"sha256","typeLabel":"string | null"},"size_bytes":{"oneOf":[{"type":"integer","description":"PDF size in bytes once it is ready.","maximum":9007199254740991,"minimum":-9007199254740991,"isRequired":true,"uniqueKey":"size_bytes.oneOf.0","typeLabel":"integer"},{"type":"null","description":"PDF size in bytes once it is ready.","isRequired":true,"uniqueKey":"size_bytes.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"size_bytes","typeLabel":"integer | null"},"pdf_url":{"oneOf":[{"type":"string","description":"Path to download the PDF; null unless status is ready.","isRequired":true,"uniqueKey":"pdf_url.oneOf.0","typeLabel":"string"},{"type":"null","description":"Path to download the PDF; null unless status is ready.","isRequired":true,"uniqueKey":"pdf_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"pdf_url","typeLabel":"string | null"},"pdf_expires_at":{"oneOf":[{"type":"string","description":"When the PDF is deleted from our storage, ISO-8601 UTC.","isRequired":true,"uniqueKey":"pdf_expires_at.oneOf.0","typeLabel":"string"},{"type":"null","description":"When the PDF is deleted from our storage, ISO-8601 UTC.","isRequired":true,"uniqueKey":"pdf_expires_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"pdf_expires_at","typeLabel":"string | null"},"error":{"oneOf":[{"type":"object","description":"Why it stopped, set on needs_action, failed and cancelled; null otherwise.","required":["code","title","remediation","retryable"],"properties":{"code":{"type":"string","description":"Stable machine code, e.g. \"sat_service.credential_rejected\".","isRequired":true,"uniqueKey":"error.oneOf.0.code","typeLabel":"string"},"title":{"type":"string","description":"Short human-readable title.","isRequired":true,"uniqueKey":"error.oneOf.0.title","typeLabel":"string"},"remediation":{"type":"string","description":"What to do next. Written for humans and agents.","isRequired":true,"uniqueKey":"error.oneOf.0.remediation","typeLabel":"string"},"retryable":{"type":"boolean","description":"Whether creating a new request (after any remediation) is reasonable.","isRequired":true,"uniqueKey":"error.oneOf.0.retryable","typeLabel":"boolean"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"error.oneOf.0","typeLabel":"object"},{"type":"null","description":"Why it stopped, set on needs_action, failed and cancelled; null otherwise.","isRequired":true,"uniqueKey":"error.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error","typeLabel":"object | null"},"created_at":{"type":"string","description":"Creation timestamp, ISO-8601 UTC.","isRequired":true,"uniqueKey":"created_at","typeLabel":"string"},"updated_at":{"type":"string","description":"Last-update timestamp, ISO-8601 UTC.","isRequired":true,"uniqueKey":"updated_at","typeLabel":"string"},"ready_at":{"oneOf":[{"type":"string","description":"When the PDF was stored, ISO-8601 UTC.","isRequired":true,"uniqueKey":"ready_at.oneOf.0","typeLabel":"string"},{"type":"null","description":"When the PDF was stored, ISO-8601 UTC.","isRequired":true,"uniqueKey":"ready_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"ready_at","typeLabel":"string | null"}},"required":["object","id","fiscal_profile_id","type","status","livemode","deadline","sha256","size_bytes","pdf_url","pdf_expires_at","error","created_at","updated_at","ready_at"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"example":{"object":"fiscal_document","id":"obj_2P9K3sample","fiscal_profile_id":"fp_2P9K3sample","type":"constancia","status":"pending","livemode":false,"deadline":"string","sha256":"string","size_bytes":-9007199254740991,"pdf_url":"https://example.com/webhooks/invoice","pdf_expires_at":"2026-07-10T18:25:43Z","error":{"code":"string","title":"string","remediation":"string","retryable":true},"created_at":"2026-07-10T18:25:43Z","updated_at":"2026-07-10T18:25:43Z","ready_at":"2026-07-10T18:25:43Z"},"examples":{"Example":{"title":"Example","value":{"object":"fiscal_document","id":"obj_2P9K3sample","fiscal_profile_id":"fp_2P9K3sample","type":"constancia","status":"pending","livemode":false,"deadline":"string","sha256":"string","size_bytes":-9007199254740991,"pdf_url":"https://example.com/webhooks/invoice","pdf_expires_at":"2026-07-10T18:25:43Z","error":{"code":"string","title":"string","remediation":"string","retryable":true},"created_at":"2026-07-10T18:25:43Z","updated_at":"2026-07-10T18:25:43Z","ready_at":"2026-07-10T18:25:43Z"}}},"exampleType":"examples"}},"headers":{"Request-Id":{"description":"Unique id for this request. Also the `request_id` in every error body — log it and quote it to support; idempotency keys off it too.","schema":{"type":"string","example":"req_2P9K3sample"}},"Invoice-Version":{"description":"The dated API version resolved for this request (request header → key pin → current). Echoed on every response.","schema":{"type":"string","example":"2026-07-15"}},"traceparent":{"description":"W3C Trace Context. When you send a valid `traceparent`, the response continues the trace (same trace-id, a fresh span-id, sampled flag).","schema":{"type":"string","example":"00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01"}},"RateLimit-Limit":{"description":"IETF draft rate-limit: the ceiling of the token bucket consulted for this request class (reads and writes have independent buckets).","schema":{"type":"integer","example":100}},"RateLimit-Remaining":{"description":"IETF draft rate-limit: tokens left in the bucket after this request.","schema":{"type":"integer","example":99}},"RateLimit-Reset":{"description":"IETF draft rate-limit: seconds until the bucket refills to its ceiling.","schema":{"type":"integer","example":1}}},"exampleType":"examples"},"d6aeb255-5943-4626-87b4-7807584f7477":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"type":"string","description":"Always \"fiscal_document\".","enum":["fiscal_document"],"isRequired":true,"uniqueKey":"object","typeLabel":"enum\u003cstring>"},"id":{"type":"string","description":"Fiscal document id, e.g. \"fdoc_2P9K3sample\".","isRequired":true,"uniqueKey":"id","typeLabel":"string"},"fiscal_profile_id":{"type":"string","description":"The fiscal profile this document belongs to.","isRequired":true,"uniqueKey":"fiscal_profile_id","typeLabel":"string"},"type":{"type":"string","description":"Always \"constancia\" for now.","enum":["constancia"],"isRequired":true,"uniqueKey":"type","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["pending","processing","ready","needs_action","failed","cancelled","expired"],"description":"pending: accepted, not started yet (also the state while our SAT document service is at capacity). processing: the document is being fetched. ready: the PDF can be downloaded. needs_action: stopped until someone acts, see `error`. failed: did not complete. cancelled: the request was cancelled. expired: the PDF was removed after the retention period.","isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"livemode":{"type":"boolean","description":"False for test mode: the PDF is simulated and is not a SAT document.","isRequired":true,"uniqueKey":"livemode","typeLabel":"boolean"},"deadline":{"type":"string","description":"When we stop working on this request, ISO-8601 UTC.","isRequired":true,"uniqueKey":"deadline","typeLabel":"string"},"sha256":{"oneOf":[{"type":"string","description":"SHA-256 (hex) of the PDF once it is ready.","isRequired":true,"uniqueKey":"sha256.oneOf.0","typeLabel":"string"},{"type":"null","description":"SHA-256 (hex) of the PDF once it is ready.","isRequired":true,"uniqueKey":"sha256.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"sha256","typeLabel":"string | null"},"size_bytes":{"oneOf":[{"type":"integer","description":"PDF size in bytes once it is ready.","maximum":9007199254740991,"minimum":-9007199254740991,"isRequired":true,"uniqueKey":"size_bytes.oneOf.0","typeLabel":"integer"},{"type":"null","description":"PDF size in bytes once it is ready.","isRequired":true,"uniqueKey":"size_bytes.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"size_bytes","typeLabel":"integer | null"},"pdf_url":{"oneOf":[{"type":"string","description":"Path to download the PDF; null unless status is ready.","isRequired":true,"uniqueKey":"pdf_url.oneOf.0","typeLabel":"string"},{"type":"null","description":"Path to download the PDF; null unless status is ready.","isRequired":true,"uniqueKey":"pdf_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"pdf_url","typeLabel":"string | null"},"pdf_expires_at":{"oneOf":[{"type":"string","description":"When the PDF is deleted from our storage, ISO-8601 UTC.","isRequired":true,"uniqueKey":"pdf_expires_at.oneOf.0","typeLabel":"string"},{"type":"null","description":"When the PDF is deleted from our storage, ISO-8601 UTC.","isRequired":true,"uniqueKey":"pdf_expires_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"pdf_expires_at","typeLabel":"string | null"},"error":{"oneOf":[{"type":"object","description":"Why it stopped, set on needs_action, failed and cancelled; null otherwise.","required":["code","title","remediation","retryable"],"properties":{"code":{"type":"string","description":"Stable machine code, e.g. \"sat_service.credential_rejected\".","isRequired":true,"uniqueKey":"error.oneOf.0.code","typeLabel":"string"},"title":{"type":"string","description":"Short human-readable title.","isRequired":true,"uniqueKey":"error.oneOf.0.title","typeLabel":"string"},"remediation":{"type":"string","description":"What to do next. Written for humans and agents.","isRequired":true,"uniqueKey":"error.oneOf.0.remediation","typeLabel":"string"},"retryable":{"type":"boolean","description":"Whether creating a new request (after any remediation) is reasonable.","isRequired":true,"uniqueKey":"error.oneOf.0.retryable","typeLabel":"boolean"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"error.oneOf.0","typeLabel":"object"},{"type":"null","description":"Why it stopped, set on needs_action, failed and cancelled; null otherwise.","isRequired":true,"uniqueKey":"error.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error","typeLabel":"object | null"},"created_at":{"type":"string","description":"Creation timestamp, ISO-8601 UTC.","isRequired":true,"uniqueKey":"created_at","typeLabel":"string"},"updated_at":{"type":"string","description":"Last-update timestamp, ISO-8601 UTC.","isRequired":true,"uniqueKey":"updated_at","typeLabel":"string"},"ready_at":{"oneOf":[{"type":"string","description":"When the PDF was stored, ISO-8601 UTC.","isRequired":true,"uniqueKey":"ready_at.oneOf.0","typeLabel":"string"},{"type":"null","description":"When the PDF was stored, ISO-8601 UTC.","isRequired":true,"uniqueKey":"ready_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"ready_at","typeLabel":"string | null"}},"required":["object","id","fiscal_profile_id","type","status","livemode","deadline","sha256","size_bytes","pdf_url","pdf_expires_at","error","created_at","updated_at","ready_at"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"example":{"object":"fiscal_document","id":"obj_2P9K3sample","fiscal_profile_id":"fp_2P9K3sample","type":"constancia","status":"pending","livemode":false,"deadline":"string","sha256":"string","size_bytes":-9007199254740991,"pdf_url":"https://example.com/webhooks/invoice","pdf_expires_at":"2026-07-10T18:25:43Z","error":{"code":"string","title":"string","remediation":"string","retryable":true},"created_at":"2026-07-10T18:25:43Z","updated_at":"2026-07-10T18:25:43Z","ready_at":"2026-07-10T18:25:43Z"},"examples":{"Example":{"title":"Example","value":{"object":"fiscal_document","id":"obj_2P9K3sample","fiscal_profile_id":"fp_2P9K3sample","type":"constancia","status":"pending","livemode":false,"deadline":"string","sha256":"string","size_bytes":-9007199254740991,"pdf_url":"https://example.com/webhooks/invoice","pdf_expires_at":"2026-07-10T18:25:43Z","error":{"code":"string","title":"string","remediation":"string","retryable":true},"created_at":"2026-07-10T18:25:43Z","updated_at":"2026-07-10T18:25:43Z","ready_at":"2026-07-10T18:25:43Z"}}},"exampleType":"examples"}},"headers":{"Request-Id":{"description":"Unique id for this request. Also the `request_id` in every error body — log it and quote it to support; idempotency keys off it too.","schema":{"type":"string","example":"req_2P9K3sample"}},"Invoice-Version":{"description":"The dated API version resolved for this request (request header → key pin → current). Echoed on every response.","schema":{"type":"string","example":"2026-07-15"}},"traceparent":{"description":"W3C Trace Context. When you send a valid `traceparent`, the response continues the trace (same trace-id, a fresh span-id, sampled flag).","schema":{"type":"string","example":"00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01"}},"RateLimit-Limit":{"description":"IETF draft rate-limit: the ceiling of the token bucket consulted for this request class (reads and writes have independent buckets).","schema":{"type":"integer","example":100}},"RateLimit-Remaining":{"description":"IETF draft rate-limit: tokens left in the bucket after this request.","schema":{"type":"integer","example":99}},"RateLimit-Reset":{"description":"IETF draft rate-limit: seconds until the bucket refills to its ceiling.","schema":{"type":"integer","example":1}}},"exampleType":"examples"},"9c5cb452-bf56-4a23-8f56-b33660eff66d":{"description":"Missing or invalid API key.","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem+json error with agent-first extensions.","properties":{"type":{"type":"string","format":"uri","isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi>"},"title":{"type":"string","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"code":{"type":"string","description":"Stable dotted machine code to switch on.","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"request_id":{"type":"string","isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"detail":{"type":"string","uniqueKey":"detail","typeLabel":"string"},"remediation":{"type":"string","description":"Actionable next step for a human or agent.","uniqueKey":"remediation","typeLabel":"string"},"pac":{"type":"object","properties":{"provider":{"type":"string","uniqueKey":"pac.provider","typeLabel":"string"},"codigo":{"type":"string","uniqueKey":"pac.codigo","typeLabel":"string"},"mensaje":{"type":"string","uniqueKey":"pac.mensaje","typeLabel":"string"}},"uniqueKey":"pac","typeLabel":"object"},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"message":{"type":"string","uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"required":["type","title","status","code","request_id"],"uniqueKey":"","typeLabel":"object"},"example":{"type":"https://errors.invoiceapi.mx/auth_unauthorized","title":"Authentication required","status":401,"code":"auth.unauthorized","detail":"Missing or invalid API key.","remediation":"Send `Authorization: Bearer sk_test_...` (or sk_live_...) with a valid API key.","doc_url":"/docs/errors#auth-unauthorized","request_id":"req_2P9K3sample"},"examples":{"Example":{"title":"Example","value":{"type":"https://errors.invoiceapi.mx/auth_unauthorized","title":"Authentication required","status":401,"code":"auth.unauthorized","detail":"Missing or invalid API key.","remediation":"Send `Authorization: Bearer sk_test_...` (or sk_live_...) with a valid API key.","doc_url":"/docs/errors#auth-unauthorized","request_id":"req_2P9K3sample"}}},"exampleType":"examples"}},"headers":{"Request-Id":{"description":"Unique id for this request. Also the `request_id` in every error body — log it and quote it to support; idempotency keys off it too.","schema":{"type":"string","example":"req_2P9K3sample"}},"Invoice-Version":{"description":"The dated API version resolved for this request (request header → key pin → current). Echoed on every response.","schema":{"type":"string","example":"2026-07-15"}},"traceparent":{"description":"W3C Trace Context. When you send a valid `traceparent`, the response continues the trace (same trace-id, a fresh span-id, sampled flag).","schema":{"type":"string","example":"00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01"}}},"exampleType":"examples"},"033fa11b-fa5e-4fb1-be33-7f081dba2b1c":{"description":"Conflict (e.g. idempotency/state).","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem+json error with agent-first extensions.","properties":{"type":{"type":"string","format":"uri","isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi>"},"title":{"type":"string","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"code":{"type":"string","description":"Stable dotted machine code to switch on.","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"request_id":{"type":"string","isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"detail":{"type":"string","uniqueKey":"detail","typeLabel":"string"},"remediation":{"type":"string","description":"Actionable next step for a human or agent.","uniqueKey":"remediation","typeLabel":"string"},"pac":{"type":"object","properties":{"provider":{"type":"string","uniqueKey":"pac.provider","typeLabel":"string"},"codigo":{"type":"string","uniqueKey":"pac.codigo","typeLabel":"string"},"mensaje":{"type":"string","uniqueKey":"pac.mensaje","typeLabel":"string"}},"uniqueKey":"pac","typeLabel":"object"},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"message":{"type":"string","uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"required":["type","title","status","code","request_id"],"uniqueKey":"","typeLabel":"object"},"example":{"type":"https://errors.invoiceapi.mx/idempotency_key_reuse","title":"Idempotency-Key reused with a different request body","status":409,"code":"idempotency.key_reuse","detail":"This Idempotency-Key was already used for a different payload.","remediation":"Reuse an Idempotency-Key only for byte-identical retries; use a fresh key otherwise.","doc_url":"/docs/errors#idempotency-key_reuse","request_id":"req_2P9K3sample"},"examples":{"Example":{"title":"Example","value":{"type":"https://errors.invoiceapi.mx/idempotency_key_reuse","title":"Idempotency-Key reused with a different request body","status":409,"code":"idempotency.key_reuse","detail":"This Idempotency-Key was already used for a different payload.","remediation":"Reuse an Idempotency-Key only for byte-identical retries; use a fresh key otherwise.","doc_url":"/docs/errors#idempotency-key_reuse","request_id":"req_2P9K3sample"}}},"exampleType":"examples"}},"headers":{"Request-Id":{"description":"Unique id for this request. Also the `request_id` in every error body — log it and quote it to support; idempotency keys off it too.","schema":{"type":"string","example":"req_2P9K3sample"}},"Invoice-Version":{"description":"The dated API version resolved for this request (request header → key pin → current). Echoed on every response.","schema":{"type":"string","example":"2026-07-15"}},"traceparent":{"description":"W3C Trace Context. When you send a valid `traceparent`, the response continues the trace (same trace-id, a fresh span-id, sampled flag).","schema":{"type":"string","example":"00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01"}}},"exampleType":"examples"},"d6bb7798-9d55-40af-adca-357baf40e063":{"description":"Request validation failed.","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem+json error with agent-first extensions.","properties":{"type":{"type":"string","format":"uri","isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi>"},"title":{"type":"string","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"code":{"type":"string","description":"Stable dotted machine code to switch on.","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"request_id":{"type":"string","isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"detail":{"type":"string","uniqueKey":"detail","typeLabel":"string"},"remediation":{"type":"string","description":"Actionable next step for a human or agent.","uniqueKey":"remediation","typeLabel":"string"},"pac":{"type":"object","properties":{"provider":{"type":"string","uniqueKey":"pac.provider","typeLabel":"string"},"codigo":{"type":"string","uniqueKey":"pac.codigo","typeLabel":"string"},"mensaje":{"type":"string","uniqueKey":"pac.mensaje","typeLabel":"string"}},"uniqueKey":"pac","typeLabel":"object"},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"message":{"type":"string","uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"required":["type","title","status","code","request_id"],"uniqueKey":"","typeLabel":"object"},"example":{"type":"https://errors.invoiceapi.mx/request_validation_failed","title":"Request validation failed","status":422,"code":"request.validation_failed","detail":"One or more fields did not satisfy the schema.","remediation":"Fix the fields listed in `errors` and resubmit.","doc_url":"/docs/errors#request-validation_failed","request_id":"req_2P9K3sample"},"examples":{"Example":{"title":"Example","value":{"type":"https://errors.invoiceapi.mx/request_validation_failed","title":"Request validation failed","status":422,"code":"request.validation_failed","detail":"One or more fields did not satisfy the schema.","remediation":"Fix the fields listed in `errors` and resubmit.","doc_url":"/docs/errors#request-validation_failed","request_id":"req_2P9K3sample"}}},"exampleType":"examples"}},"headers":{"Request-Id":{"description":"Unique id for this request. Also the `request_id` in every error body — log it and quote it to support; idempotency keys off it too.","schema":{"type":"string","example":"req_2P9K3sample"}},"Invoice-Version":{"description":"The dated API version resolved for this request (request header → key pin → current). Echoed on every response.","schema":{"type":"string","example":"2026-07-15"}},"traceparent":{"description":"W3C Trace Context. When you send a valid `traceparent`, the response continues the trace (same trace-id, a fresh span-id, sampled flag).","schema":{"type":"string","example":"00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01"}}},"exampleType":"examples"},"b1f9384d-8746-4c96-990e-32d11abb5a0d":{"description":"Rate limit exceeded — back off per the Retry-After header.","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem+json error with agent-first extensions.","properties":{"type":{"type":"string","format":"uri","isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi>"},"title":{"type":"string","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"code":{"type":"string","description":"Stable dotted machine code to switch on.","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"request_id":{"type":"string","isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"detail":{"type":"string","uniqueKey":"detail","typeLabel":"string"},"remediation":{"type":"string","description":"Actionable next step for a human or agent.","uniqueKey":"remediation","typeLabel":"string"},"pac":{"type":"object","properties":{"provider":{"type":"string","uniqueKey":"pac.provider","typeLabel":"string"},"codigo":{"type":"string","uniqueKey":"pac.codigo","typeLabel":"string"},"mensaje":{"type":"string","uniqueKey":"pac.mensaje","typeLabel":"string"}},"uniqueKey":"pac","typeLabel":"object"},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"message":{"type":"string","uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"required":["type","title","status","code","request_id"],"uniqueKey":"","typeLabel":"object"},"example":{"type":"https://errors.invoiceapi.mx/rate_limit_exceeded","title":"Rate limit exceeded","status":429,"code":"rate_limit.exceeded","detail":"Too many requests for this key + request class (reads and writes are limited separately).","remediation":"Back off and retry after the number of seconds in the Retry-After header; batch work or lower your request rate.","doc_url":"/docs/errors#rate_limit-exceeded","request_id":"req_2P9K3sample"},"examples":{"Example":{"title":"Example","value":{"type":"https://errors.invoiceapi.mx/rate_limit_exceeded","title":"Rate limit exceeded","status":429,"code":"rate_limit.exceeded","detail":"Too many requests for this key + request class (reads and writes are limited separately).","remediation":"Back off and retry after the number of seconds in the Retry-After header; batch work or lower your request rate.","doc_url":"/docs/errors#rate_limit-exceeded","request_id":"req_2P9K3sample"}}},"exampleType":"examples"}},"headers":{"Request-Id":{"description":"Unique id for this request. Also the `request_id` in every error body — log it and quote it to support; idempotency keys off it too.","schema":{"type":"string","example":"req_2P9K3sample"}},"Invoice-Version":{"description":"The dated API version resolved for this request (request header → key pin → current). Echoed on every response.","schema":{"type":"string","example":"2026-07-15"}},"traceparent":{"description":"W3C Trace Context. When you send a valid `traceparent`, the response continues the trace (same trace-id, a fresh span-id, sampled flag).","schema":{"type":"string","example":"00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01"}},"RateLimit-Limit":{"description":"IETF draft rate-limit: the ceiling of the token bucket consulted for this request class (reads and writes have independent buckets).","schema":{"type":"integer","example":100}},"RateLimit-Remaining":{"description":"IETF draft rate-limit: tokens left in the bucket after this request.","schema":{"type":"integer","example":99}},"RateLimit-Reset":{"description":"IETF draft rate-limit: seconds until the bucket refills to its ceiling.","schema":{"type":"integer","example":1}},"Retry-After":{"description":"Seconds to wait before retrying (RFC 9110). Present on 429 and on retryable upstream failures.","schema":{"type":"integer","example":1}}},"exampleType":"examples"},"ab25ff99-a47b-44ce-a269-6ea11682505c":{"description":"Internal server error.","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem+json error with agent-first extensions.","properties":{"type":{"type":"string","format":"uri","isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi>"},"title":{"type":"string","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"code":{"type":"string","description":"Stable dotted machine code to switch on.","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"request_id":{"type":"string","isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"detail":{"type":"string","uniqueKey":"detail","typeLabel":"string"},"remediation":{"type":"string","description":"Actionable next step for a human or agent.","uniqueKey":"remediation","typeLabel":"string"},"pac":{"type":"object","properties":{"provider":{"type":"string","uniqueKey":"pac.provider","typeLabel":"string"},"codigo":{"type":"string","uniqueKey":"pac.codigo","typeLabel":"string"},"mensaje":{"type":"string","uniqueKey":"pac.mensaje","typeLabel":"string"}},"uniqueKey":"pac","typeLabel":"object"},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"message":{"type":"string","uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"required":["type","title","status","code","request_id"],"uniqueKey":"","typeLabel":"object"},"example":{"type":"https://errors.invoiceapi.mx/internal_error","title":"Internal server error","status":500,"code":"internal.error","detail":"An unexpected error occurred.","remediation":"Retry later; contact support with the request_id if it persists.","doc_url":"/docs/errors#internal-error","request_id":"req_2P9K3sample"},"examples":{"Example":{"title":"Example","value":{"type":"https://errors.invoiceapi.mx/internal_error","title":"Internal server error","status":500,"code":"internal.error","detail":"An unexpected error occurred.","remediation":"Retry later; contact support with the request_id if it persists.","doc_url":"/docs/errors#internal-error","request_id":"req_2P9K3sample"}}},"exampleType":"examples"}},"headers":{"Request-Id":{"description":"Unique id for this request. Also the `request_id` in every error body — log it and quote it to support; idempotency keys off it too.","schema":{"type":"string","example":"req_2P9K3sample"}},"Invoice-Version":{"description":"The dated API version resolved for this request (request header → key pin → current). Echoed on every response.","schema":{"type":"string","example":"2026-07-15"}},"traceparent":{"description":"W3C Trace Context. When you send a valid `traceparent`, the response continues the trace (same trace-id, a fresh span-id, sampled flag).","schema":{"type":"string","example":"00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01"}}},"exampleType":"examples"}},"security":{"e1ec91d2-3bec-4f58-a497-048f82e6106b":{"bearerAuth":{"type":"http","scheme":"bearer","description":"API key: `Authorization: Bearer sk_test_...` or `sk_live_...`.","scopes":[],"schemeName":"bearerAuth"}}},"servers":{"27cbbabf-b868-4dd7-9f42-82ed41e06a45":{"url":"https://api.newinvoice.dev","description":"Production"},"22831049-409c-435a-9033-cccf2eda1b9e":{"url":"http://localhost:3000","description":"Local development"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"API key: `Authorization: Bearer sk_test_...` or `sk_live_...`.","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"API key: `Authorization: Bearer sk_test_...` or `sk_live_...`.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"api-reference/openapi.json"},"subdomain":"invoiceapi","siteName":"Invoice API","title":"Request a constancia - Invoice API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-10T17:48:27.761Z","originalFileLocation":"api-reference/fiscal_documents/request-a-constancia.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=\"Request the taxpayer\u0026#x27;s constancia de situación fiscal as a PDF, using the SAT credential saved on the fiscal profile. Requires a verified, unexpired credential. Answers immediately with a pending resource; wait for the fiscal_document.ready webhook or poll GET. If a request for this profile is already in flight it is returned with 200 and no new SAT job starts. In live mode one constancia per RFC is free each calendar quarter (Mexico City time), and only a delivered PDF uses it; a further request gets 402 fiscal_document.free_quota_exceeded before anything is sent to SAT. Test-mode and sandbox profiles get a simulated PDF that is not a SAT document, and nothing leaves this API.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Invoice 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/invoiceapi/BFU6Hg8PMnpYZfzc/_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/invoiceapi/BFU6Hg8PMnpYZfzc/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/invoiceapi/BFU6Hg8PMnpYZfzc/_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/invoiceapi/BFU6Hg8PMnpYZfzc/_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/invoiceapi/BFU6Hg8PMnpYZfzc/_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/invoiceapi/BFU6Hg8PMnpYZfzc/_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/invoiceapi/BFU6Hg8PMnpYZfzc/_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/invoiceapi/BFU6Hg8PMnpYZfzc/_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/invoiceapi/BFU6Hg8PMnpYZfzc/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Request a constancia - Invoice API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Request the taxpayer\u0026#x27;s constancia de situación fiscal as a PDF, using the SAT credential saved on the fiscal profile. Requires a verified, unexpired credential. Answers immediately with a pending resource; wait for the fiscal_document.ready webhook or poll GET. If a request for this profile is already in flight it is returned with 200 and no new SAT job starts. In live mode one constancia per RFC is free each calendar quarter (Mexico City time), and only a delivered PDF uses it; a further request gets 402 fiscal_document.free_quota_exceeded before anything is sent to SAT. Test-mode and sandbox profiles get a simulated PDF that is not a SAT document, and nothing leaves this API.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Invoice API\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.newinvoice.dev/api-reference/fiscal_documents/request-a-constancia\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://invoiceapi.mintlify.site/_mintlify/api/og/v2?division=fiscal_documents\u0026amp;title=Request+a+constancia\u0026amp;description=Request+the+taxpayer%27s+constancia+de+situaci%C3%B3n+fiscal+as+a+PDF%2C+using+the+SAT+credential+saved+on+the+fiscal+profile.+Requires+a+%60verified%60%2C+unexpired+credentia\u0026amp;theme=55d6e0c1f80b6a9d3c7b0ddc\u0026amp;signature=0f61422172962712557c3709558da79ac6b082829a13017a6a18067d61d38541\">\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=\"Request a constancia - Invoice API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Request the taxpayer\u0026#x27;s constancia de situación fiscal as a PDF, using the SAT credential saved on the fiscal profile. Requires a verified, unexpired credential. Answers immediately with a pending resource; wait for the fiscal_document.ready webhook or poll GET. If a request for this profile is already in flight it is returned with 200 and no new SAT job starts. In live mode one constancia per RFC is free each calendar quarter (Mexico City time), and only a delivered PDF uses it; a further request gets 402 fiscal_document.free_quota_exceeded before anything is sent to SAT. Test-mode and sandbox profiles get a simulated PDF that is not a SAT document, and nothing leaves this API.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://invoiceapi.mintlify.site/_mintlify/api/og/v2?division=fiscal_documents\u0026amp;title=Request+a+constancia\u0026amp;description=Request+the+taxpayer%27s+constancia+de+situaci%C3%B3n+fiscal+as+a+PDF%2C+using+the+SAT+credential+saved+on+the+fiscal+profile.+Requires+a+%60verified%60%2C+unexpired+credentia\u0026amp;theme=55d6e0c1f80b6a9d3c7b0ddc\u0026amp;signature=0f61422172962712557c3709558da79ac6b082829a13017a6a18067d61d38541\">\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/invoiceapi/BFU6Hg8PMnpYZfzc/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Invoice API\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#16a34a\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.newinvoice.dev/api-reference/fiscal_documents/request-a-constancia\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/fiscal_documents/request-a-constancia.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.newinvoice.dev/#organization\",\"name\":\"Invoice API\",\"url\":\"https://docs.newinvoice.dev\"},{\"@type\":\"WebSite\",\"@id\":\"https://docs.newinvoice.dev#website\",\"name\":\"Invoice API\",\"url\":\"https://docs.newinvoice.dev\",\"publisher\":{\"@id\":\"https://docs.newinvoice.dev/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.newinvoice.dev/api-reference/fiscal_documents/request-a-constancia#webpage\",\"url\":\"https://docs.newinvoice.dev/api-reference/fiscal_documents/request-a-constancia\",\"name\":\"Request a constancia\",\"description\":\"Request the taxpayer's constancia de situación fiscal as a PDF, using the SAT credential saved on the fiscal profile. Requires a verified, unexpired credential. Answers immediately with a pending resource; wait for the fiscal_document.ready webhook or poll GET. If a request for this profile is already in flight it is returned with 200 and no new SAT job starts. In live mode one constancia per RFC is free each calendar quarter (Mexico City time), and only a delivered PDF uses it; a further request gets 402 fiscal_document.free_quota_exceeded before anything is sent to SAT. Test-mode and sandbox profiles get a simulated PDF that is not a SAT document, and nothing leaves this API.\",\"dateModified\":\"2026-11-10T17:48:27.761Z\",\"isPartOf\":{\"@id\":\"https://docs.newinvoice.dev#website\"},\"breadcrumb\":{\"@id\":\"https://docs.newinvoice.dev/api-reference/fiscal_documents/request-a-constancia#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.newinvoice.dev/api-reference/fiscal_documents/request-a-constancia#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"fiscal_documents\",\"item\":\"https://docs.newinvoice.dev/api-reference/fiscal_documents/list-fiscal-documents\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Request a constancia\",\"item\":\"https://docs.newinvoice.dev/api-reference/fiscal_documents/request-a-constancia\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.newinvoice.dev/api-reference/fiscal_documents/request-a-constancia#apireference\",\"headline\":\"Request a constancia\",\"name\":\"Request a constancia\",\"description\":\"Request the taxpayer's constancia de situación fiscal as a PDF, using the SAT credential saved on the fiscal profile. Requires a verified, unexpired credential. Answers immediately with a pending resource; wait for the fiscal_document.ready webhook or poll GET. If a request for this profile is already in flight it is returned with 200 and no new SAT job starts. In live mode one constancia per RFC is free each calendar quarter (Mexico City time), and only a delivered PDF uses it; a further request gets 402 fiscal_document.free_quota_exceeded before anything is sent to SAT. Test-mode and sandbox profiles get a simulated PDF that is not a SAT document, and nothing leaves this API.\",\"url\":\"https://docs.newinvoice.dev/api-reference/fiscal_documents/request-a-constancia\",\"mainEntityOfPage\":{\"@id\":\"https://docs.newinvoice.dev/api-reference/fiscal_documents/request-a-constancia#webpage\"},\"dateModified\":\"2026-11-10T17:48:27.761Z\",\"publisher\":{\"@id\":\"https://docs.newinvoice.dev/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.newinvoice.dev#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Invoice API\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Invoice API\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/api-reference/fiscal_documents/request-a-constancia.md","siteName":"Invoice API","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":""}]},{"tab":"API Reference","groups":[{"group":"API Reference","pages":[{"title":"Get ","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /","href":"/api-reference/get-"},{"title":"Get healthz","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /healthz","href":"/api-reference/get-healthz"},{"title":"Get health","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /health","href":"/api-reference/get-health"},{"title":"Get openapijson","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /openapi.json","href":"/api-reference/get-openapijson"},{"title":"Get llmstxt","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /llms.txt","href":"/api-reference/get-llmstxt"},{"title":"Get llms fulltxt","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /llms-full.txt","href":"/api-reference/get-llms-fulltxt"},{"title":"Get docserrors","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /docs/errors","href":"/api-reference/get-docserrors"}]},{"group":"docs","pages":[{"title":"Serve a how-to guide as markdown.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /docs/guides/{slug}","href":"/api-reference/docs/serve-a-how-to-guide-as-markdown"}]},{"group":"api_keys","pages":[{"title":"List API keys","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/api_keys","href":"/api-reference/api_keys/list-api-keys"},{"title":"Create an API key","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/api_keys","href":"/api-reference/api_keys/create-an-api-key"},{"title":"Revoke an API key","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /v1/api_keys/{id}","href":"/api-reference/api_keys/revoke-an-api-key"},{"title":"Update an API key","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /v1/api_keys/{id}","href":"/api-reference/api_keys/update-an-api-key"}]},{"group":"accounts","pages":[{"title":"List connected accounts","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/accounts","href":"/api-reference/accounts/list-connected-accounts"},{"title":"Create a connected account","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/accounts","href":"/api-reference/accounts/create-a-connected-account"},{"title":"Retrieve a connected account","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/accounts/{id}","href":"/api-reference/accounts/retrieve-a-connected-account"},{"title":"Offboard a connected account","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /v1/accounts/{id}","href":"/api-reference/accounts/offboard-a-connected-account"},{"title":"Update a connected account","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /v1/accounts/{id}","href":"/api-reference/accounts/update-a-connected-account"}]},{"group":"fiscal_profiles","pages":[{"title":"List fiscal profiles","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/fiscal_profiles","href":"/api-reference/fiscal_profiles/list-fiscal-profiles"},{"title":"Create a fiscal profile","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/fiscal_profiles","href":"/api-reference/fiscal_profiles/create-a-fiscal-profile"},{"title":"Retrieve a fiscal profile","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/fiscal_profiles/{id}","href":"/api-reference/fiscal_profiles/retrieve-a-fiscal-profile"},{"title":"Delete a fiscal profile","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /v1/fiscal_profiles/{id}","href":"/api-reference/fiscal_profiles/delete-a-fiscal-profile"},{"title":"Update a fiscal profile","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /v1/fiscal_profiles/{id}","href":"/api-reference/fiscal_profiles/update-a-fiscal-profile"},{"title":"Sign the carta manifiesto","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/fiscal_profiles/{id}/manifest","href":"/api-reference/fiscal_profiles/sign-the-carta-manifiesto"},{"title":"Enable automatic SAT synchronization","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/fiscal_profiles/{id}/sync","href":"/api-reference/fiscal_profiles/enable-automatic-sat-synchronization"},{"title":"Disable automatic SAT synchronization","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /v1/fiscal_profiles/{id}/sync","href":"/api-reference/fiscal_profiles/disable-automatic-sat-synchronization"},{"title":"Read a SAT credential status","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/fiscal_profiles/{id}/sat_credential","href":"/api-reference/fiscal_profiles/read-a-sat-credential-status"},{"title":"Save a SAT credential (CIEC or FIEL)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/fiscal_profiles/{id}/sat_credential","href":"/api-reference/fiscal_profiles/save-a-sat-credential-ciec-or-fiel"},{"title":"Revoke a SAT credential","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /v1/fiscal_profiles/{id}/sat_credential","href":"/api-reference/fiscal_profiles/revoke-a-sat-credential"}]},{"group":"invoices","pages":[{"title":"List invoices","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/invoices","href":"/api-reference/invoices/list-invoices"},{"title":"Create an invoice","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/invoices","href":"/api-reference/invoices/create-an-invoice"},{"title":"Stamp a draft invoice","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/invoices/{id}/stamp","href":"/api-reference/invoices/stamp-a-draft-invoice"},{"title":"Retrieve an invoice","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/invoices/{id}","href":"/api-reference/invoices/retrieve-an-invoice"},{"title":"Download the CFDI XML","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/invoices/{id}/xml","href":"/api-reference/invoices/download-the-cfdi-xml"},{"title":"Download the CFDI PDF","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/invoices/{id}/pdf","href":"/api-reference/invoices/download-the-cfdi-pdf"},{"title":"Cancel an invoice","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/invoices/{id}/cancel","href":"/api-reference/invoices/cancel-an-invoice"}]},{"group":"validations","pages":[{"title":"Validate a CFDI","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/validations","href":"/api-reference/validations/validate-a-cfdi"},{"title":"Retrieve a validation","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/validations/{id}","href":"/api-reference/validations/retrieve-a-validation"}]},{"group":"ticket_invoices","pages":[{"title":"List ticket invoices","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/ticket_invoices","href":"/api-reference/ticket_invoices/list-ticket-invoices"},{"title":"Self-invoice a ticket from a photo","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/ticket_invoices","href":"/api-reference/ticket_invoices/self-invoice-a-ticket-from-a-photo"},{"title":"Retrieve a ticket invoice","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/ticket_invoices/{id}","href":"/api-reference/ticket_invoices/retrieve-a-ticket-invoice"},{"title":"Download the CFDI XML","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/ticket_invoices/{id}/xml","href":"/api-reference/ticket_invoices/download-the-cfdi-xml"},{"title":"List learned portal recipes","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/portal_recipes","href":"/api-reference/ticket_invoices/list-learned-portal-recipes"}]},{"group":"downloads","pages":[{"title":"List massive downloads","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/downloads","href":"/api-reference/downloads/list-massive-downloads"},{"title":"Request a massive download","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/downloads","href":"/api-reference/downloads/request-a-massive-download"},{"title":"Retrieve a massive download","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/downloads/{id}","href":"/api-reference/downloads/retrieve-a-massive-download"},{"title":"List download packages","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/downloads/{id}/files","href":"/api-reference/downloads/list-download-packages"},{"title":"Download the delivery report","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/downloads/{id}/report","href":"/api-reference/downloads/download-the-delivery-report"},{"title":"Download a package","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/downloads/{id}/files/{seq}","href":"/api-reference/downloads/download-a-package"}]},{"group":"sat_documents","pages":[{"title":"List CFDIs the SAT has on file","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/sat_documents","href":"/api-reference/sat_documents/list-cfdis-the-sat-has-on-file"}]},{"group":"fiscal_documents","pages":[{"title":"List fiscal documents","description":"List your fiscal documents newest-first with cursor pagination.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/fiscal_documents","href":"/api-reference/fiscal_documents/list-fiscal-documents"},{"title":"Request a constancia","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/fiscal_documents","href":"/api-reference/fiscal_documents/request-a-constancia"},{"title":"Retrieve a fiscal document","description":"Fetch one fiscal document by id to check its status.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/fiscal_documents/{id}","href":"/api-reference/fiscal_documents/retrieve-a-fiscal-document"},{"title":"Download the PDF","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/fiscal_documents/{id}/pdf","href":"/api-reference/fiscal_documents/download-the-pdf"}]},{"group":"webhook_endpoints","pages":[{"title":"List webhook endpoints","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/webhook_endpoints","href":"/api-reference/webhook_endpoints/list-webhook-endpoints"},{"title":"Create a webhook endpoint","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/webhook_endpoints","href":"/api-reference/webhook_endpoints/create-a-webhook-endpoint"},{"title":"List webhook deliveries","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/webhook_endpoints/{id}/deliveries","href":"/api-reference/webhook_endpoints/list-webhook-deliveries"},{"title":"Retrieve a webhook endpoint","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/webhook_endpoints/{id}","href":"/api-reference/webhook_endpoints/retrieve-a-webhook-endpoint"},{"title":"Delete a webhook endpoint","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /v1/webhook_endpoints/{id}","href":"/api-reference/webhook_endpoints/delete-a-webhook-endpoint"},{"title":"Update a webhook endpoint","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /v1/webhook_endpoints/{id}","href":"/api-reference/webhook_endpoints/update-a-webhook-endpoint"}]},{"group":"events","pages":[{"title":"List events","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/events","href":"/api-reference/events/list-events"},{"title":"Retrieve an event","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/events/{id}","href":"/api-reference/events/retrieve-an-event"},{"title":"Resend an event","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/events/{id}/resend","href":"/api-reference/events/resend-an-event"}]},{"group":"balance","pages":[{"title":"Retrieve the stamping balance","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/balance","href":"/api-reference/balance/retrieve-the-stamping-balance"}]},{"group":"billing","pages":[{"title":"Get subscription and usage state","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/billing","href":"/api-reference/billing/get-subscription-and-usage-state"},{"title":"Start a subscription checkout","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/billing/checkout_sessions","href":"/api-reference/billing/start-a-subscription-checkout"},{"title":"Open the billing portal","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/billing/portal_sessions","href":"/api-reference/billing/open-the-billing-portal"}]},{"group":"usage","pages":[{"title":"List usage records","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/usage","href":"/api-reference/usage/list-usage-records"}]},{"group":"catalogs","pages":[{"title":"List SAT catalogs","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/catalogs","href":"/api-reference/catalogs/list-sat-catalogs"},{"title":"Retrieve a SAT catalog","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/catalogs/{catalog}","href":"/api-reference/catalogs/retrieve-a-sat-catalog"}]},{"group":"versions","pages":[{"title":"List every dated API version and how to pin one (public, no auth).","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/versions","href":"/api-reference/versions/list-every-dated-api-version-and-how-to-pin-one-public-no-auth"}]}]}]},"basePath":"","title":"Request a constancia - Invoice API","buildId":"dpl_596ePT575z4qnAFksq1biRW97aLY","deploymentId":"dpl_596ePT575z4qnAFksq1biRW97aLY","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-C9Wu0MeN.js","utils-jWgu-6Qf.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DBD8f9qn.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-BGuX1ui5.js","snippetPresets-Evy63nQB.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BQHO1lnV.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-B6C8m-t_.js","shallow-BG4cT0fH.js","getApiPlaygroundDisplay-CgEPrE-D.js","CodeSnippet-CU8JyZ9N.js","CodeSnippets-BnxHU32T.js","Page-D6S0Yh6q.js","getPastedJson-CwiYOonh.js","icon-DYDpWmDf.js","MethodPill-C-J-l7_c.js","DuplicateIcon-B6ARwg9w.js","createIcon-Dsv4MtDq.js","DynamicMarkdown-CtasenyM.js","SectionHeading-YNcgYwjB.js","axios-vUo_bRtp.js","Markdown-CwLx6PAg.js","clsx-C3kuh_dz.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CmKHfscc.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-U3mI6Ljh.js"]}