Ir al contenido

Paginación

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 elementos
const totalPaginas = body.meta.last_page;
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)
Ventana de terminal
curl "https://api.notiauto.co/v1/vehicles?per_page=50&page=2" \
-H "X-API-Key: TU_API_KEY"
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.

Endpoint ¿Pagina?
GET /vehicles
GET /drivers
GET /infractions
GET /expirations No
GET /vehicles/{plate} No aplica, devuelve un solo objeto
POST /consults/* No aplica

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:

Ventana de terminal
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.

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.