Saltar al contenido principal

Inicio rápido

Cuatro pasos para emitir tu primer e-CF. Los ejemplos usan curl; en la Referencia API tienes el código en C#, JavaScript, Python y otros lenguajes.

1. Obtén un token​

curl -X POST https://sender.emitexrd.com/api/v1/Auth/login \
-H "Content-Type: application/json" \
-d '{ "usuario": "erp-miempresa", "clave": "TU_CONTRASENA", "rnc": "131000001" }'

Respuesta:

{ "token": "eyJhbGciOi...", "fechaExpiracion": "2026-10-05T16:32:10Z", "codigo": 200, "mensaje": "Inicio de sesión exitoso." }

El token dura 120 minutos. Guárdalo y reutilízalo; pide uno nuevo solo cuando venza. Ver Autenticación.

2. Valida el comprobante (sin enviarlo)​

validate ejecuta todas las validaciones y no envía nada a la DGII ni consume el e-NCF. Úsalo mientras desarrollas.

curl -X POST https://sender.emitexrd.com/api/v1/dgii-ecf/validate/0 \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d @factura.json

0 en la ruta significa "la empresa de mi credencial". Un factura.json de crédito fiscal (tipo 31):

factura.json
{
"ECF": {
"Encabezado": {
"Version": "1.0",
"IdDoc": {
"TipoeCF": 31,
"eNCF": "E310000000001",
"FechaVencimientoSecuencia": "31-12-2027",
"IndicadorMontoGravado": 0,
"TipoIngreso": "01",
"TipoPago": 1,
"TablaFormasPago": {
"FormasDePago": [{ "FormaPago": 1, "MontoPago": 1180.00 }]
}
},
"Emisor": {
"RNCEmisor": "131000001",
"RazonSocialEmisor": "Mi Empresa SRL",
"DireccionEmisor": "Av. Winston Churchill 100, Santo Domingo",
"FechaEmision": "05-10-2026",
"NumeroFacturaInterna": "FAC-1001"
},
"Comprador": {
"RNCComprador": "101010101",
"RazonSocialComprador": "Cliente Ejemplo SRL",
"CorreoComprador": "[email protected]"
},
"Totales": {
"MontoGravadoTotal": 1000.00,
"MontoGravadoI1": 1000.00,
"ITBIS1": 18,
"TotalITBIS": 180.00,
"TotalITBIS1": 180.00,
"MontoTotal": 1180.00
}
},
"DetallesItems": {
"Item": [
{
"NumeroLinea": 1,
"IndicadorFacturacion": 1,
"NombreItem": "Servicio de consultoría",
"IndicadorBienoServicio": 2,
"CantidadItem": 1,
"PrecioUnitarioItem": 1000.00,
"MontoItem": 1000.00
}
]
}
}
}

Respuesta (siempre 200: mira data.valido):

{ "codigo": 200, "mensaje": "El comprobante pasó todas las validaciones locales.", "procesado": true,
"data": { "valido": true, "errores": [], "xml": "<ECF>...</ECF>" } }

3. Envíalo a la DGII​

Mismo cuerpo, endpoint send:

curl -X POST "https://sender.emitexrd.com/api/v1/dgii-ecf/send/0?waitForFinal=10s" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-H "X-Correlation-Id: FAC-1001" \
-d @factura.json
{ "codigo": 200, "mensaje": "Documento procesado correctamente", "procesado": true,
"data": { "ecf": "E310000000001", "accepted": 1, "status": "Aceptado",
"securityCode": "A1b2C3", "trackId": "...", "alreadyProcessed": false } }

4. Consulta su estado​

Si data.accepted llegó en null (la DGII aún no da el estado final):

curl https://sender.emitexrd.com/api/v1/dgii-ecf/document-status/131000001/E310000000001 \
-H "Authorization: Bearer $TOKEN"

Ver Flujo de emisión para el detalle de estados, reintentos e idempotencia.