Saltar al contenido
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.

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
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
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
// 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
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 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 Equipo de tecnología · Distribuidor mayorista · Cliente confidencial
Solicitar una demo
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.
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.

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