POST /dte: un objeto JSON con el detalle de la venta. Fegora completa con valores por defecto de la cuenta todo lo que no se envíe explícitamente, calcula el IVA implícito en el precio, y certifica el documento ante la autoridad fiscal correspondiente (SAT, MH o DGII, según el país de la cuenta emisora).
Esta página documenta la forma del cuerpo de la solicitud. La respuesta de POST /dte incluye estos mismos campos más los datos que agrega la certificación (serie, número, sellos, URIs de archivos); vea Objeto de respuesta al final de esta página.
Todos los ejemplos de esta página usan datos ficticios (NIT, nombres, montos). Reemplácelos por los de su operación real.
Objeto raíz (Dte)
receptor es opcional. Si se omite por completo, o si se omiten receptor.id/receptor.nombre dentro de él, Fegora completa un receptor de Consumidor Final (id: "CF", nombre: "CONSUMIDOR FINAL"). En una nota de crédito/débito sin receptor explícito, el receptor se hereda del documento original referenciado por idDteOriginal.serie y numero no se envían en la solicitud — los asigna el certificador durante la certificación y sólo aparecen en la respuesta.emisor: los campos nit, nombre, nombreComercial, direccion y correoElectronico de este objeto se validan si se envían, pero no tienen efecto — los datos fiscales del emisor siempre provienen de la configuración de la cuenta. Los únicos campos de emisor que el API realmente utiliza son codigoEstablecimiento (para sobreescribir el establecimiento por defecto de la cuenta) y codigoPuntoVenta (código de punto de venta, usado en El Salvador — por ejemplo "P002").receptor
- 🇬🇹 Guatemala
- 🇸🇻 El Salvador
- 🇩🇴 República Dominicana
receptor.id recibe el NIT del receptor, el literal "CF" para Consumidor Final, o un identificador provisional para receptores extranjeros. Guatemala no usa receptor.tipoId — Fegora infiere el tipo de identificación a partir del valor y de receptor.direccion.pais. Detalle completo en Guatemala → Identificación del receptor.direccion
El valor por defecto de
pais en el objeto direccion es el nombre completo "GUATEMALA", no el código ISO "GT" — pero todos los ejemplos de este sitio (y prácticamente todos los payloads reales) envían "GT". La validación del formato de codigoPostal (5 dígitos) sólo se activa cuando el valor es exactamente el literal "GUATEMALA", por lo que en la práctica, con pais: "GT", esa validación no se ejecuta.item
* Es obligatorio enviar
precioUnitario o precio con un valor mayor que cero — al menos uno de los dos debe resolver un precio unitario positivo.
descripcion tiene un límite de 500 caracteres en el validador actual. La wiki de 2019 documentaba un límite de 10,000 caracteres para este campo — el código actual es más estricto. CODE WINS: use 500 como el límite real.El valor
"bienServicio" para item.tipo no está documentado en las fuentes de 2019 (que sólo mencionaban "bien"/"servicio") — es un valor aceptado por el código actual.impuesto
Objeto usado dentro deitem.impuestos[]. Puede enviarse completo (con montos ya calculados) o parcial — Fegora completa los montos faltantes automáticamente. El mecanismo de cálculo y las tasas vigentes se documentan en detalle en Impuestos.
Enviar sólo
{ "nombreCorto": "IVA" } (sin montos) es el patrón típico para dejar que Fegora calcule el IVA implícito a partir de precioUnitario. Lo mismo aplica a ITH, IFB, TDP e IDP: enviar sólo el nombreCorto (y, para IDB, además montoGravable + cantidadUnidadesGravables) activa el cálculo automático a la tasa vigente.datoAdicional
Objeto usado endatosAdicionales[] a nivel de documento, de receptor o de ítem.
abonoPactado
Objeto usado enabonosPactados[].
datosExportacion
Objeto obligatorio cuandoesExportacion es true o tipo es facturaExportacion.
Ejemplo completo anotado
Factura guatemalteca con descuento, un impuesto adicional (ITH), datos adicionales de documento e ítem, y receptor con dirección completa:
tipo,monedayfechaEmisionson opcionales — en un DTE mínimo se podrían omitir los tres. Se incluyen aquí explícitos sólo para mostrar el formato.receptor.idlleva un NIT de ejemplo (contribuyente, no Consumidor Final); si fuera venta a público general bastaría con omitirreceptorpor completo.items[0].precioUnitario(450.00) incluye IVA. Como no se envía un impuestoIVAexplícito, Fegora sintetiza la línea de IVA automáticamente a partir de este precio.items[0].descuento(50.00) es un monto fijo en quetzales, no un porcentaje — se resta del total de la línea antes de impuestos.items[0].impuestos[0]sólo declara"nombreCorto": "ITH"sin montos: Fegora calcula el Impuesto de Hospedaje (10% en Guatemala) sobre la base gravable de la línea.datosAdicionalesa nivel de documento y de ítem son campos de libre uso (OrdenCompra,NumeroReserva) que Fegora almacena y devuelve tal cual, sin interpretarlos.
Objeto de respuesta
La respuesta dePOST /dte (y de GET /dte/{id}) devuelve el documento con los mismos campos de la solicitud, más los datos que agrega la certificación:
Para el detalle completo del esquema de respuesta (incluyendo campos específicos de anulación, notas de crédito/débito y exportación), vea la pestaña API Reference.