{"info":{"_postman_id":"9d939f0c-141b-4399-9c08-911a67fa40de","name":"API Kilometraje","description":"<html><head></head><body><p>Reporte de kilometraje: distancia diaria recorrida por cada vehículo de un cliente. Se solicita en 3 pasos: obtener token, generar el reporte (token y x-api-key) y consultar su estado para descargar el archivo.</p>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[],"owner":"50892995","collectionId":"9d939f0c-141b-4399-9c08-911a67fa40de","publishedId":"2sBYHNX3Ps","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2026-10-02T18:02:34.000Z"},"item":[{"name":"Obtener token","event":[{"listen":"test","script":{"exec":["const jsonData = pm.response.json();","const wpsid = pm.response.headers.get(\"wpsid\");","pm.environment.set(\"token\", jsonData.AuthenticationResult.AccessToken);","pm.environment.set(\"wpsid\", wpsid);"],"type":"text/javascript"}}],"id":"560260df-25c8-4895-984d-d6f8d5ec483b","request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"user\": \"user\",\r\n    \"password\": \"password1\"\r\n}","options":{"raw":{"language":"json"}}},"url":"https://api.waypoint.cl/auth/login","description":"<h3 id=\"paso-1\">Paso 1</h3>\n<p>Se debe realizar una consulta POST a la API de sesiones para obtener el AccesToken que usaremos en el paso 2 para consumir la api de kilometraje.</p>\n","urlObject":{"protocol":"https","path":["auth","login"],"host":["api","waypoint","cl"],"query":[],"variable":[]}},"response":[],"_postman_id":"560260df-25c8-4895-984d-d6f8d5ec483b"},{"name":"Generar reporte","event":[{"listen":"test","script":{"exec":["const jsonData = pm.response.json();","pm.environment.set(\"idReporte\", jsonData.id);","pm.environment.set(\"nombreReporte\", jsonData.nombreReporte);"],"type":"text/javascript"}}],"id":"5740694d-b494-4ec0-897a-a1f46c3dd44b","request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token}}"}]},"isInherited":false},"method":"POST","header":[{"key":"x-api-key","value":"","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"clientId\": 999999,\n    \"fechaDesde\": \"2026-10-02 00:00:00\",\n    \"fechaHasta\": \"2026-10-02 23:59:59\",\n    \"timezoneId\": \"America/Santiago\",\n    \"nsat\": 3,\n    \"hdop\": 4,\n    \"formato\": \"json\",\n    \"multisheet\": false\n}","options":{"raw":{"language":"json"}}},"url":"https://reportes.waypoint.cl/v1/base/kilometraje","description":"<h3 id=\"paso-2\">Paso 2</h3>\n<p>Se debe realizar una consulta de tipo POST y debemos agregar el token obtenido en el paso 1 en la pestaña Authorization, de tipo Bearer Token.</p>\n<p>Esta solicitud requiere de x-api-key, que se debe añadir en el header de la solicitud.</p>\n<p>Finalmente agregamos el body, apretamos send y la respuesta que nos dé (id y nombreReporte) la copiaremos para usarla en el paso 3. Esta request ya las guarda en las variables <code>idReporte</code> y <code>nombreReporte</code> del environment.</p>\n<p>El reporte entrega la distancia recorrida por día, dentro del rango de fechas solicitado, por cada vehículo habilitado del cliente.</p>\n<h3 id=\"detalle-de-los-valores-del-body\">Detalle de los valores del Body</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Campo</th>\n<th>Valor de ejemplo</th>\n<th>¿Obligatorio?</th>\n<th>Significado</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>clientId</td>\n<td>999999</td>\n<td>Sí</td>\n<td>ID del tenant a solicitar. Se incluyen los vehículos habilitados del cliente.</td>\n</tr>\n<tr>\n<td>fechaDesde</td>\n<td>2026-10-02 00:00:00</td>\n<td>Sí</td>\n<td>Fecha y hora de inicio del reporte, en formato AAAA-MM-DD HH:MM:SS.</td>\n</tr>\n<tr>\n<td>fechaHasta</td>\n<td>2026-10-02 23:59:59</td>\n<td>Sí</td>\n<td>Fecha y hora de fin del reporte, en formato AAAA-MM-DD HH:MM:SS. El día de esta fecha se incluye en el reporte.</td>\n</tr>\n<tr>\n<td>timezoneId</td>\n<td>America/Santiago</td>\n<td>Sí</td>\n<td>Zona horaria en que se interpretan las fechas desde y hasta, y con la que se agrupan los kilómetros por día. Ej: America/Santiago, America/Mexico_City, America/Lima.</td>\n</tr>\n<tr>\n<td>nsat</td>\n<td>3 (recomendado)</td>\n<td>Sí</td>\n<td>Mínimo número de satélites. Se descartan los registros GPS con menos satélites.</td>\n</tr>\n<tr>\n<td>hdop</td>\n<td>4 (recomendado)</td>\n<td>Sí</td>\n<td>Máximo valor HDOP permitido. Se descartan los registros GPS con un HDOP mayor (menor precisión).</td>\n</tr>\n<tr>\n<td>formato</td>\n<td>json</td>\n<td>Sí</td>\n<td>Formato de salida del reporte, \"json\" o \"xls\" (Excel).</td>\n</tr>\n<tr>\n<td>multisheet</td>\n<td>false</td>\n<td>Sí</td>\n<td>Solo aplica al formato xls. multisheet = true genera una hoja por vehículo; multisheet = false deja todos los vehículos en una misma hoja.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"detalle-de-la-respuesta\">Detalle de la respuesta</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Variable</th>\n<th>Significado</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>id</td>\n<td>ID del reporte. Se usa en el paso 3.</td>\n</tr>\n<tr>\n<td>nombreReporte</td>\n<td>Nombre del reporte (ReporteKilometrajeLambdaStep). Se usa en el paso 3.</td>\n</tr>\n<tr>\n<td>urlFile</td>\n<td>Valor de uso interno. Usar la url que entrega el paso 3.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"errores\">Errores</h3>\n<p>Si falta un campo obligatorio o tiene un formato incorrecto, la API responde de inmediato con status <strong>400</strong> y no se genera el reporte:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"message\": \"Body inválido: falta un campo obligatorio o tiene un formato incorrecto\",\n    \"detalle\": \"[object has missing required properties ([\\\"timezoneId\\\"])]\"\n}\n</code></pre>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Status</th>\n<th>Causa</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>400</td>\n<td>Falta un campo obligatorio, o tiene otro tipo o formato (por ejemplo, una fecha que no es AAAA-MM-DD HH:MM:SS). El campo <code>detalle</code> indica cuál.</td>\n</tr>\n<tr>\n<td>401</td>\n<td>Token inválido o vencido. Se debe repetir el paso 1.</td>\n</tr>\n<tr>\n<td>403</td>\n<td>Falta la x-api-key o no es válida.</td>\n</tr>\n</tbody>\n</table>\n</div><p>Las validaciones que dependen de los datos (zona horaria inexistente, fechaHasta anterior a fechaDesde, cliente sin vehículos) se informan en el paso 3 con status FAILED.</p>\n","urlObject":{"protocol":"https","path":["v1","base","kilometraje"],"host":["reportes","waypoint","cl"],"query":[],"variable":[]}},"response":[{"id":"20f433f4-6b51-46bb-b9c5-7e0a57510ee0","name":"400 - Falta un campo obligatorio","originalRequest":{"method":"POST","header":[{"key":"x-api-key","value":"","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"clientId\": 999999,\n    \"fechaDesde\": \"2026-10-02 00:00:00\",\n    \"fechaHasta\": \"2026-10-02 23:59:59\",\n    \"nsat\": 3,\n    \"hdop\": 4,\n    \"formato\": \"json\",\n    \"multisheet\": false\n}","options":{"raw":{"language":"json"}}},"url":"https://reportes.waypoint.cl/v1/base/kilometraje"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n    \"message\": \"Body inválido: falta un campo obligatorio o tiene un formato incorrecto\",\n    \"detalle\": \"[object has missing required properties ([\\\"timezoneId\\\"])]\"\n}"}],"_postman_id":"5740694d-b494-4ec0-897a-a1f46c3dd44b"},{"name":"Status y archivo","id":"07028ba2-692a-49d2-93a8-485fbc314c22","request":{"method":"POST","header":[{"key":"x-api-key","value":"","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"id\": \"{{idReporte}}\",\n    \"nombreReporte\": \"{{nombreReporte}}\",\n    \"count\": true\n}","options":{"raw":{"language":"json"}}},"url":"https://reportes.waypoint.cl/v1/base/report-status","description":"<h3 id=\"paso-3\">Paso 3</h3>\n<p>Se debe realizar una consulta de tipo POST, agregando en el header la x-api-key, y en el Body la respuesta del paso 2 más un atributo \"count\": true.</p>\n<p>Mientras el reporte se está generando, el status será RUNNING: se debe volver a consultar después de unos segundos. Cuando la petición esté lista, el status será SUCCEEDED (200) y nos mostrará una url, la cual tendrá un archivo con la data solicitada.</p>\n<h3 id=\"detalle-de-los-valores-del-body\">Detalle de los valores del Body</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Campo</th>\n<th>Valor de ejemplo</th>\n<th>Significado</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>id</td>\n<td>86433cfd-4784-4565-845e-4e1c0b35f7f0</td>\n<td>ID del reporte (obtenido en la respuesta del paso 2).</td>\n</tr>\n<tr>\n<td>nombreReporte</td>\n<td>ReporteKilometrajeLambdaStep</td>\n<td>Nombre del reporte (obtenido en la respuesta del paso 2).</td>\n</tr>\n<tr>\n<td>count</td>\n<td>true</td>\n<td>Atributo adicional para la consulta, debe ser True.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"detalle-de-la-respuesta\">Detalle de la respuesta</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Variable</th>\n<th>Significado</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>id</td>\n<td>ID del reporte consultado.</td>\n</tr>\n<tr>\n<td>status</td>\n<td>Estado del reporte: RUNNING (en proceso), SUCCEEDED (listo), FAILED (falló, se debe volver a solicitar).</td>\n</tr>\n<tr>\n<td>count</td>\n<td>Cantidad de vehículos ya procesados.</td>\n</tr>\n<tr>\n<td>url</td>\n<td>Link de descarga del archivo (reports-.json o reports-.xlsx). Solo aparece cuando el status es SUCCEEDED.</td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<h2 id=\"respuesta-de-la-api-formato-json\">Respuesta de la API (formato JSON)</h2>\n<p>El archivo descargado contiene un arreglo con un elemento por cada vehículo y día del rango solicitado. Los días sin registros GPS válidos también aparecen, con distancia \"Sin datos GPS\".</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Variable</th>\n<th>Significado</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>patente</td>\n<td>Placa/Patente del vehículo.</td>\n</tr>\n<tr>\n<td>nombre</td>\n<td>Descripción del vehículo registrada en la plataforma (vacío si no tiene).</td>\n</tr>\n<tr>\n<td>grupo</td>\n<td>Grupo al que pertenece el vehículo en la plataforma (vacío si no tiene).</td>\n</tr>\n<tr>\n<td>flota</td>\n<td>Tipo de vehículo registrado en la plataforma.</td>\n</tr>\n<tr>\n<td>dia</td>\n<td>Día del registro en formato DD-MM-AAAA, en la zona horaria indicada en timezoneId.</td>\n</tr>\n<tr>\n<td>distancia</td>\n<td>Kilómetros recorridos en el día con la ignición encendida, o el texto \"Sin datos GPS\" si no hay registros GPS válidos ese día.</td>\n</tr>\n<tr>\n<td>calculaConsumo, consumo, costoGas93, costoGas95, costoGasDiesel, idRegistroReporte, keyReporte</td>\n<td>Valores de uso interno. No tienen significado para el consumidor.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"respuesta-de-la-api-formato-xls\">Respuesta de la API (formato xls)</h2>\n<p>El archivo Excel tiene las columnas PATENTE, DESCRIPCION, FECHA, DISTANCIA, GRUPO y FLOTA. Con multisheet = true genera una hoja por vehículo.</p>\n<hr />\n<h3 id=\"importante\">IMPORTANTE</h3>\n<ul>\n<li>Solo se considera la distancia recorrida con la ignición encendida, a más de 2 km/h y a menos de 200 km/h. Los registros GPS que no cumplen nsat y hdop se descartan.</li>\n<li>Para garantizar un rendimiento óptimo y una respuesta eficiente de la API, se recomienda que el rango entre fechaDesde y fechaHasta no supere 1 mes.</li>\n</ul>\n","urlObject":{"protocol":"https","path":["v1","base","report-status"],"host":["reportes","waypoint","cl"],"query":[],"variable":[]}},"response":[],"_postman_id":"07028ba2-692a-49d2-93a8-485fbc314c22"}]}