Comprobante de Retención Electrónico

Esta sección describe los endpoints necesarios para crear comprobantes de retención electrónicos en el sistema de facturación electrónica de El Salvador.

Crear Comprobante de Retención Electrónico

POST /api/v1/retention

Crea y emite un comprobante de retención electrónico

Este endpoint permite crear y emitir un comprobante de retención electrónico que cumple con los requisitos del Ministerio de Hacienda. Los comprobantes de retención documentan las retenciones de IVA realizadas a otros contribuyentes.

Ejemplo de Solicitud

Request

{
    "items": [
        {
            "type": 2,
            "document_number": "1EEAB582-AA75-4D9C-A...",
            "description": "Compra de equipos informáticos",
            "retention_code": "22"
        }
    ],
    "receiver": {
    "document_type": "36",
    "document_number": "00000000000000",
    "nrc": "000000",
    "name": "EJEMPLO S.A de S.V",
    "commercial_name": "EJEMPLO",
    "activity_code": "00000",
    "activity_description": "ACTIVIDADES JURÍDICAS Y CONTABLES",
    "address": {
      "department": "06",
      "municipality": "20",
      "complement": "Dirección de Prueba 1, N° 1234"
    },
    "phone": "21212121",
    "email": "cliente@gmail.com"
  },
   "extension": {
        "delivery_name": "Juan Pérez",
        "delivery_document": "06141809931020",
        "receiver_name": "María López",
        "receiver_document": "06142509882011",
        "observation": "Entrega en oficina central"
    },
    
    // Nota, estos campos si NO seran ocupados, no es necesario enviarlos, los muestra acá unicamente como referencia
    appendixes: null
}

Ejemplo de Respuesta

Response

{
    "success": true,
    "reception_stamp": "202534D1BECF3321453...",
    "qr_link": "https://admin.factura.gob.sv/consultaPublica?ambiente=00&codGen=5367521F-DD80-4B6B-9...&fechaEmi=FECHA-DE-EMISION",
    "data":{
  "identificacion": {
    "version": 1,
    "ambiente": "00",
    "tipoDte": "07",
    "numeroControl": "DTE-07-C0020000-000000000000001",
    "codigoGeneracion": "EB399033-E184-41D2-B01...",
    "tipoModelo": 1,
    "tipoOperacion": 1,
    "tipoContingencia": null,
    "motivoContin": null,
    "fecEmi": "2025-04-16",
    "horEmi": "20:40:56",
    "tipoMoneda": "USD"
  },
  "resumen": {
    "totalSujetoRetencion": 80097.35,
    "totalIVAretenido": 800.97,
    "totalIVAretenidoLetras": "OCHOCIENTOS 97/100"
  },
  "emisor": {
    "nit": "00000000000000",
    "nrc": "0000000",
    "nombre": "EMPRESA DE PRUEBAS SA DE CV 2",
    "codActividad": "00000",
    "descActividad": "Venta al por mayor de otros productos",
    "tipoEstablecimiento": "01",
    "direccion": {
      "departamento": "06",
      "municipio": "20",
      "complemento": "BOULEVARD SANTA ELENA SUR, SANTA TECLA"
    },
    "telefono": "21212828",
    "correo": "facturacion@empresa.com.sv",
    "nombreComercial": "JEMEPLO",
    "codigoMH": null,
    "codigo": "C002",
    "puntoVentaMH": null,
    "puntoVenta": null
  },
  "receptor": {
    "nombre": "EJEMPLO S.A DE C.V",
    "tipoDocumento": "36",
    "numDocumento": "00000000000000",
    "nrc": "000000",
    "codActividad": "00000",
    "descActividad": "ACTIVIDADES JURÍDICAS Y CONTABLES",
    "direccion": {
      "departamento": "06",
      "municipio": "20",
      "complemento": "Dirección de Prueba 1, N° 1234"
    },
    "telefono": "21212121",
    "correo": "cliente@gmail.com",
    "nombreComercial": "EJEMPLO"
  },
  "cuerpoDocumento": [
    {
      "numItem": 1,
      "tipoDte": "03",
      "tipoDoc": 2,
      "numDocumento": "1EEAB582-AA75-4D9C-AFF...",
      "fechaEmision": "2025-04-11",
      "montoSujetoGrav": 80097.35,
      "codigoRetencionMH": "22",
      "ivaRetenido": 800.97,
      "descripcion": "Compra de equipos informáticos"
    }
  ],
  "extension": {
    "nombEntrega": "Juan Pérez",
    "docuEntrega": "06141809931020",
    "nombRecibe": "María López",
    "docuRecibe": "06142509882011",
    "observaciones": "Entrega en oficina central"
  },
        "apendice": [
            {
                "campo": "Datos del documento",
                "etiqueta": "Sello de recepción",
                "valor": "202534D1BECF33214..."
            }
        ]
}

Alternativa - Generación fisica

Si todos los documentos sujetos a retención son de generación física, se debe seguir un formato mas detallado, como se muestra a continuación.

Estructura de request cuando todos los items son de generación física

{
  "items": [
    {
      "type": 1,
      "document_number": "S221001345",
      "description": "Compra de suministros de oficina",
      "retention_code": "22",
      "taxed_amount": 115.25,
      "iva_amount": 1.15,
      "emission_date": "2025-04-11",
      "dte_type": "03"
    },
    {
      "type": 1,
      "document_number": "S221001346",
      "description": "Servicio de limpieza",
      "retention_code": "C4",
      "taxed_amount": 226.50,
       "iva_amount": 29.44,
      "emission_date": "2025-03-22",
      "dte_type": "03"
    }
  ],
  "summary": {
    "total_retention_amount": 341.75,
    "total_retention_iva": 30.59
  },
    "receiver": {
    "document_type": "36",
    "document_number": "00000000000000",
    "nrc": "000000",
    "name": "EJEMPLO S.A de S.V",
    "commercial_name": "EJEMPLO",
    "activity_code": "00000",
    "activity_description": "ACTIVIDADES JURÍDICAS Y CONTABLES",
    "address": {
      "department": "06",
      "municipality": "20",
      "complement": "Dirección de Prueba 1, N° 1234"
    },
    "phone": "21212121",
    "email": "cliente@gmail.com"
  },
   "extension": {
        "delivery_name": "Juan Pérez",
        "delivery_document": "06141809931020",
        "receiver_name": "María López",
        "receiver_document": "06142509882011",
        "observation": "Entrega en oficina central"
    }
  }

Alternativa - Generación Mixta

Si los documentos sujetos a retención son de generación mixta (algunos físicos y otros electrónicos), en este caso NO SE DEBE INCLUIR LA SECCIÓN SUMMARY, como se muestra a continuación.

Estructura de request cuando todos los items son de generación mixta

{
  "items": [
    {
      "type": 1,
      "document_number": "S221001347",
      "description": "Consultoría financiera",
      "retention_code": "C9",
      "taxed_amount": 450.00,
      "iva_amount": 19.00,
      "emission_date": "2025-03-15",
      "dte_type": "03"
    },
    {
      "type": 2,
      "document_number": "FF32E9DB-79C3-42...",
      "description": "Servicios de auditoría",
      "retention_code": "C4"
    }
  ],
  "receiver": {
    "document_type": "36",
    "document_number": "00000000000000",
    "nrc": "000000",
    "name": "EJEMPLO S.A de S.V",
    "commercial_name": "EJEMPLO",
    "activity_code": "00000",
    "activity_description": "ACTIVIDADES JURÍDICAS Y CONTABLES",
    "address": {
      "department": "06",
      "municipality": "20",
      "complement": "Dirección de Prueba 1, N° 1234"
    },
    "phone": "21212121",
    "email": "cliente@gmail.com"
  },
  "extension": {
    "delivery_name": "Juan Pérez",
    "delivery_document": "06141809931020",
    "receiver_name": "María López",
    "receiver_document": "06142509882011",
    "observation": "Entrega en oficina central"
  }
}

Campos principales

Los campos necesarios para crear un comprobante de retención electrónico

items

Requerido
array
Lista de documentos sobre los cuales se realiza la retención

items[].type

Requerido
integer
Tipo de generación del documento (1: Físico, 2: Electrónico - Emisión DTE)

items[].document_number

Requerido
string
Número del documento sujeto a retención (máx. 20 caracteres)

items[].dte_type

Requerido
string
Tipo de documento fiscal (ver lista de tipos válidos para retención)

items[].emission_date

Requerido
string
Fecha de emisión del documento retenido (formato YYYY-MM-DD)

items[].taxed_amount

Requerido
number
Monto sujeto a retención (> 0 y <= 9999999999.99)

items[].retention_code

Requerido
string
Código de retención según catálogo del MH (22: 1%, C4: 13%, C9: Otros)

items[].iva_amount

Requerido
number
Monto de IVA retenido (taxed_amount * porcentaje_retención)

items[].description

Requerido
string
Descripción de la retención (1-1000 caracteres)

receiver

Requerido
object
Información del sujeto al que se le realiza la retención

receiver.name

Requerido
string
Nombre completo del receptor (1-250 caracteres)

receiver.nrc

Requerido
string
Número de Registro de Contribuyente (1-8 dígitos)

receiver.activity_code

Requerido
string
Código de actividad económica (2-6 dígitos)

receiver.activity_description

Requerido
string
Descripción de la actividad económica (1-150 caracteres)

receiver.address

Requerido
object
Dirección del receptor

receiver.address.department

Requerido
string
Código de departamento del receptor

receiver.address.municipality

Requerido
string
Código de municipio del receptor

receiver.address.complement

Requerido
string
Complemento de la dirección del receptor

receiver.document_type

Opcional
string
Tipo de documento de identificación

receiver.document_number

Opcional
string
Número de documento de identificación

receiver.commercial_name

Opcional
string
Nombre comercial (1-150 caracteres)

receiver.phone

Opcional
string
Teléfono del receptor (8-30 caracteres)

receiver.email

Opcional
string
Correo electrónico del receptor (formato válido)

summary

Requerido
object
Resumen de totales de retención

summary.total_retention_amount

Requerido
number
Total de montos sujetos a retención (suma de todos los taxed_amount)

summary.total_retention_iva

Requerido
number
Total de IVA retenido (suma de todos los iva_amount)
Indica campo obligatorio

Códigos de Retención

Los códigos de retención deben corresponder a los catálogos definidos por el Ministerio de Hacienda:

Código Descripción Porcentaje
22 Retención IVA 1% 0.01
C4 Retención IVA 13% 0.13
C9 Otros Variable

Validaciones específicas para Comprobante de Retención

  • Validación de Fechas: Los documentos retenidos deben estar dentro del plazo permitido:
    • Si pertenecen al mismo mes de emisión del comprobante, cualquier día es válido.
    • Si pertenecen al mes anterior, el comprobante debe emitirse dentro de los primeros 10 días hábiles del mes siguiente.
    • No se permiten documentos de meses anteriores fuera de estos plazos.
  • Cálculo de Retención: El monto de IVA retenido (iva_amount) debe ser exactamente igual al monto sujeto a retención (taxed_amount) multiplicado por el porcentaje correspondiente al código de retención.
  • Validación de Totales:
    • El total_retention_amount debe ser igual a la suma de todos los taxed_amount de los ítems.
    • El total_retention_iva debe ser igual a la suma de todos los iva_amount de los ítems.
  • Documentos Válidos para Retención: No todos los tipos de documentos fiscales son válidos para aplicar retención. Los tipos permitidos incluyen:
    • 01 - Facturas Electrónicas
    • 03 - Comprobantes de Crédito Fiscal Electrónicos
    • 14 - Facturas de Exportación Electrónicas
  • Montos Monetarios:
    • Ningún monto monetario puede ser negativo.
    • Los montos sujetos a retención deben ser mayores a cero.

Extensión del Comprobante de Retención

Cuando el monto del comprobante de retención es mayor o igual a $1,095.00, es obligatorio incluir el campo extension:

Ejemplo de extensión requerida

{
  "extension": {
    "delivery_name": "Nombre de quien entrega",
    "delivery_document": "00000000-0",
    "receiver_name": "Nombre de quien recibe",
    "receiver_document": "00000000-0",
    "observation": "Observaciones adicionales"
  }
}

Campos del objeto extension

La extensión es obligatoria cuando el monto total es mayor o igual a $1,095.00

delivery_name

Requerido
string
Nombre de quien entrega (1-100 caracteres)

delivery_document

Requerido
string
Documento de quien entrega (1-25 caracteres)

receiver_name

Requerido
string
Nombre de quien recibe (1-100 caracteres)

receiver_document

Requerido
string
Documento de quien recibe (1-25 caracteres)

observation

Opcional
string
Observaciones adicionales (máx. 3000 caracteres)
Indica campo obligatorio

Appendixes (Apéndices)

Los apéndices contienen información adicional complementaria.

Ejemplo de apéndices

{
  "appendixes": {
    "items": [
      {
        "field": "campo_adicional",
        "label": "Información Adicional",
        "value": "Detalle adicional para el documento"
      }
    ],
    "type": "array"
  }
}

Campos de Apéndices

Validaciones para el objeto appendixes

field

Requerido
string
Identificador del campo (2-25 caracteres)

label

Requerido
string
Etiqueta descriptiva (3-50 caracteres)

value

Requerido
string
Valor del campo (1-150 caracteres)
Indica campo obligatorio

Consideraciones importantes:

  • Los apéndices son opcionales.
  • Si se incluyen, todos sus campos son obligatorios.