ECF Connector API
Integra tu sistema con la facturación electrónica dominicana (e‑CF) a través de una API REST simple y segura. Firma, envía y consulta comprobantes fiscales electrónicos ante la DGII.
Solicitar tu API KeyDescripción general
El ECF Connector es un módulo desarrollado por RutiversoTech que expone una API REST para crear, firmar y enviar Comprobantes Fiscales Electrónicos (e-CF) a la DGII, directamente desde cualquier sistema externo.
Todos los endpoints tienen el prefijo base:
{URL_proporcionada}/api/ecf
Autenticación
Todos los endpoints requieren un API Key enviada en el encabezado Authorization. La clave se genera automáticamente al crear un conector en el sistema.
Authorization: ECF-{id}-{32_caracteres_aleatorios}
inactive o pending_paid son rechazados en todos los endpoints operativos.Formato de respuesta
Todas las respuestas son JSON con la siguiente estructura estándar:
{
"message": "Descripción del resultado",
"code": 200,
"data": { /* datos específicos del endpoint */ }
}
| Campo | Tipo | Descripción |
|---|---|---|
message | string | Mensaje descriptivo del resultado |
code | integer | Código HTTP de la respuesta (200, 400, 500) |
data | object | array | Payload con los datos de la respuesta |
Códigos de error comunes
| Código | Significado |
|---|---|
200 | Operación exitosa |
400 | Solicitud inválida (parámetros faltantes o incorrectos) |
401 | API Key no válida o conector inactivo |
500 | Error interno del servidor |
Estados ECF
Los comprobantes pasan por los siguientes estados ante la DGII:
Tipos de NCF soportados
El prefijo del campo ncf determina automáticamente el tipo de documento y el movimiento contable que se crea.
Endpoints
Verifica que la API Key sea válida y devuelve la información del conector. Úsalo para confirmar la autenticación antes de realizar operaciones.
Encabezados
| Header | Tipo | Descripción | |
|---|---|---|---|
Authorization | string | REQ | API Key del conector |
Respuesta exitosa
{
"message": "Autenticación exitosa",
"code": 200,
"data": {
"client_id": 42,
"client_name": "Mi Empresa S.R.L.",
"state": "active"
}
}
Devuelve todos los impuestos configurados en el sistema. Los IDs obtenidos se usan en el campo tax_ids al crear facturas.
Respuesta exitosa
{
"code": 200,
"data": [
{ "id": 1, "name": "ITBIS 18%", "amount": 18.0, "type_tax_use": "sale" },
{ "id": 2, "name": "ITBIS 16%", "amount": 16.0, "type_tax_use": "sale" },
{ "id": 5, "name": "Exento (0%)", "amount": 0.0, "type_tax_use": "sale" }
]
}
Retorna todos los tipos de documentos fiscales disponibles en el sistema.
Respuesta exitosa
{
"code": 200,
"data": [
{ "id": 10, "name": "Factura de Crédito Fiscal Electrónica", "prefix": "E31" },
{ "id": 11, "name": "Factura de Consumo Electrónica", "prefix": "E32" }
]
}
Busca un tipo de documento específico por su prefijo (ej. E31, E34).
Parámetros de ruta
| Parámetro | Tipo | Descripción | |
|---|---|---|---|
prefix | string | REQ | Prefijo del tipo de NCF (ej. E31) |
GET /api/ecf/type/document/E31
Crea un nuevo cliente en el sistema. Devuelve el id para usarlo como partner_id en futuras facturas.
Body (JSON)
| Campo | Tipo | Descripción | |
|---|---|---|---|
name | string | REQ | Nombre o razón social del cliente |
type_client | string | REQ | Tipo de cliente (ver tipos) |
rnc | string | OPT* | RNC o cédula. Obligatorio para todos salvo non_payer |
Ejemplo de solicitud
{
"name": "Comercial Los Girasoles S.R.L.",
"type_client": "tax_payer",
"rnc": "101234567"
}
Respuesta exitosa
{
"code": 200,
"data": {
"id": 89,
"name": "Comercial Los Girasoles S.R.L.",
"type": "tax_payer",
"rnc": "101234567"
}
}
Endpoint principal. Crea la factura en el sistema, la firma digitalmente con el certificado P12 y la envía a la DGII de forma automática.
ncf e invoice_date_due. Para identificar al cliente usa partner_id (ID existente) o la combinación client_name + client_vat.Campos comunes
| Campo | Tipo | Descripción | |
|---|---|---|---|
ncf | string | REQ | Número de comprobante fiscal (ej. E310000000001) |
invoice_date_due | string | REQ | Fecha de vencimiento en formato YYYY-MM-DD |
partner_id | integer | OPT* | ID de cliente existente en el sistema |
client_name | string | OPT* | Nombre del cliente (alternativa a partner_id) |
client_vat | string | OPT | RNC/cédula al usar client_name |
invoice_date | string | OPT | Fecha de emisión (YYYY-MM-DD). Por defecto: hoy |
ref | string | OPT | Referencia interna / número de orden |
description | string | OPT | Descripción general del comprobante |
items | array | OPT | Líneas de producto (ver tabla de ítems) |
Ítems de línea (items[])
| Campo | Tipo | Descripción | |
|---|---|---|---|
name | string | REQ | Descripción del producto o servicio |
quantity | float | REQ | Cantidad |
price_unit | float | REQ | Precio unitario (sin impuestos) |
product_id | integer | OPT | ID del producto en el sistema |
tax_ids | integer[] | OPT | IDs de impuestos a aplicar |
discount | float | OPT | Porcentaje de descuento (0–100) |
E33 — Nota de Débito
| Campo | Tipo | Descripción | |
|---|---|---|---|
ncf_modificate | string | REQ | NCF del documento que se modifica |
modification_code | string | REQ | Código de modificación (ver tabla) |
income_type | string | REQ | Tipo de ingreso (ver tabla) |
base_amount | float | REQ | Monto base a debitar |
tax_ids | integer[] | OPT | Impuestos sobre el monto base |
E34 — Nota de Crédito
| Campo | Tipo | Descripción | |
|---|---|---|---|
ncf_modificate | string | REQ | NCF de la factura original que se anula/modifica |
modification_code | string | REQ | Código de modificación |
base_amount | float | REQ | Monto base a acreditar |
tax_ids | integer[] | OPT | Impuestos a devolver |
E43 — Régimen Especial (compra)
| Campo | Tipo | Descripción | |
|---|---|---|---|
expense_type | string | OPT | Tipo de gasto. Por defecto: "01". Ver tabla |
E31 / E32 / E45 / E46 / E47 — Ventas
| Campo | Tipo | Descripción | |
|---|---|---|---|
income_type | string | OPT | Tipo de ingreso (ver tabla) |
Ejemplo — Factura de venta (E32)
POST /api/ecf/send
Authorization: ECF-5-abc123...
{
"ncf": "E320000000001",
"invoice_date_due": "2026-07-30",
"partner_id": 89,
"income_type": "01",
"items": [
{
"name": "Servicio de consultoría",
"quantity": 1,
"price_unit": 5000.00,
"tax_ids": [1],
"discount": 0
}
]
}
Ejemplo — Nota de crédito (E34)
POST /api/ecf/send
Authorization: ECF-5-abc123...
{
"ncf": "E340000000001",
"invoice_date_due": "2026-07-30",
"partner_id": 89,
"ncf_modificate": "E320000000001",
"modification_code": "1",
"base_amount": 5000.00,
"tax_ids": [1]
}
Respuesta exitosa
{
"message": "Factura creada exitosamente",
"code": 200,
"data": {
"invoice_id": 145,
"invoice_name": "E320000000001",
"partner_id": 89,
"partner_name": "Comercial Los Girasoles S.R.L.",
"ncf": "E320000000001",
"origin_ncf": null,
"ecf_status": "sent",
"move_type": "out_invoice",
"amount_untaxed": 5000.00,
"amount_tax": 900.00,
"amount_total": 5900.00,
"qr_link": "{URL_proporcionada}"
}
}
Consulta el estado actual de una factura en el sistema. Para forzar actualización desde la DGII usa /get/{id}/now.
Parámetros de ruta
| Parámetro | Tipo | Descripción |
|---|---|---|
id | integer | ID interno de la factura |
{
"code": 200,
"data": {
"invoice_id": 145,
"ncf": "E320000000001",
"ecf_status": "success",
"amount_total": 5900.00,
"message_dgii": "Aceptado"
}
}
Lista las facturas creadas por el conector con paginación y filtro opcional por estado.
Query params
| Parámetro | Tipo | Descripción | |
|---|---|---|---|
ecf_status | string | OPT | Filtrar: sent, success, conditional, failure |
limit | integer | OPT | Registros por página (20–100, por defecto: 20) |
GET /api/ecf/invoices?ecf_status=sent&limit=50
Fuerza una consulta en tiempo real a la DGII para actualizar el estado de la factura.
Descarga el XML sin firma del comprobante. La respuesta tiene Content-Type: application/xml.
GET /api/ecf/get/145/xml
# Response Content-Type: application/xml
# Body: <?xml version="1.0" ...><ECF>...</ECF>
Códigos de modificación
Usados en E33 (Notas de Débito) y E34 (Notas de Crédito) en el campo modification_code.
| Código | Descripción |
|---|---|
"1" | Anulación de la factura referenciada |
"2" | Corrección de la información de la factura |
"3" | Descuento posterior |
"4" | Devolución de bienes o rescisión de servicios |
"5" | Error en la tasa del ITBIS |
Tipos de ingreso
Campo income_type en comprobantes E31, E32, E33, E45, E46, E47.
| Código | Descripción |
|---|---|
"01" | Ingresos por operaciones (actividad principal) |
"02" | Ingresos financieros |
"03" | Ingresos extraordinarios |
"04" | Ingresos por arrendamientos |
"05" | Ingresos por venta de activos depreciables |
"06" | Otros ingresos |
Tipos de gasto
Campo expense_type en comprobantes E43 (Régimen Especial).
| Código | Descripción |
|---|---|
"01" | Gastos de personal |
"02" | Gastos por trabajo, suministros y servicios |
"03" | Arrendamientos |
"04" | Gastos de activos fijos |
"05" | Representación y otros gastos deducibles |
"06" | Otras deducciones permitidas |
"07" | Gastos computados a tasas especiales |
"08" | Gastos no deducibles |
"09" | Costo de ventas |
"10" | Adquisiciones de activos |
"11" | Gastos de seguro |
Tipos de cliente
Campo type_client en el endpoint POST /new/client.
| Valor | Descripción | RNC requerido |
|---|---|---|
tax_payer | Contribuyente registrado (persona jurídica o natural) | Sí |
non_payer | Consumidor final (sin RNC) | No |
nonprofit | Organización sin fines de lucro | Sí |
special | Régimen tributario especial | Sí |
governmental | Institución gubernamental | Sí |
foreigner | Persona o empresa extranjera | Sí |
Facturación del conector
El conector incluye un sistema de facturación mensual automático para cobrar a los clientes que usan el servicio.
Ciclo de facturación
Un cron job se ejecuta diariamente a las 15:59 UTC. Al llegar al último día del mes, cierra el ciclo activo y genera automáticamente facturas de uso a cada conector activo.
| Campo del modelo | Descripción |
|---|---|
price_by_ncf | Precio a cobrar por cada comprobante emitido |
ncf_count | Cantidad de comprobantes emitidos en el mes actual |
amount_to_paid | Total a cobrar = price_by_ncf × ncf_count |
billing_date | Fecha de inicio del ciclo de facturación |
Estados del conector
| Estado | Descripción | Puede crear facturas |
|---|---|---|
active | Conector operativo | Sí |
inactive | Desactivado manualmente | No |
pending_paid | Pendiente de pago del ciclo anterior | No |
active una vez que se registra el pago correspondiente y se reinicia el ciclo de facturación.¿Listo para integrarte?
Solicita tu API Key y conecta tu sistema con la facturación electrónica dominicana en minutos.
Solicitar tu API Key