Skip to content

Crear crédito fiscal

Emite un comprobante de crédito fiscal a un cliente contribuyente de IVA. Úsalo desde tu ERP, Saas o backend B2B cuando el receptor necesita crédito fiscal.

En lugar de armar el JSON del DTE, calcular IVA, IVA percibido o retenido cuando aplique, firmar con certificado y llamar a recepción del MH, solo envías cliente, ítems y pagos. Lumen abstrae el proceso, transmite y te devuelve PDF/JSON con URLs prefirmadas.

Método: POST

https://api-sandbox.lumendte.com/v1/tax-invoices

CampoTipoRequeridoDescripción
AuthorizationstringBearer <access_token> (Client Credentials)
x-company-tax-numberstringNRC de la empresa emisora (con o sin guiones)
x-establishment-codestringCódigo dado por MH para el establecimiento (ej. M001)
x-point-of-sale-codestringCódigo dado por MH para el punto de venta (ej. P001)

El CCF exige receptor contribuyente. Este es el payload mínimo para emitir a contado:

{
"customer": {
"name": "Distribuidora Morazán S.A. de C.V.",
"taxIdentityNumber": "0614-280310-102-8",
"taxRegistrationNumber": "298145-4",
"taxpayerType": "MEDIUM",
"economicActivityCode": "46900",
"address": {
"complement": "Blvd. Los Próceres, San Salvador",
"departmentCode": "06",
"districtCode": "13"
}
},
"items": [
{
"description": "Servicio de consultoría",
"quantity": 1,
"unitPrice": 113.0
}
],
"payments": [
{
"paymentCode": "01",
"amount": 113.0
}
]
}

Status: 201 Created

Guarda generationCode y controlNumber. Las URLs pdfUrl y jsonUrl expiran en 15 minutos: descárgalas o reenvíalas al cliente de inmediato desde tu backend. No las persistas en tu base de datos para uso posterior.

{
"status": "TRANSMITTED",
"generationCode": "FF84E5DB-79C5-42CE-B415-EC510C53EFB5",
"controlNumber": "DTE-03-M001P001-000000000000001",
"receivedStamp": "20219E9D4DC0292F4681AD759B0B0F5CA99DC23G",
"environment": "SANDBOX",
"pdfUrl": "https://files.example.com/invoices/1/FF84E5DB-79C5-42CE-B415-EC510C53EFB5.pdf?X-Amz-Expires=900",
"jsonUrl": "https://files.example.com/invoices/1/FF84E5DB-79C5-42CE-B415-EC510C53EFB5.json?X-Amz-Expires=900"
}

environment: SANDBOX o PRODUCTION.


Si necesitas nombre comercial, contacto, descuentos, ítems exentos o pagos a crédito/mixtos, envía el objeto completo:

{
"customer": {
"name": "Distribuidora Morazán S.A. de C.V.",
"tradeName": "Comercial Morazán",
"taxIdentityNumber": "0614-280310-102-8",
"taxRegistrationNumber": "298145-4",
"email": "facturacion@morazan.com",
"phone": "+503 2255-8888",
"taxpayerType": "MEDIUM",
"economicActivityCode": "46900",
"address": {
"complement": "Blvd. Los Próceres, San Salvador",
"departmentCode": "06",
"districtCode": "13"
}
},
"items": [
{
"sku": "PROD-001",
"description": "Servicio de consultoría",
"quantity": 1,
"unitPrice": 113.0,
"taxType": "TAXABLE",
"itemType": "SERVICE",
"unitOfMeasure": "59",
"discount": {
"amount": 0,
"percentage": 0
}
}
],
"payments": [
{
"paymentCode": "01",
"amount": 113.0
}
]
}

Receptor contribuyente. Siempre obligatorio en CCF.

CampoTipoRequeridoDescripción
namestringNombre o razón social del cliente
taxIdentityNumberstringNIT del cliente (con o sin guiones)
taxRegistrationNumberstringNRC del cliente (con o sin guiones)
taxpayerTypestringSMALL, MEDIUM o LARGE
economicActivityCodestringCódigo de actividad económica (1–5). Ver Actividades económicas
tradeNamestringNoNombre comercial del cliente
emailstringNoCorreo del cliente
phonestringNoTeléfono nacional o internacional (ej. 2255-8888, +503 2255-8888)
address.complementstringNoComplemento de dirección (calle, colonia, etc.)
address.departmentCodestringNoCódigo de departamento. Ver Departamentos
address.districtCodestringNoCódigo de distrito. Ver Distritos

Líneas del documento. Mínimo 1, máximo 50.

CampoTipoRequeridoDescripción
descriptionstringDescripción del ítem
quantitynumberCantidad (> 0)
unitPricenumberPrecio unitario con IVA incluido (> 0)
skustring | nullNoCódigo interno del producto
taxTypestringNoTAXABLE (default), EXEMPT, NOT_SUBJECT
itemTypestringNoGOODS, SERVICE (default), BOTH
unitOfMeasurestringNoUnidad de medida del producto. Default: "59" (Unidad). Ver Unidades de medida
discount.amountnumberNoDescuento monetario de la línea (≥ 0). Default: 0
discount.percentagenumberNoPorcentaje de descuento (0–100). Default: 0

Significados de taxType:

ValorSignificado
TAXABLEVenta gravada
EXEMPTVenta exenta
NOT_SUBJECTVenta no sujeta

Significados de itemType:

ValorSignificado
GOODSProductos o bienes
SERVICEServicio
BOTHImplica tanto servicio como producto a la vez

Formas de pago. Mínimo 1. Puedes enviar más de una si la transacción se pagó con varios medios.

Lumen establece la condición de la operación (CAT-016) automáticamente según los pagos enviados:

Pagos enviadosCondición
Solo contado (cualquier código ≠ 13)Contado
Solo crédito (13)Crédito
Crédito (13) + contadoMixto
CampoTipoRequeridoDescripción
paymentCodestringCódigo de forma de pago. Ver Formas de pago
amountnumberMonto del pago. Envíalo siempre con el valor real de esa forma de pago.
referencestringNoReferencia o código de autorización. Se omite en efectivo (01) y en crédito puro
creditTermstring | nullCondicionalTipo de plazo CAT-018. Requerido si paymentCode es 13 (ej. 01 = Días)
creditPeriodnumber | nullCondicionalCantidad de días/meses/años según creditTerm (1–999). Requerido si paymentCode es 13
methodDetailstring | nullCondicionalRequerido si paymentCode es 99 (Otros)

Cuando paymentCode es 13 (cuentas por pagar), debes indicar plazo y periodo. Ejemplo para un pago a crédito de 30 días:

{
"payments": [
{
"paymentCode": "13",
"amount": 150.0,
"creditTerm": "01",
"creditPeriod": 30
}
]
}

creditTerm (01) = días; creditPeriod (30) = 30 días de plazo. Envía el monto real; en crédito puro Lumen envía montoPago: 0.00 al MH.


Terminal window
curl -X POST https://api-sandbox.lumendte.com/v1/tax-invoices \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer tu_access_token" \
-H "x-company-tax-number: 123456-7" \
-H "x-establishment-code: M001" \
-H "x-point-of-sale-code: P001" \
-d '{
"customer": {
"name": "Distribuidora Morazán S.A. de C.V.",
"taxIdentityNumber": "0614-280310-102-8",
"taxRegistrationNumber": "298145-4",
"taxpayerType": "MEDIUM",
"economicActivityCode": "46900",
"address": {
"complement": "Blvd. Los Próceres, San Salvador",
"departmentCode": "06",
"districtCode": "13"
}
},
"items": [
{
"description": "Servicio de consultoría",
"quantity": 1,
"unitPrice": 113.0
}
],
"payments": [
{
"paymentCode": "01",
"amount": 113.0
}
]
}'

404 — Actividad económica no encontrada

Section titled “404 — Actividad económica no encontrada”

El economicActivityCode del receptor no existe en el catálogo.

{
"errorCode": "ECONOMIC_ACTIVITY_NOT_FOUND",
"message": "Economic activity with code 46900 was not found",
"error": "Not Found",
"statusCode": 404
}

Fix: Usa un code válido del catálogo de Actividades económicas.

El MH rechazó la recepción (contribuyente inactivo, normativa o autorización de emisión).

{
"errorCode": "MH_RECEPTION_TAXPAYER_ERROR",
"message": "The taxpayer is not active at the tax authority.",
"statusCode": 422
}

Fix: Verifica que la empresa esté activa para emitir factura electrónica y que la configuración esté lista para el ambiente Sandbox o Producción. Confirma también NIT/NRC del receptor.