Skip to content
↑↓ navigate ↵ open Esc close
Resource · E31, E32, E44, E45, E46, E47

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.

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.

POST /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.

POST /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.

POST /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

consumer-invoice.sh
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 }
]
}'
consumer-invoice.ts
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

response.json
{
"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.

200-already-anulated.json
{
"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.

POST /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.

POST /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.

POST /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

fiscal-credit.sh
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

response.json
{
"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.

Next steps

Next step

Continue here