Saltar al contenido principal

Paginación y envoltorio de respuesta

Todos los endpoints de la API siguen un envoltorio de respuesta consistente. Los endpoints de listado soportan paginación basada en offset.

Envoltorio de respuesta

Cada respuesta — exitosa o de error — se envuelve en un envoltorio estándar. Esto hace que sea seguro verificar siempre success primero antes de acceder a data.

Endpoints de listado

{
"success": true,
"data": [ ... ],
"meta": {
"total": 150,
"limit": 25,
"offset": 0
}
}
CampoTipoDescripción
successbooleantrue cuando la solicitud se completó sin errores
dataarrayLos recursos coincidentes para esta página
meta.totalintegerTotal de registros que coinciden con la consulta después de filtros, antes de paginar
meta.limitintegerCantidad de registros devueltos en esta página
meta.offsetintegerCantidad de registros omitidos (posición de inicio)

Endpoints de recurso único

Los endpoints GET-por-ID devuelven data como un objeto, no un array. El campo meta puede estar vacío u omitirse:

{
"success": true,
"data": {
"id": "104820579301",
"name": "Truck-42",
"plate": "ABC-1234",
"status": "A"
},
"meta": {}
}

Operaciones de escritura (POST / PUT)

Los endpoints de creación y actualización devuelven el recurso creado o actualizado en data:

{
"success": true,
"data": {
"id": "104820579305",
"name": "Truck-New",
"plate": "XYZ-9999",
"status": "A",
"createdAt": "2026-04-04T14:30:00"
},
"meta": {}
}

Respuestas de error

Cuando ocurre un error, data siempre es null y el objeto error contiene los detalles. Ver Manejo de errores para la referencia completa.

{
"success": false,
"data": null,
"error": {
"code": "VALIDATION_ERROR",
"message": "\"limit\" must be a number between 1 and 100"
}
}

Paginación

Los endpoints de listado soportan paginación limit/offset mediante parámetros de consulta:

ParámetroTipoPor defectoMáxDescripción
limitinteger25100Cantidad de registros por página
offsetinteger0Cantidad de registros a omitir

Ejemplos

Primera página (por defecto):

GET /apidev/v1/fleet/devices?limit=25&offset=0
→ records 1–25

Segunda página:

GET /apidev/v1/fleet/devices?limit=25&offset=25
→ records 26–50

Tercera página:

GET /apidev/v1/fleet/devices?limit=25&offset=50
→ records 51–75

Calcular el total de páginas

const totalPages = Math.ceil(meta.total / meta.limit);
// total: 150, limit: 25 → 6 pages

Iterar por todas las páginas

async function fetchAllPages(baseUrl, headers) {
const limit = 100;
let offset = 0;
let allRecords = [];

while (true) {
const response = await fetch(
`${baseUrl}?limit=${limit}&offset=${offset}`,
{ headers }
);
const json = await response.json();

allRecords = allRecords.concat(json.data);

if (offset + limit >= json.meta.total) break;
offset += limit;
}

return allRecords;
}

// Usage
const devices = await fetchAllPages(
`https://${TENANT}/apidev/v1/fleet/devices`,
headers
);
tip

Configurá limit=100 (el máximo) al iterar por todas las páginas para minimizar la cantidad de llamadas a la API y mantenerte dentro de los límites de solicitudes.


Filtros y paginación

Los filtros se aplican antes de la paginación. El valor meta.total refleja el conteo de registros que coinciden con tus filtros, no el total en la base de datos.

GET /apidev/v1/fleet/devices?status=A&limit=25&offset=0
{
"success": true,
"data": [ ... ],
"meta": {
"total": 42,
"limit": 25,
"offset": 0
}
}

En este ejemplo, 42 dispositivos tienen status=A — no 42 dispositivos en total en el sistema. Los cálculos de páginas deben usar este total filtrado.


Orden de clasificación

Los endpoints de listado devuelven resultados en un orden determinístico, típicamente por clave primaria o fecha de creación descendente (los más nuevos primero). La documentación de cada endpoint especifica el orden por defecto cuando difiere de esta convención.

La API no expone un parámetro de consulta sort genérico — el orden de clasificación es fijo por endpoint para garantizar una paginación consistente entre páginas.


Resultados vacíos

Cuando una consulta no coincide con ningún registro, la respuesta usa el envoltorio estándar con un array vacío:

{
"success": true,
"data": [],
"meta": {
"total": 0,
"limit": 25,
"offset": 0
}
}

Esto no es un error — success es true. Tu código debe manejar arrays data vacíos de forma adecuada en lugar de tratarlos como fallas.

aviso

El valor máximo permitido para limit es 100. Solicitar un valor mayor devuelve un VALIDATION_ERROR.