Listado y cambios
El listado devuelve los comprobantes de la empresa en el ambiente del token, con filtros y paginación. Con cambiadoDesde sirve para seguir los cambios de estado sin consultar cada comprobante.
Filtros
Todos los parámetros son opcionales y se combinan:
| Parámetro | Filtra por |
|---|---|
desde, hasta | Fecha de emisión (yyyy-MM-dd), incluidas. Sin cambiadoDesde, hasta es hoy y desde 30 días antes de hasta. El rango máximo es de 366 días. |
tipo | FACTURA, NOTA_CREDITO o RETENCION. |
estado | Uno de los estados, por ejemplo EN_PROCESO. |
establecimiento, puntoEmision | Códigos de 3 dígitos. puntoEmision requiere establecimiento. |
identificacion | Identificación del cliente o del sujeto retenido. |
numero | Número completo, 001-001-000000148. |
referencia | La referencia que tu sistema envió al emitir. |
origen | API, API_ANTERIOR o APP. No incluye los comprobantes creados antes de la versión 1 del API, que tienen origen en null. |
cambiadoDesde | Comprobantes creados o modificados desde ese instante. Ver Seguir los cambios. |
Incluye los comprobantes emitidos desde la aplicación. Un parámetro inválido responde 400 PARAMETRO_INVALIDO con el nombre del parámetro en campo.
Paginación y orden
paginaempieza en 1;porPaginaes 20 por defecto y 100 como máximo.paginacionen la respuesta traepagina,porPagina,total(comprobantes que cumplen el filtro) ypaginas.- Sin
cambiadoDesde, el orden es por fecha de emisión, del más reciente al más antiguo. - Con
cambiadoDesde, el orden es porfechaActualizacion, del cambio más antiguo al más reciente.
Cada elemento de datos es un resumen: tipo, número, clave de acceso, estado, fechas, receptor, total, referencia y origen (null en los comprobantes anteriores a la versión 1). Para los ítems, los totales o los mensajes del SRI, consulta el comprobante por su clave de acceso.
Buscar un comprobante de tu sistema
Con referencia encuentras los comprobantes que emitiste para un pedido o una venta:
curl "https://api.golem.ec/v1/comprobantes?referencia=PED-2026-00481" \
-H "Authorization: Bearer $GOLEM_TOKEN"referencia no es única: un comprobante devuelto y el que lo reemplaza pueden tener la misma. Revisa estado en cada resultado.
Seguir los cambios
Cada comprobante tiene fechaActualizacion, que cambia cuando cambia su estado, cuando se anula o cuando se modifica otro dato. Con cambiadoDesde obtienes los comprobantes que cambiaron desde tu última consulta, sin consultar cada clave de acceso:
- La primera vez, consulta con
cambiadoDesdeigual al momento desde el que quieres sincronizar (hasta 90 días atrás). - Procesa los comprobantes de la respuesta en orden y guarda el mayor
fechaActualizacionque procesaste. - En la siguiente consulta, usa ese valor como
cambiadoDesde. Si la respuesta trajo una página completa, consulta de inmediato; si no, espera al siguiente ciclo (por ejemplo, un minuto).
curl "https://api.golem.ec/v1/comprobantes?cambiadoDesde=2026-09-26T09:15:04.120-05:00&porPagina=100" \
-H "Authorization: Bearer $GOLEM_TOKEN"El filtro incluye el instante indicado (es “igual o posterior”), así que el último comprobante de la consulta anterior vuelve a aparecer: descarta los que ya procesaste con la misma claveAcceso y la misma fechaActualizacion. Usa el valor tal como viene en la respuesta, con milisegundos y zona horaria, y codifica el + si tu zona lo lleva.
Con cambiadoDesde, desde y hasta no tienen valor por defecto: si los envías, filtran además por fecha de emisión. Un cambiadoDesde anterior a 90 días responde 400 PARAMETRO_INVALIDO.
// Sincroniza los cambios de estado. `ultimo` es el mayor fechaActualizacion ya procesado (guárdalo en tu base).
async function sincronizar(ultimo) {
for (;;) {
const url = new URL('https://api.golem.ec/v1/comprobantes');
url.searchParams.set('cambiadoDesde', ultimo);
url.searchParams.set('porPagina', '100');
const respuesta = await fetch(url, { headers: { Authorization: `Bearer ${process.env.GOLEM_TOKEN}` } });
if (!respuesta.ok) throw new Error(`Golem respondió ${respuesta.status}`);
const { datos } = await respuesta.json();
for (const comprobante of datos) {
await actualizarEnMiSistema(comprobante); // debe tolerar recibir dos veces el mismo cambio
ultimo = comprobante.fechaActualizacion;
}
if (datos.length < 100) return ultimo;
}
}Las consultas del listado cuentan para el límite general de 60 solicitudes por minuto por token.
Listar comprobantes
GET /
- Requiere token
Lista los comprobantes de la empresa del token en su ambiente. Incluye los emitidos desde la aplicación y desde el API.
- Sin
cambiadoDesde: filtra por fecha de emisión (desde/hasta, rango de hasta 366 días) y ordena del más reciente al más antiguo. - Con
cambiadoDesde: devuelve los comprobantes creados o modificados (estado, anulación u otro dato) desde ese instante, ordenados porfechaActualizaciondel más antiguo al más reciente.desdeyhastason opcionales y no tienen valor por defecto. Guarda elfechaActualizaciondel último comprobante que procesaste y úsalo comocambiadoDesdeen la siguiente consulta: es la forma recomendada de seguir los cambios de estado, en lugar de consultar cada clave de acceso.
Límites: 60 solicitudes por minuto por token.
Parámetros
| Campo | Descripción |
|---|---|
tipo consulta string | Tipo de comprobante.
|
estado consulta string | Estado del comprobante.
|
cambiadoDesde consulta string (date-time) | Instante ISO 8601 (con zona). Devuelve los comprobantes con |
desde consulta string (date) | Fecha de emisión inicial, incluida. Sin |
hasta consulta string (date) | Fecha de emisión final, incluida. Sin |
establecimiento consulta string | Código del establecimiento.
|
puntoEmision consulta string | Código del punto de emisión. Requiere
|
identificacion consulta string | Identificación del cliente o del sujeto retenido.
|
numero consulta string | Número completo del comprobante.
|
referencia consulta string | Referencia que envió el integrador al emitir.
|
origen consulta string | Canal por el que se creó el comprobante.
|
pagina consulta integer | Número de página, desde 1.
|
porPagina consulta integer | Comprobantes por página.
|
X-Request-Id cabecera string | Identificador propio de la solicitud (hasta 64 caracteres: letras, números y
|
Ejemplo de solicitud
Los ejemplos leen el token de la variable de entorno GOLEM_TOKEN.
curl "https://api.golem.ec/v1/comprobantes?cambiadoDesde=2026-09-26T09%3A15%3A04.120-05%3A00&porPagina=100" \
--max-time 30 \
-H "Authorization: Bearer $GOLEM_TOKEN" const respuesta = await fetch(`https://api.golem.ec/v1/comprobantes?${new URLSearchParams({
cambiadoDesde: '2026-09-26T09:15:04.120-05:00',
porPagina: '100',
})}`, {
headers: {
Authorization: `Bearer ${process.env.GOLEM_TOKEN}`,
},
signal: AbortSignal.timeout(30000),
});
const datos = await respuesta.json();
console.log(respuesta.status, datos); import os
import requests
respuesta = requests.get(
"https://api.golem.ec/v1/comprobantes",
headers={
"Authorization": f"Bearer {os.environ['GOLEM_TOKEN']}",
},
params={
"cambiadoDesde": "2026-09-26T09:15:04.120-05:00",
"porPagina": "100",
},
timeout=30,
)
print(respuesta.status_code, respuesta.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
use GuzzleHttp\Client;
$cliente = new Client(['base_uri' => 'https://api.golem.ec/v1/', 'timeout' => 30]);
$respuesta = $cliente->get('comprobantes', [
'headers' => [
'Authorization' => 'Bearer ' . getenv('GOLEM_TOKEN'),
],
'query' => [
'cambiadoDesde' => '2026-09-26T09:15:04.120-05:00',
'porPagina' => '100',
],
'http_errors' => false,
]);
echo $respuesta->getStatusCode(), PHP_EOL, $respuesta->getBody(), PHP_EOL; Respuestas
200 application/json
Página de comprobantes.
Esquema ListaComprobantes.
{
"datos": [
{
"tipo": "FACTURA",
"codDoc": "01",
"claveAcceso": "2609202601179000000000120010010000001498765432115",
"numero": "001-001-000000149",
"estado": "EN_PROCESO",
"ambiente": "PRODUCCION",
"fechaEmision": "2026-09-26",
"fechaAutorizacion": null,
"fechaActualizacion": "2026-09-26T09:15:04.120-05:00",
"receptor": {
"identificacion": "0990000000001",
"razonSocial": "CLIENTE DEMO S.A."
},
"total": 89.7,
"referencia": "PED-2026-00482",
"origen": "API"
},
{
"tipo": "FACTURA",
"codDoc": "01",
"claveAcceso": "2409202601179000000000120010010000001481234567815",
"numero": "001-001-000000148",
"estado": "AUTORIZADO",
"ambiente": "PRODUCCION",
"fechaEmision": "2026-09-24",
"fechaAutorizacion": "2026-09-24T10:42:31-05:00",
"fechaActualizacion": "2026-09-24T10:42:33.512-05:00",
"receptor": {
"identificacion": "0990000000001",
"razonSocial": "CLIENTE DEMO S.A."
},
"total": 89.7,
"referencia": null,
"origen": "API"
},
{
"tipo": "FACTURA",
"codDoc": "01",
"claveAcceso": "2009202601179000000000120010010000001472468135717",
"numero": "001-001-000000147",
"estado": "AUTORIZADO",
"ambiente": "PRODUCCION",
"fechaEmision": "2026-09-20",
"fechaAutorizacion": "2026-09-20T16:05:12-05:00",
"fechaActualizacion": "2026-09-20T16:05:13.004-05:00",
"receptor": {
"identificacion": "1700000001001",
"razonSocial": "PERSONA DEMO"
},
"total": 23,
"referencia": null,
"origen": "APP"
}
],
"paginacion": {
"pagina": 1,
"porPagina": 20,
"total": 3,
"paginas": 1
}
} Errores: HTTP 400, 401, 429, 500
| HTTP | Código | Causa y solución |
|---|---|---|
| 400 | JSON_INVALIDO | El cuerpo no es un JSON válido. Revisa la sintaxis cerca de la línea y la columna que indica el mensaje. |
| 400 | VALIDACION | Uno o más campos no cumplen el formato. Corrige los campos de |
| 400 | PARAMETRO_INVALIDO | Un parámetro de la ruta o de la consulta no es válido: por ejemplo, una clave de acceso sin 49 dígitos, un rango de fechas de más de 366 días o un Corrige el parámetro que indica |
| 400 | IDEMPOTENCY_KEY_INVALIDA | La cabecera Genera la clave con un UUID v4. |
| 400 | TOKEN_EN_URL | La URL incluye Envía el token solo en la cabecera |
| 401 | TOKEN_REQUERIDO | Falta la cabecera Envía |
| 401 | TOKEN_INVALIDO | El token no existe o no tiene el formato de un token de Golem. Copia el token completo, con su prefijo. Si no lo tienes, crea otro: Golem no puede mostrarlo de nuevo. |
| 401 | TOKEN_REVOCADO | El token fue revocado. Crea otro en Cuenta > API e integraciones. |
| 429 | LIMITE_EXCEDIDO | Se superó un límite de solicitudes por minuto. Repite la solicitud después de los segundos de |
| 500 | ERROR_INTERNO | Error inesperado de Golem. Si ocurrió al emitir, repite la solicitud con la misma |
Formato y lista completa en Errores.