Invoices API
v1 endpoints for issuing fiscal credit invoices (E31), consumer invoices (E32) and the four special cases: special regimes, government, export and foreign payments. The same flow covers the complete cycle: validation, signing, DGII submission and response.
Overview
E31, E32, E44, E45 and E46 invoices share the same DTO (V1CreateInvoiceDto + V1LineDto + V1PaymentDto), the same operations (list, get, create, void, edit-amount, edit-text) and the same creation response ({ documentId, consultationUrl }). The foreign payment (E47) lives on this page, but its contract is an expense's: it uses supplierId and tipoBienServicioComprado. Two warnings before you start: the five invoice list routes return the same list, with every type mixed, and if you omit payments on create, the invoice is settled with the default payment method. This page documents the pattern using E32 as the reference.
Available operations
Shortcuts to the operations documented in detail below (E31, E32). E44–E47 operations share the same request body shape and are grouped by family under special cases.
-
GET /api/v1/consumer-invoices— Devuelve un PagedResult con todas las facturas del espacio de trabajo; esta ruta no filtra por tipo de e-CF. -
GET /api/v1/consumer-invoices/{id}— Devuelve el detalle completo de una factura de consumo (E32) por id. -
POST /api/v1/consumer-invoices— Emite una factura de consumo (E32) con receptor opcional y líneas de detalle. -
POST /api/v1/consumer-invoices/{id}/void— Anula la factura; si la DGII ya la aceptó, emite una nota de crédito (E34) y devuelve su creditNoteId. -
POST /api/v1/consumer-invoices/{id}/edit-amount— Emite una nota de crédito (E34) que corrige los montos de la factura y devuelve el documentId de esa nota; el original no se modifica. -
POST /api/v1/consumer-invoices/{id}/edit-text— Emite una nota de crédito (E34) que corrige la descripción de las líneas de la factura y devuelve el documentId de esa nota; el original no se modifica. -
GET /api/v1/fiscal-credit-invoices— Devuelve un PagedResult con todas las facturas del espacio de trabajo; esta ruta no filtra por tipo de e-CF. -
GET /api/v1/fiscal-credit-invoices/{id}— Devuelve el detalle completo de una factura de crédito fiscal (E31). -
POST /api/v1/fiscal-credit-invoices— Emite una factura de crédito fiscal (E31) para un cliente activo de tu catálogo. -
POST /api/v1/fiscal-credit-invoices/{id}/void— Anula la factura; si la DGII ya la aceptó, emite una nota de crédito (E34) y devuelve su creditNoteId. -
POST /api/v1/fiscal-credit-invoices/{id}/edit-amount— Emite una nota de crédito (E34) que corrige los montos de la factura y devuelve el documentId de esa nota; el original no se modifica. -
POST /api/v1/fiscal-credit-invoices/{id}/edit-text— Emite una nota de crédito (E34) que corrige la descripción de las líneas de la factura y devuelve el documentId de esa nota; el original no se modifica.
Consumer invoices (E32)
The /consumer-invoices resource issues E32 documents. The invoice is accepted immediately when data passes validation; the final DGII status arrives later via webhook.
/api/v1/consumer-invoices X-Api-Key Stable Devuelve un PagedResult con todas las facturas del espacio de trabajo; esta ruta no filtra por tipo de e-CF.
| Name | Type | Description |
|---|---|---|
pageNumber query | integer Optional | Página solicitada. Por defecto 1. |
pageSize query | integer Optional | Tamaño de página. Por defecto 10. La API no impone un máximo. |
search query | string Optional | Filtra por número de comprobante o nombre del receptor. |
/api/v1/consumer-invoices/{id} X-Api-Key Stable Devuelve el detalle completo de una factura de consumo (E32) por id.
| Name | Type | Description |
|---|---|---|
id path | string (uuid) Required | Identificador del comprobante en factura.com.do. |
/api/v1/consumer-invoices X-Api-Key Stable Emite una factura de consumo (E32) con receptor opcional y líneas de detalle.
| Name | Type | Description |
|---|---|---|
branchId body | string (uuid) Required | Identificador de la sucursal emisora dentro del espacio de trabajo. |
sequence body | string Optional | Opcional. NCF E32 a usar (formato `E320000000000`). Si lo omites, la API toma el siguiente de la secuencia activa; si no hay una secuencia E32 activa, responde `500`. |
externalReference body | string Optional | Referencia externa libre del emisor (orden, ticket, ID en tu sistema). |
issuedAt body | string (ISO 8601) Required | Fecha de emisión del comprobante. |
paymentTermId body | integer Required | Identificador del término de pago aplicable. |
limitDate body | string (ISO 8601) Required | Fecha límite asociada al término de pago. |
customerId body | string (uuid) Optional | Identificador del receptor en el catálogo de contactos. Opcional para consumo final sin RNC. |
currencyId body | integer Required | Identificador de la moneda del comprobante. |
currencyRate body | decimal Required | Tasa de cambio aplicada (1 cuando la moneda coincide con DOP). |
freight body | decimal Optional | Monto del flete o transporte cuando aplica. |
notes body | string Optional | Notas libres impresas en el comprobante. |
lines body | V1LineDto[] Required | Lista de líneas con producto, cantidad, precio unitario, descuento e impuestos aplicables. |
payments body | V1PaymentDto[] Optional | Opcional. Si lo omites, la API registra un único pago por el total con la forma de pago por defecto y la factura queda saldada; envía los pagos reales si la venta es a crédito. Un pago sin `paymentMethodId` usa la forma de pago por defecto. |
/api/v1/consumer-invoices/{id}/void X-Api-Key Stable Anula la factura; si la DGII ya la aceptó, emite una nota de crédito (E34) y devuelve su creditNoteId.
| Name | Type | Description |
|---|---|---|
id path | string (uuid) Required | Identificador del comprobante en factura.com.do. |
/api/v1/consumer-invoices/{id}/edit-amount X-Api-Key Stable Emite una nota de crédito (E34) que corrige los montos de la factura y devuelve el documentId de esa nota; el original no se modifica.
| Name | Type | Description |
|---|---|---|
id path | string (uuid) Required | Identificador del comprobante. |
lines body | V1EditAmountLineDto[] Required | Lista de líneas a editar. Cada elemento referencia el orden de la línea original y los campos que se desean sobreescribir. |
lines[].order body | integer Required | Posición de la línea en el comprobante original (1 para la primera, 2 para la segunda…). |
lines[].quantity body | decimal Optional | Nueva cantidad. Solo se aplica si se envía. |
lines[].unitPrice body | decimal Optional | Nuevo precio unitario. Solo se aplica si se envía. |
lines[].discount body | decimal Optional | Nuevo descuento aplicable a la línea. |
lines[].recharge body | decimal Optional | Nuevo recargo aplicable a la línea. |
lines[].taxes body | V1TaxDto[] Optional | Nueva lista de impuestos aplicables a la línea. |
lines[].withholdings body | V1WithholdingDto[] Optional | Nueva lista de retenciones aplicables a la línea. |
/api/v1/consumer-invoices/{id}/edit-text X-Api-Key Stable Emite una nota de crédito (E34) que corrige la descripción de las líneas de la factura y devuelve el documentId de esa nota; el original no se modifica.
| Name | Type | Description |
|---|---|---|
id path | string (uuid) Required | Identificador del comprobante. |
lines body | V1EditTextLineDto[] Required | Lista de líneas a editar. Cada elemento referencia el orden de la línea original y la nueva descripción. |
lines[].order body | integer Required | Posición de la línea en el comprobante original (1 para la primera, 2 para la segunda…). |
lines[].description body | string Required | Nueva descripción a imprimir en la línea. |
Example: create E32
POST /api/v1/consumer-invoices
curl -X POST https://tuempresa.factura.com.do/api/v1/consumer-invoices \ -H "X-Api-Key: $FACTURA_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "branchId": "b1a2c3d4-e5f6-4789-abcd-1234567890ab", "sequence": "E320000000001", "issuedAt": "2026-05-08T10:00:00Z", "paymentTermId": 1, "limitDate": "2026-05-08T10:00:00Z", "currencyId": 1, "currencyRate": 1, "lines": [ { "code": "SRV-001", "order": 1, "description": "Consultoría", "isService": true, "quantity": 1, "unitId": 1, "unitPrice": 4500.00, "isExempt": false, "taxes": [{ "taxId": "3a5e98e0-33ff-44be-bd37-e3f9b35a25e2", "rate": 18.0, "taxTypeId": 1 }] } ], "payments": [ { "reference": "REF-1", "amount": 5310.00 } ] }'const res = await fetch( "https://tuempresa.factura.com.do/api/v1/consumer-invoices", { method: "POST", headers: { "X-Api-Key": process.env.FACTURA_API_KEY!, "Content-Type": "application/json", }, body: JSON.stringify(invoice), },);if (!res.ok) throw new Error(`factura.com.do: ${res.status}`);const { documentId, consultationUrl } = await res.json();Response
{ "documentId": "7c9e6679-7425-40de-944b-e07fc1f90ae7", "consultationUrl": "https://ecf.dgii.gov.do/ecf/ConsultaTimbre?RNCEmisor=131000001&ENCF=E310000000001&…"}Example: 200 response with success: false on double void
The void slice returns the handler result as-is: the response arrives with 200 OK even when success is false. Always read the success field before assuming the operation took effect. If the DGII had already accepted the invoice, void does not cancel it right away: it issues a credit note (E34) and returns its id in creditNoteId; the invoice is voided once the DGII approves that note. Likewise, edit-amount and edit-text do not edit the invoice: they issue a new E34 and return that note's documentId.
{ "documentId": "7c9e6679-7425-40de-944b-e07fc1f90ae7", "creditNoteId": null, "success": false, "message": "Error al anular factura: Invoice is already cancelled."}Fiscal credit (E31)
The /fiscal-credit-invoices resource issues E31 documents, required for recipients with an RNC. The body is the same as E32 plus optional customerId and per-line withholdings. Before accepting the POST the API validates that the referenced customer is active in your catalog and that the body meets the E31-specific rule: at least one tax per document.
/api/v1/fiscal-credit-invoices X-Api-Key Stable Devuelve un PagedResult con todas las facturas del espacio de trabajo; esta ruta no filtra por tipo de e-CF.
| Name | Type | Description |
|---|---|---|
pageNumber query | integer Optional | Página solicitada. Por defecto 1. |
pageSize query | integer Optional | Tamaño de página. Por defecto 10. La API no impone un máximo. |
search query | string Optional | Filtra por número de comprobante, RNC del receptor o nombre. |
/api/v1/fiscal-credit-invoices/{id} X-Api-Key Stable Devuelve el detalle completo de una factura de crédito fiscal (E31).
| Name | Type | Description |
|---|---|---|
id path | string (uuid) Required | Identificador del comprobante. |
/api/v1/fiscal-credit-invoices X-Api-Key Stable Emite una factura de crédito fiscal (E31) para un cliente activo de tu catálogo.
| Name | Type | Description |
|---|---|---|
branchId body | string (uuid) Required | Identificador de la sucursal emisora dentro del espacio de trabajo. |
sequence body | string Optional | Opcional. NCF E31 a usar (formato `E310000000000`). Si lo omites, la API toma el siguiente de la secuencia activa; si no hay una secuencia E31 activa, responde `500`. |
externalReference body | string Optional | Referencia externa libre del emisor (orden, ticket, ID en tu sistema). |
issuedAt body | string (ISO 8601) Required | Fecha de emisión del comprobante. |
paymentTermId body | integer Required | Identificador del término de pago aplicable. |
limitDate body | string (ISO 8601) Required | Fecha límite asociada al término de pago. |
customerId body | string (uuid) Required | Cliente receptor. Debe estar activo en tu catálogo. Obligatorio para E31. |
currencyId body | integer Required | Identificador de la moneda del comprobante. |
currencyRate body | decimal Required | Tasa de cambio aplicada (1 cuando la moneda coincide con DOP). |
freight body | decimal Optional | Monto del flete o transporte cuando aplica. |
notes body | string Optional | Notas libres impresas en el comprobante. |
lines body | V1LineDto[] Required | Líneas con producto, cantidad, precio unitario, descuento, ITBIS y retenciones aplicables. |
payments body | V1PaymentDto[] Optional | Opcional. Si lo omites, la API registra un único pago por el total con la forma de pago por defecto y la factura queda saldada; envía los pagos reales si la venta es a crédito. Un pago sin `paymentMethodId` usa la forma de pago por defecto. |
/api/v1/fiscal-credit-invoices/{id}/void X-Api-Key Stable Anula la factura; si la DGII ya la aceptó, emite una nota de crédito (E34) y devuelve su creditNoteId.
| Name | Type | Description |
|---|---|---|
id path | string (uuid) Required | Identificador del comprobante. |
/api/v1/fiscal-credit-invoices/{id}/edit-amount X-Api-Key Stable Emite una nota de crédito (E34) que corrige los montos de la factura y devuelve el documentId de esa nota; el original no se modifica.
| Name | Type | Description |
|---|---|---|
id path | string (uuid) Required | Identificador del comprobante. |
lines body | V1EditAmountLineDto[] Required | Lista de líneas a editar. Cada elemento referencia el orden de la línea original y los campos que se desean sobreescribir. |
lines[].order body | integer Required | Posición de la línea en el comprobante original (1 para la primera, 2 para la segunda…). |
lines[].quantity body | decimal Optional | Nueva cantidad. Solo se aplica si se envía. |
lines[].unitPrice body | decimal Optional | Nuevo precio unitario. Solo se aplica si se envía. |
lines[].discount body | decimal Optional | Nuevo descuento aplicable a la línea. |
lines[].recharge body | decimal Optional | Nuevo recargo aplicable a la línea. |
lines[].taxes body | V1TaxDto[] Optional | Nueva lista de impuestos aplicables a la línea. |
lines[].withholdings body | V1WithholdingDto[] Optional | Nueva lista de retenciones aplicables a la línea. |
/api/v1/fiscal-credit-invoices/{id}/edit-text X-Api-Key Stable Emite una nota de crédito (E34) que corrige la descripción de las líneas de la factura y devuelve el documentId de esa nota; el original no se modifica.
| Name | Type | Description |
|---|---|---|
id path | string (uuid) Required | Identificador del comprobante. |
lines body | V1EditTextLineDto[] Required | Lista de líneas a editar. Cada elemento referencia el orden de la línea original y la nueva descripción. |
lines[].order body | integer Required | Posición de la línea en el comprobante original (1 para la primera, 2 para la segunda…). |
lines[].description body | string Required | Nueva descripción a imprimir en la línea. |
Example: create E31 with withholding
POST /api/v1/fiscal-credit-invoices
curl -X POST https://tuempresa.factura.com.do/api/v1/fiscal-credit-invoices \ -H "X-Api-Key: $FACTURA_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "branchId": "b1a2c3d4-e5f6-4789-abcd-1234567890ab", "sequence": "E310000000001", "customerId": "5f0c3a8e-2b7d-4c1e-9a6f-3d8b2e1c7a40", "issuedAt": "2026-05-08T10:00:00Z", "paymentTermId": 1, "limitDate": "2026-06-07T10:00:00Z", "currencyId": 1, "currencyRate": 1, "lines": [ { "code": "PROD-21", "order": 1, "description": "Servicio profesional facturado a empresa", "isService": true, "quantity": 10, "unitId": 1, "unitPrice": 2500.00, "taxes": [{ "taxId": "3a5e98e0-33ff-44be-bd37-e3f9b35a25e2", "rate": 18.0, "taxTypeId": 1 }], "withholdings": [{ "withholdingId": "0b6d81a6-083c-449e-8791-770ff5b3379d", "rate": 10.0 }] } ], "payments": [ { "reference": "TR-2026-05-001", "amount": 28750.00 } ] }'Response
{ "documentId": "7c9e6679-7425-40de-944b-e07fc1f90ae7", "consultationUrl": "https://ecf.dgii.gov.do/ecf/ConsultaTimbre?RNCEmisor=131000001&ENCF=E310000000001&…"}Special cases (E44–E47)
E44, E45 and E46 reuse the E31/E32 body and verbs, with no additional fields: the slices only change the document type. E47 has its own contract, described in its section.
Special regimes (E44)
Document for recipients under special tax regimes. Canonical route: POST /api/v1/special-regime-invoices. It uses the same V1CreateInvoiceDto as E32, with no additional fields.
-
GET /api/v1/special-regime-invoices— Devuelve un PagedResult con todas las facturas del espacio de trabajo; esta ruta no filtra por tipo de e-CF. -
GET /api/v1/special-regime-invoices/{id}— Devuelve el detalle completo de una factura de régimen especial (E44) por id. -
POST /api/v1/special-regime-invoices— Emite una factura de régimen especial (E44) destinada a contribuyentes acogidos a regímenes especiales de la DGII. -
POST /api/v1/special-regime-invoices/{id}/void— Anula la factura; si la DGII ya la aceptó, emite una nota de crédito (E34) y devuelve su creditNoteId. -
POST /api/v1/special-regime-invoices/{id}/edit-amount— Emite una nota de crédito (E34) que corrige los montos de la factura y devuelve el documentId de esa nota; el original no se modifica. -
POST /api/v1/special-regime-invoices/{id}/edit-text— Emite una nota de crédito (E34) que corrige la descripción de las líneas de la factura y devuelve el documentId de esa nota; el original no se modifica.
Government (E45)
For government entity recipients. Route: POST /api/v1/government-invoices. It uses the same V1CreateInvoiceDto as E32, with no additional fields.
-
GET /api/v1/government-invoices— Devuelve un PagedResult con todas las facturas del espacio de trabajo; esta ruta no filtra por tipo de e-CF. -
GET /api/v1/government-invoices/{id}— Devuelve el detalle completo de una factura gubernamental (E45) por id. -
POST /api/v1/government-invoices— Emite una factura gubernamental (E45) destinada a entidades del Estado dominicano. -
POST /api/v1/government-invoices/{id}/void— Anula la factura; si la DGII ya la aceptó, emite una nota de crédito (E34) y devuelve su creditNoteId. -
POST /api/v1/government-invoices/{id}/edit-amount— Emite una nota de crédito (E34) que corrige los montos de la factura y devuelve el documentId de esa nota; el original no se modifica. -
POST /api/v1/government-invoices/{id}/edit-text— Emite una nota de crédito (E34) que corrige la descripción de las líneas de la factura y devuelve el documentId de esa nota; el original no se modifica.
Export (E46)
For exports of goods or services. Route: POST /api/v1/export-invoices. It uses the same V1CreateInvoiceDto as E32, with no additional fields.
-
GET /api/v1/export-invoices— Devuelve un PagedResult con todas las facturas del espacio de trabajo; esta ruta no filtra por tipo de e-CF. -
GET /api/v1/export-invoices/{id}— Devuelve el detalle completo de una factura de exportación (E46) por id. -
POST /api/v1/export-invoices— Emite una factura de exportación (E46) destinada a receptores en el extranjero. -
POST /api/v1/export-invoices/{id}/void— Anula la factura; si la DGII ya la aceptó, emite una nota de crédito (E34) y devuelve su creditNoteId. -
POST /api/v1/export-invoices/{id}/edit-amount— Emite una nota de crédito (E34) que corrige los montos de la factura y devuelve el documentId de esa nota; el original no se modifica. -
POST /api/v1/export-invoices/{id}/edit-text— Emite una nota de crédito (E34) que corrige la descripción de las líneas de la factura y devuelve el documentId de esa nota; el original no se modifica.
Foreign payments (E47)
For payments to non-domiciled parties. Route: POST /api/v1/foreign-payments. It does not use the E31/E32 contract: the body is V1CreateForeignPaymentDto, with supplierId instead of customerId and the required tipoBienServicioComprado field (606 classification). It behaves like an expense: its list returns expenses, purchases and foreign payments mixed, edit-amount and edit-text issue a debit note (E33), and omitting payments records no payment.
-
GET /api/v1/foreign-payments— Devuelve un PagedResult con los gastos, compras y pagos al exterior del espacio de trabajo; esta ruta no filtra por tipo de e-CF. -
GET /api/v1/foreign-payments/{id}— Devuelve el detalle completo de un pago al exterior (E47) por id. -
POST /api/v1/foreign-payments— Registra un pago al exterior (E47) realizado a un proveedor extranjero. -
POST /api/v1/foreign-payments/{id}/void— Anula el comprobante; si la DGII ya lo aceptó, emite una nota de crédito (E34) y devuelve su creditNoteId. -
POST /api/v1/foreign-payments/{id}/edit-amount— Emite una nota de débito (E33) que corrige los montos de el comprobante y devuelve el documentId de esa nota; el original no se modifica. -
POST /api/v1/foreign-payments/{id}/edit-text— Emite una nota de débito (E33) que corrige la descripción de las líneas de el comprobante y devuelve el documentId de esa nota; el original no se modifica.