Paginación
La forma de la respuesta
Sección titulada «La forma de la respuesta»Los listados devuelven esto:
{ "success": true, "data": { "current_page": 1, "data": [ /* <- los elementos están acá */ ], "first_page_url": "...", "from": 1, "last_page": 3, "per_page": 20, "to": 20, "total": 42 }, "meta": { "current_page": 1, "total": 42, "per_page": 20, "last_page": 3 }}Los elementos están en data.data, no en data.
data es el paginador de Laravel serializado entero, con sus propios campos de
paginación adentro, y los elementos en su clave data. meta repite los cuatro
números útiles en el nivel de arriba.
Es una forma incómoda, y es intencional dejarla así: es el contrato que se
publicó y hay integraciones leyendo data.data. Cambiarla las rompería.
Para consumirla:
const res = await fetch('https://api.notiauto.co/v1/vehicles', { headers: { 'X-API-Key': process.env.NOTIAUTO_API_KEY },});const body = await res.json();
const vehiculos = body.data.data; // los elementosconst totalPaginas = body.meta.last_page;Parámetros
Sección titulada «Parámetros»| Parámetro | Tipo | Por defecto | Notas |
|---|---|---|---|
per_page |
entero | 20 | Elementos por página |
page |
entero | 1 | Número de página (parámetro estándar de Laravel) |
curl "https://api.notiauto.co/v1/vehicles?per_page=50&page=2" \ -H "X-API-Key: TU_API_KEY"Recorrer todas las páginas
Sección titulada «Recorrer todas las páginas»async function todosLosVehiculos(apiKey) { const items = []; let page = 1; let lastPage = 1;
do { const res = await fetch( `https://api.notiauto.co/v1/vehicles?per_page=100&page=${page}`, { headers: { 'X-API-Key': apiKey } }, ); const body = await res.json();
items.push(...body.data.data); lastPage = body.meta.last_page; page++; } while (page <= lastPage);
return items;}Ojo con el límite de peticiones si vas a recorrer muchas
páginas seguidas: sube per_page en vez de hacer más llamadas.
Qué endpoints paginan
Sección titulada «Qué endpoints paginan»| Endpoint | ¿Pagina? |
|---|---|
GET /vehicles |
Sí |
GET /drivers |
Sí |
GET /infractions |
Sí |
GET /expirations |
No |
GET /vehicles/{plate} |
No aplica, devuelve un solo objeto |
POST /consults/* |
No aplica |
/expirations es la excepción
Sección titulada «/expirations es la excepción»No pagina. data es un array plano ordenado por fecha de vencimiento
ascendente, y meta trae otros campos:
{ "success": true, "data": [ { "type": "Soat", "entity_type": "vehicle", "plate": "ABC123", "expiration_date": "2026-08-29", "is_valid": true, "days_remaining": 36 }, { "type": "Licencia (B1)", "entity_type": "driver", "driver": "ANA GOMEZ", "expiration_date": "2026-09-02", "is_valid": true, "days_remaining": 40 } ], "meta": { "total": 2, "days_filter": 30 }}El tamaño lo controlas con days (por defecto 30), que es la ventana en días:
curl "https://api.notiauto.co/v1/expirations?days=90" \ -H "X-API-Key: TU_API_KEY"Incluye también los ya vencidos, que llegan con days_remaining negativo.
Filtra por days_remaining >= 0 si solo quieres los que están por vencer.
entity_type te dice qué campo mirar: vehicle trae plate, driver trae
driver. Un vencimiento de licencia no trae placa y uno de SOAT no trae
conductor.
Ordenamiento
Sección titulada «Ordenamiento»No hay parámetro de ordenamiento. Cada endpoint tiene el suyo fijo:
| Endpoint | Orden |
|---|---|
GET /infractions |
date_infraction descendente (más recientes primero) |
GET /expirations |
expiration_date ascendente (lo que vence antes) |
GET /vehicles, GET /drivers |
Orden de la tabla pivote, sin garantía estable |
Si necesitas otro orden en vehículos o conductores, ordena del lado del cliente después de traer las páginas.