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.
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.
Un solo flujo HTTPS. Tu sistema dispara el evento, nosotros firmamos y enviamos a la DGII, y te avisamos por webhook cuando hay respuesta.
Tu ERP, e-commerce o POS aprueba una factura. El evento dispara una llamada saliente con el payload del comprobante.
Tu sistema envía POST /api/v1/<comprobante> con header X-Api-Key. Validamos, persistimos y respondemos con DocumentId y URL de consulta.
Generamos el XML, firmamos con tu certificado digital y enviamos al servicio de la DGII en tu ambiente (testecf, certecf o ecf).
Cuando la DGII responde aprobado, rechazado, en proceso o aceptado condicional, te enviamos un webhook con el evento dgii.* correspondiente.
Tu ERP recibe el webhook, actualiza el estado fiscal del documento y libera el flujo a contabilidad o cobranza.
Sin SDK propietario, sin formato propio, sin negociación de protocolo. Lo que ya conoces: HTTPS, JSON, headers.
Endpoints versionados bajo /api/v1/. Spec OpenAPI emitido por el servidor y documentación interactiva con Scalar para tu equipo técnico.
Cotizaciones, facturas, notas, gastos, clientes, productos, proveedores y los cuatro estados de respuesta de la DGII.
Toda empresa arranca en ambiente testecf. Pasas a certecf y ecf cambiando la configuración de la empresa, sin migrar credenciales.
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.
GET /api/v1/rnc/{rnc} consulta directamente al padrón de la DGII. Útil para validar contribuyentes antes de emitir.
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.
Cada entrega de webhook deja registro de método, headers, body, status y duración. Trazable para auditorías técnicas y fiscales.
Si la DGII tarda, nuestro background reintenta el envío y la consulta del acuse en intervalos configurados antes de marcar el documento.
Configuras los headers que tu receptor necesita validar (por ejemplo, un secreto compartido) y se envían en cada entrega.
No publicamos un marketplace de conectores nativos. Publicamos una API REST y webhooks: cualquier sistema en estas categorías se integra del mismo modo.
SAP Business One, NetSuite, Dynamics 365 Business Central y similares se conectan vía API REST.
Sistemas contables que exporten o reciban JSON consumen los mismos endpoints.
Tiendas en Shopify, WooCommerce, VTEX o plataformas custom emiten e-CF al cerrar el pedido.
POS de retail, restaurante o servicios disparan la emisión al imprimir el ticket.
HubSpot, Salesforce, Pipedrive, Zoho y similares envían facturas desde la oportunidad ganada.
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.
Crear una factura, escuchar el webhook de respuesta y tipar tu cliente. El resto es lo que ya haces en cualquier integración HTTPS.
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
}
]
}' // 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>;
} 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();
} 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.
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.
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.