Se puede con API key desde la 5.33, si la key tiene taxpayer:write y no está restringida a contribuyentes puntuales. Una key restringida recibe 403: si pudiera crear, el contribuyente nuevo quedaría fuera de su lista y podría operarlo igual, escapándose de su propia restricción.
El organizationId del cuerpo lo usa sólo una sesión de panel. Con API key se ignora: la key opera en su organización y no la elige un parámetro.
La respuesta trae datosDelPapel.faltantes con lo que todavía falta para poder imprimir un comprobante completo.
El alta fija el producto del contribuyente: el de la key, si está atada a uno, o el de X-Emissa-Producto. La edición no lo cambia.
Scope de API key:taxpayer:write. Una key sin ese scope recibe 403 API_KEY_INSUFFICIENT_SCOPE, aunque el rol de quien la creó lo permita: el permiso efectivo es la intersección de los dos.
El producto que origina el pedido (inmos, por ejemplo). Opcional, sólo con API key. Formato ^[a-z0-9-]{1,32}$; otro valor da 400 INVALID_INPUT. Queda en el comprobante, en el consumo y en el registro de pedidos.
Con una key sin producto es sólo atribución: no autoriza ni restringe nada. Con una key atada a un producto el pedido se etiqueta con el de la key aunque no mandes la cabecera, y si mandás otro valor la respuesta es 403 API_KEY_PRODUCTO_DISTINTO.
CUIT con dígito verificador: se valida por módulo 11, no sólo el largo. Un CUIT mal tipeado que pase la validación no se descubre hasta que ARCA rechaza el comprobante, con el número ya consumido.
Ambiente de ARCA. PRODUCCION emite comprobantes fiscales reales con CAE real desde la 5.10: entran en los registros del contribuyente, pesan en su declaración y no se borran — se revierten con una nota de crédito. Para probar está HOMOLOGACION, que también emite con CAE real del organismo y no tiene consecuencia fiscal.
Los dos ambientes son conjuntos disjuntos de claves: una API key test contra un contribuyente de PRODUCCION se rechaza con 403.
Sólo aplica al alta; si no viene se usa la organización propia. En la edición la organización sale del contribuyente y no se puede mover de tenant por este endpoint.
Razón social, como figura en ARCA. Va impresa en cada comprobante, así que una diferencia con el padrón se ve en el papel.
Opcional desde la 5.13: si no lo mandás se completa desde el padrón de ARCA. Lo que mandés gana siempre — el padrón sólo llena lo que falta. Si no se pudo consultar y hace falta, la respuesta es un 400 que dice por qué.
Condición del emisor frente al IVA. Es lo que decide qué letra de comprobante puede emitir. Consumidor Final se acepta sólo para no dejar sin editar a quien ya lo tiene cargado: al emitir se rechaza.
Opcional desde la 5.13: si no lo mandás se completa desde el padrón de ARCA. Lo que mandés gana. Consumidor Final no se completa nunca solo: quien no emite comprobantes no puede deducirse del padrón.
El punto de venta habilitado en ARCA para esta identidad fiscal. Es un número corto que ARCA asigna y que numera los comprobantes de forma independiente: el 0001 y el 0002 llevan cada uno su propia serie. Tiene que estar dado de alta en ARCA para el ambiente de environment, y el de homologación no sirve en producción.
Los productos de define-it a los que pertenece este contribuyente, o [] si no tiene ninguno. Un contribuyente puede ser de varios: el mismo CUIT lo factura más de un producto. Lo crea el alta —con el producto de la key o, si la key no tiene, el de X-Emissa-Producto— y no cambia por API: sumar o quitar productos lo hace el dueño de la cuenta desde el panel. Una key atada a un producto alcanza a los contribuyentes cuyo productosincluye el suyo.
Deprecado: usá productos. Es el primero de productos, o null si no tiene ninguno. Se mantiene un tiempo para el cliente que ya lo leía; con más de un producto, no dice cuáles son los demás.
Qué falta para que el comprobante impreso cumpla la RG 1415. No bloquea la emisión: sirve para avisar antes de que el contador lo note.
Show child attributes
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Emissa","description":"Infraestructura de emisión de comprobantes electrónicos ARCA.","colors":{"primary":"#0c0cc8","light":"#f6f6f9","dark":"#0c0cc8"},"logo":{"light":"https://mintcdn.com/emissa/54zD7qivv8TCTuUU/images/marca/navigation-positive-on-white.svg?fit=max\u0026auto=format\u0026n=54zD7qivv8TCTuUU\u0026q=85\u0026s=31720f0a4e045e64fd37cff5a02df0d4","dark":"https://mintcdn.com/emissa/54zD7qivv8TCTuUU/images/marca/navigation-inverse-on-blue.svg?fit=max\u0026auto=format\u0026n=54zD7qivv8TCTuUU\u0026q=85\u0026s=94c73488d90524c9d870ce2e88cc0f09","href":"https://www.emissa.com.ar"},"favicon":"https://mintcdn.com/emissa/54zD7qivv8TCTuUU/images/marca/isotipo-small-positive.svg?fit=max\u0026auto=format\u0026n=54zD7qivv8TCTuUU\u0026q=85\u0026s=a94dd93de76510c2799744fe81825e31","appearance":{"default":"light","strict":false},"navbar":{"links":[{"href":"https://www.emissa.com.ar/panel","label":"Panel"}],"primary":{"type":"button","label":"Empezar gratis","href":"https://www.emissa.com.ar/register"}},"footer":{"socials":{"website":"https://www.emissa.com.ar"}},"search":{"prompt":"Buscar en la documentación…"},"contextual":{"options":["copy","view"],"display":"header"},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"emissa","hasAudioNarration":false,"actualSubdomain":"emissa","customDomains":["www.emissa.com.ar"],"gitSource":{"type":"github","owner":"defineit-ar","repo":"emissa","deployBranch":"master","contentDirectory":"apps/web/src/content","isPrivate":true,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6ad7da6b81a20d9693c12bb3","collectionId":"6fe54883-a619-4bdc-8c5e-d410543096e4","liveDeploymentHistoryId":"6ad7da6b81a20d9693c12bb3","schemaVersion":"v3"},"entitlements":{"AI_CHAT":{"status":"DISABLED"},"WEB_MCP":{"status":"DISABLED"},"NARRATION":{"status":"DISABLED"}},"buildId":"6ad7da6b81a20d9693c12bb3","clientVersion":"0.0.4044","searchFilterCounts":[{"language":"default","tag":"Referencia de la API","count":20},{"language":"default","tag":"Guías","count":14},{"language":"default","tag":"Comprobantes","count":8},{"language":"default","tag":"Contribuyentes","count":7},{"language":"default","tag":"Empezar","count":5},{"language":"default","tag":"Integrar","count":4},{"language":"default","tag":"Credenciales ARCA","count":3},{"language":"default","tag":"Planes y cobro","count":2},{"language":"default","tag":"Referencia de consulta","count":2},{"language":"default","tag":"Usar el panel","count":1}],"searchSettings":{"showContentSnippets":true,"isFiltersEnabled":true}},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"/docs","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"privacy":{"consentBanner":{"enabled":true}},"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"#navbar>div,div:has(>#sidebar){max-width:none}#content,#header{max-width:1100px}.dgm{margin:1.75rem 0;width:100%}.dgm img{border-radius:14px;height:auto;width:100%}.dgm-cap{color:#5a6072;font-size:.8125rem;line-height:1.45;margin:.75rem 0 0;text-align:center}.dgm img.dgm-claro{display:block}.dark .dgm img.dgm-claro,.dgm img.dgm-oscuro{display:none}.dark .dgm-cap{color:#9aa0b0}.dark .dgm img.dgm-oscuro{display:block}"}],"page":{"pagePath":"api-reference/contribuyentes/alta-o-edición-de-un-contribuyente","slug":"/api-reference/contribuyentes/alta-o-edición-de-un-contribuyente","pageMetadata":{"title":"Alta o edición de un contribuyente","description":"Con `id` edita; sin `id` da de alta.\n\n**Se puede con API key desde la 5.33**, si la key tiene `taxpayer:write` y **no** está restringida a contribuyentes puntuales. Una key restringida recibe 403: si pudiera crear, el contribuyente nuevo quedaría fuera de su lista y podría operarlo igual, escapándose de su propia restricción.\n\nEl `organizationId` del cuerpo lo usa sólo una sesión de panel. Con API key **se ignora**: la key opera en su organización y no la elige un parámetro.\n\nLa respuesta trae `datosDelPapel.faltantes` con lo que todavía falta para poder imprimir un comprobante completo.\n\n**El alta fija el `producto` del contribuyente**: el de la key, si está atada a uno, o el de `X-Emissa-Producto`. La edición no lo cambia.\n\n**Scope de API key:** `taxpayer:write`. Una key sin ese scope recibe `403 API_KEY_INSUFFICIENT_SCOPE`, aunque el rol de quien la creó lo permita: el permiso efectivo es la **intersección** de los dos.","deprecated":null,"version":null,"openapi":"https://api.emissa.com.ar/openapi.json post /v1/taxpayers","href":"/api-reference/contribuyentes/alta-o-edición-de-un-contribuyente","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n strong: \"strong\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Con \", _jsx(_components.code, {\n children: \"id\"\n }), \" edita; sin \", _jsx(_components.code, {\n children: \"id\"\n }), \" da de alta.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Se puede con API key desde la 5.33\"\n }), \", si la key tiene \", _jsx(_components.code, {\n children: \"taxpayer:write\"\n }), \" y \", _jsx(_components.strong, {\n children: \"no\"\n }), \" está restringida a contribuyentes puntuales. Una key restringida recibe 403: si pudiera crear, el contribuyente nuevo quedaría fuera de su lista y podría operarlo igual, escapándose de su propia restricción.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"El \", _jsx(_components.code, {\n children: \"organizationId\"\n }), \" del cuerpo lo usa sólo una sesión de panel. Con API key \", _jsx(_components.strong, {\n children: \"se ignora\"\n }), \": la key opera en su organización y no la elige un parámetro.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"La respuesta trae \", _jsx(_components.code, {\n children: \"datosDelPapel.faltantes\"\n }), \" con lo que todavía falta para poder imprimir un comprobante completo.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsxs(_components.strong, {\n children: [\"El alta fija el \", _jsx(_components.code, {\n children: \"producto\"\n }), \" del contribuyente\"]\n }), \": el de la key, si está atada a uno, o el de \", _jsx(_components.code, {\n children: \"X-Emissa-Producto\"\n }), \". La edición no lo cambia.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Scope de API key:\"\n }), \" \", _jsx(_components.code, {\n children: \"taxpayer:write\"\n }), \". Una key sin ese scope recibe \", _jsx(_components.code, {\n children: \"403 API_KEY_INSUFFICIENT_SCOPE\"\n }), \", aunque el rol de quien la creó lo permita: el permiso efectivo es la \", _jsx(_components.strong, {\n children: \"intersección\"\n }), \" de los dos.\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Alta o edición de un contribuyente","description":"Con `id` edita; sin `id` da de alta.\n\n**Se puede con API key desde la 5.33**, si la key tiene `taxpayer:write` y **no** está restringida a contribuyentes puntuales. Una key restringida recibe 403: si pudiera crear, el contribuyente nuevo quedaría fuera de su lista y podría operarlo igual, escapándose de su propia restricción.\n\nEl `organizationId` del cuerpo lo usa sólo una sesión de panel. Con API key **se ignora**: la key opera en su organización y no la elige un parámetro.\n\nLa respuesta trae `datosDelPapel.faltantes` con lo que todavía falta para poder imprimir un comprobante completo.\n\n**El alta fija el `producto` del contribuyente**: el de la key, si está atada a uno, o el de `X-Emissa-Producto`. La edición no lo cambia.\n\n**Scope de API key:** `taxpayer:write`. Una key sin ese scope recibe `403 API_KEY_INSUFFICIENT_SCOPE`, aunque el rol de quien la creó lo permita: el permiso efectivo es la **intersección** de los dos.","deprecated":null,"version":null,"openapi":"https://api.emissa.com.ar/openapi.json post /v1/taxpayers","href":"/api-reference/contribuyentes/alta-o-edición-de-un-contribuyente","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"description":"Con `id` edita; sin `id` da de alta.\n\n**Se puede con API key desde la 5.33**, si la key tiene `taxpayer:write` y **no** está restringida a contribuyentes puntuales. Una key restringida recibe 403: si pudiera crear, el contribuyente nuevo quedaría fuera de su lista y podría operarlo igual, escapándose de su propia restricción.\n\nEl `organizationId` del cuerpo lo usa sólo una sesión de panel. Con API key **se ignora**: la key opera en su organización y no la elige un parámetro.\n\nLa respuesta trae `datosDelPapel.faltantes` con lo que todavía falta para poder imprimir un comprobante completo.\n\n**El alta fija el `producto` del contribuyente**: el de la key, si está atada a uno, o el de `X-Emissa-Producto`. La edición no lo cambia.\n\n**Scope de API key:** `taxpayer:write`. Una key sin ese scope recibe `403 API_KEY_INSUFFICIENT_SCOPE`, aunque el rol de quien la creó lo permita: el permiso efectivo es la **intersección** de los dos.","operationId":"TaxpayersController_upsert","parameters":["b0c5e4d2-54d7-4993-92d5-8cc41728831d"],"requestBody":"5af41fe0-0d58-4120-a131-98b0a0526f01","responses":{"201":"69801818-ef2e-481d-becb-d8135ddc1706","400":"b998fda7-38a0-4514-b093-6bca44bb89df","401":"553c0668-0a02-419a-9052-dee423f159d0","403":"50e87a03-9e77-4a1b-9596-f51742345ae7","409":"d1fd7a27-33e9-4299-b74b-b149a26a04a9","429":"17b492d8-46f7-44be-9eb5-12b5cc8114a0","500":"e6e45eec-199c-4dcb-bfa2-fcd1defcb535"},"security":["f3e0cfdb-097c-4e53-83fe-db1ed76b56a1","3c93fc46-48f1-4c98-a592-c20a47ad1091"],"summary":"Alta o edición de un contribuyente","tags":["Contribuyentes"],"x-scopes":["taxpayer:write"],"method":"post","type":"path","servers":["4c3ac454-1611-42e6-9972-fdce75c66d95","59c0321e-fc8e-4fd2-8484-7481e01419e1"],"path":"/v1/taxpayers","baseUrlOptions":["https://api.emissa.com.ar","http://localhost:3001"],"title":"Alta o edición de un contribuyente","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"b0c5e4d2-54d7-4993-92d5-8cc41728831d":{"name":"X-Emissa-Producto","in":"header","description":"El producto que origina el pedido (`inmos`, por ejemplo). Opcional, sólo con API key. Formato `^[a-z0-9-]{1,32}$`; otro valor da `400 INVALID_INPUT`. Queda en el comprobante, en el consumo y en el registro de pedidos.\n\nCon una key **sin** producto es sólo atribución: no autoriza ni restringe nada. Con una key **atada a un producto** el pedido se etiqueta con el de la key aunque no mandes la cabecera, y si mandás otro valor la respuesta es `403 API_KEY_PRODUCTO_DISTINTO`.","required":false,"schema":{"type":"string","pattern":"^[a-z0-9-]{1,32}$","example":"inmos","isRequired":false,"description":"El producto que origina el pedido (`inmos`, por ejemplo). Opcional, sólo con API key. Formato `^[a-z0-9-]{1,32}$`; otro valor da `400 INVALID_INPUT`. Queda en el comprobante, en el consumo y en el registro de pedidos.\n\nCon una key **sin** producto es sólo atribución: no autoriza ni restringe nada. Con una key **atada a un producto** el pedido se etiqueta con el de la key aunque no mandes la cabecera, y si mandás otro valor la respuesta es `403 API_KEY_PRODUCTO_DISTINTO`.","uniqueKey":"","typeLabel":"string"}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"cuit":{"type":"string","example":"20437136697","description":"CUIT con dígito verificador: se valida por módulo 11, no sólo el largo. Un CUIT mal tipeado que pase la validación no se descubre hasta que ARCA rechaza el comprobante, con el número ya consumido.","isRequired":true,"uniqueKey":"cuit","typeLabel":"string"},"salePoint":{"type":"number","minimum":1,"maximum":99999,"example":1,"description":"Punto de venta habilitado en ARCA para este CUIT.","isRequired":true,"uniqueKey":"salePoint","typeLabel":"number"},"environment":{"type":"string","enum":["HOMOLOGACION","PRODUCCION"],"example":"HOMOLOGACION","description":"Ambiente de ARCA. **`PRODUCCION` emite comprobantes fiscales reales con CAE real** desde la 5.10: entran en los registros del contribuyente, pesan en su declaración y no se borran — se revierten con una nota de crédito. Para probar está `HOMOLOGACION`, que también emite con CAE real del organismo y no tiene consecuencia fiscal.\n\nLos dos ambientes son conjuntos **disjuntos** de claves: una API key `test` contra un contribuyente de `PRODUCCION` se rechaza con 403.","isRequired":true,"uniqueKey":"environment","typeLabel":"enum\u003cstring>"},"id":{"type":"string","description":"Presente = edición, ausente = alta.","uniqueKey":"id","typeLabel":"string"},"organizationId":{"type":"string","description":"Sólo aplica al alta; si no viene se usa la organización propia. En la edición la organización sale del contribuyente y **no** se puede mover de tenant por este endpoint.","uniqueKey":"organizationId","typeLabel":"string"},"legalName":{"type":"string","example":"Estudio Contable SRL","description":"Razón social, **como figura en ARCA**. Va impresa en cada comprobante, así que una diferencia con el padrón se ve en el papel.\n\n**Opcional desde la 5.13: si no lo mandás se completa desde el padrón** de ARCA. Lo que mandés gana siempre — el padrón sólo llena lo que falta. Si no se pudo consultar y hace falta, la respuesta es un 400 que dice por qué.","uniqueKey":"legalName","typeLabel":"string"},"vatStatus":{"type":"string","enum":["Responsable Inscripto","Monotributista","Exento","Consumidor Final"],"example":"Responsable Inscripto","description":"Condición del **emisor** frente al IVA. Es lo que decide qué letra de comprobante puede emitir. `Consumidor Final` se acepta sólo para no dejar sin editar a quien ya lo tiene cargado: al emitir se rechaza.\n\n**Opcional desde la 5.13: si no lo mandás se completa desde el padrón** de ARCA. Lo que mandés gana. `Consumidor Final` no se completa nunca solo: quien no emite comprobantes no puede deducirse del padrón.","uniqueKey":"vatStatus","typeLabel":"enum\u003cstring>"},"commercialAddress":{"type":"string","maxLength":255,"example":"Av. Corrientes 1234, CABA","description":"Domicilio comercial. **Obligatorio en el papel**, opcional acá: ver `datosDelPapel.faltantes` en la respuesta.","uniqueKey":"commercialAddress","typeLabel":"string"},"grossIncomeTax":{"type":"string","maxLength":64,"example":"901-123456-01","description":"Ingresos Brutos. Texto libre porque el formato real varía: número local, Convenio Multilateral con guiones, o `Exento`.","uniqueKey":"grossIncomeTax","typeLabel":"string"},"activityStartDate":{"type":"string","format":"date","example":"2020-03-01","description":"Inicio de actividades. No puede ser futura **según el día argentino**, no según el reloj del servidor.","uniqueKey":"activityStartDate","typeLabel":"string\u003cdate>"}},"required":["cuit","salePoint","environment"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"cuit":"20437136697","salePoint":1,"environment":"HOMOLOGACION","id":"\u003cstring>","organizationId":"\u003cstring>","legalName":"Estudio Contable SRL","vatStatus":"Responsable Inscripto","commercialAddress":"Av. Corrientes 1234, CABA","grossIncomeTax":"901-123456-01","activityStartDate":"2020-03-01"}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"69801818-ef2e-481d-becb-d8135ddc1706":{"description":"El contribuyente, con el estado de sus datos del papel.","headers":{"X-Request-Id":{"description":"Identificador del pedido. Va en TODA respuesta. Si lo mandás en el pedido y respeta `[A-Za-z0-9._:-]{1,128}`, se te devuelve el mismo; si no, se genera uno. Es lo que hay que citar en un ticket.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","example":"cms5182yf00gxurgsa7fzew8p","description":"Id del contribuyente. Es lo que se manda como `taxpayerId` al emitir.","isRequired":true,"uniqueKey":"id","typeLabel":"string"},"organizationId":{"type":"string","example":"cms5182yf00gxurgsa7fzew8q","description":"La organización a la que pertenece. Un contribuyente vive en una sola, y una organización puede tener varios CUIT.","isRequired":true,"uniqueKey":"organizationId","typeLabel":"string"},"createdByUserId":{"oneOf":[{"type":"string","description":"Quién lo dio de alta. `null` en los que se crearon antes de que se registrara el dato.","isRequired":true,"uniqueKey":"createdByUserId.oneOf.0","typeLabel":"string"},{"type":"null","description":"Quién lo dio de alta. `null` en los que se crearon antes de que se registrara el dato.","isRequired":true,"uniqueKey":"createdByUserId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"createdByUserId","typeLabel":"string | null"},"cuit":{"type":"string","example":"20437136697","description":"El CUIT bajo el que se emite, sin guiones. **Tiene que coincidir con el del certificado de ARCA** o la carga de credenciales se rechaza.","isRequired":true,"uniqueKey":"cuit","typeLabel":"string"},"legalName":{"type":"string","example":"Estudio Contable SRL","description":"Razón social, como va impresa en el comprobante.","isRequired":true,"uniqueKey":"legalName","typeLabel":"string"},"vatStatus":{"type":"string","example":"Responsable Inscripto","description":"Condición del emisor frente al IVA. Junto con la del receptor decide qué letra de comprobante corresponde.","isRequired":true,"uniqueKey":"vatStatus","typeLabel":"string"},"salePoint":{"type":"number","example":1,"description":"El **punto de venta** habilitado en ARCA para esta identidad fiscal. Es un número corto que ARCA asigna y que numera los comprobantes de forma independiente: el 0001 y el 0002 llevan cada uno su propia serie. Tiene que estar dado de alta en ARCA para el ambiente de `environment`, y el de homologación no sirve en producción.","isRequired":true,"uniqueKey":"salePoint","typeLabel":"number"},"environment":{"type":"string","example":"HOMOLOGACION","enum":["HOMOLOGACION","PRODUCCION"],"description":"Contra qué ambiente de ARCA se emite. **La emisión en `PRODUCCION` está deshabilitada en esta versión.**","isRequired":true,"uniqueKey":"environment","typeLabel":"enum\u003cstring>"},"productos":{"example":["inmos","define"],"description":"Los productos de define-it a los que pertenece este contribuyente, o `[]` si no tiene ninguno. **Un contribuyente puede ser de varios**: el mismo CUIT lo factura más de un producto. **Lo crea el alta** —con el producto de la key o, si la key no tiene, el de `X-Emissa-Producto`— y **no cambia por API**: sumar o quitar productos lo hace el dueño de la cuenta desde el panel. Una key atada a un producto alcanza a los contribuyentes cuyo `productos` **incluye** el suyo.","type":"array","items":{"type":"string","uniqueKey":"productos.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"productos","typeLabel":"string[]"},"producto":{"oneOf":[{"type":"string","deprecated":true,"example":"inmos","description":"**Deprecado: usá `productos`.** Es el primero de `productos`, o `null` si no tiene ninguno. Se mantiene un tiempo para el cliente que ya lo leía; con más de un producto, no dice cuáles son los demás.","isRequired":true,"uniqueKey":"producto.oneOf.0","typeLabel":"string"},{"type":"null","deprecated":true,"example":"inmos","description":"**Deprecado: usá `productos`.** Es el primero de `productos`, o `null` si no tiene ninguno. Se mantiene un tiempo para el cliente que ya lo leía; con más de un producto, no dice cuáles son los demás.","isRequired":true,"uniqueKey":"producto.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"producto","typeLabel":"string | null"},"status":{"type":"string","example":"PENDING","description":"Titularidad del CUIT. Queda en `PENDING` hasta que se cargue un certificado de ARCA emitido a ese mismo CUIT.","isRequired":true,"uniqueKey":"status","typeLabel":"string"},"hasCredential":{"type":"boolean","example":false,"description":"Si hay una credencial activa **para el ambiente de `environment`**. Tener una de homologación no lo pone en `true` si el contribuyente está en producción.","isRequired":true,"uniqueKey":"hasCredential","typeLabel":"boolean"},"commercialAddress":{"oneOf":[{"type":"string","example":"Av. Corrientes 1234, CABA","description":"Domicilio comercial. Va impreso en el comprobante.","isRequired":true,"uniqueKey":"commercialAddress.oneOf.0","typeLabel":"string"},{"type":"null","example":"Av. Corrientes 1234, CABA","description":"Domicilio comercial. Va impreso en el comprobante.","isRequired":true,"uniqueKey":"commercialAddress.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"commercialAddress","typeLabel":"string | null"},"grossIncomeTax":{"oneOf":[{"type":"string","example":"901-123456-01","description":"Ingresos Brutos. Obligatorio en el papel (RG 1415).","isRequired":true,"uniqueKey":"grossIncomeTax.oneOf.0","typeLabel":"string"},{"type":"null","example":"901-123456-01","description":"Ingresos Brutos. Obligatorio en el papel (RG 1415).","isRequired":true,"uniqueKey":"grossIncomeTax.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"grossIncomeTax","typeLabel":"string | null"},"activityStartDate":{"oneOf":[{"type":"string","example":"2020-03-01","description":"Inicio de actividades, `YYYY-MM-DD`. Va impreso.","isRequired":true,"uniqueKey":"activityStartDate.oneOf.0","typeLabel":"string"},{"type":"null","example":"2020-03-01","description":"Inicio de actividades, `YYYY-MM-DD`. Va impreso.","isRequired":true,"uniqueKey":"activityStartDate.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"activityStartDate","typeLabel":"string | null"},"datosDelPapel":{"type":"object","description":"Qué falta para que el comprobante impreso cumpla la RG 1415. **No bloquea la emisión**: sirve para avisar antes de que el contador lo note.","required":["completo","faltantes"],"properties":{"completo":{"type":"boolean","example":false,"description":"Si están los tres datos que la RG 1415 exige en el comprobante impreso. En `false` se puede emitir igual, pero el PDF sale incompleto.","isRequired":true,"uniqueKey":"datosDelPapel.completo","typeLabel":"boolean"},"faltantes":{"example":["grossIncomeTax","activityStartDate"],"description":"Qué falta, con el nombre del campo tal como se manda al darlo de alta. Vacío cuando `completo` es `true`.","type":"array","items":{"type":"string","uniqueKey":"datosDelPapel.faltantes.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"datosDelPapel.faltantes","typeLabel":"string[]"}},"isRequired":true,"uniqueKey":"datosDelPapel","typeLabel":"object"}},"required":["id","organizationId","createdByUserId","cuit","legalName","vatStatus","salePoint","environment","productos","producto","status","hasCredential","commercialAddress","grossIncomeTax","activityStartDate","datosDelPapel"],"uniqueKey":"","typeLabel":"object"},"example":{"id":"cmt42x6jb000curi4sz1gyeij","organizationId":"cmt42x67e0003uri4u2ii1i7o","createdByUserId":"cmt42x67e0001uri4dpdgmvu0","cuit":"20000000001","legalName":"Estudio Contable SRL","vatStatus":"Responsable Inscripto","salePoint":1,"environment":"HOMOLOGACION","productos":[],"producto":null,"status":"PENDING","hasCredential":false,"commercialAddress":"Av. Corrientes 1234, CABA","grossIncomeTax":"901-123456-01","activityStartDate":"2020-03-01","datosDelPapel":{"completo":true,"faltantes":[]}},"examples":{"Example":{"title":"Example","value":{"id":"cmt42x6jb000curi4sz1gyeij","organizationId":"cmt42x67e0003uri4u2ii1i7o","createdByUserId":"cmt42x67e0001uri4dpdgmvu0","cuit":"20000000001","legalName":"Estudio Contable SRL","vatStatus":"Responsable Inscripto","salePoint":1,"environment":"HOMOLOGACION","productos":[],"producto":null,"status":"PENDING","hasCredential":false,"commercialAddress":"Av. Corrientes 1234, CABA","grossIncomeTax":"901-123456-01","activityStartDate":"2020-03-01","datosDelPapel":{"completo":true,"faltantes":[]}}}},"exampleType":"examples"}},"exampleType":"examples"},"b998fda7-38a0-4514-b093-6bca44bb89df":{"description":"Pedido mal formado o inválido.\n\n`errorCode`: `INVALID_INPUT`","content":{"application/json":{"schema":{"type":"object","required":["statusCode","errorCode","message","timestamp","path"],"properties":{"statusCode":{"type":"number","example":401,"description":"El mismo código HTTP de la respuesta. Va repetido en el cuerpo para que un cliente que sólo loguea el JSON no pierda el dato.","isRequired":true,"uniqueKey":"statusCode","typeLabel":"number"},"errorCode":{"type":"string","description":"Siempre una entrada del catálogo de errores. Es el campo por el que se ramifica.","enum":["INVALID_INPUT"],"example":"UNAUTHORIZED","isRequired":true,"uniqueKey":"errorCode","typeLabel":"enum\u003cstring>"},"message":{"type":"string","example":"No autorizado","description":"**Siempre un string**, nunca un arreglo.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"timestamp":{"type":"string","example":"2026-07-26T18:30:00.000Z","description":"Cuándo falló, en UTC. Sirve para ubicarlo en los logs.","isRequired":true,"uniqueKey":"timestamp","typeLabel":"string"},"path":{"type":"string","example":"/v1/invoices/authorize","description":"La ruta que se pidió, sin el host ni la query.","isRequired":true,"uniqueKey":"path","typeLabel":"string"},"details":{"oneOf":[{"type":"string","description":"Detalle adicional. Lo contractual viaja siempre; lo de diagnóstico **no viaja en producción**. No ramifiques por este campo.","uniqueKey":"details.oneOf.0","typeLabel":"string"},{"type":"object","description":"Detalle adicional. Lo contractual viaja siempre; lo de diagnóstico **no viaja en producción**. No ramifiques por este campo.","additionalProperties":true,"uniqueKey":"details.oneOf.1","typeLabel":"object"}],"uniqueKey":"details","typeLabel":"string | object"},"retryable":{"type":"boolean","example":false,"description":"**¿Tiene sentido reintentar?** Si viene, le gana a cualquier heurística basada en el status.\n\nExiste porque el status no alcanza: `ARCA_TICKET_ALREADY_ISSUED` es un 409 que **se resuelve esperando**, y `ARCA_COMPUTER_NOT_AUTHORIZED` es un 502 que **no se arregla nunca esperando** — hay que autorizar el certificado en ARCA. Un cliente que ramifique sólo por 4xx/5xx acierta al revés en los dos.\n\n**Ausente significa \"no lo sabemos\"**, y es distinto de `false`: ahí corresponde la heurística de siempre. Sólo se declara donde la respuesta es certera.","uniqueKey":"retryable","typeLabel":"boolean"},"retryAfterSeconds":{"type":"number","example":43200,"description":"Cuántos segundos esperar antes de reintentar. **Sólo cuando el número es real** —el vencimiento de un ticket, la ventana de un límite—, nunca una estimación.\n\nEl 429 y el bloqueo del segundo factor ya lo mandaban como `details.reintentarEnSegundos`, en castellano y anidado. Sigue ahí para no romper a nadie, y ahora **también arriba**, con el nombre del resto del sobre.","uniqueKey":"retryAfterSeconds","typeLabel":"number"},"requestId":{"type":"string","example":"0f2c1a5e-1d9b-4c7a-9a55-7f1a2b3c4d5e","description":"El mismo valor de la cabecera `X-Request-Id`. Es lo que hay que pegar en un ticket.","uniqueKey":"requestId","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"statusCode":401,"errorCode":"UNAUTHORIZED","message":"No autorizado","timestamp":"2026-07-26T18:30:00.000Z","path":"/v1/invoices/authorize","details":"\u003cstring>","retryable":false,"retryAfterSeconds":43200,"requestId":"0f2c1a5e-1d9b-4c7a-9a55-7f1a2b3c4d5e"}}},"exampleType":"generated"}},"headers":{"X-Request-Id":{"description":"Identificador del pedido. Va en TODA respuesta. Si lo mandás en el pedido y respeta `[A-Za-z0-9._:-]{1,128}`, se te devuelve el mismo; si no, se genera uno. Es lo que hay que citar en un ticket.","schema":{"type":"string"}},"X-Emissa-Mode":{"description":"`test` o `live`. **Va en toda respuesta autenticada con API key**, y es la forma más barata de verificar que no estás emitiendo contra el ambiente equivocado. No aparece cuando se entra con sesión de panel: ahí el ambiente lo decide cada contribuyente, no la credencial.","schema":{"type":"string","enum":["test","live"]}}},"exampleType":"generated"},"553c0668-0a02-419a-9052-dee423f159d0":{"description":"Falta la credencial o no es válida.\n\n`errorCode`: `UNAUTHORIZED`, `INVALID_API_KEY`, `API_KEY_WRONG_HEADER`","content":{"application/json":{"schema":{"type":"object","required":["statusCode","errorCode","message","timestamp","path"],"properties":{"statusCode":{"type":"number","example":401,"description":"El mismo código HTTP de la respuesta. Va repetido en el cuerpo para que un cliente que sólo loguea el JSON no pierda el dato.","isRequired":true,"uniqueKey":"statusCode","typeLabel":"number"},"errorCode":{"type":"string","description":"Siempre una entrada del catálogo de errores. Es el campo por el que se ramifica.","enum":["UNAUTHORIZED","INVALID_API_KEY","API_KEY_WRONG_HEADER"],"example":"UNAUTHORIZED","isRequired":true,"uniqueKey":"errorCode","typeLabel":"enum\u003cstring>"},"message":{"type":"string","example":"No autorizado","description":"**Siempre un string**, nunca un arreglo.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"timestamp":{"type":"string","example":"2026-07-26T18:30:00.000Z","description":"Cuándo falló, en UTC. Sirve para ubicarlo en los logs.","isRequired":true,"uniqueKey":"timestamp","typeLabel":"string"},"path":{"type":"string","example":"/v1/invoices/authorize","description":"La ruta que se pidió, sin el host ni la query.","isRequired":true,"uniqueKey":"path","typeLabel":"string"},"details":{"oneOf":[{"type":"string","description":"Detalle adicional. Lo contractual viaja siempre; lo de diagnóstico **no viaja en producción**. No ramifiques por este campo.","uniqueKey":"details.oneOf.0","typeLabel":"string"},{"type":"object","description":"Detalle adicional. Lo contractual viaja siempre; lo de diagnóstico **no viaja en producción**. No ramifiques por este campo.","additionalProperties":true,"uniqueKey":"details.oneOf.1","typeLabel":"object"}],"uniqueKey":"details","typeLabel":"string | object"},"retryable":{"type":"boolean","example":false,"description":"**¿Tiene sentido reintentar?** Si viene, le gana a cualquier heurística basada en el status.\n\nExiste porque el status no alcanza: `ARCA_TICKET_ALREADY_ISSUED` es un 409 que **se resuelve esperando**, y `ARCA_COMPUTER_NOT_AUTHORIZED` es un 502 que **no se arregla nunca esperando** — hay que autorizar el certificado en ARCA. Un cliente que ramifique sólo por 4xx/5xx acierta al revés en los dos.\n\n**Ausente significa \"no lo sabemos\"**, y es distinto de `false`: ahí corresponde la heurística de siempre. Sólo se declara donde la respuesta es certera.","uniqueKey":"retryable","typeLabel":"boolean"},"retryAfterSeconds":{"type":"number","example":43200,"description":"Cuántos segundos esperar antes de reintentar. **Sólo cuando el número es real** —el vencimiento de un ticket, la ventana de un límite—, nunca una estimación.\n\nEl 429 y el bloqueo del segundo factor ya lo mandaban como `details.reintentarEnSegundos`, en castellano y anidado. Sigue ahí para no romper a nadie, y ahora **también arriba**, con el nombre del resto del sobre.","uniqueKey":"retryAfterSeconds","typeLabel":"number"},"requestId":{"type":"string","example":"0f2c1a5e-1d9b-4c7a-9a55-7f1a2b3c4d5e","description":"El mismo valor de la cabecera `X-Request-Id`. Es lo que hay que pegar en un ticket.","uniqueKey":"requestId","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"statusCode":401,"errorCode":"UNAUTHORIZED","message":"No autorizado","timestamp":"2026-07-26T18:30:00.000Z","path":"/v1/invoices/authorize","details":"\u003cstring>","retryable":false,"retryAfterSeconds":43200,"requestId":"0f2c1a5e-1d9b-4c7a-9a55-7f1a2b3c4d5e"}}},"exampleType":"generated"}},"headers":{"X-Request-Id":{"description":"Identificador del pedido. Va en TODA respuesta. Si lo mandás en el pedido y respeta `[A-Za-z0-9._:-]{1,128}`, se te devuelve el mismo; si no, se genera uno. Es lo que hay que citar en un ticket.","schema":{"type":"string"}},"X-Emissa-Mode":{"description":"`test` o `live`. **Va en toda respuesta autenticada con API key**, y es la forma más barata de verificar que no estás emitiendo contra el ambiente equivocado. No aparece cuando se entra con sesión de panel: ahí el ambiente lo decide cada contribuyente, no la credencial.","schema":{"type":"string","enum":["test","live"]}}},"exampleType":"generated"},"50e87a03-9e77-4a1b-9596-f51742345ae7":{"description":"La credencial es válida pero no alcanza. Con API key hay tres motivos, y cada uno trae su código:\n\n- `API_KEY_INSUFFICIENT_SCOPE` — falta `taxpayer:write`. `details.scopeRequerido` lo nombra.\n- `API_KEY_INSUFFICIENT_PERMISSIONS` — la key está **restringida a contribuyentes puntuales**. No puede crear otros: el nuevo quedaría fuera de su lista y podría operarlo igual.\n- `INSUFFICIENT_ROLE` — con sesión de panel, el rol no tiene `taxpayer:write`. Con API key, que no esté asociada a una organización.\n- `API_KEY_PRODUCTO_DISTINTO` — la key está atada a un producto y `X-Emissa-Producto` dice otro. Con API key, también: el **modo de la key no coincide con el ambiente del contribuyente**. Una `emi_test_` contra un contribuyente de `PRODUCCION` nunca emite.\n\n`errorCode`: `FORBIDDEN`, `API_KEY_INSUFFICIENT_PERMISSIONS`, `API_KEY_INSUFFICIENT_SCOPE`, `INSUFFICIENT_ROLE`, `API_KEY_PRODUCTO_DISTINTO`, `API_KEY_WRONG_MODE`","content":{"application/json":{"schema":{"type":"object","required":["statusCode","errorCode","message","timestamp","path"],"properties":{"statusCode":{"type":"number","example":401,"description":"El mismo código HTTP de la respuesta. Va repetido en el cuerpo para que un cliente que sólo loguea el JSON no pierda el dato.","isRequired":true,"uniqueKey":"statusCode","typeLabel":"number"},"errorCode":{"type":"string","description":"Siempre una entrada del catálogo de errores. Es el campo por el que se ramifica.","enum":["FORBIDDEN","API_KEY_INSUFFICIENT_PERMISSIONS","API_KEY_INSUFFICIENT_SCOPE","INSUFFICIENT_ROLE","API_KEY_PRODUCTO_DISTINTO","API_KEY_WRONG_MODE"],"example":"UNAUTHORIZED","isRequired":true,"uniqueKey":"errorCode","typeLabel":"enum\u003cstring>"},"message":{"type":"string","example":"No autorizado","description":"**Siempre un string**, nunca un arreglo.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"timestamp":{"type":"string","example":"2026-07-26T18:30:00.000Z","description":"Cuándo falló, en UTC. Sirve para ubicarlo en los logs.","isRequired":true,"uniqueKey":"timestamp","typeLabel":"string"},"path":{"type":"string","example":"/v1/invoices/authorize","description":"La ruta que se pidió, sin el host ni la query.","isRequired":true,"uniqueKey":"path","typeLabel":"string"},"details":{"oneOf":[{"type":"string","description":"Detalle adicional. Lo contractual viaja siempre; lo de diagnóstico **no viaja en producción**. No ramifiques por este campo.","uniqueKey":"details.oneOf.0","typeLabel":"string"},{"type":"object","description":"Detalle adicional. Lo contractual viaja siempre; lo de diagnóstico **no viaja en producción**. No ramifiques por este campo.","additionalProperties":true,"uniqueKey":"details.oneOf.1","typeLabel":"object"}],"uniqueKey":"details","typeLabel":"string | object"},"retryable":{"type":"boolean","example":false,"description":"**¿Tiene sentido reintentar?** Si viene, le gana a cualquier heurística basada en el status.\n\nExiste porque el status no alcanza: `ARCA_TICKET_ALREADY_ISSUED` es un 409 que **se resuelve esperando**, y `ARCA_COMPUTER_NOT_AUTHORIZED` es un 502 que **no se arregla nunca esperando** — hay que autorizar el certificado en ARCA. Un cliente que ramifique sólo por 4xx/5xx acierta al revés en los dos.\n\n**Ausente significa \"no lo sabemos\"**, y es distinto de `false`: ahí corresponde la heurística de siempre. Sólo se declara donde la respuesta es certera.","uniqueKey":"retryable","typeLabel":"boolean"},"retryAfterSeconds":{"type":"number","example":43200,"description":"Cuántos segundos esperar antes de reintentar. **Sólo cuando el número es real** —el vencimiento de un ticket, la ventana de un límite—, nunca una estimación.\n\nEl 429 y el bloqueo del segundo factor ya lo mandaban como `details.reintentarEnSegundos`, en castellano y anidado. Sigue ahí para no romper a nadie, y ahora **también arriba**, con el nombre del resto del sobre.","uniqueKey":"retryAfterSeconds","typeLabel":"number"},"requestId":{"type":"string","example":"0f2c1a5e-1d9b-4c7a-9a55-7f1a2b3c4d5e","description":"El mismo valor de la cabecera `X-Request-Id`. Es lo que hay que pegar en un ticket.","uniqueKey":"requestId","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"statusCode":401,"errorCode":"UNAUTHORIZED","message":"No autorizado","timestamp":"2026-07-26T18:30:00.000Z","path":"/v1/invoices/authorize","details":"\u003cstring>","retryable":false,"retryAfterSeconds":43200,"requestId":"0f2c1a5e-1d9b-4c7a-9a55-7f1a2b3c4d5e"}}},"exampleType":"generated"}},"headers":{"X-Request-Id":{"description":"Identificador del pedido. Va en TODA respuesta. Si lo mandás en el pedido y respeta `[A-Za-z0-9._:-]{1,128}`, se te devuelve el mismo; si no, se genera uno. Es lo que hay que citar en un ticket.","schema":{"type":"string"}},"X-Emissa-Mode":{"description":"`test` o `live`. **Va en toda respuesta autenticada con API key**, y es la forma más barata de verificar que no estás emitiendo contra el ambiente equivocado. No aparece cuando se entra con sesión de panel: ahí el ambiente lo decide cada contribuyente, no la credencial.","schema":{"type":"string","enum":["test","live"]}}},"exampleType":"generated"},"d1fd7a27-33e9-4299-b74b-b149a26a04a9":{"description":"Ya existe un contribuyente con ese CUIT en ese ambiente. Para editarlo, mandá su `id`: sin `id` esto siempre es un alta.\n\n**Si el contribuyente es de tu producto, la respuesta trae su `id` en `details.taxpayerId`** —también en producción—, así no hace falta buscarlo. Si es de otro producto o no tiene producto, el 409 viene **sin id**: el CUIT está tomado, pero esta credencial no alcanza ese contribuyente.\n\n`errorCode`: `RESOURCE_ALREADY_EXISTS`","content":{"application/json":{"schema":{"type":"object","required":["statusCode","errorCode","message","timestamp","path"],"properties":{"statusCode":{"type":"number","example":401,"description":"El mismo código HTTP de la respuesta. Va repetido en el cuerpo para que un cliente que sólo loguea el JSON no pierda el dato.","isRequired":true,"uniqueKey":"statusCode","typeLabel":"number"},"errorCode":{"type":"string","description":"Siempre una entrada del catálogo de errores. Es el campo por el que se ramifica.","enum":["RESOURCE_ALREADY_EXISTS"],"example":"UNAUTHORIZED","isRequired":true,"uniqueKey":"errorCode","typeLabel":"enum\u003cstring>"},"message":{"type":"string","example":"No autorizado","description":"**Siempre un string**, nunca un arreglo.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"timestamp":{"type":"string","example":"2026-07-26T18:30:00.000Z","description":"Cuándo falló, en UTC. Sirve para ubicarlo en los logs.","isRequired":true,"uniqueKey":"timestamp","typeLabel":"string"},"path":{"type":"string","example":"/v1/invoices/authorize","description":"La ruta que se pidió, sin el host ni la query.","isRequired":true,"uniqueKey":"path","typeLabel":"string"},"details":{"oneOf":[{"type":"string","description":"Detalle adicional. Lo contractual viaja siempre; lo de diagnóstico **no viaja en producción**. No ramifiques por este campo.","uniqueKey":"details.oneOf.0","typeLabel":"string"},{"type":"object","description":"Detalle adicional. Lo contractual viaja siempre; lo de diagnóstico **no viaja en producción**. No ramifiques por este campo.","additionalProperties":true,"uniqueKey":"details.oneOf.1","typeLabel":"object"}],"uniqueKey":"details","typeLabel":"string | object"},"retryable":{"type":"boolean","example":false,"description":"**¿Tiene sentido reintentar?** Si viene, le gana a cualquier heurística basada en el status.\n\nExiste porque el status no alcanza: `ARCA_TICKET_ALREADY_ISSUED` es un 409 que **se resuelve esperando**, y `ARCA_COMPUTER_NOT_AUTHORIZED` es un 502 que **no se arregla nunca esperando** — hay que autorizar el certificado en ARCA. Un cliente que ramifique sólo por 4xx/5xx acierta al revés en los dos.\n\n**Ausente significa \"no lo sabemos\"**, y es distinto de `false`: ahí corresponde la heurística de siempre. Sólo se declara donde la respuesta es certera.","uniqueKey":"retryable","typeLabel":"boolean"},"retryAfterSeconds":{"type":"number","example":43200,"description":"Cuántos segundos esperar antes de reintentar. **Sólo cuando el número es real** —el vencimiento de un ticket, la ventana de un límite—, nunca una estimación.\n\nEl 429 y el bloqueo del segundo factor ya lo mandaban como `details.reintentarEnSegundos`, en castellano y anidado. Sigue ahí para no romper a nadie, y ahora **también arriba**, con el nombre del resto del sobre.","uniqueKey":"retryAfterSeconds","typeLabel":"number"},"requestId":{"type":"string","example":"0f2c1a5e-1d9b-4c7a-9a55-7f1a2b3c4d5e","description":"El mismo valor de la cabecera `X-Request-Id`. Es lo que hay que pegar en un ticket.","uniqueKey":"requestId","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"statusCode":401,"errorCode":"UNAUTHORIZED","message":"No autorizado","timestamp":"2026-07-26T18:30:00.000Z","path":"/v1/invoices/authorize","details":"\u003cstring>","retryable":false,"retryAfterSeconds":43200,"requestId":"0f2c1a5e-1d9b-4c7a-9a55-7f1a2b3c4d5e"}}},"exampleType":"generated"}},"headers":{"X-Request-Id":{"description":"Identificador del pedido. Va en TODA respuesta. Si lo mandás en el pedido y respeta `[A-Za-z0-9._:-]{1,128}`, se te devuelve el mismo; si no, se genera uno. Es lo que hay que citar en un ticket.","schema":{"type":"string"}},"X-Emissa-Mode":{"description":"`test` o `live`. **Va en toda respuesta autenticada con API key**, y es la forma más barata de verificar que no estás emitiendo contra el ambiente equivocado. No aparece cuando se entra con sesión de panel: ahí el ambiente lo decide cada contribuyente, no la credencial.","schema":{"type":"string","enum":["test","live"]}}},"exampleType":"generated"},"17b492d8-46f7-44be-9eb5-12b5cc8114a0":{"description":"Se excedió el límite de peticiones. **Reintentá con backoff.**\n\n`errorCode`: `RATE_LIMIT_EXCEEDED`","content":{"application/json":{"schema":{"type":"object","required":["statusCode","errorCode","message","timestamp","path"],"properties":{"statusCode":{"type":"number","example":401,"description":"El mismo código HTTP de la respuesta. Va repetido en el cuerpo para que un cliente que sólo loguea el JSON no pierda el dato.","isRequired":true,"uniqueKey":"statusCode","typeLabel":"number"},"errorCode":{"type":"string","description":"Siempre una entrada del catálogo de errores. Es el campo por el que se ramifica.","enum":["RATE_LIMIT_EXCEEDED"],"example":"UNAUTHORIZED","isRequired":true,"uniqueKey":"errorCode","typeLabel":"enum\u003cstring>"},"message":{"type":"string","example":"No autorizado","description":"**Siempre un string**, nunca un arreglo.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"timestamp":{"type":"string","example":"2026-07-26T18:30:00.000Z","description":"Cuándo falló, en UTC. Sirve para ubicarlo en los logs.","isRequired":true,"uniqueKey":"timestamp","typeLabel":"string"},"path":{"type":"string","example":"/v1/invoices/authorize","description":"La ruta que se pidió, sin el host ni la query.","isRequired":true,"uniqueKey":"path","typeLabel":"string"},"details":{"oneOf":[{"type":"string","description":"Detalle adicional. Lo contractual viaja siempre; lo de diagnóstico **no viaja en producción**. No ramifiques por este campo.","uniqueKey":"details.oneOf.0","typeLabel":"string"},{"type":"object","description":"Detalle adicional. Lo contractual viaja siempre; lo de diagnóstico **no viaja en producción**. No ramifiques por este campo.","additionalProperties":true,"uniqueKey":"details.oneOf.1","typeLabel":"object"}],"uniqueKey":"details","typeLabel":"string | object"},"retryable":{"type":"boolean","example":false,"description":"**¿Tiene sentido reintentar?** Si viene, le gana a cualquier heurística basada en el status.\n\nExiste porque el status no alcanza: `ARCA_TICKET_ALREADY_ISSUED` es un 409 que **se resuelve esperando**, y `ARCA_COMPUTER_NOT_AUTHORIZED` es un 502 que **no se arregla nunca esperando** — hay que autorizar el certificado en ARCA. Un cliente que ramifique sólo por 4xx/5xx acierta al revés en los dos.\n\n**Ausente significa \"no lo sabemos\"**, y es distinto de `false`: ahí corresponde la heurística de siempre. Sólo se declara donde la respuesta es certera.","uniqueKey":"retryable","typeLabel":"boolean"},"retryAfterSeconds":{"type":"number","example":43200,"description":"Cuántos segundos esperar antes de reintentar. **Sólo cuando el número es real** —el vencimiento de un ticket, la ventana de un límite—, nunca una estimación.\n\nEl 429 y el bloqueo del segundo factor ya lo mandaban como `details.reintentarEnSegundos`, en castellano y anidado. Sigue ahí para no romper a nadie, y ahora **también arriba**, con el nombre del resto del sobre.","uniqueKey":"retryAfterSeconds","typeLabel":"number"},"requestId":{"type":"string","example":"0f2c1a5e-1d9b-4c7a-9a55-7f1a2b3c4d5e","description":"El mismo valor de la cabecera `X-Request-Id`. Es lo que hay que pegar en un ticket.","uniqueKey":"requestId","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"statusCode":401,"errorCode":"UNAUTHORIZED","message":"No autorizado","timestamp":"2026-07-26T18:30:00.000Z","path":"/v1/invoices/authorize","details":"\u003cstring>","retryable":false,"retryAfterSeconds":43200,"requestId":"0f2c1a5e-1d9b-4c7a-9a55-7f1a2b3c4d5e"}}},"exampleType":"generated"}},"headers":{"X-Request-Id":{"description":"Identificador del pedido. Va en TODA respuesta. Si lo mandás en el pedido y respeta `[A-Za-z0-9._:-]{1,128}`, se te devuelve el mismo; si no, se genera uno. Es lo que hay que citar en un ticket.","schema":{"type":"string"}},"X-Emissa-Mode":{"description":"`test` o `live`. **Va en toda respuesta autenticada con API key**, y es la forma más barata de verificar que no estás emitiendo contra el ambiente equivocado. No aparece cuando se entra con sesión de panel: ahí el ambiente lo decide cada contribuyente, no la credencial.","schema":{"type":"string","enum":["test","live"]}}},"exampleType":"generated"},"e6e45eec-199c-4dcb-bfa2-fcd1defcb535":{"description":"Error interno. Citá el `requestId` al reportarlo.\n\n`errorCode`: `INTERNAL_ERROR`","content":{"application/json":{"schema":{"type":"object","required":["statusCode","errorCode","message","timestamp","path"],"properties":{"statusCode":{"type":"number","example":401,"description":"El mismo código HTTP de la respuesta. Va repetido en el cuerpo para que un cliente que sólo loguea el JSON no pierda el dato.","isRequired":true,"uniqueKey":"statusCode","typeLabel":"number"},"errorCode":{"type":"string","description":"Siempre una entrada del catálogo de errores. Es el campo por el que se ramifica.","enum":["INTERNAL_ERROR"],"example":"UNAUTHORIZED","isRequired":true,"uniqueKey":"errorCode","typeLabel":"enum\u003cstring>"},"message":{"type":"string","example":"No autorizado","description":"**Siempre un string**, nunca un arreglo.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"timestamp":{"type":"string","example":"2026-07-26T18:30:00.000Z","description":"Cuándo falló, en UTC. Sirve para ubicarlo en los logs.","isRequired":true,"uniqueKey":"timestamp","typeLabel":"string"},"path":{"type":"string","example":"/v1/invoices/authorize","description":"La ruta que se pidió, sin el host ni la query.","isRequired":true,"uniqueKey":"path","typeLabel":"string"},"details":{"oneOf":[{"type":"string","description":"Detalle adicional. Lo contractual viaja siempre; lo de diagnóstico **no viaja en producción**. No ramifiques por este campo.","uniqueKey":"details.oneOf.0","typeLabel":"string"},{"type":"object","description":"Detalle adicional. Lo contractual viaja siempre; lo de diagnóstico **no viaja en producción**. No ramifiques por este campo.","additionalProperties":true,"uniqueKey":"details.oneOf.1","typeLabel":"object"}],"uniqueKey":"details","typeLabel":"string | object"},"retryable":{"type":"boolean","example":false,"description":"**¿Tiene sentido reintentar?** Si viene, le gana a cualquier heurística basada en el status.\n\nExiste porque el status no alcanza: `ARCA_TICKET_ALREADY_ISSUED` es un 409 que **se resuelve esperando**, y `ARCA_COMPUTER_NOT_AUTHORIZED` es un 502 que **no se arregla nunca esperando** — hay que autorizar el certificado en ARCA. Un cliente que ramifique sólo por 4xx/5xx acierta al revés en los dos.\n\n**Ausente significa \"no lo sabemos\"**, y es distinto de `false`: ahí corresponde la heurística de siempre. Sólo se declara donde la respuesta es certera.","uniqueKey":"retryable","typeLabel":"boolean"},"retryAfterSeconds":{"type":"number","example":43200,"description":"Cuántos segundos esperar antes de reintentar. **Sólo cuando el número es real** —el vencimiento de un ticket, la ventana de un límite—, nunca una estimación.\n\nEl 429 y el bloqueo del segundo factor ya lo mandaban como `details.reintentarEnSegundos`, en castellano y anidado. Sigue ahí para no romper a nadie, y ahora **también arriba**, con el nombre del resto del sobre.","uniqueKey":"retryAfterSeconds","typeLabel":"number"},"requestId":{"type":"string","example":"0f2c1a5e-1d9b-4c7a-9a55-7f1a2b3c4d5e","description":"El mismo valor de la cabecera `X-Request-Id`. Es lo que hay que pegar en un ticket.","uniqueKey":"requestId","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"statusCode":401,"errorCode":"UNAUTHORIZED","message":"No autorizado","timestamp":"2026-07-26T18:30:00.000Z","path":"/v1/invoices/authorize","details":"\u003cstring>","retryable":false,"retryAfterSeconds":43200,"requestId":"0f2c1a5e-1d9b-4c7a-9a55-7f1a2b3c4d5e"}}},"exampleType":"generated"}},"headers":{"X-Request-Id":{"description":"Identificador del pedido. Va en TODA respuesta. Si lo mandás en el pedido y respeta `[A-Za-z0-9._:-]{1,128}`, se te devuelve el mismo; si no, se genera uno. Es lo que hay que citar en un ticket.","schema":{"type":"string"}},"X-Emissa-Mode":{"description":"`test` o `live`. **Va en toda respuesta autenticada con API key**, y es la forma más barata de verificar que no estás emitiendo contra el ambiente equivocado. No aparece cuando se entra con sesión de panel: ahí el ambiente lo decide cada contribuyente, no la credencial.","schema":{"type":"string","enum":["test","live"]}}},"exampleType":"generated"}},"security":{"f3e0cfdb-097c-4e53-83fe-db1ed76b56a1":{"api-key":{"type":"apiKey","in":"header","name":"X-API-Key","description":"API key de integración. **El modo va en el prefijo**: `emi_test_` opera contra homologación, `emi_live_` contra producción. Después, 64 hexadecimales.","scopes":[],"schemeName":"api-key"}},"3c93fc46-48f1-4c98-a592-c20a47ad1091":{"panel-jwt":{"scheme":"bearer","bearerFormat":"JWT","type":"http","description":"Sesión del panel. **No** es donde va la API key.","scopes":[],"schemeName":"panel-jwt"}}},"servers":{"4c3ac454-1611-42e6-9972-fdce75c66d95":{"url":"https://api.emissa.com.ar","description":"Producción"},"59c0321e-fc8e-4fd2-8484-7481e01419e1":{"url":"http://localhost:3001","description":"Local"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"X-API-Key","description":"API key de integración. **El modo va en el prefijo**: `emi_test_` opera contra homologación, `emi_live_` contra producción. Después, 64 hexadecimales.","scopes":[],"schemeName":"api-key"},"schema":{"title":"X-API-Key","type":"string","description":"API key de integración. **El modo va en el prefijo**: `emi_test_` opera contra homologación, `emi_live_` contra producción. Después, 64 hexadecimales.","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"api-key","name":"X-API-Key"}],"title":"api-key"},{"schemes":[{"scheme":{"scheme":"bearer","bearerFormat":"JWT","type":"http","description":"Sesión del panel. **No** es donde va la API key.","scopes":[],"schemeName":"panel-jwt"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Sesión del panel. **No** es donde va la API key.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"panel-jwt","name":"Authorization"}],"title":"panel-jwt"}]},"originalFileLocation":"https://api.emissa.com.ar/openapi.json"},"subdomain":"emissa","siteName":"Emissa","title":"Alta o edición de un contribuyente - Emissa","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-20T17:08:37.458Z","originalFileLocation":"api-reference/contribuyentes/alta-o-edición-de-un-contribuyente.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=\"light\"}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=\"Con id edita; sin id da de alta. Se puede con API key desde la 5.33, si la key tiene taxpayer:write y no está restringida a contribuyentes puntuales. Una key restringida recibe 403: si pudiera crear, el contribuyente nuevo quedaría fuera de su lista y podría operarlo igual, escapándose de su propia restricción. El organizationId del cuerpo lo usa sólo una sesión de panel. Con API key se ignora: la key opera en su organización y no la elige un parámetro. La respuesta trae datosDelPapel.faltantes con lo que todavía falta para poder imprimir un comprobante completo. El alta fija el producto del contribuyente: el de la key, si está atada a uno, o el de X-Emissa-Producto. La edición no lo cambia. Scope de API key: taxpayer:write. Una key sin ese scope recibe 403 API_KEY_INSUFFICIENT_SCOPE, aunque el rol de quien la creó lo permita: el permiso efectivo es la intersección de los dos.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Emissa\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/emissa/WZ2UJ_VM2VRN59-L/_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=\"/docs/mintlify-assets/_mintlify/favicons/emissa/WZ2UJ_VM2VRN59-L/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/emissa/WZ2UJ_VM2VRN59-L/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/emissa/WZ2UJ_VM2VRN59-L/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/emissa/WZ2UJ_VM2VRN59-L/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/emissa/WZ2UJ_VM2VRN59-L/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/emissa/WZ2UJ_VM2VRN59-L/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/emissa/WZ2UJ_VM2VRN59-L/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/emissa/WZ2UJ_VM2VRN59-L/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Alta o edición de un contribuyente - Emissa\">\u003cmeta data-mint-head property=\"og:description\" content=\"Con id edita; sin id da de alta. Se puede con API key desde la 5.33, si la key tiene taxpayer:write y no está restringida a contribuyentes puntuales. Una key restringida recibe 403: si pudiera crear, el contribuyente nuevo quedaría fuera de su lista y podría operarlo igual, escapándose de su propia restricción. El organizationId del cuerpo lo usa sólo una sesión de panel. Con API key se ignora: la key opera en su organización y no la elige un parámetro. La respuesta trae datosDelPapel.faltantes con lo que todavía falta para poder imprimir un comprobante completo. El alta fija el producto del contribuyente: el de la key, si está atada a uno, o el de X-Emissa-Producto. La edición no lo cambia. Scope de API key: taxpayer:write. Una key sin ese scope recibe 403 API_KEY_INSUFFICIENT_SCOPE, aunque el rol de quien la creó lo permita: el permiso efectivo es la intersección de los dos.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Emissa\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://www.emissa.com.ar/docs/api-reference/contribuyentes/alta-o-edición-de-un-contribuyente\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://emissa.mintlify.app/_mintlify/api/og/v2?division=Contribuyentes\u0026amp;title=Alta+o+edici%C3%B3n+de+un+contribuyente\u0026amp;description=Con+%60id%60+edita%3B+sin+%60id%60+da+de+alta.%0A%0A**Se+puede+con+API+key+desde+la+5.33**%2C+si+la+key+tiene+%60taxpayer%3Awrite%60+y+**no**+est%C3%A1+restringida+a+contribuyentes+puntua\u0026amp;theme=86e15709e365c8147b74cd50\u0026amp;signature=dfaffbf4177a4082f4d6fdd39b6b9fb736875c9dbd29d0cd26198a9b432d0823\">\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=\"Alta o edición de un contribuyente - Emissa\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Con id edita; sin id da de alta. Se puede con API key desde la 5.33, si la key tiene taxpayer:write y no está restringida a contribuyentes puntuales. Una key restringida recibe 403: si pudiera crear, el contribuyente nuevo quedaría fuera de su lista y podría operarlo igual, escapándose de su propia restricción. El organizationId del cuerpo lo usa sólo una sesión de panel. Con API key se ignora: la key opera en su organización y no la elige un parámetro. La respuesta trae datosDelPapel.faltantes con lo que todavía falta para poder imprimir un comprobante completo. El alta fija el producto del contribuyente: el de la key, si está atada a uno, o el de X-Emissa-Producto. La edición no lo cambia. Scope de API key: taxpayer:write. Una key sin ese scope recibe 403 API_KEY_INSUFFICIENT_SCOPE, aunque el rol de quien la creó lo permita: el permiso efectivo es la intersección de los dos.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://emissa.mintlify.app/_mintlify/api/og/v2?division=Contribuyentes\u0026amp;title=Alta+o+edici%C3%B3n+de+un+contribuyente\u0026amp;description=Con+%60id%60+edita%3B+sin+%60id%60+da+de+alta.%0A%0A**Se+puede+con+API+key+desde+la+5.33**%2C+si+la+key+tiene+%60taxpayer%3Awrite%60+y+**no**+est%C3%A1+restringida+a+contribuyentes+puntua\u0026amp;theme=86e15709e365c8147b74cd50\u0026amp;signature=dfaffbf4177a4082f4d6fdd39b6b9fb736875c9dbd29d0cd26198a9b432d0823\">\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=\"/docs/mintlify-assets/_mintlify/favicons/emissa/WZ2UJ_VM2VRN59-L/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Emissa\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0c0cc8\">\u003clink data-mint-head rel=\"canonical\" href=\"https://www.emissa.com.ar/docs/api-reference/contribuyentes/alta-o-edición-de-un-contribuyente\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/api-reference/contribuyentes/alta-o-edici%C3%B3n-de-un-contribuyente.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://www.emissa.com.ar/#organization\",\"name\":\"Emissa\",\"url\":\"https://www.emissa.com.ar\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/emissa/54zD7qivv8TCTuUU/images/marca/navigation-positive-on-white.svg?fit=max\u0026auto=format\u0026n=54zD7qivv8TCTuUU\u0026q=85\u0026s=31720f0a4e045e64fd37cff5a02df0d4\"}},{\"@type\":\"WebSite\",\"@id\":\"https://www.emissa.com.ar/docs#website\",\"name\":\"Emissa\",\"url\":\"https://www.emissa.com.ar/docs\",\"publisher\":{\"@id\":\"https://www.emissa.com.ar/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://www.emissa.com.ar/docs/api-reference/contribuyentes/alta-o-edici%C3%B3n-de-un-contribuyente#webpage\",\"url\":\"https://www.emissa.com.ar/docs/api-reference/contribuyentes/alta-o-edici%C3%B3n-de-un-contribuyente\",\"name\":\"Alta o edición de un contribuyente\",\"description\":\"Con id edita; sin id da de alta. Se puede con API key desde la 5.33, si la key tiene taxpayer:write y no está restringida a contribuyentes puntuales. Una key restringida recibe 403: si pudiera crear, el contribuyente nuevo quedaría fuera de su lista y podría operarlo igual, escapándose de su propia restricción. El organizationId del cuerpo lo usa sólo una sesión de panel. Con API key se ignora: la key opera en su organización y no la elige un parámetro. La respuesta trae datosDelPapel.faltantes con lo que todavía falta para poder imprimir un comprobante completo. El alta fija el producto del contribuyente: el de la key, si está atada a uno, o el de X-Emissa-Producto. La edición no lo cambia. Scope de API key: taxpayer:write. Una key sin ese scope recibe 403 API_KEY_INSUFFICIENT_SCOPE, aunque el rol de quien la creó lo permita: el permiso efectivo es la intersección de los dos.\",\"dateModified\":\"2026-10-20T17:08:37.458Z\",\"isPartOf\":{\"@id\":\"https://www.emissa.com.ar/docs#website\"},\"breadcrumb\":{\"@id\":\"https://www.emissa.com.ar/docs/api-reference/contribuyentes/alta-o-edici%C3%B3n-de-un-contribuyente#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://www.emissa.com.ar/docs/api-reference/contribuyentes/alta-o-edici%C3%B3n-de-un-contribuyente#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Contribuyentes\",\"item\":\"https://www.emissa.com.ar/docs/api-reference/contribuyentes/listar-contribuyentes\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Alta o edición de un contribuyente\",\"item\":\"https://www.emissa.com.ar/docs/api-reference/contribuyentes/alta-o-edici%C3%B3n-de-un-contribuyente\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://www.emissa.com.ar/docs/api-reference/contribuyentes/alta-o-edici%C3%B3n-de-un-contribuyente#apireference\",\"headline\":\"Alta o edición de un contribuyente\",\"name\":\"Alta o edición de un contribuyente\",\"description\":\"Con id edita; sin id da de alta. Se puede con API key desde la 5.33, si la key tiene taxpayer:write y no está restringida a contribuyentes puntuales. Una key restringida recibe 403: si pudiera crear, el contribuyente nuevo quedaría fuera de su lista y podría operarlo igual, escapándose de su propia restricción. El organizationId del cuerpo lo usa sólo una sesión de panel. Con API key se ignora: la key opera en su organización y no la elige un parámetro. La respuesta trae datosDelPapel.faltantes con lo que todavía falta para poder imprimir un comprobante completo. El alta fija el producto del contribuyente: el de la key, si está atada a uno, o el de X-Emissa-Producto. La edición no lo cambia. Scope de API key: taxpayer:write. Una key sin ese scope recibe 403 API_KEY_INSUFFICIENT_SCOPE, aunque el rol de quien la creó lo permita: el permiso efectivo es la intersección de los dos.\",\"url\":\"https://www.emissa.com.ar/docs/api-reference/contribuyentes/alta-o-edici%C3%B3n-de-un-contribuyente\",\"mainEntityOfPage\":{\"@id\":\"https://www.emissa.com.ar/docs/api-reference/contribuyentes/alta-o-edici%C3%B3n-de-un-contribuyente#webpage\"},\"dateModified\":\"2026-10-20T17:08:37.458Z\",\"publisher\":{\"@id\":\"https://www.emissa.com.ar/#organization\"},\"isPartOf\":{\"@id\":\"https://www.emissa.com.ar/docs#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Emissa\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Emissa","nav":{"global":null,"tabs":[{"tab":"Guías","pages":[{"title":"Guías","href":"/guias/inicio"}]},{"tab":"Referencia de la API","groups":[{"group":"Contribuyentes","pages":[{"title":"Listar contribuyentes","description":"Los contribuyentes que **esta credencial ve**, paginados con **keyset** como el resto de las listas: para la página siguiente se manda el `pagination.nextCursor` tal cual vino, en `?cursor=`.\n\nCon API key son los de su organización, acotados por lo que la key ya alcanza: **si está atada a un producto, sólo los de ese producto**, y si está restringida a contribuyentes puntuales, sólo esos. Cada fila es la misma que devuelve el alta, con `producto`.\n\nSirve para encontrar el `id` de un contribuyente que ya diste de alta: `?cuit=` por CUIT exacto —con o sin guiones—, `?environment=` por ambiente y `?producto=` por producto. `?withTotal=true` agrega `pagination.total`.\n\n**Scope de API key:** `taxpayer:read`. Una key sin ese scope recibe `403 API_KEY_INSUFFICIENT_SCOPE`, aunque el rol de quien la creó lo permita: el permiso efectivo es la **intersección** de los dos.","deprecated":null,"version":null,"openapi":"https://api.emissa.com.ar/openapi.json get /v1/taxpayers","href":"/api-reference/contribuyentes/listar-contribuyentes"},{"title":"Alta o edición de un contribuyente","deprecated":null,"version":null,"openapi":"https://api.emissa.com.ar/openapi.json post /v1/taxpayers","href":"/api-reference/contribuyentes/alta-o-edición-de-un-contribuyente"},{"title":"Verificar la conexión con ARCA","description":"Le pregunta a ARCA si la conexión está completa. **No emite ningún comprobante**: no consume número de serie ni tiene efecto fiscal.\n\n⚠️ **Pero no es de sólo lectura.** Cuando el estado es `DELEGACION_NO_VISIBLE`, esta llamada **dispara un trabajo que escribe en ARCA**: Emissa entra a su Administrador de Relaciones y designa su Computador Fiscal para este contribuyente. El campo `designacion` te dice qué pasó con eso.\n\nDecía sólo *\"sin emitir nada\"*, que es verdad sobre comprobantes y falso sobre ARCA. Un integrador lo leyó, lo puso a repetir, y doce verificaciones seguidas dispararon doce trabajos. **No lo pongas en un `useEffect` que refresque solo.** Hay un enfriamiento de 5 minutos del lado de Emissa —vas a ver `designacion: \"en-enfriamiento\"`— pero el enfriamiento es una red, no un permiso.\n\nAntes, la forma de saberlo era intentar emitir y leer el rechazo — o sea descubrir que falta un punto de venta con un comprobante ya numerado.\n\nLos estados posibles:\n\n- `CONECTADO` — ARCA responde y el punto de venta está habilitado.\n- `FALTA_PUNTO_DE_VENTA` — el `detalle` dice cuáles **sí** están.\n- `DELEGACION_NO_VISIBLE` — o no se autorizó a Emissa, o se autorizó después del ticket de acceso vigente. **Son indistinguibles para ARCA**, así que el `detalle` trae la fecha que las separa: si autorizaste después de ella, se completa solo.\n- `SIN_INSCRIPCION_ACTIVA` — el padrón no le registra IVA ni monotributo activos. **Gana sobre todo lo demás**: sin inscripción no puede tener punto de venta ni emitir, esté la autorización hecha o no.\n- `SIN_CREDENCIAL` — no hay certificado con el que firmar.\n- `INDETERMINADO` — ARCA no contestó. **No quiere decir que algo esté mal.**\n\nCon `DELEGACION_NO_VISIBLE` la respuesta trae además `ticketVigenteHasta`: hasta ese momento una autorización recién hecha **no puede verse**, así que es cuándo tiene sentido volver a preguntar.\n\nConsulta el catálogo de puntos de venta salteando el cache, así que refleja lo que ARCA dice ahora.\n\n**Scope de API key:** `taxpayer:read`. Una key sin ese scope recibe `403 API_KEY_INSUFFICIENT_SCOPE`, aunque el rol de quien la creó lo permita: el permiso efectivo es la **intersección** de los dos.","deprecated":null,"version":null,"openapi":"https://api.emissa.com.ar/openapi.json post /v1/taxpayers/{id}/conexion/verificar","href":"/api-reference/contribuyentes/verificar-la-conexión-con-arca"},{"title":"Descargar el logo del emisor","deprecated":null,"version":null,"openapi":"https://api.emissa.com.ar/openapi.json get /v1/taxpayers/{id}/logo","href":"/api-reference/contribuyentes/descargar-el-logo-del-emisor"},{"title":"Subir o reemplazar el logo del emisor","deprecated":null,"version":null,"openapi":"https://api.emissa.com.ar/openapi.json put /v1/taxpayers/{id}/logo","href":"/api-reference/contribuyentes/subir-o-reemplazar-el-logo-del-emisor"},{"title":"Borrar el logo del emisor","deprecated":null,"version":null,"openapi":"https://api.emissa.com.ar/openapi.json delete /v1/taxpayers/{id}/logo","href":"/api-reference/contribuyentes/borrar-el-logo-del-emisor"},{"title":"Consultar el padrón de ARCA por CUIT","deprecated":null,"version":null,"openapi":"https://api.emissa.com.ar/openapi.json get /v1/arca/padron/{cuit}","href":"/api-reference/contribuyentes/consultar-el-padrón-de-arca-por-cuit"}]},{"group":"Credenciales ARCA","pages":[{"title":"Historial de credenciales","deprecated":null,"version":null,"openapi":"https://api.emissa.com.ar/openapi.json get /v1/arca/credentials","href":"/api-reference/credenciales-arca/historial-de-credenciales"},{"title":"Cargar el certificado y la clave privada","deprecated":null,"version":null,"openapi":"https://api.emissa.com.ar/openapi.json post /v1/arca/credentials","href":"/api-reference/credenciales-arca/cargar-el-certificado-y-la-clave-privada"},{"title":"Revocar una credencial","deprecated":null,"version":null,"openapi":"https://api.emissa.com.ar/openapi.json delete /v1/arca/credentials/{id}","href":"/api-reference/credenciales-arca/revocar-una-credencial"}]},{"group":"Clientes","pages":[{"title":"Validar un receptor contra el padrón de ARCA","deprecated":null,"version":null,"openapi":"https://api.emissa.com.ar/openapi.json post /v1/customers/validate-tax","href":"/api-reference/clientes/validar-un-receptor-contra-el-padrón-de-arca"}]},{"group":"Comprobantes","pages":[{"title":"Emitir un comprobante","deprecated":null,"version":null,"openapi":"https://api.emissa.com.ar/openapi.json post /v1/invoices/authorize","href":"/api-reference/comprobantes/emitir-un-comprobante"},{"title":"Listar comprobantes","deprecated":null,"version":null,"openapi":"https://api.emissa.com.ar/openapi.json get /v1/invoices/search","href":"/api-reference/comprobantes/listar-comprobantes"},{"title":"Exportar el histórico","deprecated":null,"version":null,"openapi":"https://api.emissa.com.ar/openapi.json get /v1/invoices/export","href":"/api-reference/comprobantes/exportar-el-histórico"},{"title":"Anular un comprobante","deprecated":null,"version":null,"openapi":"https://api.emissa.com.ar/openapi.json post /v1/invoices/{id}/cancel","href":"/api-reference/comprobantes/anular-un-comprobante"},{"title":"Reconciliar un comprobante sin resolver","deprecated":null,"version":null,"openapi":"https://api.emissa.com.ar/openapi.json post /v1/invoices/{id}/reconcile","href":"/api-reference/comprobantes/reconciliar-un-comprobante-sin-resolver"},{"title":"Comprobantes sin resolver","deprecated":null,"version":null,"openapi":"https://api.emissa.com.ar/openapi.json get /v1/invoices/unresolved","href":"/api-reference/comprobantes/comprobantes-sin-resolver"},{"title":"Un comprobante por id","deprecated":null,"version":null,"openapi":"https://api.emissa.com.ar/openapi.json get /v1/invoices/{id}","href":"/api-reference/comprobantes/un-comprobante-por-id"},{"title":"PDF del comprobante","deprecated":null,"version":null,"openapi":"https://api.emissa.com.ar/openapi.json get /v1/invoices/{id}/pdf","href":"/api-reference/comprobantes/pdf-del-comprobante"}]},{"group":"Consumo","pages":[{"title":"Consumo del período","deprecated":null,"version":null,"openapi":"https://api.emissa.com.ar/openapi.json get /v1/consumo","href":"/api-reference/consumo/consumo-del-período"}]}]}]},"basePath":"","title":"Alta o edición de un contribuyente - Emissa","buildId":"dpl_6cCEiK8XNNvaLBBkWzcBhdE9QfLC","deploymentId":"dpl_6cCEiK8XNNvaLBBkWzcBhdE9QfLC","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-CLz2_Z5D.js","utils-7A5jZhOT.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-BVWmkKuv.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-4SOfrh0F.js","snippetPresets-CMc8KicP.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-Ba9tX7z3.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-Be8krXvv.js","shallow-CBC3K1uB.js","getApiPlaygroundDisplay-4tKcUAYo.js","CodeSnippet-C1Xa06ft.js","CodeSnippets-vqiz27A_.js","Page-DeQN5MDd.js","getPastedJson-NUwRfM32.js","icon-DkIVqWh9.js","MethodPill-qmhT7_wz.js","DuplicateIcon-_gWp1vhn.js","createIcon-NA1p_TVA.js","DynamicMarkdown-Bas9A7wq.js","SectionHeading-a1cS-24U.js","axios-vUo_bRtp.js","Markdown-D3ZTwq_a.js","clsx-BcghKhHb.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-B66mVNPp.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-DmooSyTN.js"]}