# Eventos · Referencia

> Reproducir los eventos de los últimos 30 días.

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

## Reproducir eventos

`GET /v1/events` · cualquier token · [ver en la web](https://safeonuba.com/desarrolladores/referencia/eventos#listEvents)

Los mismos que llegan por webhook, guardados 30 días: para recuperar lo perdido tras una caída del receptor.

### Parámetros de consulta

- `since` (string (date-time), obligatorio): Desde cuándo (como mucho 30 días atrás).
- `type` (EventType): `muster.updated`: el recuento ha cambiado (se comprueba cada 5 s, solo se emite si cambia). `muster.targets_changed`: la sala ha descartado o rehabilitado un punto de reunión. Valores: `alert.created`, `alert.acknowledged`, `alert.resolved`, `alert.reopened`, `alert.worker_acknowledged`, `muster.started`, `muster.kind_changed`, `muster.phase_changed`, `muster.targets_changed`, `muster.updated`, `muster.worker_missing`, `muster.ended`.
- `limit` (integer): Elementos por página (máximo 500). (de 1 a 500, por defecto 100)
- `cursor` (string): El `next_cursor` de la página anterior.

### Respuestas

- `200`: Eventos, del más antiguo al más reciente. → `EventPage` (`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/events?since=2026-09-24T11%3A04%3A12Z" \
  -H "Authorization: Bearer $SAFEONUBA_TOKEN"
```

### Respuesta de ejemplo (`200`)

```json
{
  "data": [
    {
      "id": "0f6c2b7e-3a1d-4c55-9b0e-7d2f4a8c1e90",
      "type": "alert.created",
      "api_version": "2026-09-24",
      "created_at": "2026-09-24T11:04:12Z",
      "organization_id": "0f6c2b7e-3a1d-4c55-9b0e-7d2f4a8c1e90",
      "site_id": "0f6c2b7e-3a1d-4c55-9b0e-7d2f4a8c1e90",
      "data": {
        "alert": {
          "id": "0f6c2b7e-3a1d-4c55-9b0e-7d2f4a8c1e90",
          "type": "sos",
          "severity": "critical",
          "status": "unacknowledged",
          "title": "SOS activado — Ana Ejemplo",
          "date_created": "2026-09-24T11:04:12Z",
          "date_last_modified": "2026-09-24T11:04:12Z",
          "site": {
            "id": "11111111-1111-1111-1111-111111111111",
            "name": "Planta Ejemplo — simulación"
          },
          "zone": null,
          "worker": {
            "id": "33333333-3333-3333-3333-333333333305",
            "external_id": "EMP-004512",
            "name": "Ana Ejemplo",
            "contractor": "Contrata Ejemplo A"
          },
          "device": {
            "id": "44444444-4444-4444-4444-444444444405",
            "serial": "OS-W-0005",
            "battery": 64,
            "date_last_seen": "2026-09-24T11:04:10Z"
          },
          "location": {
            "latitude": 40.00121,
            "longitude": -3.00214,
            "uncertainty_m": 8,
            "source": "gps",
            "masked": false,
            "position_date_utc": "2026-09-24T11:04:08Z",
            "height": null
          },
          "location_withheld": false,
          "details": {
            "trigger": "watch_button"
          },
          "nearby": [
            {
              "kind": "vehicle",
              "worker": {
                "id": "33333333-3333-3333-3333-333333333309",
                "external_id": "EMP-002210",
                "name": "Carlos Ejemplo",
                "contractor": "Contrata Ejemplo B"
              },
              "vehicle_type": "Grúa móvil",
              "distance_m": 18,
              "reported_at": "2026-09-24T11:04:02Z"
            },
            {
              "kind": "person",
              "worker": {
                "id": "33333333-3333-3333-3333-333333333301",
                "external_id": "EMP-000981",
                "name": "Diego Ejemplo",
                "contractor": null
              },
              "vehicle_type": null,
              "distance_m": 26,
              "reported_at": "2026-09-24T11:03:58Z"
            }
          ],
          "vehicle_warnings": [],
          "worker_acknowledged_at": null,
          "acknowledged": null,
          "resolved": null,
          "assigned_to": null,
          "simulated": false,
          "panel_url": "https://app.safeonuba.com/alertas/0f6c2b7e-3a1d-4c55-9b0e-7d2f4a8c1e90"
        }
      }
    }
  ],
  "next_cursor": "eyJ0IjoiMjAyNi0wOS0yNFQxMTowNDoxMloifQ"
}
```
