Provex API
Documentación de referencia para los endpoints de consulta de Documentos Tributarios Electrónicos (DTEs) de Compras en Guatemala.
URL Base
Todos los endpoints comparten la siguiente URL base:
Endpoints disponibles:
| Método | Endpoint | Descripción |
|---|---|---|
| GET | /dte |
Consulta un DTE individual por autorización o por serie y número. |
| GET | /dte/compras |
Listado paginado de DTEs recibidos (compras) por rango de fechas. |
Autenticación
Todas las solicitudes requieren un Bearer Token en el encabezado Authorization,
proporcionado por Provex al activar el acceso a la API. Aplica para todos los endpoints.
Authorization: Bearer TU_TOKEN_AQUÍ
GET/dte — Consulta de DTE
Consulta un Documento Tributario Electrónico individual. La búsqueda puede realizarse por número de autorización de SAT, o bien por serie y número del documento.
Modos de búsqueda
La API acepta dos modos de búsqueda mutuamente excluyentes. No es posible combinarlos; debes elegir uno u otro.
Parámetros de consulta (Query Params)
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| autorizacion | string | Condicional | UUID de autorización de SAT. Requerido en el Modo 1. Ejemplo:
4A21ED77-CCC1-48AA-8F9A-706A016039A6 |
| serie | string | Condicional | Serie del documento tributario. Requerido en el Modo 2, junto con
numero. |
| numero | string | Condicional | Número correlativo del documento. Requerido en el Modo 2, junto con
serie. |
| incluirXml | boolean | Opcional | Si es true, la respuesta incluye el XML del DTE en el campo xml. Por
defecto: false. |
| incluirJsonDetalle | boolean | Opcional | Si es true, la respuesta incluye el JSON completo del DTE (con frases, tipo, etc.) en
el campo json. Por defecto: false. |
Ejemplos de solicitud
Modo 1 — Búsqueda por número de autorización
curl 'https://api.provex.com.gt/dte?autorizacion=4A21ED77-CCC1-48AA-8F9A-706A016039A6' \ --header 'Authorization: Bearer TU_TOKEN_AQUÍ'
Modo 2 — Búsqueda por serie y número
curl 'https://api.provex.com.gt/dte?serie=4A21ED77&numero=3435219114' \ --header 'Authorization: Bearer TU_TOKEN_AQUÍ'
Incluyendo XML y detalle JSON en la respuesta
curl 'https://api.provex.com.gt/dte?autorizacion=4A21ED77-CCC1-48AA-8F9A-706A016039A6&incluirXml=true&incluirJsonDetalle=true' \ --header 'Authorization: Bearer TU_TOKEN_AQUÍ'
Ejemplo con JavaScript (fetch)
const consultarDTE = async (autorizacion) => { const params = new URLSearchParams({ autorizacion }) const res = await fetch( `https://api.provex.com.gt/dte?${params}`, { headers: { Authorization: `Bearer ${TU_TOKEN}` } } ) const data = await res.json() return data }
Respuesta exitosa
Cuando el DTE es encontrado, la API retorna un objeto JSON con el estado 200 OK.
{
"codigo": 0,
"mensaje": "Ok",
"data": {
"dte": {
"fechaEmision": "2025-10-11 04:30:00",
"fechaCertificacion": "2025-10-11 10:31:17",
"numeroUuid": "4A21ED77-CCC1-48AA-8F9A-706A016039A6",
"tipo": "FACT",
"serie": "4A21ED77",
"numeroDocumento": "3435219114",
"nitEmisor": "91354374",
"nombreEmisor": "AVIA PARQUEO, SOCIEDAD ANONIMA",
"nitReceptor": "1000178900",
"nombreReceptor": "DEVCOM, SOCIEDAD ANÓNIMA",
"nitCertificador": "50510231",
"nombreCertificador": "Megaprint, S.A.",
"moneda": "GTQ",
"granTotal": "50.000000",
"totalIva": "5.360000",
"fechaAnulacion": null,
"anulado": "V"
// ...otros campos de impuestos
},
"xml": "<?xml version=\"1.0\" ...>", // solo si incluirXml=true
"json": { /* detalle completo */ }, // solo si incluirJsonDetalle=true
"existente": true
}
}
| Campo | Descripción |
|---|---|
| codigo | 0 indica éxito. Cualquier otro valor indica un error. |
| mensaje | Descripción legible del resultado. En éxito: "Ok". |
| data.dte | Objeto con los campos principales del documento: emisor, receptor, montos, fechas, tipo, serie, número de documento, certificador, etc. |
| data.xml | XML original firmado del DTE. Solo presente si se envió incluirXml=true. |
| data.json | JSON estructurado con frases, leyendas, items, totales y certificación. Solo presente si se envió
incluirJsonDetalle=true. |
| data.existente | true si el DTE fue encontrado en la base de datos local; false si fue
consultado en tiempo real al SAT. |
Códigos de error
En caso de error, la API retorna un objeto descriptivo que indica qué salió mal.
| HTTP | Causa | Mensaje típico |
|---|---|---|
| 400 | Parámetros inválidos o combinación no permitida | Si viene autorización, NO deben venir serie ni número. |
| 400 | Serie sin número o viceversa | Serie y número deben venir juntos, y autorización debe ser null. |
| 400 | Ningún parámetro de búsqueda enviado | Debes enviar: autorización sola, o serie y número juntos con autorización null. |
| 401 | Token ausente o inválido | Unauthorized |
| 404 | DTE no encontrado | Datos no existentes |
| 500 | Error interno del servidor | Error interno, contactar soporte. |
{
"codigo": 8,
"mensaje": "Datos del formulario no adecuados para la acción.",
"data": "Si viene autorización, NO deben venir serie ni número."
}
GET/dte/compras — Listado de Compras
Retorna un listado paginado de los DTEs recibidos (compras) dentro de un rango de fechas. Ideal para conciliación contable y auditoría de documentos recibidos.
Parámetros de consulta
Todos los parámetros se envían como query params. Las fechas son obligatorias.
| Parámetro | Tipo | Requerido | Default | Descripción |
|---|---|---|---|---|
| fechaInicio | string | Requerido | — | Fecha de inicio del rango en formato ISO 8601. Ej: 2025-10-01 |
| fechaFin | string | Requerido | — | Fecha de fin del rango en formato ISO 8601. Ej: 2025-10-31. Debe ser mayor o igual a
fechaInicio. |
| pagina | integer | Opcional | 1 |
Número de página a retornar. Mínimo: 1. |
| tamano | integer | Opcional | 100 |
Cantidad de registros por página. Mínimo: 1, Máximo: 1000. |
1000 registros por página. Usa el campo
paginacion.totalPaginas de la respuesta para saber cuántas páginas hay en total.
Ejemplos de solicitud
Consulta básica por rango de fechas
curl 'https://api.provex.com.gt/dte/compras?fechaInicio=2025-10-01&fechaFin=2025-10-31' \ --header 'Authorization: Bearer TU_TOKEN_AQUÍ'
Con paginación personalizada
curl 'https://api.provex.com.gt/dte/compras?fechaInicio=2025-10-01&fechaFin=2025-10-31&pagina=2&tamano=50' \ --header 'Authorization: Bearer TU_TOKEN_AQUÍ'
JavaScript — iterar todas las páginas
const obtenerTodasLasCompras = async (fechaInicio, fechaFin) => { let pagina = 1 let todos = [] while (true) { const params = new URLSearchParams({ fechaInicio, fechaFin, pagina, tamano: 1000 }) const res = await fetch(`https://api.provex.com.gt/dte/compras?${params}`, { headers: { Authorization: `Bearer ${TU_TOKEN}` } }) const { data } = await res.json() todos = [...todos, ...data.dtes] if (pagina >= data.paginacion.totalPaginas) break pagina++ } return todos }
Respuesta exitosa
{
"codigo": 0,
"mensaje": "Ok",
"data": {
"dtes": [
{
"dteRecibidoId": 33049,
"nitEmisor": "91354374",
"nombreEmisor": "AVIA PARQUEO, SOCIEDAD ANONIMA",
"nombreReceptor": "DEVCOM, SOCIEDAD ANÓNIMA",
"receptorId": "1000178900",
"nombreComercial": "AVIA PARQUEO",
"codigoEstablecimiento": "2",
"fechaCertificacion": "2025-10-11 10:31:17",
"tipoDteId": 727,
"tipoDteNombre": "Factura",
"monedaId": 1,
"monedaNombre": "Quetzal",
"total": "50.000000",
"totalIVA": "5.360000",
"autorizacion": "4A21ED77-CCC1-48AA-8F9A-706A016039A6",
"serie": "4A21ED77",
"numeroDte": "3435219114",
"estadoId": 8,
"estadoNombre": "Certificado"
}
],
"paginacion": {
"pagina": 1,
"tamano": 100,
"total": 1,
"totalPaginas": 1
}
}
}
Objeto de paginación
| Campo | Descripción |
|---|---|
| pagina | Página actual retornada. |
| tamano | Cantidad de registros por página usada en esta consulta. |
| total | Total de registros que coinciden con el filtro de fechas. |
| totalPaginas | Total de páginas disponibles. Calculado como ceil(total / tamano). |
Errores
| HTTP | codigo | Causa |
|---|---|---|
| 400 | 4 | Faltan fechaInicio o fechaFin, o tienen formato inválido. |
| 400 | 4 | fechaInicio es mayor que fechaFin. |
| 401 | — | Token ausente o inválido. |
| 500 | — | Error interno del servidor. |
Ejemplo — campos requeridos faltantes
{
"codigo": 4,
"mensaje": "Faltan datos requeridos",
"data": {
"detalle": [
""fechaInicio" is required",
""fechaFin" is required"
]
}
}