---
title: Para tu ERP — factura.com.do
description: "API REST, webhooks por evento y spec OpenAPI para generar tu cliente y conectar cualquier ERP a la facturación electrónica DGII en República Dominicana."
canonical: https://factura.com.do/integraciones/
generator: factura.com.do markdown-companions
---

Para tu ERP 

#  Conecta cualquier sistema a la  facturación electrónica DGII. 

Una API REST versionada, webhooks por evento y un spec OpenAPI para generar tu propio cliente. Tu ERP habla con factura.com.do, y factura.com.do habla con la DGII.

[ Solicitar una demo ](/#contacto) [ Ver documentación ](/ayuda#api) 

 API REST con OpenAPI 3.x  Webhooks por evento  Cliente TypeScript tipado  Sandbox DGII en cada cuenta 

app.factura.com.do/producto 

1. 01 E31 Factura de crédito fiscal
2. 02 E32 Factura de consumo
3. 03 E34 Nota de crédito
4. 04 E46 Exportaciones
5. 05 E47 Pagos al exterior

10 tipos e-CF cubiertos

Verificado vs Norma 01-2020

Cómo viaja un dato 

## Del evento en tu ERP al acuse de la DGII.

Un solo flujo HTTPS. Tu sistema dispara el evento, nosotros firmamos y enviamos a la DGII, y te avisamos por webhook cuando hay respuesta.

1. 01  
### Evento en tu sistema  
 Tu ERP, e-commerce o POS aprueba una factura. El evento dispara una llamada saliente con el payload del comprobante.
2. 02  
### POST a factura.com.do  
 Tu sistema envía POST /api/v1/<comprobante> con header X-Api-Key. Validamos, persistimos y respondemos con DocumentId y URL de consulta.
3. 03  
### Firma y envío a la DGII  
 Generamos el XML, firmamos con tu certificado digital y enviamos al servicio de la DGII en tu ambiente (testecf, certecf o ecf).
4. 04  
### Webhook con la respuesta  
 Cuando la DGII responde aprobado, rechazado, en proceso o aceptado condicional, te enviamos un webhook con el evento dgii.\* correspondiente.
5. 05  
### Tu sistema concilia  
 Tu ERP recibe el webhook, actualiza el estado fiscal del documento y libera el flujo a contabilidad o cobranza.

Capacidades técnicas 

## Lo que tu equipo necesita ver antes de integrar.

Sin SDK propietario, sin formato propio, sin negociación de protocolo. Lo que ya conoces: HTTPS, JSON, headers.

Conectividad 

 REST 

### API REST con OpenAPI 3.x

 Endpoints versionados bajo /api/v1/. Spec OpenAPI emitido por el servidor y documentación interactiva con Scalar para tu equipo técnico. 

 JSON 

### Webhooks por 28 eventos

 Cotizaciones, facturas, notas, gastos, clientes, productos, proveedores y los cuatro estados de respuesta de la DGII. 

### Sandbox DGII en cada cuenta

 Toda empresa arranca en ambiente testecf. Pasas a certecf y ecf cambiando la configuración de la empresa, sin migrar credenciales. 

Para developers 

 OpenAPI 

### Spec OpenAPI dinámico

 Publicamos el spec OpenAPI vigente en /openapi/v1.json. Genera tu cliente con Kubb (@kubb/swagger-ts), openapi-typescript u OpenAPI Generator a partir del mismo spec; te compartimos nuestra kubb.config.ts como punto de partida. 

### Validación RNC en línea

 GET /api/v1/rnc/{rnc} consulta directamente al padrón de la DGII. Útil para validar contribuyentes antes de emitir. 

### Endpoint de prueba para webhooks

 Disparas una entrega de prueba desde el panel y revisas request, response, status y duración antes de activar la integración en producción. 

Operación 

### Log de auditoría por intento

 Cada entrega de webhook deja registro de método, headers, body, status y duración. Trazable para auditorías técnicas y fiscales. 

### Reintento interno del acuse DGII

 Si la DGII tarda, nuestro background reintenta el envío y la consulta del acuse en intervalos configurados antes de marcar el documento. 

### Headers personalizados por webhook

 Configuras los headers que tu receptor necesita validar (por ejemplo, un secreto compartido) y se envían en cada entrega. 

Sistemas que se conectan 

## Si tu sistema habla HTTPS, se conecta a factura.com.do.

No publicamos un marketplace de conectores nativos. Publicamos una API REST y webhooks: cualquier sistema en estas categorías se integra del mismo modo.

### ERP empresarial

 SAP Business One, NetSuite, Dynamics 365 Business Central y similares se conectan vía API REST. 

### Contabilidad y finanzas

 Sistemas contables que exporten o reciban JSON consumen los mismos endpoints. 

### E-commerce

 Tiendas en Shopify, WooCommerce, VTEX o plataformas custom emiten e-CF al cerrar el pedido. 

### Punto de venta

 POS de retail, restaurante o servicios disparan la emisión al imprimir el ticket. 

### CRM y operaciones

 HubSpot, Salesforce, Pipedrive, Zoho y similares envían facturas desde la oportunidad ganada. 

### Sistemas custom

 Desarrollos internos en cualquier lenguaje consumen la API con un cliente HTTP estándar. 

 ¿Trabajas con un sistema específico y necesitas acompañamiento de implementación? Lo coordinamos en plan empresa. 

Snippets 

## Tres llamadas, una integración.

Crear una factura, escuchar el webhook de respuesta y tipar tu cliente. El resto es lo que ya haces en cualquier integración HTTPS.

 bash  crear-factura.sh Copiar 

```
curl -X POST https://api.factura.com.do/api/v1/consumer-invoices \
  -H "X-Api-Key: <TU_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "customerId": "01HXR3V8C9ABCDE0123456789",
    "issueDate": "2026-05-06",
    "currencyCode": "DOP",
    "items": [
      {
        "productId": "01HXR3W2F1ABCDE0123456789",
        "quantity": 1,
        "unitPrice": 4500.00,
        "taxRate": 0.18
      }
    ]
  }'
```

 Crea una factura de consumo (e-CF tipo E32). Devuelve DocumentId y URL de consulta. 

 ts  src/factura-client.ts Copiar 

```
// 1) Generas tipos a partir del OpenAPI publicado.
//    npx kubb generate --config kubb.config.ts

import type {
  ConsumerInvoiceRequest,
  ConsumerInvoiceResponse,
} from "./kubb/models";

export async function emitirFacturaConsumo(
  apiKey: string,
  body: ConsumerInvoiceRequest,
): Promise<ConsumerInvoiceResponse> {
  const res = await fetch(
    "https://api.factura.com.do/api/v1/consumer-invoices",
    {
      method: "POST",
      headers: {
        "X-Api-Key": apiKey,
        "Content-Type": "application/json",
      },
      body: JSON.stringify(body),
    },
  );

  if (!res.ok) {
    throw new Error(`factura.com.do: ${res.status} ${await res.text()}`);
  }
  return res.json() as Promise<ConsumerInvoiceResponse>;
}
```

 Cliente tipado generado con Kubb a partir del spec OpenAPI publicado. 

 ts  src/webhook-handler.ts Copiar 

```
import type { Request, Response } from "express";

const SECRETO_COMPARTIDO = process.env.FACTURA_WEBHOOK_SECRET!;

export function manejarWebhook(req: Request, res: Response) {
  // Validación BYO-auth: el secreto viaja en un header
  // que tú configuras al registrar el webhook.
  if (req.header("X-Webhook-Secret") !== SECRETO_COMPARTIDO) {
    return res.status(401).end();
  }

  const { Event, Timestamp, data } = req.body;

  switch (Event) {
    case "dgii.aprobado":
      // marcar el comprobante como aceptado en tu ERP
      break;
    case "dgii.rechazado":
      // disparar revisión manual o nota de crédito
      break;
    case "dgii.aceptado_condicional":
      // aceptar con observaciones, registrar en bitácora
      break;
    case "dgii.en_proceso":
      // mantener en "pendiente DGII" hasta el siguiente evento
      break;
  }

  res.status(200).end();
}
```

 Receptor de webhook con validación BYO-auth por header compartido. 

Antes y ahora 

## De export manual a sincronía continua.

Cinco diferencias concretas entre operar contra el portal de la DGII a mano y delegar la integración a una API que firma, envía y avisa por evento.

 Export manual mensual 

 Sync continua vía API 

- Export manual mensual  Generas XML desde el ERP, firmas localmente y subes archivo por archivo al portal de la DGII.  
 Sync continua vía API  Tu ERP hace POST a /api/v1/<comprobante>; firmamos y enviamos a la DGII en la misma llamada.
- Export manual mensual  Recoges la respuesta de la DGII abriendo cada documento en su portal y copiando el estado al ERP.  
 Sync continua vía API  Recibes el evento dgii.aprobado, dgii.rechazado, dgii.en\_proceso o dgii.aceptado\_condicional por webhook.
- Export manual mensual  Cuando un documento se rechaza, la corrección depende de quien revisa el correo del contador.  
 Sync continua vía API  El webhook dispara la nota de crédito o débito desde el ERP en automático.
- Export manual mensual  El acuse final se concilia al cierre del mes, con riesgo de penalidad si quedó pendiente.  
 Sync continua vía API  El acuse de recibo se reintenta en background; el estado fiscal vive al día en tu sistema.
- Export manual mensual  Cada cliente que pide e-CF requiere un proyecto técnico aparte.  
 Sync continua vía API  El mismo flujo cubre el e-CF de crédito fiscal, consumo, exportación, gubernamental y régimen especial.

Caso técnico 

> “ Conectamos nuestro ERP con factura.com.do en una semana. El equipo financiero dejó de descargar XML y el operativo dejó de copiar números a mano. Ahora el ciclo de e-CF es invisible para ellos. ” 

![Cliente anónimo](/logo-icon.webp) **Equipo de tecnología**  · Distribuidor mayorista · Cliente confidencial 

[ Solicitar una demo ](/#contacto) 

 1 semana 

 Del ERP heredado a e-CF firmado y aceptado por la DGII 

Preguntas frecuentes 

## Lo que pregunta tu equipo técnico.

¿Tienen un conector nativo para mi ERP (SAP, Odoo, Dynamics, otro)? 

No publicamos conectores nativos. Exponemos una API REST con OpenAPI y webhooks por evento. Cualquier ERP que pueda hacer una llamada HTTPS y recibir un webhook se integra del mismo modo. Si tu equipo necesita acompañamiento, lo coordinamos en plan empresa.

¿Cómo manejan errores de comunicación con la DGII? 

Cuando creas un comprobante por API, lo firmamos y lo enviamos a la DGII en la misma llamada. Si la DGII no responde en el momento, el documento queda en estado pendiente y nuestro proceso en background reintenta envío y consulta de acuse. Cuando hay respuesta, disparamos el webhook dgii.aprobado, dgii.rechazado, dgii.en\_proceso o dgii.aceptado\_condicional.

¿Existe un sandbox para pruebas pre-producción? 

Sí. Toda cuenta arranca en ambiente DGII testecf, el sandbox oficial. Cuando estás listo para producción, el ambiente se cambia a ecf desde la configuración de la empresa. Las credenciales de la API son las mismas; el cambio es de ambiente DGII, no de tenant.

¿Cuánto cuesta el acceso API? ¿Tiene límite de llamadas? 

El acceso a la API está incluido en los planes que listamos en /planes. No publicamos un límite fijo de llamadas por segundo. Si tu integración va a sostener más de unas pocas llamadas por segundo (carga masiva, conciliación), conversa con nuestro equipo para asignar capacidad y dar seguimiento a la integración.

¿Qué eventos disparan webhooks? 

28 eventos: cotizaciones, facturas, notas de crédito, notas de débito, gastos, clientes, productos, proveedores y los cinco estados de respuesta de la DGII (en proceso, aceptado, aceptado condicional, rechazado, anulado). El listado completo, con la forma del payload, vive en la documentación.

¿Cómo verifico que un webhook viene de ustedes? 

Configuras headers personalizados al registrar el webhook (por ejemplo, un secreto compartido en X-Webhook-Secret) y los validas en tu receptor. Hoy no aplicamos firma HMAC; si tu auditoría lo requiere, márcalo en el formulario de integración para evaluarlo con producto.

¿Hay un SDK oficial? 

Para TypeScript, nuestro spec OpenAPI permite generar un cliente tipado con Kubb (@kubb/swagger-ts). No distribuimos un SDK con runtime client; el spec es la fuente de verdad. Para otros lenguajes, cualquier generador OpenAPI estándar (openapi-typescript, NSwag, OpenAPI Generator) produce un cliente compatible.

[ Ver toda la documentación ](/ayuda) 

Demo personalizada en menos de 24 horas 

## Empieza a emitir tus e-CF esta semana.

Cuéntanos cuánto facturas hoy y te entregamos un cálculo de ahorro fiscal en pesos dominicanos, junto con un calendario de implementación claro. Sin compromiso.

Nombre y apellido Correo electrónico de la empresa RNC de la empresa Solicitar mi demo 

Al enviar aceptas la política de privacidad de Nubeteck. Tu información permanece dentro de la región del Caribe.
