# Posiciones · Referencia

> Solo las que el velo deja ver.

Página: https://safeonuba.com/desarrolladores/referencia/posiciones · API de SafeOnuba v1 (`api_version: "2026-09-24"`), en vista previa: el contrato puede cambiar.

## Últimas posiciones visibles

`GET /v1/positions/latest` · scope `positions:read` · [ver en la web](https://safeonuba.com/desarrolladores/referencia/posiciones#listLatestPositions)

Solo las que el velo deja ver ahora. Cada posición servida con una alerta detrás queda registrada en la alerta («Quién ha visto su posición»).

### Parámetros de consulta

- `site_id` (string (uuid))

### Respuestas

- `200`: Posiciones. → `PositionList` (`application/json`)
- `401`: Falta el token, ha caducado o se ha revocado. → `Problem` (`application/problem+json`)
- `403`: Al token le falta el scope que pide la ruta, o el centro no es del cliente. → `Problem` (`application/problem+json`)
- `429`: Demasiadas peticiones, o demasiado tiempo de consulta: cada cliente tiene un número de peticiones por minuto (600 de serie) y un tiempo de consulta por minuto (30 s de serie), y cada petición gasta lo que tarda, así que una lista larga cuenta más que una alerta suelta. `Retry-After` dice cuándo volver. → `Problem` (`application/problem+json`)

### Ejemplo de petición (sandbox)

```bash
curl "https://sandbox.api.safeonuba.com/v1/positions/latest" \
  -H "Authorization: Bearer $SAFEONUBA_TOKEN"
```

### Respuesta de ejemplo (`200`)

```json
{
  "data": [
    {
      "device_id": "0f6c2b7e-3a1d-4c55-9b0e-7d2f4a8c1e90",
      "worker": {
        "id": "0f6c2b7e-3a1d-4c55-9b0e-7d2f4a8c1e90",
        "external_id": "EMP-004512",
        "name": "Ana Ejemplo",
        "contractor": "Contrata Ejemplo A"
      },
      "location": {
        "latitude": 40.00121,
        "longitude": -3.00214,
        "uncertainty_m": 8,
        "source": "gps",
        "masked": false,
        "position_date_utc": "2026-09-24T11:04:12Z",
        "height": {
          "height_m": 7.6,
          "uncertainty_m": 1,
          "building": "Nave de proceso",
          "floor": "Planta 1"
        }
      },
      "in_vehicle": false
    }
  ]
}
```
