> Índice completo de la documentación: https://trackerintl.com/devs/llms.txt
> Esta página en HTML: https://trackerintl.com/devs/guias/historial-de-recorridos
> Estado: Parcial, revisada el 2026-10-05. Usa operaciones verificadas por diff contra producción. Los ejemplos se ejecutaron contra un servidor simulado. El rango máximo de 31 días es el valor por defecto del código, no una medición de producción.

# Historial de recorridos

Consulta el recorrido de un vehículo por periodos de hasta 31 días, con tramos de conducción y parada o posiciones GPS crudas paginadas.

## Antes de empezar

- Necesitas el `id` del vehículo: sale de `get_devices`.
- Las fechas y horas se interpretan en la **zona horaria de la cuenta**, no en UTC.
- `get_history` acepta un rango máximo de 31 días y responde `422` si lo superas. Para periodos más largos, divide en tramos de hasta 31 días y consulta uno por uno.

## Recorrido por tramos

**Recorrido de un vehículo por tramos**

cURL:

```bash
curl -sS -G "https://plataforma.trackerintl.com/api/get_history" \
  -H "user-api-hash: TU_API_HASH" \
  --data-urlencode "device_id=9001" \
  --data-urlencode "from_date=2026-10-01" \
  --data-urlencode "from_time=00:00" \
  --data-urlencode "to_date=2026-10-02" \
  --data-urlencode "to_time=23:59"
```

JavaScript:

```javascript
const BASE_URL = "https://plataforma.trackerintl.com";
const API_HASH = "TU_API_HASH";

const params = new URLSearchParams({
  device_id: "9001",
  from_date: "2026-10-01",
  from_time: "00:00",
  to_date: "2026-10-02",
  to_time: "23:59",
});
const respuesta = await fetch(`${BASE_URL}/api/get_history?${params}`, {
  headers: { "user-api-hash": API_HASH },
});
if (!respuesta.ok) throw new Error(`HTTP ${respuesta.status}: ${await respuesta.text()}`);
console.log(JSON.stringify(await respuesta.json(), null, 2));
```

Python:

```python
import json
import requests

BASE_URL = "https://plataforma.trackerintl.com"
API_HASH = "TU_API_HASH"

respuesta = requests.get(
    f"{BASE_URL}/api/get_history",
    headers={"user-api-hash": API_HASH},
    params={"device_id": "9001", "from_date": "2026-10-01", "from_time": "00:00", "to_date": "2026-10-02", "to_time": "23:59"},
    timeout=30,
)
respuesta.raise_for_status()
print(json.dumps(respuesta.json(), indent=2, ensure_ascii=False))
```

PHP:

```php
<?php
$baseUrl = "https://plataforma.trackerintl.com";
$apiHash = "TU_API_HASH";

$url = $baseUrl . "/api/get_history?" . http_build_query(["device_id" => "9001", "from_date" => "2026-10-01", "from_time" => "00:00", "to_date" => "2026-10-02", "to_time" => "23:59"]);
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTPHEADER => ["user-api-hash: " . $apiHash],
]);
$cuerpo = curl_exec($ch);
$codigo = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
if ($cuerpo === false || $codigo !== 200) {
    fwrite(STDERR, "HTTP $codigo\n");
    exit(1);
}
echo json_encode(json_decode($cuerpo, true), JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE), "\n";
```

Cada elemento de `items` es un tramo de conducción o de parada, según su `status`. Los totales (`distance_sum`, `top_speed`…) vienen con unidad, como texto.

## Posiciones crudas paginadas

Si necesitas cada posición GPS, usa `get_history_messages`. Avanza con `page` hasta llegar a `last_page`, y recuerda que `limit` solo admite 50, 100, 200, 300, 400, 500 o 1000.

**Posiciones GPS crudas paginadas**

cURL:

```bash
curl -sS -G "https://plataforma.trackerintl.com/api/get_history_messages" \
  -H "user-api-hash: TU_API_HASH" \
  --data-urlencode "device_id=9001" \
  --data-urlencode "from_date=2026-10-01" \
  --data-urlencode "from_time=00:00" \
  --data-urlencode "to_date=2026-10-02" \
  --data-urlencode "to_time=23:59" \
  --data-urlencode "limit=100" \
  --data-urlencode "page=1"
```

JavaScript:

```javascript
const BASE_URL = "https://plataforma.trackerintl.com";
const API_HASH = "TU_API_HASH";

const params = new URLSearchParams({
  device_id: "9001",
  from_date: "2026-10-01",
  from_time: "00:00",
  to_date: "2026-10-02",
  to_time: "23:59",
  limit: "100",
  page: "1",
});
const respuesta = await fetch(`${BASE_URL}/api/get_history_messages?${params}`, {
  headers: { "user-api-hash": API_HASH },
});
if (!respuesta.ok) throw new Error(`HTTP ${respuesta.status}: ${await respuesta.text()}`);
console.log(JSON.stringify(await respuesta.json(), null, 2));
```

Python:

```python
import json
import requests

BASE_URL = "https://plataforma.trackerintl.com"
API_HASH = "TU_API_HASH"

respuesta = requests.get(
    f"{BASE_URL}/api/get_history_messages",
    headers={"user-api-hash": API_HASH},
    params={"device_id": "9001", "from_date": "2026-10-01", "from_time": "00:00", "to_date": "2026-10-02", "to_time": "23:59", "limit": "100", "page": "1"},
    timeout=30,
)
respuesta.raise_for_status()
print(json.dumps(respuesta.json(), indent=2, ensure_ascii=False))
```

PHP:

```php
<?php
$baseUrl = "https://plataforma.trackerintl.com";
$apiHash = "TU_API_HASH";

$url = $baseUrl . "/api/get_history_messages?" . http_build_query(["device_id" => "9001", "from_date" => "2026-10-01", "from_time" => "00:00", "to_date" => "2026-10-02", "to_time" => "23:59", "limit" => "100", "page" => "1"]);
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTPHEADER => ["user-api-hash: " . $apiHash],
]);
$cuerpo = curl_exec($ch);
$codigo = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
if ($cuerpo === false || $codigo !== 200) {
    fwrite(STDERR, "HTTP $codigo\n");
    exit(1);
}
echo json_encode(json_decode($cuerpo, true), JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE), "\n";
```

## Recomendaciones

- Pide solo el rango que necesitas: las respuestas de historial pueden ser grandes.
- Para análisis largos, guarda lo que descargas en tu propio almacén en lugar de volver a pedirlo.
- Si el vehículo está vencido, la API responde `422`. Mira [Errores](/devs/errores).
