{"openapi":"3.1.1","info":{"title":"Arithmetik Cloud API","version":"1.0.0","summary":"Emisión y consulta de comprobantes fiscales electrónicos (e-CF) de la DGII desde sus sistemas.","description":"La API de Arithmetik Cloud permite que sus sistemas emitan y consulten los **comprobantes fiscales electrónicos (e-CF)** de su empresa ante la DGII. Usted envía los datos del documento; Arithmetik Cloud calcula los montos, toma el e-NCF de la secuencia, firma con el certificado de la empresa, lo envía a la DGII y le devuelve el resultado.\n\n## Inicio rápido\n\n1. En Arithmetik Cloud, abra **Configuración › Integración API** y cree un token de **sandbox** (`ak_test_…`). El token se muestra **una sola vez**: guárdelo en un gestor de secretos, nunca en el código fuente.\n2. Compruebe el token:\n\n   ```bash\n   curl https://sandbox.arithmetikcloud.app/api/v1/me \\\n     -H \"Authorization: Bearer $ARITHMETIK_TOKEN\"\n   ```\n\n3. Emita su primera factura de consumo de prueba:\n\n   ```bash\n   curl -X POST https://sandbox.arithmetikcloud.app/api/v1/ecf \\\n     -H \"Authorization: Bearer $ARITHMETIK_TOKEN\" \\\n     -H \"Content-Type: application/json\" \\\n     -H \"Idempotency-Key: $(uuidgen)\" \\\n     -d '{\"type\":\"32\",\"items\":[{\"description\":\"Café americano\",\"quantity\":2,\"unitPrice\":150,\"taxIndicator\":1}]}'\n   ```\n\n   La respuesta (`201`) trae el e-NCF asignado, el estado ante la DGII (`status`) y los enlaces al XML firmado y al PDF.\n4. Cuando la integración funcione en el sandbox, cree un token **live** (`ak_live_…`) y cambie la URL base. Nada más cambia.\n\n## Ambientes y URLs\n\n| Ambiente | URL base | Token | DGII | Valor fiscal |\n|---|---|---|---|---|\n| Producción (live) | `https://arithmetikcloud.app/api/v1` | `ak_live_…` | eCF | Sí |\n| Sandbox | `https://sandbox.arithmetikcloud.app/api/v1` | `ak_test_…` | TesteCF | No |\n\n- Cada token sirve sólo en su ambiente. Un token del otro ambiente responde `401 wrong_environment`, con la URL base correcta en `baseUrl`.\n- Para crear tokens live, la empresa debe estar en el ambiente de **Producción** de la DGII, con su certificado digital vigente, la firma habilitada y un plan activo: **la API viene incluida en todos los planes** y no requiere contratar nada aparte. La pantalla *Integración API* muestra lo que falta.\n- Cada respuesta indica su ambiente en la cabecera `Arithmetik-Environment` (`live` o `sandbox`).\n- El sandbox admite CORS (`Access-Control-Allow-Origin: *`) para el botón «Probar» de esta documentación. La API live no lo admite (salvo `GET /openapi.json`): llámela desde su servidor, nunca desde un navegador ni desde una app móvil.\n\n## Sandbox\n\nEl sandbox es un despliegue aparte, con su propia base de datos, para probar la integración sin consecuencias fiscales.\n\n- **TesteCF, sin valor fiscal.** Los documentos se firman y se envían de verdad a TesteCF, el ambiente de pruebas de la DGII, pero no tienen valor fiscal. La representación impresa lleva la marca «SANDBOX — SIN VALOR FISCAL».\n- **RNC emisor de pruebas `132768396`.** La DGII sólo acepta un documento si el certificado que lo firma está autorizado para el RNC emisor, así que en el sandbox todos los documentos salen con `RNCEmisor` = `132768396` (el de la plataforma) y la razón social de su empresa. Lo verá en el XML, en el timbre (`links.stamp`), en `issuer.rnc` y en `GET /me` (`issuerRnc`). En producción sale el RNC de su empresa.\n- **XML sin `KeyInfo`.** El XML firmado que devuelve el sandbox omite el elemento `<KeyInfo>` (el certificado de la plataforma). La firma no cambia: `KeyInfo` está fuera de `SignedInfo`, así que `SignatureValue` y el código de seguridad son los mismos.\n- **Límites del paquete Sandbox:** 1,000 e-CF por mes y 100 por día (hora de República Dominicana), 30 peticiones por minuto y hasta 5 tokens activos por empresa. `GET /usage` muestra el uso y `GET /me` los límites vigentes.\n- **Secuencias automáticas.** No hace falta cargar secuencias: la plataforma le asigna bloques de 500 e-NCF de TesteCF por tipo de comprobante a medida que los usa. `GET /sequences` los muestra con `managedBySandbox: true`. Vencen el 2028-12-31 (los tipos 32 y 34 no vencen), como exige TesteCF.\n- **Notas de débito y crédito.** En el sandbox una nota sólo puede modificar un e-CF que su empresa emitió en el sandbox (`422` en `/reference/encf`): en TesteCF todas las cuentas comparten el RNC emisor de pruebas.\n- **Sin efectos externos.** El sandbox no entrega los documentos al buzón del comprador, no envía correos y no los migra a su ERP.\n- Si el sandbox no puede firmar o no puede atender en este momento, las operaciones responden `503 sandbox_unavailable` y `GET /health` muestra `status: \"degraded\"`.\n- Use datos de prueba: lo que envía al sandbox llega a TesteCF.\n\n## Autenticación y permisos\n\nEnvíe el token en cada petición:\n\n```http\nAuthorization: Bearer ak_test_…\n```\n\n- **Formato:** `ak_live_` (producción) o `ak_test_` (sandbox), seguido de 30 caracteres aleatorios y 6 de verificación: 44 caracteres en total. Un token mal copiado se rechaza en el acto (`401 invalid_token`).\n- Arithmetik Cloud sólo guarda una huella del token: si lo pierde, revóquelo y cree otro. Un token revocado deja de funcionar de inmediato; los tokens pueden vencer (30, 90 o 365 días) o no vencer.\n- **Alcances.** Cada operación indica el alcance que exige (también en `x-required-scopes`). Si el token no lo tiene, responde `403 insufficient_scope`, con `requiredScopes` y `missingScopes`.\n\n| Alcance | Permite |\n|---|---|\n| `ecf:write` | Crear y emitir e-CF, y reenviar documentos pendientes o rechazados. |\n| `ecf:read` | Consultar e-CF: lista, detalle, XML firmado y representación impresa. |\n| `rnc:read` | Consultar el registro de contribuyentes de la DGII. |\n| `sequences:read` | Ver las secuencias de e-NCF disponibles. |\n| `usage:read` | Ver el uso del período y los límites del paquete. |\n\nAl crear un token puede elegir «Emisión y consulta» (todos los alcances) o «Sólo consulta» (todos menos `ecf:write`).\n\n## Idempotencia\n\n`POST /ecf` exige la cabecera `Idempotency-Key`: un valor único por documento (recomendado: un UUID), de 1 a 255 caracteres ASCII visibles.\n\n- Si la conexión se corta, se agota el tiempo de espera o recibe un `5xx`, **repita la misma petición con la misma clave**: obtendrá el mismo documento (`200` con `Idempotent-Replayed: true`), nunca un segundo e-NCF.\n- La misma clave con otro cuerpo responde `422 idempotency_key_mismatch`.\n- Mientras la primera petición sigue en curso, la repetición responde `409 idempotency_in_progress` con `Retry-After: 2`.\n- Si la petición falla antes de tomar el e-NCF (por ejemplo, `422 validation_failed`), la clave queda libre: corrija los datos y reintente con la misma clave.\n- Las claves se guardan 72 horas.\n- `externalId` (opcional) es su propia referencia del documento y es única por empresa: un segundo e-CF con la misma referencia responde `409 external_id_taken`, con el `id` del que ya existe.\n\n## Errores\n\nLos errores siguen el RFC 9457 (`application/problem+json`):\n\n```json\n{\n  \"type\": \"https://arithmetikcloud.app/desarrolladores/errores#validation_failed\",\n  \"title\": \"Datos no válidos\",\n  \"status\": 422,\n  \"detail\": \"La petición tiene 2 errores; revise errors[].\",\n  \"instance\": \"/api/v1/ecf\",\n  \"code\": \"validation_failed\",\n  \"requestId\": \"6d1f0a7e-3c2b-4f5a-9e8d-7c6b5a4f3e2d\",\n  \"errors\": [\n    {\n      \"pointer\": \"/buyer\",\n      \"message\": \"El tipo 31 (Factura de Crédito Fiscal Electrónica) exige el comprador: envíe buyer.\"\n    },\n    {\n      \"pointer\": \"/items/0/unitPrice\",\n      \"message\": \"Admite hasta 4 decimales.\"\n    }\n  ]\n}\n```\n\n- `code` es estable: úselo en su código. `detail` explica el caso en español y su redacción puede cambiar.\n- `errors[]` señala cada campo con un puntero JSON (`pointer`, RFC 6901) o el parámetro de la consulta (`parameter`).\n- Incluya el `requestId` (también en la cabecera `X-Request-Id`) cuando escriba a soporte.\n- Una ruta que no existe bajo `/api/v1` responde `404 not_found`, y un método que la ruta no admite, `405 method_not_allowed` con la cabecera `Allow` (los métodos que sí admite).\n- El catálogo completo de códigos, con qué hacer en cada caso, está en [https://arithmetikcloud.app/desarrolladores/errores](https://arithmetikcloud.app/desarrolladores/errores); el `type` de cada error enlaza a su entrada.\n\n## Límites y cuotas\n\n- **Peticiones por minuto**, por empresa (todos sus tokens juntos), según su plan: 60 hasta 1,000 e-CF al mes, 90 hasta 2,500, 120 hasta 5,000 y 180 por encima. Cuando hay límite, cada respuesta autenticada trae las cabeceras del borrador IETF *RateLimit* (draft-ietf-httpapi-ratelimit-headers-11):\n\n  ```http\n  RateLimit-Policy: \"minute\";q=60;w=60\n  RateLimit: \"minute\";r=57;t=42\n  ```\n\n  `q` es el límite, `r` lo que queda de la ventana y `t` los segundos hasta que se renueva. Cuentan todas las peticiones autenticadas, también las que responden `403 insufficient_scope`. Al superarlo responde `429 rate_limited` con `Retry-After` (segundos). Un paquete sin límite por minuto (`rateLimitPerMinute: 0` en `GET /me`) no trae estas cabeceras.\n- **Cuota de e-CF.** En producción la API no tiene una cuota aparte: **cada e-CF emitido por la API gasta el cupo mensual de e-CF de su plan** de Arithmetik Cloud, junto con los que emite desde la aplicación. Cuenta cada e-NCF consumido, aunque la DGII rechace el documento; el reenvío (`POST /ecf/{id}/submit`) no cuenta. Al llegar al cupo más el margen de cortesía del plan responde `429 quota_exceeded`, con `violatedPolicy` (`monthly`), `limit`, `used` y `Retry-After` hasta el mes siguiente. Una empresa con una suscripción API propia (poco frecuente) tiene además el tope de ese paquete, que puede incluir un tope diario (`daily`).\n- `GET /usage` muestra el uso del período y `GET /me`, los límites vigentes (`package.source` dice si salen del plan o de un paquete).\n- El cuerpo de una petición admite hasta 1,000,000 bytes (`413 payload_too_large`) y un comprobante, hasta 1,000 líneas.\n\n## Ciclo de estados del e-CF\n\n```text\nPENDING ──▶ SENT ──▶ ACCEPTED\n   │          │  ├─▶ CONDITIONALLY_ACCEPTED\n   │          │  └─▶ REJECTED\n   └──────────┴─────▶ REJECTED   (respuesta inmediata de la DGII)\n\nREJECTED con dgii.sequenceUsed = false ──▶ POST /ecf/{id}/submit ──▶ SENT …\n```\n\n| `status` | Qué significa | Qué hacer |\n|---|---|---|\n| `PENDING` | Registrado con su e-NCF, pero todavía sin respuesta de la DGII: sin firmar, sin enviar o con el envío fallido (`dgii.messages` dice por qué). | Reenvíelo con `POST /ecf/{id}/submit`. |\n| `SENT` | La DGII lo recibió (`dgii.trackId`) y lo está procesando. | Consulte `GET /ecf/{id}`: mientras esté `SENT`, la API le pregunta el resultado a la DGII. |\n| `ACCEPTED` | Aceptado por la DGII. | Nada. |\n| `CONDITIONALLY_ACCEPTED` | Aceptado con observaciones (`dgii.messages`). | Es válido; revise las observaciones. |\n| `REJECTED` | Rechazado por la DGII; los motivos van en `dgii.messages`. | Si `dgii.sequenceUsed` es `false` y la causa no está en los datos del documento (por ejemplo, la configuración de la empresa), corríjala y reenvíelo con `POST /ecf/{id}/submit`. Si la causa está en los datos, emita un documento nuevo. |\n| `ANNULLED` | El e-NCF se anuló ante la DGII desde Arithmetik Cloud. | Nada. |\n\n- El código HTTP no dice el resultado fiscal: un documento rechazado por la DGII también responde `201`. Mire `status`.\n- Las facturas de consumo (32) de menos de RD$250,000 se envían como resumen (RFCE) y la DGII responde en el acto: no tienen `dgii.trackId`, y el XML del resumen se descarga con `GET /ecf/{id}/xml?variant=rfce`.\n\n## Paginación\n\n`GET /ecf` devuelve los documentos del más reciente al más antiguo, en páginas:\n\n```json\n{ \"object\": \"list\", \"data\": [], \"nextCursor\": \"eyJjIjoi…\", \"hasMore\": true }\n```\n\n- `limit`: documentos por página, de 1 a 100 (25 por defecto).\n- Para la página siguiente, repita la consulta con los mismos filtros y `cursor=<nextCursor>`. Cuando `hasMore` es `false`, `nextCursor` es `null`.\n- El cursor es opaco: no lo construya ni lo modifique.\n\n## Versionado\n\n- La versión mayor va en la ruta: `/api/v1`. Dentro de la v1 sólo se hacen cambios compatibles: endpoints, parámetros opcionales, campos de respuesta y códigos de error nuevos. Su código debe ignorar los campos que no conozca.\n- Un cambio incompatible sale en una versión nueva (`/api/v2`). Antes de retirar una versión, sus respuestas traen las cabeceras `Deprecation` (RFC 9745) y `Sunset` (RFC 8594) con la fecha de retiro, con aviso previo.\n- Esta especificación se publica en formato OpenAPI 3.1.1 en `https://arithmetikcloud.app/api/v1/openapi.json` y en `https://sandbox.arithmetikcloud.app/api/v1/openapi.json`.\n\n## Formatos\n\n- JSON en UTF-8, con nombres de campo en inglés (camelCase). Las descripciones de cada campo citan el campo de la DGII que alimenta.\n- Montos como número con 2 decimales (el precio unitario admite 4), en la moneda del documento.\n- Fechas de documento en `AAAA-MM-DD` (hora de República Dominicana); marcas de tiempo en RFC 3339, en UTC.\n- Los textos no admiten los caracteres de control (salvo el tabulador y los saltos de línea) que el XML del e-CF no acepta, como los que deja a veces un texto pegado desde una hoja de cálculo: responden `422 validation_failed` con el campo en `errors[]`, antes de tomar el e-NCF.\n\n## Alcance de la v1\n\nLa API emite estos tipos de e-CF:\n\n| `type` | Comprobante |\n|---|---|\n| `31` | Factura de Crédito Fiscal Electrónica |\n| `32` | Factura de Consumo Electrónica |\n| `33` | Nota de Débito Electrónica |\n| `34` | Nota de Crédito Electrónica |\n| `41` | Comprobante Electrónico de Compras |\n| `43` | Comprobante Electrónico para Gastos Menores |\n| `44` | Comprobante Electrónico para Regímenes Especiales |\n| `45` | Comprobante Electrónico Gubernamental |\n\nLos tipos 46 (Comprobante Electrónico para Exportaciones), 47 (Comprobante Electrónico para Pagos al Exterior) todavía no se emiten por la API (`422 unsupported_feature`); los emitidos desde Arithmetik Cloud sí aparecen en las consultas.\n\nReglas por tipo que la API comprueba antes de tomar el e-NCF (`422`, con el campo en `errors[]`):\n\n- **41 (compras):** cada línea lleva una retención de ITBIS o de ISR, como exige su formato, y no admite propina legal (`legalTip`).\n- **43 (gastos menores):** todas las líneas exentas (`taxIndicator` 4), sin descuentos, propina legal ni retenciones; los precios se toman como el monto pagado, aunque llegue `pricesIncludeTax`. Su XML no lleva comprador ni forma de pago: `buyer` es opcional y sólo queda registrado en Arithmetik Cloud (sin él, «Consumidor Final»).\n- **44 (regímenes especiales):** todas las líneas exentas y, por ahora, sólo en pesos (`currency` DOP) y sin propina legal.\n- **Otra moneda:** sólo las que valen más de un peso (`exchangeRate` mayor que 1); todavía no se emite en yenes (JPY), pesos colombianos (COP), gourdes (HTG) ni bolívares (VEF).\n- **Notas (33 y 34):** sobre una factura de un contrato de administración (NG 07-07) todavía no se emiten por la API (`422 unsupported_feature`); en el sandbox, sólo sobre un e-CF que su empresa emitió en el sandbox.\n\nTodavía no admite el Impuesto Selectivo al Consumo (ISC), el indicador de facturación 5 (NG 07-07), las líneas ligadas al catálogo de productos ni los NCF de papel: esos casos responden `422 unsupported_feature` y se emiten desde Arithmetik Cloud. La anulación de e-NCF (ANECF) también se hace desde Arithmetik Cloud."},"servers":[{"url":"https://arithmetikcloud.app/api/v1","description":"Producción (live): e-CF con valor fiscal ante la DGII (ambiente eCF). Tokens ak_live_."},{"url":"https://sandbox.arithmetikcloud.app/api/v1","description":"Sandbox: pruebas en TesteCF de la DGII, sin valor fiscal. Tokens ak_test_."}],"tags":[{"name":"Comprobantes","description":"Emisión y consulta de e-CF: crear y emitir, listar, ver el detalle, descargar el XML firmado y la representación impresa, y reenviar a la DGII."},{"name":"Consultas","description":"El registro de contribuyentes de la DGII y las secuencias de e-NCF de la empresa."},{"name":"Cuenta","description":"El token con que se llama, la empresa, el paquete API y el uso del período."},{"name":"Sistema","description":"Estado del servicio y esta especificación. Públicos: no requieren token."}],"security":[{"bearerAuth":[]}],"externalDocs":{"description":"Catálogo de errores de la API","url":"https://arithmetikcloud.app/desarrolladores/errores"},"paths":{"/ecf":{"post":{"operationId":"createEcf","tags":["Comprobantes"],"summary":"Crear y emitir un e-CF","description":"Valida los datos, calcula los montos, toma el siguiente e-NCF de la secuencia de la empresa, firma el documento y lo envía a la DGII, todo en la misma petición. Responde `201` con el documento y su estado ante la DGII.\n\n- El resultado fiscal va en `status`, no en el código HTTP: un rechazo de la DGII también es `201`, con `status: \"REJECTED\"` y los motivos en `dgii.messages`.\n- Exige `Idempotency-Key` (ver *Idempotencia*). Repetir la petición con la misma clave devuelve el mismo documento, con `200` e `Idempotent-Replayed: true`; nunca se toma otro e-NCF.\n- Cada e-NCF consumido cuenta en el cupo mensual de e-CF de su plan, aunque la DGII rechace el documento, igual que si lo emitiera desde la aplicación.\n- El comprador (`buyer`) se busca entre los clientes de la empresa por RNC o cédula y, si no existe, se crea (con el nombre del registro de la DGII si no envía `name`).\n- La respuesta espera a la DGII y puede tardar. Configure su cliente con un tiempo de espera de 120 segundos y, si se agota, repita la petición con la misma `Idempotency-Key`.\n\n**Alcance requerido:** `ecf:write`.","x-required-scopes":["ecf:write"],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"description":"Los datos del documento. Los montos no se envían: los calcula la API.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EcfCreateRequest"},"examples":{"credito-fiscal-31":{"summary":"31 · Factura de crédito fiscal a 30 días","description":"Venta a una empresa con RNC, a crédito. Los montos (ITBIS, totales) los calcula la API; el descuento de la segunda línea es un monto, no un porcentaje.","value":{"type":"31","externalId":"PED-2026-0001","paymentMethod":"CREDIT","paymentTerms":{"days":30},"buyer":{"rnc":"131880681","name":"Cliente de Prueba SRL","email":"compras@example.com"},"items":[{"description":"Servicio de consultoría","quantity":1,"unitPrice":25000,"taxIndicator":1,"goodOrService":2},{"description":"Licencia de software (12 meses)","quantity":2,"unitPrice":4500,"discount":450,"taxIndicator":1,"goodOrService":2}]}},"consumo-32":{"summary":"32 · Factura de consumo (Consumidor Final)","description":"Venta de mostrador sin comprador: va a Consumidor Final. Con `pricesIncludeTax` los precios ya incluyen el ITBIS (177 = 150 + 18 %). Por debajo de RD$250,000 la DGII la recibe como resumen (RFCE) y responde en el acto.","value":{"type":"32","paymentMethod":"CARD","pricesIncludeTax":true,"items":[{"description":"Café americano","quantity":2,"unitPrice":177,"taxIndicator":1},{"description":"Pan de agua","quantity":6,"unitPrice":10,"taxIndicator":4}]}},"nota-credito-34":{"summary":"34 · Nota de crédito (corrige montos)","description":"Descuento posterior sobre una factura ya emitida. Sin `buyer`, la nota toma el comprador del comprobante que modifica si está en Arithmetik Cloud; `reference.issueDate` es obligatoria sólo si el comprobante no está en Arithmetik Cloud.","value":{"type":"34","externalId":"NC-2026-0001","reference":{"encf":"E310000000123","issueDate":"2026-11-01","modificationCode":3,"reason":"Descuento por pronto pago"},"items":[{"description":"Descuento por pronto pago (E310000000123)","quantity":1,"unitPrice":1000,"taxIndicator":1,"goodOrService":2}]}},"credito-fiscal-usd":{"summary":"31 · En dólares, nombre del comprador desde el registro de la DGII","description":"Moneda extranjera con su tasa (`exchangeRate`, pesos por dólar). Sin `buyer.name`, la API usa el nombre del registro de contribuyentes de la DGII.","value":{"type":"31","currency":"USD","exchangeRate":60.5,"paymentMethod":"TRANSFER","buyer":{"rnc":"131880681"},"items":[{"description":"Desarrollo de software","quantity":40,"unit":"HOR","unitPrice":85,"taxIndicator":1,"goodOrService":2}]}}}}}},"responses":{"200":{"description":"Repetición: la misma `Idempotency-Key` ya creó este documento. Devuelve su estado actual, sin emitir otro.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Arithmetik-Environment":{"$ref":"#/components/headers/Arithmetik-Environment"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"Location":{"$ref":"#/components/headers/Location"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Ecf"},"examples":{"aceptado":{"summary":"31 aceptado por la DGII","value":{"id":"0b6f3c1e-8f0a-4d7e-9a51-2f4c7d9e1a23","object":"ecf","environment":"live","type":"31","encf":"E310000000123","externalId":"PED-2026-0001","issueDate":"2026-11-01","currency":"DOP","exchangeRate":null,"status":"ACCEPTED","dgii":{"trackId":"3fa85f64-5717-4562-b3fc-2c963f66afa6","code":"1","status":"Aceptado","messages":[],"sequenceUsed":true,"environment":"eCF"},"securityCode":"Ab3dE9","signedAt":"2026-11-01T14:05:09.000Z","issuer":{"rnc":"101000001"},"buyer":{"rnc":"131880681","foreignId":null,"name":"Cliente de Prueba SRL","email":"compras@example.com"},"totals":{"subtotal":33550,"discount":450,"itbis":6039,"withholdings":{"itbis":0,"isr":0},"tip":0,"total":39589},"items":[{"line":1,"description":"Servicio de consultoría","quantity":1,"unit":"UND","unitPrice":25000,"discount":0,"taxIndicator":1,"itbisRate":18,"itbis":4500,"withholdings":{"itbis":0,"isr":0},"goodOrService":2,"subtotal":25000,"total":29500},{"line":2,"description":"Licencia de software (12 meses)","quantity":2,"unit":"UND","unitPrice":4500,"discount":450,"taxIndicator":1,"itbisRate":18,"itbis":1539,"withholdings":{"itbis":0,"isr":0},"goodOrService":2,"subtotal":8550,"total":10089}],"links":{"self":"https://arithmetikcloud.app/api/v1/ecf/0b6f3c1e-8f0a-4d7e-9a51-2f4c7d9e1a23","xml":"https://arithmetikcloud.app/api/v1/ecf/0b6f3c1e-8f0a-4d7e-9a51-2f4c7d9e1a23/xml","pdf":"https://arithmetikcloud.app/api/v1/ecf/0b6f3c1e-8f0a-4d7e-9a51-2f4c7d9e1a23/pdf","stamp":"https://ecf.dgii.gov.do/ecf/consultatimbre?rncemisor=101000001&RncComprador=131880681&encf=E310000000123&fechaemision=01-11-2026&montototal=39589.00&fechafirma=01-11-2026%2010%3A05%3A09&codigoseguridad=Ab3dE9"},"createdAt":"2026-11-01T14:05:07.000Z"}}}}}},"201":{"description":"El documento se creó y se envió a la DGII; su resultado va en `status`.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Arithmetik-Environment":{"$ref":"#/components/headers/Arithmetik-Environment"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"Location":{"$ref":"#/components/headers/Location"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Ecf"},"examples":{"aceptado":{"summary":"31 aceptado por la DGII","value":{"id":"0b6f3c1e-8f0a-4d7e-9a51-2f4c7d9e1a23","object":"ecf","environment":"live","type":"31","encf":"E310000000123","externalId":"PED-2026-0001","issueDate":"2026-11-01","currency":"DOP","exchangeRate":null,"status":"ACCEPTED","dgii":{"trackId":"3fa85f64-5717-4562-b3fc-2c963f66afa6","code":"1","status":"Aceptado","messages":[],"sequenceUsed":true,"environment":"eCF"},"securityCode":"Ab3dE9","signedAt":"2026-11-01T14:05:09.000Z","issuer":{"rnc":"101000001"},"buyer":{"rnc":"131880681","foreignId":null,"name":"Cliente de Prueba SRL","email":"compras@example.com"},"totals":{"subtotal":33550,"discount":450,"itbis":6039,"withholdings":{"itbis":0,"isr":0},"tip":0,"total":39589},"items":[{"line":1,"description":"Servicio de consultoría","quantity":1,"unit":"UND","unitPrice":25000,"discount":0,"taxIndicator":1,"itbisRate":18,"itbis":4500,"withholdings":{"itbis":0,"isr":0},"goodOrService":2,"subtotal":25000,"total":29500},{"line":2,"description":"Licencia de software (12 meses)","quantity":2,"unit":"UND","unitPrice":4500,"discount":450,"taxIndicator":1,"itbisRate":18,"itbis":1539,"withholdings":{"itbis":0,"isr":0},"goodOrService":2,"subtotal":8550,"total":10089}],"links":{"self":"https://arithmetikcloud.app/api/v1/ecf/0b6f3c1e-8f0a-4d7e-9a51-2f4c7d9e1a23","xml":"https://arithmetikcloud.app/api/v1/ecf/0b6f3c1e-8f0a-4d7e-9a51-2f4c7d9e1a23/xml","pdf":"https://arithmetikcloud.app/api/v1/ecf/0b6f3c1e-8f0a-4d7e-9a51-2f4c7d9e1a23/pdf","stamp":"https://ecf.dgii.gov.do/ecf/consultatimbre?rncemisor=101000001&RncComprador=131880681&encf=E310000000123&fechaemision=01-11-2026&montototal=39589.00&fechafirma=01-11-2026%2010%3A05%3A09&codigoseguridad=Ab3dE9"},"createdAt":"2026-11-01T14:05:07.000Z"}},"consumo":{"summary":"32 de consumo en el sandbox (RFCE, sin trackId)","value":{"id":"7c2e9b41-5d3a-4f8e-b6a0-1e9d8c7b6a54","object":"ecf","environment":"sandbox","type":"32","encf":"E320002000501","externalId":null,"issueDate":"2026-11-01","currency":"DOP","exchangeRate":null,"status":"ACCEPTED","dgii":{"trackId":null,"code":"1","status":"Aceptado","messages":[],"sequenceUsed":true,"environment":"TesteCF"},"securityCode":"Xy7pQ2","signedAt":"2026-11-01T15:20:31.000Z","issuer":{"rnc":"132768396"},"buyer":{"rnc":null,"foreignId":null,"name":"Consumidor Final","email":null},"totals":{"subtotal":360,"discount":0,"itbis":54,"withholdings":{"itbis":0,"isr":0},"tip":0,"total":414},"items":[{"line":1,"description":"Café americano","quantity":2,"unit":"UND","unitPrice":150,"discount":0,"taxIndicator":1,"itbisRate":18,"itbis":54,"withholdings":{"itbis":0,"isr":0},"goodOrService":1,"subtotal":300,"total":354},{"line":2,"description":"Pan de agua","quantity":6,"unit":"UND","unitPrice":10,"discount":0,"taxIndicator":4,"itbisRate":0,"itbis":0,"withholdings":{"itbis":0,"isr":0},"goodOrService":1,"subtotal":60,"total":60}],"links":{"self":"https://sandbox.arithmetikcloud.app/api/v1/ecf/7c2e9b41-5d3a-4f8e-b6a0-1e9d8c7b6a54","xml":"https://sandbox.arithmetikcloud.app/api/v1/ecf/7c2e9b41-5d3a-4f8e-b6a0-1e9d8c7b6a54/xml","pdf":"https://sandbox.arithmetikcloud.app/api/v1/ecf/7c2e9b41-5d3a-4f8e-b6a0-1e9d8c7b6a54/pdf","stamp":"https://fc.dgii.gov.do/testecf/consultatimbrefc?rncemisor=132768396&encf=E320002000501&montototal=414.00&codigoseguridad=Xy7pQ2"},"createdAt":"2026-11-01T15:20:30.000Z"}},"rechazado":{"summary":"Rechazado por la DGII (reenviable: sequenceUsed false)","description":"Un rechazo de la DGII también es un 201: el resultado fiscal va en `status`.","value":{"id":"0b6f3c1e-8f0a-4d7e-9a51-2f4c7d9e1a23","object":"ecf","environment":"live","type":"31","encf":"E310000000123","externalId":"PED-2026-0001","issueDate":"2026-11-01","currency":"DOP","exchangeRate":null,"status":"REJECTED","dgii":{"trackId":"3fa85f64-5717-4562-b3fc-2c963f66afa6","code":"2","status":"Rechazado","messages":[{"code":null,"message":"El RNC del comprador no está registrado o no está activo en la DGII."}],"sequenceUsed":false,"environment":"eCF"},"securityCode":"Ab3dE9","signedAt":"2026-11-01T14:05:09.000Z","issuer":{"rnc":"101000001"},"buyer":{"rnc":"131880681","foreignId":null,"name":"Cliente de Prueba SRL","email":"compras@example.com"},"totals":{"subtotal":33550,"discount":450,"itbis":6039,"withholdings":{"itbis":0,"isr":0},"tip":0,"total":39589},"items":[{"line":1,"description":"Servicio de consultoría","quantity":1,"unit":"UND","unitPrice":25000,"discount":0,"taxIndicator":1,"itbisRate":18,"itbis":4500,"withholdings":{"itbis":0,"isr":0},"goodOrService":2,"subtotal":25000,"total":29500},{"line":2,"description":"Licencia de software (12 meses)","quantity":2,"unit":"UND","unitPrice":4500,"discount":450,"taxIndicator":1,"itbisRate":18,"itbis":1539,"withholdings":{"itbis":0,"isr":0},"goodOrService":2,"subtotal":8550,"total":10089}],"links":{"self":"https://arithmetikcloud.app/api/v1/ecf/0b6f3c1e-8f0a-4d7e-9a51-2f4c7d9e1a23","xml":"https://arithmetikcloud.app/api/v1/ecf/0b6f3c1e-8f0a-4d7e-9a51-2f4c7d9e1a23/xml","pdf":"https://arithmetikcloud.app/api/v1/ecf/0b6f3c1e-8f0a-4d7e-9a51-2f4c7d9e1a23/pdf","stamp":"https://ecf.dgii.gov.do/ecf/consultatimbre?rncemisor=101000001&RncComprador=131880681&encf=E310000000123&fechaemision=01-11-2026&montototal=39589.00&fechafirma=01-11-2026%2010%3A05%3A09&codigoseguridad=Ab3dE9"},"createdAt":"2026-11-01T14:05:07.000Z"}}}}}},"400":{"$ref":"#/components/responses/InvalidBody"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/EmissionConflict"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"422":{"$ref":"#/components/responses/InvalidEcf"},"429":{"$ref":"#/components/responses/QuotaOrRateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/EmissionUnavailable"}}},"get":{"operationId":"listEcfs","tags":["Comprobantes"],"summary":"Listar e-CF","description":"Los e-CF de la empresa del token en este ambiente, del más reciente al más antiguo, en páginas (ver *Paginación*).\n\nPor defecto incluye también los emitidos desde Arithmetik Cloud (`source=all`); `source=api` deja sólo los de la API. La lista no trae las líneas ni el timbre: para eso use `GET /ecf/{id}`.\n\n**Alcance requerido:** `ecf:read`.","x-required-scopes":["ecf:read"],"parameters":[{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/Cursor"},{"name":"type","in":"query","required":false,"description":"Sólo este TipoeCF.","schema":{"type":"string","enum":["31","32","33","34","41","43","44","45","46","47"]}},{"name":"status","in":"query","required":false,"description":"Sólo este estado.","schema":{"type":"string","enum":["PENDING","SENT","ACCEPTED","CONDITIONALLY_ACCEPTED","REJECTED","ANNULLED"]}},{"name":"from","in":"query","required":false,"description":"FechaEmision desde (inclusive), AAAA-MM-DD.","schema":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},{"name":"to","in":"query","required":false,"description":"FechaEmision hasta (inclusive), AAAA-MM-DD.","schema":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},{"name":"externalId","in":"query","required":false,"description":"Sólo el documento con esta referencia.","schema":{"type":"string","maxLength":64,"pattern":"^[\\x21-\\x7e](?:[\\x20-\\x7e]{0,62}[\\x21-\\x7e])?$"}},{"name":"source","in":"query","required":false,"description":"api = sólo lo emitido por la API; all = también lo emitido desde la app. Por defecto all.","schema":{"default":"all","type":"string","enum":["api","all"]}}],"responses":{"200":{"description":"Una página de e-CF.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Arithmetik-Environment":{"$ref":"#/components/headers/Arithmetik-Environment"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EcfList"},"examples":{"pagina":{"summary":"Primera página","value":{"object":"list","data":[{"id":"0b6f3c1e-8f0a-4d7e-9a51-2f4c7d9e1a23","object":"ecf","environment":"live","type":"31","encf":"E310000000123","externalId":"PED-2026-0001","issueDate":"2026-11-01","currency":"DOP","exchangeRate":null,"status":"ACCEPTED","dgii":{"trackId":"3fa85f64-5717-4562-b3fc-2c963f66afa6","code":"1","status":"Aceptado","messages":[],"sequenceUsed":true,"environment":"eCF"},"securityCode":"Ab3dE9","signedAt":"2026-11-01T14:05:09.000Z","issuer":{"rnc":"101000001"},"buyer":{"rnc":"131880681","foreignId":null,"name":"Cliente de Prueba SRL","email":"compras@example.com"},"totals":{"subtotal":33550,"discount":450,"itbis":6039,"withholdings":{"itbis":0,"isr":0},"tip":0,"total":39589},"createdAt":"2026-11-01T14:05:07.000Z","links":{"self":"https://arithmetikcloud.app/api/v1/ecf/0b6f3c1e-8f0a-4d7e-9a51-2f4c7d9e1a23","xml":"https://arithmetikcloud.app/api/v1/ecf/0b6f3c1e-8f0a-4d7e-9a51-2f4c7d9e1a23/xml","pdf":"https://arithmetikcloud.app/api/v1/ecf/0b6f3c1e-8f0a-4d7e-9a51-2f4c7d9e1a23/pdf"}}],"nextCursor":"eyJjIjoiMjAyNi0xMS0wMVQxNDowNTowNy4wMDBaIiwiaSI6IjBiNmYzYzFlIn0","hasMore":true}}}}}},"400":{"$ref":"#/components/responses/InvalidParameters"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}},"/ecf/{id}":{"get":{"operationId":"getEcf","tags":["Comprobantes"],"summary":"Consultar un e-CF","description":"El documento con sus líneas y el enlace al timbre de la DGII (`links.stamp`, la URL del código QR).\n\nSi está `SENT`, antes de responder la API le pregunta el resultado a la DGII (como mucho una vez cada 10 segundos por documento); si esa consulta falla, responde lo guardado. Un id de otra empresa o de otro ambiente responde `404`.\n\n**Alcance requerido:** `ecf:read`.","x-required-scopes":["ecf:read"],"parameters":[{"$ref":"#/components/parameters/EcfId"}],"responses":{"200":{"description":"El documento.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Arithmetik-Environment":{"$ref":"#/components/headers/Arithmetik-Environment"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Ecf"},"examples":{"aceptado":{"summary":"31 aceptado por la DGII","value":{"id":"0b6f3c1e-8f0a-4d7e-9a51-2f4c7d9e1a23","object":"ecf","environment":"live","type":"31","encf":"E310000000123","externalId":"PED-2026-0001","issueDate":"2026-11-01","currency":"DOP","exchangeRate":null,"status":"ACCEPTED","dgii":{"trackId":"3fa85f64-5717-4562-b3fc-2c963f66afa6","code":"1","status":"Aceptado","messages":[],"sequenceUsed":true,"environment":"eCF"},"securityCode":"Ab3dE9","signedAt":"2026-11-01T14:05:09.000Z","issuer":{"rnc":"101000001"},"buyer":{"rnc":"131880681","foreignId":null,"name":"Cliente de Prueba SRL","email":"compras@example.com"},"totals":{"subtotal":33550,"discount":450,"itbis":6039,"withholdings":{"itbis":0,"isr":0},"tip":0,"total":39589},"items":[{"line":1,"description":"Servicio de consultoría","quantity":1,"unit":"UND","unitPrice":25000,"discount":0,"taxIndicator":1,"itbisRate":18,"itbis":4500,"withholdings":{"itbis":0,"isr":0},"goodOrService":2,"subtotal":25000,"total":29500},{"line":2,"description":"Licencia de software (12 meses)","quantity":2,"unit":"UND","unitPrice":4500,"discount":450,"taxIndicator":1,"itbisRate":18,"itbis":1539,"withholdings":{"itbis":0,"isr":0},"goodOrService":2,"subtotal":8550,"total":10089}],"links":{"self":"https://arithmetikcloud.app/api/v1/ecf/0b6f3c1e-8f0a-4d7e-9a51-2f4c7d9e1a23","xml":"https://arithmetikcloud.app/api/v1/ecf/0b6f3c1e-8f0a-4d7e-9a51-2f4c7d9e1a23/xml","pdf":"https://arithmetikcloud.app/api/v1/ecf/0b6f3c1e-8f0a-4d7e-9a51-2f4c7d9e1a23/pdf","stamp":"https://ecf.dgii.gov.do/ecf/consultatimbre?rncemisor=101000001&RncComprador=131880681&encf=E310000000123&fechaemision=01-11-2026&montototal=39589.00&fechafirma=01-11-2026%2010%3A05%3A09&codigoseguridad=Ab3dE9"},"createdAt":"2026-11-01T14:05:07.000Z"}},"enProceso":{"summary":"Recibido por la DGII, esperando resultado","value":{"id":"0b6f3c1e-8f0a-4d7e-9a51-2f4c7d9e1a23","object":"ecf","environment":"live","type":"31","encf":"E310000000123","externalId":"PED-2026-0001","issueDate":"2026-11-01","currency":"DOP","exchangeRate":null,"status":"SENT","dgii":{"trackId":"3fa85f64-5717-4562-b3fc-2c963f66afa6","code":"3","status":"En Proceso","messages":[],"sequenceUsed":null,"environment":"eCF"},"securityCode":"Ab3dE9","signedAt":"2026-11-01T14:05:09.000Z","issuer":{"rnc":"101000001"},"buyer":{"rnc":"131880681","foreignId":null,"name":"Cliente de Prueba SRL","email":"compras@example.com"},"totals":{"subtotal":33550,"discount":450,"itbis":6039,"withholdings":{"itbis":0,"isr":0},"tip":0,"total":39589},"items":[{"line":1,"description":"Servicio de consultoría","quantity":1,"unit":"UND","unitPrice":25000,"discount":0,"taxIndicator":1,"itbisRate":18,"itbis":4500,"withholdings":{"itbis":0,"isr":0},"goodOrService":2,"subtotal":25000,"total":29500},{"line":2,"description":"Licencia de software (12 meses)","quantity":2,"unit":"UND","unitPrice":4500,"discount":450,"taxIndicator":1,"itbisRate":18,"itbis":1539,"withholdings":{"itbis":0,"isr":0},"goodOrService":2,"subtotal":8550,"total":10089}],"links":{"self":"https://arithmetikcloud.app/api/v1/ecf/0b6f3c1e-8f0a-4d7e-9a51-2f4c7d9e1a23","xml":"https://arithmetikcloud.app/api/v1/ecf/0b6f3c1e-8f0a-4d7e-9a51-2f4c7d9e1a23/xml","pdf":"https://arithmetikcloud.app/api/v1/ecf/0b6f3c1e-8f0a-4d7e-9a51-2f4c7d9e1a23/pdf","stamp":"https://ecf.dgii.gov.do/ecf/consultatimbre?rncemisor=101000001&RncComprador=131880681&encf=E310000000123&fechaemision=01-11-2026&montototal=39589.00&fechafirma=01-11-2026%2010%3A05%3A09&codigoseguridad=Ab3dE9"},"createdAt":"2026-11-01T14:05:07.000Z"}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}},"/ecf/{id}/xml":{"get":{"operationId":"getEcfXml","tags":["Comprobantes"],"summary":"Descargar el XML firmado","description":"El XML firmado del e-CF, tal como se envió a la DGII, como archivo adjunto `<e-NCF>.xml`.\n\n- `variant=rfce`: el resumen (RFCE) que se envía a la DGII en las facturas de consumo (32) de menos de RD$250,000. Otro tipo de documento responde `404`.\n- Si todavía no está firmado, `409 not_signed`.\n- En el sandbox el XML sale sin `<KeyInfo>` (el certificado de la plataforma); la firma sigue siendo válida (ver *Sandbox*).\n\n**Alcance requerido:** `ecf:read`.","x-required-scopes":["ecf:read"],"parameters":[{"$ref":"#/components/parameters/EcfId"},{"name":"variant","in":"query","required":false,"description":"`ecf` (por defecto): el e-CF firmado. `rfce`: el resumen de una factura de consumo de menos de RD$250,000.","schema":{"type":"string","enum":["ecf","rfce"],"default":"ecf"}}],"responses":{"200":{"description":"El XML firmado.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Arithmetik-Environment":{"$ref":"#/components/headers/Arithmetik-Environment"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"Content-Disposition":{"$ref":"#/components/headers/Content-Disposition"}},"content":{"application/xml":{"schema":{"type":"string"},"examples":{"live":{"summary":"e-CF firmado (resumido)","value":"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<ECF>\n  <Encabezado>\n    <Version>1.0</Version>\n    <IdDoc><TipoeCF>31</TipoeCF><eNCF>E310000000123</eNCF>…</IdDoc>\n    <Emisor><RNCEmisor>101000001</RNCEmisor>…</Emisor>\n    <Comprador><RNCComprador>131880681</RNCComprador>…</Comprador>\n    <Totales>…<MontoTotal>39589.00</MontoTotal></Totales>\n  </Encabezado>\n  <DetallesItems>…</DetallesItems>\n  <FechaHoraFirma>01-11-2026 10:05:09</FechaHoraFirma>\n  <Signature xmlns=\"http://www.w3.org/2000/09/xmldsig#\">\n    <SignedInfo>…</SignedInfo>\n    <SignatureValue>Ab3dE9…</SignatureValue>\n    <KeyInfo>…</KeyInfo>\n  </Signature>\n</ECF>"},"sandbox":{"summary":"Sandbox: sin KeyInfo (resumido)","value":"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<ECF>\n  <Encabezado>\n    <Version>1.0</Version>\n    <IdDoc><TipoeCF>31</TipoeCF><eNCF>E310000000123</eNCF>…</IdDoc>\n    <Emisor><RNCEmisor>132768396</RNCEmisor>…</Emisor>\n    <Comprador><RNCComprador>131880681</RNCComprador>…</Comprador>\n    <Totales>…<MontoTotal>39589.00</MontoTotal></Totales>\n  </Encabezado>\n  <DetallesItems>…</DetallesItems>\n  <FechaHoraFirma>01-11-2026 10:05:09</FechaHoraFirma>\n  <Signature xmlns=\"http://www.w3.org/2000/09/xmldsig#\">\n    <SignedInfo>…</SignedInfo>\n    <SignatureValue>Ab3dE9…</SignatureValue>\n    <!-- Arithmetik Sandbox: KeyInfo omitido -->\n  </Signature>\n</ECF>"}}}}},"400":{"$ref":"#/components/responses/InvalidParameters"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/NotSigned"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}},"/ecf/{id}/pdf":{"get":{"operationId":"getEcfPdf","tags":["Comprobantes"],"summary":"Descargar la representación impresa","description":"La representación impresa (PDF, carta o A4) con el formato de impresión que la empresa eligió en Arithmetik Cloud, como archivo adjunto `<e-NCF>.pdf`. En el sandbox lleva la marca «SANDBOX — SIN VALOR FISCAL».\n\n**Alcance requerido:** `ecf:read`.","x-required-scopes":["ecf:read"],"parameters":[{"$ref":"#/components/parameters/EcfId"}],"responses":{"200":{"description":"El PDF.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Arithmetik-Environment":{"$ref":"#/components/headers/Arithmetik-Environment"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"Content-Disposition":{"$ref":"#/components/headers/Content-Disposition"}},"content":{"application/pdf":{"schema":{"type":"string","format":"binary"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}},"/ecf/{id}/submit":{"post":{"operationId":"submitEcf","tags":["Comprobantes"],"summary":"Reenviar un e-CF a la DGII","description":"Vuelve a enviar a la DGII un documento `PENDING` que nunca llegó (sin `dgii.trackId`) o uno `REJECTED` cuyo e-NCF la DGII no usó (`dgii.sequenceUsed: false`), con el mismo e-NCF. Cualquier otro estado responde `409 not_resendable`.\n\nNo lleva cuerpo ni consume cuota: el e-NCF ya contó al emitirse. Responde el documento con el estado que quedó; si la DGII no respondió, un documento pendiente vuelve con el motivo en `dgii.messages`.\n\n**Alcance requerido:** `ecf:write`.","x-required-scopes":["ecf:write"],"parameters":[{"$ref":"#/components/parameters/EcfId"}],"responses":{"200":{"description":"El documento después del reenvío.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Arithmetik-Environment":{"$ref":"#/components/headers/Arithmetik-Environment"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Ecf"},"examples":{"enProceso":{"summary":"Recibido por la DGII","value":{"id":"0b6f3c1e-8f0a-4d7e-9a51-2f4c7d9e1a23","object":"ecf","environment":"live","type":"31","encf":"E310000000123","externalId":"PED-2026-0001","issueDate":"2026-11-01","currency":"DOP","exchangeRate":null,"status":"SENT","dgii":{"trackId":"3fa85f64-5717-4562-b3fc-2c963f66afa6","code":"3","status":"En Proceso","messages":[],"sequenceUsed":null,"environment":"eCF"},"securityCode":"Ab3dE9","signedAt":"2026-11-01T14:05:09.000Z","issuer":{"rnc":"101000001"},"buyer":{"rnc":"131880681","foreignId":null,"name":"Cliente de Prueba SRL","email":"compras@example.com"},"totals":{"subtotal":33550,"discount":450,"itbis":6039,"withholdings":{"itbis":0,"isr":0},"tip":0,"total":39589},"items":[{"line":1,"description":"Servicio de consultoría","quantity":1,"unit":"UND","unitPrice":25000,"discount":0,"taxIndicator":1,"itbisRate":18,"itbis":4500,"withholdings":{"itbis":0,"isr":0},"goodOrService":2,"subtotal":25000,"total":29500},{"line":2,"description":"Licencia de software (12 meses)","quantity":2,"unit":"UND","unitPrice":4500,"discount":450,"taxIndicator":1,"itbisRate":18,"itbis":1539,"withholdings":{"itbis":0,"isr":0},"goodOrService":2,"subtotal":8550,"total":10089}],"links":{"self":"https://arithmetikcloud.app/api/v1/ecf/0b6f3c1e-8f0a-4d7e-9a51-2f4c7d9e1a23","xml":"https://arithmetikcloud.app/api/v1/ecf/0b6f3c1e-8f0a-4d7e-9a51-2f4c7d9e1a23/xml","pdf":"https://arithmetikcloud.app/api/v1/ecf/0b6f3c1e-8f0a-4d7e-9a51-2f4c7d9e1a23/pdf","stamp":"https://ecf.dgii.gov.do/ecf/consultatimbre?rncemisor=101000001&RncComprador=131880681&encf=E310000000123&fechaemision=01-11-2026&montototal=39589.00&fechafirma=01-11-2026%2010%3A05%3A09&codigoseguridad=Ab3dE9"},"createdAt":"2026-11-01T14:05:07.000Z"}},"aceptado":{"summary":"31 aceptado por la DGII","value":{"id":"0b6f3c1e-8f0a-4d7e-9a51-2f4c7d9e1a23","object":"ecf","environment":"live","type":"31","encf":"E310000000123","externalId":"PED-2026-0001","issueDate":"2026-11-01","currency":"DOP","exchangeRate":null,"status":"ACCEPTED","dgii":{"trackId":"3fa85f64-5717-4562-b3fc-2c963f66afa6","code":"1","status":"Aceptado","messages":[],"sequenceUsed":true,"environment":"eCF"},"securityCode":"Ab3dE9","signedAt":"2026-11-01T14:05:09.000Z","issuer":{"rnc":"101000001"},"buyer":{"rnc":"131880681","foreignId":null,"name":"Cliente de Prueba SRL","email":"compras@example.com"},"totals":{"subtotal":33550,"discount":450,"itbis":6039,"withholdings":{"itbis":0,"isr":0},"tip":0,"total":39589},"items":[{"line":1,"description":"Servicio de consultoría","quantity":1,"unit":"UND","unitPrice":25000,"discount":0,"taxIndicator":1,"itbisRate":18,"itbis":4500,"withholdings":{"itbis":0,"isr":0},"goodOrService":2,"subtotal":25000,"total":29500},{"line":2,"description":"Licencia de software (12 meses)","quantity":2,"unit":"UND","unitPrice":4500,"discount":450,"taxIndicator":1,"itbisRate":18,"itbis":1539,"withholdings":{"itbis":0,"isr":0},"goodOrService":2,"subtotal":8550,"total":10089}],"links":{"self":"https://arithmetikcloud.app/api/v1/ecf/0b6f3c1e-8f0a-4d7e-9a51-2f4c7d9e1a23","xml":"https://arithmetikcloud.app/api/v1/ecf/0b6f3c1e-8f0a-4d7e-9a51-2f4c7d9e1a23/xml","pdf":"https://arithmetikcloud.app/api/v1/ecf/0b6f3c1e-8f0a-4d7e-9a51-2f4c7d9e1a23/pdf","stamp":"https://ecf.dgii.gov.do/ecf/consultatimbre?rncemisor=101000001&RncComprador=131880681&encf=E310000000123&fechaemision=01-11-2026&montototal=39589.00&fechafirma=01-11-2026%2010%3A05%3A09&codigoseguridad=Ab3dE9"},"createdAt":"2026-11-01T14:05:07.000Z"}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/SubmitConflict"},"422":{"$ref":"#/components/responses/NoteRejected"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/SubmitUnavailable"}}}},"/rnc/{rnc}":{"get":{"operationId":"lookupRnc","tags":["Consultas"],"summary":"Consultar un RNC o una cédula","description":"Busca un contribuyente en el registro de la DGII y devuelve su nombre o razón social y su nombre comercial. Útil para completar el comprador antes de emitir.\n\n**Alcance requerido:** `rnc:read`.","x-required-scopes":["rnc:read"],"parameters":[{"name":"rnc","in":"path","required":true,"description":"RNC (9 dígitos) o cédula (11 dígitos), sólo dígitos, sin guiones ni espacios.","schema":{"type":"string","pattern":"^(\\d{9}|\\d{11})$"},"example":"131880681"}],"responses":{"200":{"description":"El contribuyente.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Arithmetik-Environment":{"$ref":"#/components/headers/Arithmetik-Environment"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RncLookup"},"examples":{"encontrado":{"summary":"Contribuyente registrado","value":{"object":"rnc","rnc":"131880681","name":"CLIENTE DE PRUEBA SRL","commercialName":null}}}}}},"400":{"$ref":"#/components/responses/InvalidParameters"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/RegistryUnavailable"}}}},"/sequences":{"get":{"operationId":"listSequences","tags":["Consultas"],"summary":"Listar las secuencias de e-NCF","description":"Las secuencias de e-NCF activas de la empresa: próximo número, último autorizado, cuántos quedan y vencimiento.\n\nEl próximo número es orientativo: dos emisiones simultáneas toman números distintos. En el sandbox los bloques los asigna la plataforma a medida que se usan (`managedBySandbox: true`), así que un tipo que todavía no se emitió no aparece.\n\n**Alcance requerido:** `sequences:read`.","x-required-scopes":["sequences:read"],"responses":{"200":{"description":"Las secuencias activas.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Arithmetik-Environment":{"$ref":"#/components/headers/Arithmetik-Environment"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SequenceList"},"examples":{"live":{"summary":"Producción","value":{"object":"list","data":[{"type":"31","prefix":"E31","nextNumber":124,"endNumber":1000,"remaining":877,"expiresAt":"2027-12-31"},{"type":"32","prefix":"E32","nextNumber":5301,"endNumber":10000,"remaining":4700,"expiresAt":null},{"type":"34","prefix":"E34","nextNumber":18,"endNumber":500,"remaining":483,"expiresAt":null}]}},"sandbox":{"summary":"Sandbox (bloques asignados por la plataforma)","value":{"object":"list","data":[{"type":"31","prefix":"E31","nextNumber":2000013,"endNumber":2000500,"remaining":488,"expiresAt":"2028-12-31","managedBySandbox":true}]}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}},"/me":{"get":{"operationId":"getMe","tags":["Cuenta"],"summary":"Consultar el token y la empresa","description":"Quién llama: el token (sin el secreto), la empresa, los límites vigentes de la API y el ambiente de la DGII. En producción los límites son los de su plan de Arithmetik Cloud (`package.source: \"plan\"`). Sirve para comprobar que un token funciona. En el sandbox incluye `issuerRnc`, el RNC emisor con que salen los documentos a TesteCF.\n\n**Alcance requerido:** ninguno; sirve cualquier token válido.","x-required-scopes":[],"responses":{"200":{"description":"El token, la empresa y los límites de la API.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Arithmetik-Environment":{"$ref":"#/components/headers/Arithmetik-Environment"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Me"},"examples":{"live":{"summary":"Token live","value":{"object":"me","environment":"live","token":{"id":"5a7d9c1b-2e4f-4a6b-8c0d-1e2f3a4b5c6d","name":"ERP producción","prefix":"ak_live_9QwE","scopes":["ecf:write","ecf:read","rnc:read","sequences:read","usage:read"],"environment":"live","createdAt":"2026-10-15T13:20:00.000Z","expiresAt":null},"company":{"rnc":"101000001","businessName":"Empresa Ejemplo SRL","commercialName":"Ejemplo"},"package":{"code":"PLAN","name":"MICRO POS","source":"plan","monthlyEcfQuota":1000,"dailyEcfQuota":null,"overageAllowance":50,"rateLimitPerMinute":60,"maxTokens":5,"expiresAt":null},"dgiiEnvironment":"eCF"}},"sandbox":{"summary":"Token de sandbox","value":{"object":"me","environment":"sandbox","token":{"id":"9e8d7c6b-5a4f-4e3d-a2c1-b0a9f8e7d6c5","name":"Pruebas de integración","prefix":"ak_test_4fTq","scopes":["ecf:write","ecf:read","rnc:read","sequences:read","usage:read"],"environment":"sandbox","createdAt":"2026-10-30T18:02:11.000Z","expiresAt":"2027-01-28T18:02:11.000Z"},"company":{"rnc":"101000001","businessName":"Empresa Ejemplo SRL","commercialName":"Ejemplo"},"package":{"code":"SANDBOX","name":"Sandbox","source":"package","monthlyEcfQuota":1000,"dailyEcfQuota":100,"overageAllowance":0,"rateLimitPerMinute":30,"maxTokens":5,"expiresAt":null},"dgiiEnvironment":"TesteCF","issuerRnc":"132768396"}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/AccountForbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}},"/usage":{"get":{"operationId":"getUsage","tags":["Cuenta"],"summary":"Consultar el uso del período","description":"El uso del mes calendario (hora de República Dominicana) frente a los límites de la empresa. En producción es el consumo de su plan: los comprobantes del mes emitidos desde la aplicación y por la API; `remaining` es lo que queda hasta el bloqueo. Con un paquete API propio y en el sandbox, los e-CF emitidos por la API y, si el paquete tiene tope diario, también el del día. Cada e-NCF consumido cuenta, aunque la DGII rechace el documento; el reenvío no cuenta.\n\n**Alcance requerido:** `usage:read`.","x-required-scopes":["usage:read"],"responses":{"200":{"description":"El uso del período.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Arithmetik-Environment":{"$ref":"#/components/headers/Arithmetik-Environment"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Usage"},"examples":{"live":{"summary":"Producción: el uso del plan","value":{"object":"usage","environment":"live","package":{"code":"PLAN","name":"MICRO POS","source":"plan"},"month":{"period":"2026-11","used":312,"quota":1000,"overageAllowance":50,"hardCap":1050,"remaining":738},"day":null}},"sandbox":{"summary":"Sandbox","value":{"object":"usage","environment":"sandbox","package":{"code":"SANDBOX","name":"Sandbox","source":"package"},"month":{"period":"2026-11","used":42,"quota":1000,"overageAllowance":0,"hardCap":1000,"remaining":958},"day":{"period":"2026-11-01","used":7,"limit":100,"remaining":93}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}},"/health":{"get":{"operationId":"getHealth","tags":["Sistema"],"summary":"Estado del servicio","description":"Público, sin token. `status` es `degraded` cuando el servicio responde pero no puede emitir; en el sandbox, cuando el firmante de la plataforma no está disponible (`sandbox.signer`) o el sandbox no puede atender (el resto de la API responde entonces `503 sandbox_unavailable`). Responde `200` con el estado en el cuerpo, salvo con la API deshabilitada temporalmente: entonces `503 service_unavailable`.\n\n**Público:** no requiere token.","security":[],"x-required-scopes":[],"responses":{"200":{"description":"El estado del servicio.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Arithmetik-Environment":{"$ref":"#/components/headers/Arithmetik-Environment"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Health"},"examples":{"live":{"summary":"Producción","value":{"status":"ok","environment":"live","version":"1.80.0","time":"2026-11-01T14:00:00.000Z"}},"sandbox":{"summary":"Sandbox","value":{"status":"ok","environment":"sandbox","version":"1.80.0","time":"2026-11-01T14:00:00.000Z","sandbox":{"signer":"ok"}}},"degraded":{"summary":"Sandbox sin firmante","value":{"status":"degraded","environment":"sandbox","version":"1.80.0","time":"2026-11-01T14:00:00.000Z","sandbox":{"signer":"expired"}}}}}}},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/ApiDisabled"}}}},"/openapi.json":{"get":{"operationId":"getOpenApiDocument","tags":["Sistema"],"summary":"Especificación OpenAPI","description":"Esta especificación, en OpenAPI 3.1.1. Pública, con CORS abierto y en caché 5 minutos.\n\n**Público:** no requiere token.","security":[],"x-required-scopes":[],"responses":{"200":{"description":"El documento OpenAPI.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Arithmetik-Environment":{"$ref":"#/components/headers/Arithmetik-Environment"}},"content":{"application/json":{"schema":{"type":"object","description":"Documento OpenAPI 3.1.1.","additionalProperties":true}}}},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}}},"components":{"schemas":{"EcfCreateRequest":{"type":"object","properties":{"type":{"type":"string","enum":["31","32","33","34","41","43","44","45"],"description":"TipoeCF, como texto: 31, 32, 33, 34, 41, 43, 44 o 45. Los tipos 46 y 47 todavía no se emiten por la API (422 unsupported_feature), aunque sí se consultan."},"issueDate":{"description":"FechaEmision (hora de República Dominicana). Por defecto, hoy; nunca posterior a hoy.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"externalId":{"description":"Su referencia para este documento (1–64 caracteres ASCII). Única por empresa: un segundo e-CF con la misma referencia responde 409 external_id_taken.","type":"string","maxLength":64,"pattern":"^[\\x21-\\x7e](?:[\\x20-\\x7e]{0,62}[\\x21-\\x7e])?$"},"currency":{"default":"DOP","description":"TipoMoneda. Por defecto DOP. Sólo se aceptan monedas que valen más de RD$1 (exchangeRate mayor que 1): el yen (JPY), el peso colombiano (COP), el bolívar (VEF) y el gourde (HTG) todavía no se emiten por la API. Los comprobantes 44 se emiten sólo en DOP.","type":"string","enum":["DOP","USD","EUR","CAD","GBP","CHF","MXN","BRL","CHY","DKK","NOK","SEK","XDR","SCP"]},"exchangeRate":{"description":"TipoCambio: pesos por unidad de la moneda, mayor que 1, hasta 4 decimales. Obligatorio si currency no es DOP.","type":"number","exclusiveMinimum":1,"maximum":999.9999,"multipleOf":0.0001},"paymentMethod":{"default":"CASH","description":"FormaPago: CASH = efectivo, TRANSFER = transferencia o depósito, CHECK = cheque, CARD = tarjeta, CREDIT = venta a crédito (TipoPago 2). Por defecto CASH.","type":"string","enum":["CASH","TRANSFER","CARD","CHECK","CREDIT"]},"paymentTerms":{"description":"Obligatorio con paymentMethod CREDIT; no se envía con las demás formas de pago.","$ref":"#/components/schemas/EcfPaymentTerms"},"incomeType":{"default":"01","description":"TipoIngresos: 01 operacionales, 02 financieros, 03 extraordinarios, 04 arrendamientos, 05 venta de activo depreciable, 06 otros. Por defecto 01.","type":"string","enum":["01","02","03","04","05","06"]},"pricesIncludeTax":{"default":false,"description":"true si unitPrice y discount incluyen el ITBIS de la línea: el servidor los lleva a base (4 decimales) antes de calcular, como el editor de la app. El e-CF sale igual que con el precio base (IndicadorMontoGravado 0).","type":"boolean"},"legalTip":{"default":false,"description":"Propina legal del 10 % (impuesto adicional 001). No se admite en el 41 ni en el 43, cuyos formatos no tienen impuestos adicionales, ni todavía en el 44.","type":"boolean"},"buyer":{"description":"Comprador. Obligatorio en 31, 41, 44, 45, 46 y 47. Sin él, un 32 o un 43 va a Consumidor Final y una nota (33/34) toma el comprador del comprobante que modifica, si está en Arithmetik Cloud. El XML del 43 (gastos menores) no lleva comprador: en ese tipo sólo queda registrado en Arithmetik Cloud.","$ref":"#/components/schemas/EcfBuyer"},"items":{"minItems":1,"maxItems":1000,"type":"array","items":{"$ref":"#/components/schemas/EcfCreateItem"},"description":"Las líneas del comprobante (1 a 1000)."},"reference":{"description":"Obligatorio en las notas 33 y 34; no se envía en los demás tipos.","$ref":"#/components/schemas/EcfReference"},"notes":{"description":"Nota interna del documento (no viaja en el e-CF).","type":"string","maxLength":500}},"required":["type","items"],"additionalProperties":false,"description":"Datos para crear y emitir un e-CF. La API calcula los montos, toma el e-NCF de la secuencia de la empresa, firma y envía a la DGII en la misma petición. Requiere la cabecera Idempotency-Key. Los textos no admiten caracteres que el XML del e-CF no acepta (los de control, salvo el tabulador y los saltos de línea).","examples":[{"type":"31","externalId":"PED-2026-0001","buyer":{"rnc":"131880681","name":"Cliente de Prueba SRL"},"items":[{"description":"Servicio de consultoría","quantity":1,"unitPrice":25000,"taxIndicator":1,"goodOrService":2}]},{"type":"32","paymentMethod":"CARD","items":[{"description":"Café americano","quantity":2,"unitPrice":150,"taxIndicator":1},{"description":"Pan de agua","quantity":6,"unitPrice":10,"taxIndicator":4}]}]},"EcfCreateItem":{"type":"object","properties":{"description":{"type":"string","minLength":1,"maxLength":1000,"description":"NombreItem / DescripcionItem: lo vendido. Los primeros 80 caracteres van en NombreItem; si es más largo, el texto completo (hasta 1000) va además en DescripcionItem."},"quantity":{"type":"number","minimum":0.01,"maximum":1000000,"multipleOf":0.01,"description":"CantidadItem: mayor que 0, con 2 decimales como máximo."},"unitPrice":{"type":"number","minimum":0,"maximum":1000000000000,"multipleOf":0.0001,"description":"PrecioUnitarioItem, en la moneda del comprobante, con 4 decimales como máximo. Sin ITBIS, salvo que el cuerpo diga pricesIncludeTax: true. Mayor que 0 salvo en las líneas no facturables (taxIndicator 0) de una nota."},"unit":{"default":"UND","description":"UnidadMedida: abreviatura de la Tabla IV de la DGII (UND, KG, LB, HOR, LITRO…). Se aceptan DIA, M2, M3, YD2 y KWH por DÍA, M², M³, YD² y kWh.","type":"string","enum":["BARR","BOL","BOT","BULTO","BOTELLA","CAJ","CAJETILLA","CM","CIL","CONJ","CONT","DÍA","DOC","FARD","GL","GRAD","GR","GRAN","HOR","HUAC","KG","kWh","LB","LITRO","LOT","M","M²","M³","MMBTU","MIN","PAQ","PAR","PIE","PZA","ROL","SOBR","SEG","TANQUE","TONE","TUB","YD","YD²","UND","EA","MILLAR","SAC","LAT","DIS","BID","RAC","Q","GRT","P2","PAX","PULG","STAY","BDJ","HA","ML","MG","OZ","OZT","DIA","M2","M3","YD2","KWH"]},"discount":{"default":0,"description":"DescuentoMonto de la línea, en monto (no en porcentaje) y en la moneda del comprobante; no puede pasar de cantidad × precio. Con pricesIncludeTax, incluye el ITBIS como el precio. No se admite en el 43 (gastos menores), cuyo formato no tiene descuentos.","type":"number","minimum":0,"maximum":1000000000000,"multipleOf":0.01},"taxIndicator":{"type":"number","enum":[0,1,2,3,4],"description":"IndicadorFacturacion: 1 = ITBIS 18 %, 2 = ITBIS 16 %, 3 = gravado al 0 %, 4 = exento, 0 = no facturable (sólo en notas 33/34 que corrigen texto). En el 43 y el 44 todas las líneas son exentas (4). El indicador 5 (NG 07-07) todavía no está disponible en la API."},"goodOrService":{"description":"IndicadorBienoServicio: 1 = bien, 2 = servicio. Si falta, la línea sale como bien.","type":"number","enum":[1,2]},"itbisWithholdingRate":{"default":0,"description":"Tasa (%) de ITBIS retenido por el comprador → MontoITBISRetenido. Sólo en los tipos que admiten retenciones (31, 33, 34 y 41). En el 41 cada línea lleva al menos una retención (ITBIS o ISR) con monto mayor que cero: el formato e-CF 41 exige el bloque Retencion en cada ítem.","type":"number","enum":[0,30,100]},"isrWithholdingRate":{"default":0,"description":"Tasa (%) de ISR retenido por el comprador → MontoISRRetenido. Sólo en los tipos que admiten retenciones (31, 33, 34 y 41). En el 41 cada línea lleva al menos una retención (ITBIS o ISR) con monto mayor que cero: el formato e-CF 41 exige el bloque Retencion en cada ítem.","type":"number","enum":[0,1.5,2,3,5,10,15,25,27]}},"required":["description","quantity","unitPrice","taxIndicator"],"additionalProperties":false,"description":"Una línea del e-CF (DetallesItems/Item). Los montos se calculan en el servidor: no se envían.","examples":[{"description":"Servicio de consultoría","quantity":1,"unitPrice":25000,"taxIndicator":1,"goodOrService":2}]},"EcfBuyer":{"type":"object","properties":{"rnc":{"description":"RNCComprador: RNC (9 dígitos) o cédula (11 dígitos), sólo dígitos.","type":"string","maxLength":11,"pattern":"^(\\d{9}|\\d{11})$"},"foreignId":{"description":"IdentificadorExtranjero: pasaporte o identificación fiscal extranjera, hasta 20 caracteres. Va en el e-CF de los tipos 33, 34 y 44; los tipos 31, 41 y 45 exigen rnc. Un 32 no lo lleva: por debajo de RD$250,000 el comprador sale sin identificar, y desde RD$250,000 se emite con el RNC o la cédula del comprador (rnc). En el 43 sólo queda registrado: su e-CF no lleva comprador. Fuera del tipo 46 debe contener alguna letra: un número de 9 u 11 dígitos va en rnc.","type":"string","minLength":1,"maxLength":20},"name":{"description":"RazonSocialComprador, hasta 150 caracteres. Si se omite y el RNC está en el registro de contribuyentes de la DGII, se usa el nombre registrado.","type":"string","minLength":1,"maxLength":150},"email":{"description":"CorreoComprador, hasta 80 caracteres.","type":"string","maxLength":80,"pattern":"^\\w+(?:[-+.]\\w+)*@(?=[\\w.-]*\\.)\\w+(?:[-.]\\w+)*$"},"phone":{"description":"Teléfono del comprador (se guarda en su ficha; no va en el e-CF).","type":"string","minLength":1,"maxLength":30},"address":{"description":"DireccionComprador, hasta 100 caracteres.","type":"string","minLength":1,"maxLength":100}},"additionalProperties":false,"description":"El comprador (Comprador). Se busca en los clientes de la empresa por RNC/cédula (o identificador extranjero, o nombre si no tiene ninguno) y, si no existe, se crea. Con un cliente ya existente se usa su ficha y sólo se completan los datos vacíos.","examples":[{"rnc":"131880681","name":"Cliente de Prueba SRL","email":"compras@example.com"}]},"EcfReference":{"type":"object","properties":{"encf":{"type":"string","maxLength":13,"pattern":"^(E\\d{12}|B\\d{10})$","description":"NCFModificado: e-NCF o NCF del comprobante que la nota modifica. En el sandbox, un e-NCF debe ser de un e-CF que la empresa emitió en el sandbox."},"issueDate":{"description":"FechaNCFModificado. Obligatoria si el comprobante no está en Arithmetik Cloud; si está, manda la fecha registrada.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"modificationCode":{"type":"number","enum":[1,2,3,4],"description":"CodigoModificacion: 1 anula el NCF modificado, 2 corrige texto, 3 corrige montos, 4 reemplaza un NCF emitido en contingencia."},"reason":{"description":"RazonModificacion, hasta 90 caracteres.","type":"string","minLength":1,"maxLength":90}},"required":["encf","modificationCode"],"additionalProperties":false,"description":"InformacionReferencia de una nota de débito (33) o de crédito (34).","examples":[{"encf":"E310000000123","modificationCode":3,"reason":"Descuento por pronto pago"}]},"EcfPaymentTerms":{"type":"object","properties":{"days":{"type":"integer","minimum":1,"maximum":999,"description":"Días de crédito → TerminoPago «Neto N dias»."},"dueDate":{"description":"FechaLimitePago. Por defecto, la fecha de emisión más `days`.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},"required":["days"],"additionalProperties":false,"description":"Condiciones de una venta a crédito (paymentMethod CREDIT)."},"Ecf":{"type":"object","properties":{"id":{"type":"string","description":"Identificador del documento en Arithmetik Cloud."},"object":{"type":"string","const":"ecf"},"environment":{"type":"string","enum":["live","sandbox"],"description":"Ambiente de la API donde vive el documento."},"type":{"type":"string","enum":["31","32","33","34","41","43","44","45","46","47"],"description":"TipoeCF."},"encf":{"type":"string","description":"e-NCF asignado (E + tipo + 10 dígitos)."},"externalId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Su referencia, si la envió."},"issueDate":{"type":"string","description":"FechaEmision, AAAA-MM-DD."},"currency":{"type":"string","description":"TipoMoneda (DOP si es en pesos)."},"exchangeRate":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"TipoCambio; null en pesos."},"status":{"type":"string","enum":["PENDING","SENT","ACCEPTED","CONDITIONALLY_ACCEPTED","REJECTED","ANNULLED"],"description":"PENDING = todavía sin respuesta (sin firmar, sin enviar o con el envío fallido); SENT = recibido, esperando resultado; ACCEPTED / CONDITIONALLY_ACCEPTED / REJECTED = resultado de la DGII; ANNULLED = e-NCF anulado."},"dgii":{"$ref":"#/components/schemas/EcfDgii"},"securityCode":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"CodigoSeguridadeCF: 6 primeros caracteres del SignatureValue; null si no está firmado."},"signedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"FechaHoraFirma, como instante RFC 3339 en UTC; null si no está firmado."},"issuer":{"type":"object","properties":{"rnc":{"type":"string","description":"RNCEmisor. En el sandbox, el RNC de la plataforma con el que sale a TesteCF."}},"required":["rnc"],"description":"El emisor."},"buyer":{"anyOf":[{"$ref":"#/components/schemas/EcfBuyerOut"},{"type":"null"}]},"totals":{"$ref":"#/components/schemas/EcfTotals"},"createdAt":{"type":"string","description":"Instante RFC 3339 en UTC."},"items":{"type":"array","items":{"$ref":"#/components/schemas/EcfItem"},"description":"Las líneas."},"links":{"$ref":"#/components/schemas/EcfLinks"}},"required":["id","object","environment","type","encf","externalId","issueDate","currency","exchangeRate","status","dgii","securityCode","signedAt","issuer","buyer","totals","createdAt","items","links"],"description":"Un comprobante fiscal electrónico emitido por la empresa.","examples":[{"id":"0b6f3c1e-8f0a-4d7e-9a51-2f4c7d9e1a23","object":"ecf","environment":"live","type":"31","encf":"E310000000123","externalId":"PED-2026-0001","issueDate":"2026-11-01","currency":"DOP","exchangeRate":null,"status":"ACCEPTED","dgii":{"trackId":"3fa85f64-5717-4562-b3fc-2c963f66afa6","code":"1","status":"Aceptado","messages":[],"sequenceUsed":true,"environment":"eCF"},"securityCode":"Ab3dE9","signedAt":"2026-11-01T14:05:09.000Z","issuer":{"rnc":"101000001"},"buyer":{"rnc":"131880681","foreignId":null,"name":"Cliente de Prueba SRL","email":null},"totals":{"subtotal":25000,"discount":0,"itbis":4500,"withholdings":{"itbis":0,"isr":0},"tip":0,"total":29500},"items":[{"line":1,"description":"Servicio de consultoría","quantity":1,"unit":"UND","unitPrice":25000,"discount":0,"taxIndicator":1,"itbisRate":18,"itbis":4500,"withholdings":{"itbis":0,"isr":0},"goodOrService":2,"subtotal":25000,"total":29500}],"links":{"self":"https://arithmetikcloud.app/api/v1/ecf/0b6f3c1e-8f0a-4d7e-9a51-2f4c7d9e1a23","xml":"https://arithmetikcloud.app/api/v1/ecf/0b6f3c1e-8f0a-4d7e-9a51-2f4c7d9e1a23/xml","pdf":"https://arithmetikcloud.app/api/v1/ecf/0b6f3c1e-8f0a-4d7e-9a51-2f4c7d9e1a23/pdf","stamp":"https://ecf.dgii.gov.do/ecf/consultatimbre?rncemisor=101000001&RncComprador=131880681&encf=E310000000123&fechaemision=01-11-2026&montototal=29500.00&fechafirma=01-11-2026%2010%3A05%3A09&codigoseguridad=Ab3dE9"},"createdAt":"2026-11-01T14:05:07.000Z"}]},"EcfListItem":{"type":"object","properties":{"id":{"type":"string","description":"Identificador del documento en Arithmetik Cloud."},"object":{"type":"string","const":"ecf"},"environment":{"type":"string","enum":["live","sandbox"],"description":"Ambiente de la API donde vive el documento."},"type":{"type":"string","enum":["31","32","33","34","41","43","44","45","46","47"],"description":"TipoeCF."},"encf":{"type":"string","description":"e-NCF asignado (E + tipo + 10 dígitos)."},"externalId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Su referencia, si la envió."},"issueDate":{"type":"string","description":"FechaEmision, AAAA-MM-DD."},"currency":{"type":"string","description":"TipoMoneda (DOP si es en pesos)."},"exchangeRate":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"TipoCambio; null en pesos."},"status":{"type":"string","enum":["PENDING","SENT","ACCEPTED","CONDITIONALLY_ACCEPTED","REJECTED","ANNULLED"],"description":"PENDING = todavía sin respuesta (sin firmar, sin enviar o con el envío fallido); SENT = recibido, esperando resultado; ACCEPTED / CONDITIONALLY_ACCEPTED / REJECTED = resultado de la DGII; ANNULLED = e-NCF anulado."},"dgii":{"$ref":"#/components/schemas/EcfDgii"},"securityCode":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"CodigoSeguridadeCF: 6 primeros caracteres del SignatureValue; null si no está firmado."},"signedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"FechaHoraFirma, como instante RFC 3339 en UTC; null si no está firmado."},"issuer":{"type":"object","properties":{"rnc":{"type":"string","description":"RNCEmisor. En el sandbox, el RNC de la plataforma con el que sale a TesteCF."}},"required":["rnc"],"description":"El emisor."},"buyer":{"anyOf":[{"$ref":"#/components/schemas/EcfBuyerOut"},{"type":"null"}]},"totals":{"$ref":"#/components/schemas/EcfTotals"},"createdAt":{"type":"string","description":"Instante RFC 3339 en UTC."},"links":{"type":"object","properties":{"self":{"type":"string","description":"URL del documento en la API."},"xml":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"URL del XML firmado; null si todavía no está firmado."},"pdf":{"type":"string","description":"URL de la representación impresa (PDF)."}},"required":["self","xml","pdf"],"description":"Enlaces del documento (el timbre, en el detalle)."}},"required":["id","object","environment","type","encf","externalId","issueDate","currency","exchangeRate","status","dgii","securityCode","signedAt","issuer","buyer","totals","createdAt","links"],"description":"Un e-CF en la lista: el detalle sin las líneas ni el timbre."},"EcfList":{"type":"object","properties":{"object":{"type":"string","const":"list"},"data":{"type":"array","items":{"$ref":"#/components/schemas/EcfListItem"},"description":"Los documentos, del más reciente al más antiguo."},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Valor para `cursor` de la página siguiente; null si no hay más."},"hasMore":{"type":"boolean","description":"true si hay más documentos después de esta página."}},"required":["object","data","nextCursor","hasMore"],"description":"Una página de e-CF."},"EcfDgii":{"type":"object","properties":{"trackId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"TrackId de la recepción. null en el RFCE (32 de menos de RD$250,000) y si no se envió."},"code":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Código de la respuesta: el de ConsultaResultado (1 aceptado, 2 rechazado, 3 en proceso, 4 aceptado condicional) o el de RecepcionFC."},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Estado según la DGII: «Aceptado», «Aceptado Condicional», «Rechazado», «En Proceso» o «Anulado»; null si todavía no llegó."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/EcfDgiiMessage"},"description":"Mensajes de la DGII o del último intento de envío."},"sequenceUsed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"secuenciaUtilizada: false = la DGII no usó el e-NCF y el documento puede reenviarse corregido; null = no se sabe."},"environment":{"type":"string","enum":["TesteCF","CerteCF","eCF"],"description":"Ambiente de la DGII: TesteCF en el sandbox, eCF en producción."}},"required":["trackId","code","status","messages","sequenceUsed","environment"],"description":"El documento ante la DGII."},"EcfDgiiMessage":{"type":"object","properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Código del mensaje de la DGII, si lo trae."},"message":{"type":"string","description":"Texto del mensaje de la DGII (o del envío)."}},"required":["code","message"],"description":"Un mensaje de la DGII sobre el documento."},"EcfBuyerOut":{"type":"object","properties":{"rnc":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"RNCComprador (RNC o cédula)."},"foreignId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"IdentificadorExtranjero."},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"RazonSocialComprador."},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"CorreoComprador."}},"required":["rnc","foreignId","name","email"],"description":"El comprador del documento, como va en el XML. En el 43 (gastos menores), cuyo XML no lleva comprador, el registrado en Arithmetik Cloud."},"EcfTotals":{"type":"object","properties":{"subtotal":{"type":"number","description":"Monto gravado + exento, ya descontado y sin ITBIS (MontoGravadoTotal + MontoExento)."},"discount":{"type":"number","description":"Suma de los DescuentoMonto de las líneas."},"itbis":{"type":"number","description":"TotalITBIS."},"withholdings":{"type":"object","properties":{"itbis":{"type":"number","description":"TotalITBISRetenido."},"isr":{"type":"number","description":"TotalISRRetencion."}},"required":["itbis","isr"],"description":"Retenciones del comprador (informativas: MontoTotal no las resta)."},"tip":{"type":"number","description":"Propina legal (impuesto adicional 001)."},"total":{"type":"number","description":"MontoTotal."}},"required":["subtotal","discount","itbis","withholdings","tip","total"],"description":"Totales del documento, en su moneda, con 2 decimales."},"EcfItem":{"type":"object","properties":{"line":{"type":"integer","description":"NumeroLinea."},"description":{"type":"string","description":"Descripción de la línea."},"quantity":{"type":"number","description":"CantidadItem."},"unit":{"type":"string","description":"UnidadMedida (abreviatura de la Tabla IV)."},"unitPrice":{"type":"number","description":"PrecioUnitarioItem, sin ITBIS, hasta 4 decimales."},"discount":{"type":"number","description":"DescuentoMonto."},"taxIndicator":{"type":"integer","minimum":0,"maximum":5,"description":"IndicadorFacturacion (5 = NG 07-07, sólo en documentos hechos en la app)."},"itbisRate":{"type":"number","description":"Tasa de ITBIS de la línea (%)."},"itbis":{"type":"number","description":"ITBIS de la línea."},"withholdings":{"type":"object","properties":{"itbis":{"type":"number","description":"MontoITBISRetenido."},"isr":{"type":"number","description":"MontoISRRetenido."}},"required":["itbis","isr"],"description":"Retenciones de la línea."},"goodOrService":{"anyOf":[{"type":"number","const":1},{"type":"number","const":2}],"description":"IndicadorBienoServicio del XML: 1 bien, 2 servicio (sin dato guardado, la regla de la unidad)."},"subtotal":{"type":"number","description":"MontoItem: cantidad × precio − descuento."},"total":{"type":"number","description":"MontoItem + ITBIS (+ impuestos adicionales de la línea)."}},"required":["line","description","quantity","unit","unitPrice","discount","taxIndicator","itbisRate","itbis","withholdings","goodOrService","subtotal","total"],"description":"Una línea del documento."},"EcfLinks":{"type":"object","properties":{"self":{"type":"string","description":"URL de este documento en la API."},"xml":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"URL del XML firmado; null si todavía no está firmado."},"pdf":{"type":"string","description":"URL de la representación impresa (PDF)."},"stamp":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"URL del timbre de la DGII (ConsultaTimbre / ConsultaTimbreFC), la del código QR; null si no está firmado."}},"required":["self","xml","pdf","stamp"],"description":"Enlaces del documento."},"Me":{"type":"object","properties":{"object":{"type":"string","const":"me"},"environment":{"type":"string","enum":["live","sandbox"],"description":"Ambiente de esta URL base."},"token":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","description":"Nombre que le dio la empresa al crearlo."},"prefix":{"type":"string","description":"Primeros 12 caracteres del token, para reconocerlo."},"scopes":{"type":"array","items":{"type":"string","enum":["ecf:write","ecf:read","rnc:read","sequences:read","usage:read"]},"description":"Alcances del token."},"environment":{"type":"string","enum":["live","sandbox"]},"createdAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Instante RFC 3339."},"expiresAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Instante RFC 3339; null si no vence."}},"required":["id","name","prefix","scopes","environment","createdAt","expiresAt"],"description":"El token con que se llamó."},"company":{"type":"object","properties":{"rnc":{"type":"string","description":"RNC de la empresa en Arithmetik Cloud."},"businessName":{"type":"string","description":"Razón social."},"commercialName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Nombre comercial."}},"required":["rnc","businessName","commercialName"],"description":"La empresa del token."},"package":{"type":"object","properties":{"code":{"type":"string","description":"Código del paquete; `PLAN` cuando los límites salen del plan de la app."},"name":{"type":"string","description":"Nombre del paquete o, con `source: plan`, del plan de la app."},"source":{"type":"string","enum":["plan","package"],"description":"`plan`: los límites son los del plan de la app; la API viene incluida en todos los planes y lo que se emite por ella gasta el cupo mensual del plan. `package`: una suscripción API propia de la empresa (o el paquete del sandbox) manda."},"monthlyEcfQuota":{"type":"integer","description":"e-CF por mes calendario (hora RD); -1 = ilimitado."},"dailyEcfQuota":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"e-CF por día (hora RD); null = sin tope diario."},"overageAllowance":{"type":"integer","description":"Margen de cortesía sobre la cuota mensual."},"rateLimitPerMinute":{"type":"integer","description":"Peticiones por minuto de la empresa (todos sus tokens); 0 = sin límite: las respuestas no traen entonces las cabeceras RateLimit."},"maxTokens":{"type":"integer","description":"Tokens activos que admite el plan o el paquete."},"expiresAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Vencimiento del paquete (AAAA-MM-DD, fin de ese día en hora RD, o instante RFC 3339); null = no vence."}},"required":["code","name","source","monthlyEcfQuota","dailyEcfQuota","overageAllowance","rateLimitPerMinute","maxTokens","expiresAt"],"description":"Los límites vigentes de la API: los de su plan o, si tiene una suscripción API propia, los de su paquete."},"dgiiEnvironment":{"type":"string","enum":["TesteCF","eCF"],"description":"Ambiente de la DGII al que salen los documentos."},"issuerRnc":{"description":"Sólo en el sandbox: el RNCEmisor con que salen los documentos a TesteCF (el de la plataforma).","type":"string"}},"required":["object","environment","token","company","package","dgiiEnvironment"],"description":"Quién llama: el token, la empresa, sus límites (plan o paquete) y el ambiente."},"Usage":{"type":"object","properties":{"object":{"type":"string","const":"usage"},"environment":{"type":"string","enum":["live","sandbox"]},"package":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"source":{"type":"string","enum":["plan","package"],"description":"`plan`: los límites son los del plan de la app; la API viene incluida en todos los planes y lo que se emite por ella gasta el cupo mensual del plan. `package`: una suscripción API propia de la empresa (o el paquete del sandbox) manda."}},"required":["code","name","source"],"description":"De dónde salen los límites: el plan de la app (`PLAN`) o un paquete API."},"month":{"type":"object","properties":{"period":{"type":"string","description":"Mes calendario en hora RD, AAAA-MM."},"used":{"type":"integer","description":"e-CF del mes. Con `source: plan`: todos los comprobantes del plan en el mes, emitidos desde la aplicación o por la API. Con un paquete: los emitidos por la API (cada e-NCF consumido cuenta, aunque la DGII lo rechace)."},"quota":{"type":"integer","description":"Cuota del mes; -1 = ilimitada."},"overageAllowance":{"type":"integer","description":"Margen de cortesía."},"hardCap":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Donde se bloquea (cuota + margen); null = sin tope."},"remaining":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Lo que queda hasta el bloqueo; null = sin tope."}},"required":["period","used","quota","overageAllowance","hardCap","remaining"],"description":"Uso del mes."},"day":{"anyOf":[{"type":"object","properties":{"period":{"type":"string","description":"Día en hora RD, AAAA-MM-DD."},"used":{"type":"integer"},"limit":{"type":"integer"},"remaining":{"type":"integer"}},"required":["period","used","limit","remaining"]},{"type":"null"}],"description":"Uso del día; null si el paquete no tiene tope diario."}},"required":["object","environment","package","month","day"],"description":"Uso de e-CF del período frente a los límites del plan o del paquete."},"Sequence":{"type":"object","properties":{"type":{"type":"string","enum":["31","32","33","34","41","43","44","45","46","47"],"description":"TipoeCF."},"prefix":{"type":"string","description":"Prefijo del e-NCF (E + tipo)."},"nextNumber":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Próximo número a usar; null si la secuencia se agotó."},"endNumber":{"type":"integer","description":"Último número autorizado."},"remaining":{"type":"integer","description":"Números que quedan."},"expiresAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"FechaVencimientoSecuencia, AAAA-MM-DD; null en 32 y 34."},"managedBySandbox":{"description":"Sólo en el sandbox: la plataforma asigna los bloques de números de TesteCF a medida que se usan.","type":"boolean","const":true}},"required":["type","prefix","nextNumber","endNumber","remaining","expiresAt"],"description":"Una secuencia de e-NCF activa."},"SequenceList":{"type":"object","properties":{"object":{"type":"string","const":"list"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Sequence"}}},"required":["object","data"],"description":"Las secuencias de e-NCF activas de la empresa."},"RncLookup":{"type":"object","properties":{"object":{"type":"string","const":"rnc"},"rnc":{"type":"string","description":"RNC o cédula consultado."},"name":{"type":"string","description":"Nombre o razón social registrado en la DGII."},"commercialName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Nombre comercial registrado, si tiene."}},"required":["object","rnc","name","commercialName"],"description":"Un contribuyente del registro de la DGII."},"Health":{"type":"object","properties":{"status":{"type":"string","enum":["ok","degraded"],"description":"degraded: el servicio responde pero no puede emitir (en el sandbox: el firmante no está disponible o el sandbox no pasa la comprobación de cada petición; el resto de la API responde entonces 503 sandbox_unavailable)."},"environment":{"type":"string","enum":["live","sandbox"]},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Versión de Arithmetik Cloud."},"time":{"type":"string","description":"Hora del servidor, RFC 3339 en UTC."},"sandbox":{"description":"Sólo en el sandbox.","type":"object","properties":{"signer":{"type":"string","enum":["ok","missing","invalid","expired"],"description":"Estado del firmante del sandbox."}},"required":["signer"]}},"required":["status","environment","version","time"],"description":"Estado del servicio. Público: no requiere token."},"Problem":{"type":"object","properties":{"type":{"type":"string","description":"URL de la documentación del código."},"title":{"type":"string","description":"Título fijo del código."},"status":{"type":"integer","description":"Código HTTP."},"detail":{"type":"string","description":"Qué pasó en este caso, en español."},"instance":{"description":"Ruta de la petición.","type":"string"},"code":{"type":"string","enum":["unauthenticated","invalid_token","wrong_environment","token_revoked","token_expired","tenant_inactive","demo_tenant","tenant_suspended","environment_not_production","no_api_package","insufficient_scope","rate_limited","quota_exceeded","idempotency_key_required","idempotency_key_mismatch","idempotency_in_progress","external_id_taken","validation_failed","invalid_json","payload_too_large","invalid_request","not_found","method_not_allowed","invalid_state","send_in_progress","note_in_progress","not_signed","not_resendable","certificate_unavailable","sequence_unavailable","unsupported_feature","sandbox_unavailable","service_unavailable","internal_error"],"description":"Código estable del error."},"requestId":{"type":"string","description":"Identificador de la petición (también en la cabecera X-Request-Id)."},"errors":{"description":"Errores por campo (validation_failed, invalid_request, unsupported_feature).","type":"array","items":{"$ref":"#/components/schemas/ProblemError"}},"dgii":{"description":"El documento ante la DGII, cuando el problema depende de eso (p. ej. not_resendable).","type":"object","properties":{"status":{"description":"Estado según la DGII, con los mismos textos que dgii.status del e-CF: «Aceptado», «Aceptado Condicional», «Rechazado», «En Proceso» o «Anulado»; null si todavía no llegó. El estado del documento en la API (ACCEPTED, REJECTED…) es el `status` del e-CF, no este.","anyOf":[{"type":"string"},{"type":"null"}]},"code":{"anyOf":[{"type":"string"},{"type":"null"}]},"sequenceUsed":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"trackId":{"anyOf":[{"type":"string"},{"type":"null"}]},"messages":{"type":"array","items":{"$ref":"#/components/schemas/EcfDgiiMessage"}}}},"violatedPolicy":{"description":"quota_exceeded: el tope alcanzado.","type":"string","enum":["monthly","daily"]},"limit":{"description":"quota_exceeded / rate_limited: el límite.","type":"integer"},"used":{"description":"quota_exceeded: lo usado en el período.","type":"integer"},"retryAfterSeconds":{"description":"rate_limited: segundos de espera (también en Retry-After).","type":"integer"},"requiredScopes":{"description":"insufficient_scope: los alcances que exige la operación.","type":"array","items":{"type":"string"}},"missingScopes":{"description":"insufficient_scope: los que le faltan al token.","type":"array","items":{"type":"string"}},"id":{"description":"external_id_taken: el id del e-CF que ya tiene esa referencia.","type":"string"},"baseUrl":{"description":"wrong_environment: la URL base correcta para el token.","type":"string"},"tokenEnvironment":{"description":"wrong_environment: el ambiente del token.","type":"string","enum":["live","sandbox"]},"maxBytes":{"description":"payload_too_large: el tamaño máximo del cuerpo, en bytes.","type":"integer"},"noteGuard":{"description":"validation_failed de una nota 33/34: las observaciones de la revisión previa al envío.","type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"severity":{"type":"string","enum":["block","warn","info"]},"message":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["code","severity","message"]}}},"required":["type","title","status","detail","code","requestId"],"description":"Error de la API (RFC 9457, application/problem+json). `code` es estable: úselo en su código; `detail` explica este caso."},"ProblemError":{"type":"object","properties":{"pointer":{"description":"Puntero JSON (RFC 6901) al campo del cuerpo, p. ej. /items/0/unitPrice.","type":"string"},"parameter":{"description":"Parámetro de la consulta o de la ruta, p. ej. limit.","type":"string"},"message":{"type":"string","description":"Qué está mal y cómo corregirlo."}},"required":["message"],"description":"Un error de un campo o parámetro."}},"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"ak_live_… / ak_test_…","description":"Token de servicio de Arithmetik Cloud en la cabecera `Authorization: Bearer <token>`: `ak_live_` en producción o `ak_test_` en el sandbox, más 36 caracteres (44 en total). Se crea en *Configuración › Integración API* y se muestra una sola vez."}},"headers":{"X-Request-Id":{"description":"Identificador único de la petición. También va en `requestId` de los errores: inclúyalo si escribe a soporte.","schema":{"type":"string","format":"uuid"},"example":"6d1f0a7e-3c2b-4f5a-9e8d-7c6b5a4f3e2d"},"Arithmetik-Environment":{"description":"Ambiente que respondió: `live` (producción) o `sandbox`.","schema":{"type":"string","enum":["live","sandbox"]},"example":"sandbox"},"RateLimit":{"description":"Lo que queda de la ventana actual del límite por minuto de la empresa (draft-ietf-httpapi-ratelimit-headers-11): `r` = peticiones restantes, `t` = segundos hasta que se renueva. No se envía si el paquete no tiene límite por minuto (`rateLimitPerMinute: 0` en `GET /me`).","schema":{"type":"string"},"example":"\"minute\";r=57;t=42"},"RateLimit-Policy":{"description":"La política del límite por minuto: `q` = peticiones por ventana, `w` = segundos de la ventana. No se envía si el paquete no tiene límite por minuto.","schema":{"type":"string"},"example":"\"minute\";q=60;w=60"},"Retry-After":{"description":"Segundos que debe esperar antes de reintentar.","schema":{"type":"integer","minimum":1},"example":18},"Idempotent-Replayed":{"description":"`true` cuando la respuesta es la repetición de una petición anterior con la misma `Idempotency-Key`: no se emitió otro documento.","schema":{"type":"string","enum":["true"]},"example":"true"},"Location":{"description":"URL del e-CF en la API (la misma de `links.self`).","schema":{"type":"string","format":"uri"}},"WWW-Authenticate":{"description":"Desafío Bearer (RFC 6750). En `insufficient_scope` indica los alcances que exige la operación.","schema":{"type":"string"},"example":"Bearer realm=\"Arithmetik Cloud\", error=\"invalid_token\""},"Content-Disposition":{"description":"Archivo adjunto, nombrado con el e-NCF.","schema":{"type":"string"},"example":"attachment; filename=\"E310000000123.xml\""},"Allow":{"description":"Los métodos que admite la ruta (RFC 9110 §10.2.1). También va en la respuesta a `OPTIONS`.","schema":{"type":"string"},"example":"GET, HEAD, OPTIONS, POST"}},"parameters":{"IdempotencyKey":{"name":"Idempotency-Key","in":"header","required":true,"description":"Valor único por documento (recomendado: un UUID). Repítalo si reintenta la misma petición: obtendrá el mismo documento, nunca otro e-NCF.","schema":{"type":"string","minLength":1,"maxLength":255,"pattern":"^[\\x21-\\x7e]+$"},"example":"5f0c1d1e-2b7a-4c7e-9a43-1b2c3d4e5f60"},"Cursor":{"name":"cursor","in":"query","required":false,"description":"El `nextCursor` de la página anterior.","schema":{"type":"string","minLength":1,"maxLength":500}},"Limit":{"name":"limit","in":"query","required":false,"description":"Documentos por página, de 1 a 100. Por defecto 25.","schema":{"default":25,"type":"integer","minimum":1,"maximum":100}},"EcfId":{"name":"id","in":"path","required":true,"description":"El `id` del e-CF en Arithmetik Cloud (lo devuelven `POST /ecf` y `GET /ecf`).","schema":{"type":"string","minLength":1},"example":"0b6f3c1e-8f0a-4d7e-9a51-2f4c7d9e1a23"}},"responses":{"InvalidBody":{"description":"Falta la cabecera `Idempotency-Key` (o no es válida) o el cuerpo no es JSON válido. Códigos: `idempotency_key_required`, `invalid_json`.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Arithmetik-Environment":{"$ref":"#/components/headers/Arithmetik-Environment"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"idempotency_key_required":{"$ref":"#/components/examples/problem-idempotency_key_required"},"invalid_json":{"$ref":"#/components/examples/problem-invalid_json"}}}}},"InvalidParameters":{"description":"Un parámetro de la ruta o de la consulta no es válido; `errors[]` lo señala con `parameter`. Códigos: `invalid_request`.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Arithmetik-Environment":{"$ref":"#/components/headers/Arithmetik-Environment"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"invalid_request":{"$ref":"#/components/examples/problem-invalid_request"}}}}},"Unauthorized":{"description":"Falta el token, no es válido, es del otro ambiente, fue revocado o venció. Códigos: `unauthenticated`, `invalid_token`, `wrong_environment`, `token_revoked`, `token_expired`.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Arithmetik-Environment":{"$ref":"#/components/headers/Arithmetik-Environment"},"WWW-Authenticate":{"$ref":"#/components/headers/WWW-Authenticate"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"unauthenticated":{"$ref":"#/components/examples/problem-unauthenticated"},"invalid_token":{"$ref":"#/components/examples/problem-invalid_token"},"wrong_environment":{"$ref":"#/components/examples/problem-wrong_environment"},"token_revoked":{"$ref":"#/components/examples/problem-token_revoked"},"token_expired":{"$ref":"#/components/examples/problem-token_expired"}}}}},"AccountForbidden":{"description":"La empresa del token no puede usar la API en este momento. Códigos: `tenant_inactive`, `demo_tenant`, `tenant_suspended`, `environment_not_production`, `no_api_package`.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Arithmetik-Environment":{"$ref":"#/components/headers/Arithmetik-Environment"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"tenant_inactive":{"$ref":"#/components/examples/problem-tenant_inactive"},"demo_tenant":{"$ref":"#/components/examples/problem-demo_tenant"},"tenant_suspended":{"$ref":"#/components/examples/problem-tenant_suspended"},"environment_not_production":{"$ref":"#/components/examples/problem-environment_not_production"},"no_api_package":{"$ref":"#/components/examples/problem-no_api_package"}}}}},"Forbidden":{"description":"El token no tiene el alcance que exige la operación, o la empresa no puede usar la API en este momento. Códigos: `insufficient_scope`, `tenant_inactive`, `demo_tenant`, `tenant_suspended`, `environment_not_production`, `no_api_package`.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Arithmetik-Environment":{"$ref":"#/components/headers/Arithmetik-Environment"},"WWW-Authenticate":{"$ref":"#/components/headers/WWW-Authenticate"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"insufficient_scope":{"$ref":"#/components/examples/problem-insufficient_scope"},"tenant_inactive":{"$ref":"#/components/examples/problem-tenant_inactive"},"demo_tenant":{"$ref":"#/components/examples/problem-demo_tenant"},"tenant_suspended":{"$ref":"#/components/examples/problem-tenant_suspended"},"environment_not_production":{"$ref":"#/components/examples/problem-environment_not_production"},"no_api_package":{"$ref":"#/components/examples/problem-no_api_package"}}}}},"NotFound":{"description":"El recurso no existe o no pertenece a la empresa del token (ni a este ambiente). Códigos: `not_found`.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Arithmetik-Environment":{"$ref":"#/components/headers/Arithmetik-Environment"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"not_found":{"$ref":"#/components/examples/problem-not_found"}}}}},"MethodNotAllowed":{"description":"La ruta existe, pero no admite este método; la cabecera `Allow` dice los que admite. Lo responde cualquier ruta de la API. Códigos: `method_not_allowed`.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Arithmetik-Environment":{"$ref":"#/components/headers/Arithmetik-Environment"},"Allow":{"$ref":"#/components/headers/Allow"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"method_not_allowed":{"$ref":"#/components/examples/problem-method_not_allowed"}}}}},"EmissionConflict":{"description":"No se puede emitir ahora: la misma `Idempotency-Key` está en curso o se está emitiendo otra nota sobre el mismo comprobante (reintente tras `Retry-After`), el `externalId` ya existe, la empresa no puede firmar o no tiene secuencia de e-NCF disponible. Códigos: `idempotency_in_progress`, `note_in_progress`, `external_id_taken`, `certificate_unavailable`, `sequence_unavailable`, `invalid_state`.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Arithmetik-Environment":{"$ref":"#/components/headers/Arithmetik-Environment"},"Retry-After":{"$ref":"#/components/headers/Retry-After"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"idempotency_in_progress":{"$ref":"#/components/examples/problem-idempotency_in_progress"},"note_in_progress":{"$ref":"#/components/examples/problem-note_in_progress"},"external_id_taken":{"$ref":"#/components/examples/problem-external_id_taken"},"certificate_unavailable":{"$ref":"#/components/examples/problem-certificate_unavailable"},"sequence_unavailable":{"$ref":"#/components/examples/problem-sequence_unavailable"},"invalid_state":{"$ref":"#/components/examples/problem-invalid_state"}}}}},"SubmitConflict":{"description":"El documento no admite el reenvío en su estado, otro envío del mismo documento está en curso (reintente tras `Retry-After`) o la empresa no puede firmar. Códigos: `not_resendable`, `send_in_progress`, `certificate_unavailable`, `invalid_state`.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Arithmetik-Environment":{"$ref":"#/components/headers/Arithmetik-Environment"},"Retry-After":{"$ref":"#/components/headers/Retry-After"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"not_resendable":{"$ref":"#/components/examples/problem-not_resendable"},"send_in_progress":{"$ref":"#/components/examples/problem-send_in_progress"},"certificate_unavailable":{"$ref":"#/components/examples/problem-certificate_unavailable"},"invalid_state-submit":{"$ref":"#/components/examples/problem-invalid_state-submit"}}}}},"NotSigned":{"description":"El e-CF todavía no está firmado: no tiene XML firmado. Códigos: `not_signed`.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Arithmetik-Environment":{"$ref":"#/components/headers/Arithmetik-Environment"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"not_signed":{"$ref":"#/components/examples/problem-not_signed"}}}}},"PayloadTooLarge":{"description":"El cuerpo supera 1,000,000 bytes. Códigos: `payload_too_large`.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Arithmetik-Environment":{"$ref":"#/components/headers/Arithmetik-Environment"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"payload_too_large":{"$ref":"#/components/examples/problem-payload_too_large"}}}}},"InvalidEcf":{"description":"Los datos no cumplen el esquema o las reglas fiscales (`errors[]` señala cada campo con un puntero JSON), usan una función que la v1 todavía no admite, o la `Idempotency-Key` ya se usó con otro cuerpo. Códigos: `validation_failed`, `unsupported_feature`, `idempotency_key_mismatch`.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Arithmetik-Environment":{"$ref":"#/components/headers/Arithmetik-Environment"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"validation_failed":{"$ref":"#/components/examples/problem-validation_failed"},"unsupported_feature":{"$ref":"#/components/examples/problem-unsupported_feature"},"idempotency_key_mismatch":{"$ref":"#/components/examples/problem-idempotency_key_mismatch"}}}}},"NoteRejected":{"description":"La nota de débito o crédito no pasó la revisión previa al envío; `errors[]` y `noteGuard[]` dicen por qué. Códigos: `validation_failed`.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Arithmetik-Environment":{"$ref":"#/components/headers/Arithmetik-Environment"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"validation_failed-note":{"$ref":"#/components/examples/problem-validation_failed-note"}}}}},"RateLimited":{"description":"Se superó el límite de peticiones por minuto; espere los segundos de `Retry-After`. Códigos: `rate_limited`.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Arithmetik-Environment":{"$ref":"#/components/headers/Arithmetik-Environment"},"Retry-After":{"$ref":"#/components/headers/Retry-After"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"rate_limited":{"$ref":"#/components/examples/problem-rate_limited"}}}}},"QuotaOrRateLimited":{"description":"Se agotó la cuota de e-CF del período (`violatedPolicy`: `monthly` o `daily`) o se superó el límite de peticiones por minuto. `Retry-After` dice cuándo reintentar. Códigos: `quota_exceeded`, `rate_limited`.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Arithmetik-Environment":{"$ref":"#/components/headers/Arithmetik-Environment"},"Retry-After":{"$ref":"#/components/headers/Retry-After"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"quota_exceeded":{"$ref":"#/components/examples/problem-quota_exceeded"},"rate_limited":{"$ref":"#/components/examples/problem-rate_limited"}}}}},"InternalError":{"description":"Error no previsto. Escriba a soporte con el `requestId`. Códigos: `internal_error`.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Arithmetik-Environment":{"$ref":"#/components/headers/Arithmetik-Environment"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"internal_error":{"$ref":"#/components/examples/problem-internal_error"}}}}},"ApiDisabled":{"description":"La API está deshabilitada temporalmente. Códigos: `service_unavailable`.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Arithmetik-Environment":{"$ref":"#/components/headers/Arithmetik-Environment"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"service_unavailable":{"$ref":"#/components/examples/problem-service_unavailable"}}}}},"ServiceUnavailable":{"description":"La API está deshabilitada temporalmente o, en el sandbox, no puede atender en este momento. Códigos: `service_unavailable`, `sandbox_unavailable`.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Arithmetik-Environment":{"$ref":"#/components/headers/Arithmetik-Environment"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"service_unavailable":{"$ref":"#/components/examples/problem-service_unavailable"},"sandbox_unavailable-service":{"$ref":"#/components/examples/problem-sandbox_unavailable-service"}}}}},"EmissionUnavailable":{"description":"El sandbox no puede firmar o no puede atender en este momento, o la API está deshabilitada temporalmente. Códigos: `sandbox_unavailable`, `service_unavailable`.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Arithmetik-Environment":{"$ref":"#/components/headers/Arithmetik-Environment"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"sandbox_unavailable":{"$ref":"#/components/examples/problem-sandbox_unavailable"},"sandbox_unavailable-service":{"$ref":"#/components/examples/problem-sandbox_unavailable-service"},"service_unavailable":{"$ref":"#/components/examples/problem-service_unavailable"}}}}},"SubmitUnavailable":{"description":"La DGII no respondió al reenvío (el documento sigue como estaba), el sandbox no puede firmar o no puede atender, o la API está deshabilitada temporalmente. Códigos: `service_unavailable`, `sandbox_unavailable`.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Arithmetik-Environment":{"$ref":"#/components/headers/Arithmetik-Environment"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"service_unavailable-submit":{"$ref":"#/components/examples/problem-service_unavailable-submit"},"sandbox_unavailable":{"$ref":"#/components/examples/problem-sandbox_unavailable"},"sandbox_unavailable-service":{"$ref":"#/components/examples/problem-sandbox_unavailable-service"},"service_unavailable":{"$ref":"#/components/examples/problem-service_unavailable"}}}}},"RegistryUnavailable":{"description":"El registro de contribuyentes no responde, el sandbox no puede atender en este momento o la API está deshabilitada temporalmente. Códigos: `service_unavailable`, `sandbox_unavailable`.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Arithmetik-Environment":{"$ref":"#/components/headers/Arithmetik-Environment"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"service_unavailable-rnc":{"$ref":"#/components/examples/problem-service_unavailable-rnc"},"sandbox_unavailable-service":{"$ref":"#/components/examples/problem-sandbox_unavailable-service"},"service_unavailable":{"$ref":"#/components/examples/problem-service_unavailable"}}}}}},"examples":{"problem-unauthenticated":{"summary":"unauthenticated · Sin cabecera Authorization","value":{"type":"https://arithmetikcloud.app/desarrolladores/errores#unauthenticated","title":"Falta la autenticación","status":401,"detail":"Falta la cabecera Authorization: Bearer <token>.","instance":"/api/v1/ecf","code":"unauthenticated","requestId":"6d1f0a7e-3c2b-4f5a-9e8d-7c6b5a4f3e2d"}},"problem-invalid_token":{"summary":"invalid_token · Token incompleto o inexistente","value":{"type":"https://arithmetikcloud.app/desarrolladores/errores#invalid_token","title":"Token no válido","status":401,"detail":"El token no es válido. Revise que lo copió completo, sin espacios, en la cabecera Authorization: Bearer <token>.","instance":"/api/v1/ecf","code":"invalid_token","requestId":"6d1f0a7e-3c2b-4f5a-9e8d-7c6b5a4f3e2d"}},"problem-wrong_environment":{"summary":"wrong_environment · Token de sandbox en la URL de producción","value":{"type":"https://arithmetikcloud.app/desarrolladores/errores#wrong_environment","title":"Token de otro ambiente","status":401,"detail":"Este token es de sandbox (ak_test_). Úselo con la URL base https://sandbox.arithmetikcloud.app/api/v1.","instance":"/api/v1/ecf","code":"wrong_environment","requestId":"6d1f0a7e-3c2b-4f5a-9e8d-7c6b5a4f3e2d","tokenEnvironment":"sandbox","baseUrl":"https://sandbox.arithmetikcloud.app/api/v1"}},"problem-token_revoked":{"summary":"token_revoked · Token revocado","value":{"type":"https://arithmetikcloud.app/desarrolladores/errores#token_revoked","title":"Token revocado","status":401,"detail":"Este token fue revocado. Cree uno nuevo en Configuración › Integración API de Arithmetik Cloud.","instance":"/api/v1/ecf","code":"token_revoked","requestId":"6d1f0a7e-3c2b-4f5a-9e8d-7c6b5a4f3e2d"}},"problem-token_expired":{"summary":"token_expired · Token vencido","value":{"type":"https://arithmetikcloud.app/desarrolladores/errores#token_expired","title":"Token vencido","status":401,"detail":"Este token venció. Cree uno nuevo en Configuración › Integración API de Arithmetik Cloud.","instance":"/api/v1/ecf","code":"token_expired","requestId":"6d1f0a7e-3c2b-4f5a-9e8d-7c6b5a4f3e2d"}},"problem-tenant_inactive":{"summary":"tenant_inactive · Empresa inactiva","value":{"type":"https://arithmetikcloud.app/desarrolladores/errores#tenant_inactive","title":"Empresa inactiva","status":403,"detail":"La empresa de este token no está activa en Arithmetik Cloud.","instance":"/api/v1/ecf","code":"tenant_inactive","requestId":"6d1f0a7e-3c2b-4f5a-9e8d-7c6b5a4f3e2d"}},"problem-demo_tenant":{"summary":"demo_tenant · Empresa de demostración","value":{"type":"https://arithmetikcloud.app/desarrolladores/errores#demo_tenant","title":"Empresa de demostración","status":403,"detail":"Las empresas de demostración no pueden usar la API.","instance":"/api/v1/ecf","code":"demo_tenant","requestId":"6d1f0a7e-3c2b-4f5a-9e8d-7c6b5a4f3e2d"}},"problem-tenant_suspended":{"summary":"tenant_suspended · Suscripción suspendida","value":{"type":"https://arithmetikcloud.app/desarrolladores/errores#tenant_suspended","title":"Suscripción suspendida","status":403,"detail":"La suscripción de la empresa en Arithmetik Cloud está suspendida. Renuévela para seguir usando la API.","instance":"/api/v1/ecf","code":"tenant_suspended","requestId":"6d1f0a7e-3c2b-4f5a-9e8d-7c6b5a4f3e2d"}},"problem-environment_not_production":{"summary":"environment_not_production · Empresa fuera de Producción (live)","value":{"type":"https://arithmetikcloud.app/desarrolladores/errores#environment_not_production","title":"Empresa fuera de producción","status":403,"detail":"La empresa no está en el ambiente de Producción de la DGII; los tokens live sólo funcionan en Producción. Para pruebas use el sandbox.","instance":"/api/v1/ecf","code":"environment_not_production","requestId":"6d1f0a7e-3c2b-4f5a-9e8d-7c6b5a4f3e2d"}},"problem-no_api_package":{"summary":"no_api_package · Sin acceso a la API","value":{"type":"https://arithmetikcloud.app/desarrolladores/errores#no_api_package","title":"Sin acceso a la API","status":403,"detail":"La empresa no tiene un plan activo en Arithmetik Cloud, y la API de producción viene incluida en el plan. Escriba a soporte.","instance":"/api/v1/ecf","code":"no_api_package","requestId":"6d1f0a7e-3c2b-4f5a-9e8d-7c6b5a4f3e2d"}},"problem-insufficient_scope":{"summary":"insufficient_scope · Token de sólo consulta en una operación de emisión","value":{"type":"https://arithmetikcloud.app/desarrolladores/errores#insufficient_scope","title":"Alcance insuficiente","status":403,"detail":"Este token no tiene el alcance ecf:write, que exige esta operación.","instance":"/api/v1/ecf","code":"insufficient_scope","requestId":"6d1f0a7e-3c2b-4f5a-9e8d-7c6b5a4f3e2d","requiredScopes":["ecf:write"],"missingScopes":["ecf:write"]}},"problem-rate_limited":{"summary":"rate_limited · Límite por minuto superado","value":{"type":"https://arithmetikcloud.app/desarrolladores/errores#rate_limited","title":"Demasiadas peticiones","status":429,"detail":"Se superó el límite de 60 peticiones por minuto de la empresa. Vuelva a intentar en 18 s.","instance":"/api/v1/ecf","code":"rate_limited","requestId":"6d1f0a7e-3c2b-4f5a-9e8d-7c6b5a4f3e2d","limit":60,"retryAfterSeconds":18}},"problem-quota_exceeded":{"summary":"quota_exceeded · Cuota mensual de e-CF agotada","value":{"type":"https://arithmetikcloud.app/desarrolladores/errores#quota_exceeded","title":"Cuota de e-CF agotada","status":429,"detail":"Se alcanzó el tope mensual de e-CF de su plan (lo emitido desde la aplicación y por la API cuenta junto) (1050, cuota más margen de cortesía). Se renueva el primer día del mes, hora de República Dominicana.","instance":"/api/v1/ecf","code":"quota_exceeded","requestId":"6d1f0a7e-3c2b-4f5a-9e8d-7c6b5a4f3e2d","violatedPolicy":"monthly","limit":1050,"used":1050}},"problem-idempotency_key_required":{"summary":"idempotency_key_required · Sin Idempotency-Key","value":{"type":"https://arithmetikcloud.app/desarrolladores/errores#idempotency_key_required","title":"Falta Idempotency-Key","status":400,"detail":"Falta la cabecera Idempotency-Key: envíe un valor único por documento (p. ej. un UUID) y repítalo si reintenta la misma petición.","instance":"/api/v1/ecf","code":"idempotency_key_required","requestId":"6d1f0a7e-3c2b-4f5a-9e8d-7c6b5a4f3e2d"}},"problem-invalid_json":{"summary":"invalid_json · Cuerpo que no es JSON","value":{"type":"https://arithmetikcloud.app/desarrolladores/errores#invalid_json","title":"JSON no válido","status":400,"detail":"El cuerpo de la petición no es JSON válido.","instance":"/api/v1/ecf","code":"invalid_json","requestId":"6d1f0a7e-3c2b-4f5a-9e8d-7c6b5a4f3e2d"}},"problem-payload_too_large":{"summary":"payload_too_large · Cuerpo de más de 1 MB","value":{"type":"https://arithmetikcloud.app/desarrolladores/errores#payload_too_large","title":"Cuerpo demasiado grande","status":413,"detail":"El cuerpo de la petición supera el máximo de 1,000,000 bytes.","instance":"/api/v1/ecf","code":"payload_too_large","requestId":"6d1f0a7e-3c2b-4f5a-9e8d-7c6b5a4f3e2d","maxBytes":1000000}},"problem-idempotency_key_mismatch":{"summary":"idempotency_key_mismatch · Misma clave, otro cuerpo","value":{"type":"https://arithmetikcloud.app/desarrolladores/errores#idempotency_key_mismatch","title":"Idempotency-Key reutilizada","status":422,"detail":"Esta Idempotency-Key ya se usó con otra petición (otro cuerpo). Use una clave nueva para cada documento.","instance":"/api/v1/ecf","code":"idempotency_key_mismatch","requestId":"6d1f0a7e-3c2b-4f5a-9e8d-7c6b5a4f3e2d"}},"problem-idempotency_in_progress":{"summary":"idempotency_in_progress · La primera petición sigue en curso","value":{"type":"https://arithmetikcloud.app/desarrolladores/errores#idempotency_in_progress","title":"Petición en curso","status":409,"detail":"Otra petición con esta Idempotency-Key se está procesando. Reintente en unos segundos.","instance":"/api/v1/ecf","code":"idempotency_in_progress","requestId":"6d1f0a7e-3c2b-4f5a-9e8d-7c6b5a4f3e2d"}},"problem-external_id_taken":{"summary":"external_id_taken · externalId ya usado","value":{"type":"https://arithmetikcloud.app/desarrolladores/errores#external_id_taken","title":"externalId en uso","status":409,"detail":"La empresa ya tiene un e-CF con externalId «PED-2026-0001».","instance":"/api/v1/ecf","code":"external_id_taken","requestId":"6d1f0a7e-3c2b-4f5a-9e8d-7c6b5a4f3e2d","id":"0b6f3c1e-8f0a-4d7e-9a51-2f4c7d9e1a23"}},"problem-validation_failed":{"summary":"validation_failed · Datos que no cumplen el esquema o las reglas fiscales","value":{"type":"https://arithmetikcloud.app/desarrolladores/errores#validation_failed","title":"Datos no válidos","status":422,"detail":"La petición tiene 2 errores; revise errors[].","instance":"/api/v1/ecf","code":"validation_failed","requestId":"6d1f0a7e-3c2b-4f5a-9e8d-7c6b5a4f3e2d","errors":[{"pointer":"/buyer","message":"El tipo 31 (Factura de Crédito Fiscal Electrónica) exige el comprador: envíe buyer."},{"pointer":"/items/0/unitPrice","message":"Admite hasta 4 decimales."}]}},"problem-unsupported_feature":{"summary":"unsupported_feature · Función que la v1 todavía no admite","value":{"type":"https://arithmetikcloud.app/desarrolladores/errores#unsupported_feature","title":"Función no disponible","status":422,"detail":"La NG 07-07 (indicador 5 y contrato de administración) todavía no está disponible en la API: emita esos documentos desde Arithmetik Cloud.","instance":"/api/v1/ecf","code":"unsupported_feature","requestId":"6d1f0a7e-3c2b-4f5a-9e8d-7c6b5a4f3e2d","errors":[{"pointer":"/items/0/taxIndicator","message":"La NG 07-07 (indicador 5 y contrato de administración) todavía no está disponible en la API: emita esos documentos desde Arithmetik Cloud."}]}},"problem-invalid_request":{"summary":"invalid_request · Parámetro de consulta fuera de rango","value":{"type":"https://arithmetikcloud.app/desarrolladores/errores#invalid_request","title":"Petición no válida","status":400,"detail":"Parámetro limit: Debe ser menor o igual que 100.","instance":"/api/v1/ecf","code":"invalid_request","requestId":"6d1f0a7e-3c2b-4f5a-9e8d-7c6b5a4f3e2d","errors":[{"parameter":"limit","message":"Debe ser menor o igual que 100."}]}},"problem-not_found":{"summary":"not_found · Id inexistente o de otra empresa","value":{"type":"https://arithmetikcloud.app/desarrolladores/errores#not_found","title":"No encontrado","status":404,"detail":"No existe un e-CF con ese id en esta empresa.","instance":"/api/v1/ecf/0b6f3c1e-8f0a-4d7e-9a51-2f4c7d9e1a23","code":"not_found","requestId":"6d1f0a7e-3c2b-4f5a-9e8d-7c6b5a4f3e2d"}},"problem-method_not_allowed":{"summary":"method_not_allowed · Método que la ruta no admite","value":{"type":"https://arithmetikcloud.app/desarrolladores/errores#method_not_allowed","title":"Método no admitido","status":405,"detail":"Esta ruta no admite DELETE. Use GET o POST.","instance":"/api/v1/ecf","code":"method_not_allowed","requestId":"6d1f0a7e-3c2b-4f5a-9e8d-7c6b5a4f3e2d"}},"problem-certificate_unavailable":{"summary":"certificate_unavailable · Certificado digital ausente o vencido (live)","value":{"type":"https://arithmetikcloud.app/desarrolladores/errores#certificate_unavailable","title":"Certificado no disponible","status":409,"detail":"La empresa no tiene su certificado digital cargado en Arithmetik Cloud (Configuración › DGII), así que no puede firmar.","instance":"/api/v1/ecf","code":"certificate_unavailable","requestId":"6d1f0a7e-3c2b-4f5a-9e8d-7c6b5a4f3e2d"}},"problem-sequence_unavailable":{"summary":"sequence_unavailable · Sin secuencia de e-NCF disponible","value":{"type":"https://arithmetikcloud.app/desarrolladores/errores#sequence_unavailable","title":"Secuencia no disponible","status":409,"detail":"No hay secuencia fiscal electrónica activa para el tipo 31","instance":"/api/v1/ecf","code":"sequence_unavailable","requestId":"6d1f0a7e-3c2b-4f5a-9e8d-7c6b5a4f3e2d"}},"problem-note_in_progress":{"summary":"note_in_progress · Otra nota sobre el mismo comprobante en curso","value":{"type":"https://arithmetikcloud.app/desarrolladores/errores#note_in_progress","title":"Nota en curso","status":409,"detail":"Otra nota sobre E310000000123 se está emitiendo en este momento. Reintente en unos segundos.","instance":"/api/v1/ecf","code":"note_in_progress","requestId":"6d1f0a7e-3c2b-4f5a-9e8d-7c6b5a4f3e2d"}},"problem-invalid_state":{"summary":"invalid_state · Clave completada sin documento","value":{"type":"https://arithmetikcloud.app/desarrolladores/errores#invalid_state","title":"Estado no válido","status":409,"detail":"Esta Idempotency-Key se completó sin un documento. Use una clave nueva.","instance":"/api/v1/ecf","code":"invalid_state","requestId":"6d1f0a7e-3c2b-4f5a-9e8d-7c6b5a4f3e2d"}},"problem-invalid_state-submit":{"summary":"invalid_state · Reenvío que la DGII volvería a rechazar","value":{"type":"https://arithmetikcloud.app/desarrolladores/errores#invalid_state","title":"Estado no válido","status":409,"detail":"El vencimiento de la secuencia (2029-12-31) es posterior a lo que autoriza la DGII y la factura volvería a ser rechazada. Corríjalo en Secuencias con la fecha de su autorización y reenvíela.","instance":"/api/v1/ecf/0b6f3c1e-8f0a-4d7e-9a51-2f4c7d9e1a23/submit","code":"invalid_state","requestId":"6d1f0a7e-3c2b-4f5a-9e8d-7c6b5a4f3e2d"}},"problem-not_resendable":{"summary":"not_resendable · Documento ya aceptado","value":{"type":"https://arithmetikcloud.app/desarrolladores/errores#not_resendable","title":"No se puede reenviar","status":409,"detail":"La DGII ya aceptó este e-CF; no se reenvía.","instance":"/api/v1/ecf/0b6f3c1e-8f0a-4d7e-9a51-2f4c7d9e1a23/submit","code":"not_resendable","requestId":"6d1f0a7e-3c2b-4f5a-9e8d-7c6b5a4f3e2d","dgii":{"status":"Aceptado","sequenceUsed":true,"trackId":"3fa85f64-5717-4562-b3fc-2c963f66afa6"}}},"problem-send_in_progress":{"summary":"send_in_progress · Otro envío del mismo documento en curso","value":{"type":"https://arithmetikcloud.app/desarrolladores/errores#send_in_progress","title":"Envío en curso","status":409,"detail":"Este e-CF se está enviando a la DGII en este momento. Reintente en unos segundos.","instance":"/api/v1/ecf/0b6f3c1e-8f0a-4d7e-9a51-2f4c7d9e1a23/submit","code":"send_in_progress","requestId":"6d1f0a7e-3c2b-4f5a-9e8d-7c6b5a4f3e2d"}},"problem-not_signed":{"summary":"not_signed · Documento todavía sin firmar","value":{"type":"https://arithmetikcloud.app/desarrolladores/errores#not_signed","title":"Documento sin firmar","status":409,"detail":"El e-CF todavía no está firmado, así que no tiene XML firmado. Consulte su estado con GET /ecf/{id} o reenvíelo con POST /ecf/{id}/submit.","instance":"/api/v1/ecf/0b6f3c1e-8f0a-4d7e-9a51-2f4c7d9e1a23/xml","code":"not_signed","requestId":"6d1f0a7e-3c2b-4f5a-9e8d-7c6b5a4f3e2d"}},"problem-validation_failed-note":{"summary":"validation_failed · La nota supera el balance disponible del original","value":{"type":"https://arithmetikcloud.app/desarrolladores/errores#validation_failed","title":"Datos no válidos","status":422,"detail":"Esta nota (RD$1,180.00) supera lo que queda por acreditar de E310000000123: total RD$39,589.00 menos notas de crédito ya emitidas RD$39,000.00 = RD$589.00. La DGII no acepta notas de crédito que sumen más que el comprobante modificado.","instance":"/api/v1/ecf/0b6f3c1e-8f0a-4d7e-9a51-2f4c7d9e1a23/submit","code":"validation_failed","requestId":"6d1f0a7e-3c2b-4f5a-9e8d-7c6b5a4f3e2d","errors":[{"pointer":"/items","message":"Esta nota (RD$1,180.00) supera lo que queda por acreditar de E310000000123: total RD$39,589.00 menos notas de crédito ya emitidas RD$39,000.00 = RD$589.00. La DGII no acepta notas de crédito que sumen más que el comprobante modificado."}],"noteGuard":[{"code":"CREDIT_EXCEEDS_AVAILABLE","severity":"block","message":"Esta nota (RD$1,180.00) supera lo que queda por acreditar de E310000000123: total RD$39,589.00 menos notas de crédito ya emitidas RD$39,000.00 = RD$589.00. La DGII no acepta notas de crédito que sumen más que el comprobante modificado."}]}},"problem-sandbox_unavailable":{"summary":"sandbox_unavailable · El sandbox no puede firmar","value":{"type":"https://arithmetikcloud.app/desarrolladores/errores#sandbox_unavailable","title":"Sandbox no disponible","status":503,"detail":"El sandbox no puede firmar documentos en este momento. Vuelva a intentarlo más tarde.","instance":"/api/v1/ecf","code":"sandbox_unavailable","requestId":"6d1f0a7e-3c2b-4f5a-9e8d-7c6b5a4f3e2d"}},"problem-sandbox_unavailable-service":{"summary":"sandbox_unavailable · El sandbox no puede atender","value":{"type":"https://arithmetikcloud.app/desarrolladores/errores#sandbox_unavailable","title":"Sandbox no disponible","status":503,"detail":"El sandbox no está disponible en este momento. Vuelva a intentarlo más tarde; si persiste, escriba a soporte indicando el requestId.","instance":"/api/v1/me","code":"sandbox_unavailable","requestId":"6d1f0a7e-3c2b-4f5a-9e8d-7c6b5a4f3e2d"}},"problem-service_unavailable":{"summary":"service_unavailable · API deshabilitada temporalmente","value":{"type":"https://arithmetikcloud.app/desarrolladores/errores#service_unavailable","title":"Servicio no disponible","status":503,"detail":"La API está deshabilitada temporalmente. Vuelva a intentarlo más tarde.","instance":"/api/v1/ecf","code":"service_unavailable","requestId":"6d1f0a7e-3c2b-4f5a-9e8d-7c6b5a4f3e2d"}},"problem-service_unavailable-submit":{"summary":"service_unavailable · La DGII no respondió al reenvío","value":{"type":"https://arithmetikcloud.app/desarrolladores/errores#service_unavailable","title":"Servicio no disponible","status":503,"detail":"No se pudo reenviar el documento a la DGII. Vuelva a intentarlo más tarde.","instance":"/api/v1/ecf/0b6f3c1e-8f0a-4d7e-9a51-2f4c7d9e1a23/submit","code":"service_unavailable","requestId":"6d1f0a7e-3c2b-4f5a-9e8d-7c6b5a4f3e2d","dgii":{"status":"Rechazado","sequenceUsed":false}}},"problem-service_unavailable-rnc":{"summary":"service_unavailable · Registro de contribuyentes no disponible","value":{"type":"https://arithmetikcloud.app/desarrolladores/errores#service_unavailable","title":"Servicio no disponible","status":503,"detail":"La consulta del registro de contribuyentes no está disponible en este momento. Vuelva a intentarlo más tarde.","instance":"/api/v1/rnc/131880681","code":"service_unavailable","requestId":"6d1f0a7e-3c2b-4f5a-9e8d-7c6b5a4f3e2d"}},"problem-internal_error":{"summary":"internal_error · Error no previsto","value":{"type":"https://arithmetikcloud.app/desarrolladores/errores#internal_error","title":"Error interno","status":500,"detail":"Ocurrió un error interno. Si persiste, escriba a soporte indicando el requestId.","instance":"/api/v1/ecf","code":"internal_error","requestId":"6d1f0a7e-3c2b-4f5a-9e8d-7c6b5a4f3e2d"}}}}}