Emisión de Comprobantes Fiscales Electrónicos (e-CF)
El endpoint de emisión permite a tu sistema enviar comprobantes fiscales en formato JSON. Etribux ejecuta las validaciones fiscales de la DGII, firma el documento con tu certificado digital, genera el código de seguridad y la URL del código QR de forma inmediata, y encola la transmisión a la DGII con entrega garantizada y reintentos automáticos ante la DGII.
POST /{environment}/api/v1/documents
Ciclo de Vida y Máquina de Estados
Cada comprobante emitido atraviesa una serie de estados bien definidos ante la DGII:
Especificación de Campos del Documento
1. Cabecera (Header)
| Campo | Tipo | Obligatorio | Descripción y Reglas DGII |
|---|---|---|---|
ecf_type | integer | Sí | Tipo de e-CF oficial (31, 32, 33, 34, 41, 43, 44, 45, 46 o 47). |
encf | string | Sí | Número de Comprobante Fiscal Electrónico serie E de 13 caracteres (ej. E310000000001). |
issue_date | string | Sí | Fecha de emisión en formato DD-MM-AAAA. |
sequence_expiration_date | string | Condicional | Fecha de vencimiento del rango (DD-MM-AAAA). Obligatorio para todos excepto Tipos 32 y 34. |
external_id | string | No | Identificador único en tu ERP (ej. FACT-2026-0042) para búsquedas e idempotencia. |
income_type | string | Sí | Código de ingresos DGII: 01 Operaciones, 02 Financieros, 03 Extraordinarios, 04 Arrendamientos, 05 Activos, 06 Otros. |
payment_type | integer | Sí | Modalidad de pago: 1 Contado, 2 Crédito, 3 Gratuito. |
taxed_amount_indicator | integer | No | 0 si los precios unitarios no incluyen ITBIS (por omisión), 1 si los precios incluyen ITBIS. |
currency | string | No | Debe ser DOP. No se admite moneda extranjera nominal sin conversión. |
2. Comprador (buyer)
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
rnc | string | Condicional | RNC o Cédula dominicana (9 u 11 dígitos sin guiones). Obligatorio en E31, E41, E44, E45. |
legal_name | string | Condicional | Razón social oficial del comprador según DGII. |
email | string | No | Correo electrónico para entrega automática de XML y PDF. |
address | string | No | Dirección física o fiscal del comprador. |
3. Líneas de Ítems (items)
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
line_number | integer | Sí | Número secuencial de línea iniciando en 1. |
name | string | Sí | Descripción del bien o servicio comercializado. |
billing_indicator | integer | Sí | Indicador fiscal de tasa: 1 ITBIS 18 %, 2 ITBIS 16 %, 3 ITBIS 0 %, 4 Exento. |
good_or_service_indicator | integer | Sí | 1 para Bienes físicos, 2 para Servicios. |
quantity | string | Sí | Cantidad con hasta 2 decimales (ej. "2.00"). |
unit_price | string | Sí | Precio unitario con hasta 2 decimales (ej. "500.00"). |
discount_amount | string | No | Descuento total aplicado a esta línea (ej. "50.00"). |
withholding_itbis | string | No | Monto de ITBIS retenido por el comprador (aplica en Tipo 41 compras informales). |
withholding_isr | string | No | Monto de ISR retenido por el comprador (aplica en Tipo 41 compras informales). |
4. Referencia de Modificación (reference)
Obligatoria para Notas de Débito (Tipo 33) y Notas de Crédito (Tipo 34):
| Campo | Tipo | Descripción |
|---|---|---|
modified_ncf | string | e-NCF del comprobante que se está modificando o anulando (ej. E310000000045). |
modified_ncf_date | string | Fecha de emisión del documento original (DD-MM-AAAA). |
modification_code | integer | Código DGII: 1 Anula total, 2 Corrige texto, 3 Corrige montos, 4 Reemplazo contingencia. |
modification_reason | string | Explicación descriptiva del motivo de la modificación. |
Ejemplos de Código de Integración
- cURL
- TypeScript / Node.js
- Python
- C# (.NET)
curl -X POST "https://api.etribux.com/testecf/api/v1/documents" \
-H "Authorization: Bearer <TU_API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"ecf_type": 31,
"encf": "E310000000001",
"issue_date": "16-09-2026",
"sequence_expiration_date": "31-12-2028",
"external_id": "FAC-2026-001",
"income_type": "01",
"payment_type": 1,
"buyer": {
"rnc": "130862346",
"legal_name": "EMPRESA COMPRADORA SRL"
},
"items": [
{
"line_number": 1,
"name": "Servicios de Consultoría Tecnológica",
"good_or_service_indicator": 2,
"billing_indicator": 1,
"quantity": "1.00",
"unit_price": "10000.00"
}
]
}'
import axios from 'axios';
const emitirFactura = async () => {
const payload = {
ecf_type: 31,
encf: 'E310000000001',
issue_date: '16-09-2026',
sequence_expiration_date: '31-12-2028',
external_id: 'FAC-2026-001',
income_type: '01',
payment_type: 1,
buyer: {
rnc: '130862346',
legal_name: 'EMPRESA COMPRADORA SRL',
},
items: [
{
line_number: 1,
name: 'Servicios de Consultoría Tecnológica',
good_or_service_indicator: 2,
billing_indicator: 1,
quantity: '1.00',
unit_price: '10000.00',
},
],
};
const response = await axios.post(
'https://api.etribux.com/testecf/api/v1/documents',
payload,
{
headers: {
Authorization: `Bearer ${process.env.ETRIBUX_API_KEY}`,
'Content-Type': 'application/json',
},
}
);
console.log('Comprobante emitido exitosamente:', response.data);
console.log('Código de Seguridad:', response.data.security_code);
console.log('URL de Código QR:', response.data.qr_url);
};
import os
import requests
url = "https://api.etribux.com/testecf/api/v1/documents"
headers = {
"Authorization": f"Bearer {os.getenv('ETRIBUX_API_KEY')}",
"Content-Type": "application/json"
}
payload = {
"ecf_type": 31,
"encf": "E310000000001",
"issue_date": "16-09-2026",
"sequence_expiration_date": "31-12-2028",
"external_id": "FAC-2026-001",
"income_type": "01",
"payment_type": 1,
"buyer": {
"rnc": "130862346",
"legal_name": "EMPRESA COMPRADORA SRL"
},
"items": [
{
"line_number": 1,
"name": "Servicios de Consultoría Tecnológica",
"good_or_service_indicator": 2,
"billing_indicator": 1,
"quantity": "1.00",
"unit_price": "10000.00"
}
]
}
response = requests.post(url, json=payload, headers=headers)
data = response.json()
print(f"Estado HTTP: {response.status_code}")
print(f"Código de Seguridad para impresión: {data.get('security_code')}")
print(f"QR URL: {data.get('qr_url')}")
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
public class Program
{
public static async Task Main()
{
var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", Environment.GetEnvironmentVariable("ETRIBUX_API_KEY"));
var payload = new
{
ecf_type = 31,
encf = "E310000000001",
issue_date = "16-09-2026",
sequence_expiration_date = "31-12-2028",
external_id = "FAC-2026-001",
income_type = "01",
payment_type = 1,
buyer = new { rnc = "130862346", legal_name = "EMPRESA COMPRADORA SRL" },
items = new[]
{
new
{
line_number = 1,
name = "Servicios de Consultoría Tecnológica",
good_or_service_indicator = 2,
billing_indicator = 1,
quantity = "1.00",
unit_price = "10000.00"
}
}
};
var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json");
var response = await client.PostAsync("https://api.etribux.com/testecf/api/v1/documents", content);
var responseJson = await response.Content.ReadAsStringAsync();
Console.WriteLine($"Respuesta: {responseJson}");
}
}
Respuesta Exitosa (201 Created)
{
"id": "e9a0f443-4c90-41fa-8a56-dc0d6df6cf80",
"external_id": "FAC-2026-001",
"environment": "testecf",
"ecf_type": 31,
"encf": "E310000000001",
"issue_date": "16-09-2026",
"sequence_expiration_date": "31-12-2028",
"signed_at": "2026-09-16T14:32:05Z",
"total_amount": "11800.00",
"currency": "DOP",
"is_rfce": false,
"security_code": "wK9L2x",
"qr_url": "https://ecf.dgii.gov.do/testecf/consultatimbre?RncEmisor=101010101&RncComprador=130862346&ENCF=E310000000001&FechaEmision=16-09-2026&MontoTotal=11800.00&FechaFirma=20260916143205&CodigoSeguridad=wK9L2x",
"track_id": null,
"dgii_status": "pending",
"commercial_status": "none",
"dgii_messages": []
}