# Centros · Referencia

> Los centros del cliente y sus zonas.

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

## Centros del cliente

`GET /v1/sites` · cualquier token · [ver en la web](https://safeonuba.com/desarrolladores/referencia/centros#listSites)

### Respuestas

- `200`: Centros a los que accede el cliente. → `SiteList` (`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/sites" \
  -H "Authorization: Bearer $SAFEONUBA_TOKEN"
```

### Respuesta de ejemplo (`200`)

```json
{
  "data": [
    {
      "id": "0f6c2b7e-3a1d-4c55-9b0e-7d2f4a8c1e90",
      "name": "Planta Ejemplo — simulación",
      "location": "Polígono industrial de ejemplo",
      "privacy_mode": "on_demand",
      "unveil_min_severity": "low"
    }
  ]
}
```

## Zonas y puntos de reunión de un centro

`GET /v1/sites/{id}/zones` · scope `alerts:read` · [ver en la web](https://safeonuba.com/desarrolladores/referencia/centros#listSiteZones)

GeoJSON en WGS84. Las zonas de privacidad, con nombre y tipo pero sin geometría.

### Parámetros de ruta

- `id` (string (uuid), obligatorio): Id del centro.

### Respuestas

- `200`: Zonas en vigor. → `ZoneList` (`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`)
- `404`: El centro no existe o 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/sites/0f6c2b7e-3a1d-4c55-9b0e-7d2f4a8c1e90/zones" \
  -H "Authorization: Bearer $SAFEONUBA_TOKEN"
```

### Respuesta de ejemplo (`200`)

```json
{
  "data": [
    {
      "id": "f6040b41-be81-4bf3-af68-bfaf3e284c54",
      "name": "Punto de reunión PR-3 · Zona alta",
      "type": "assembly_point",
      "geometry": {
        "type": "Polygon",
        "coordinates": [
          [
            [
              -2.9825,
              40.0081
            ],
            [
              -2.9818,
              40.0081
            ],
            [
              -2.9818,
              40.0076
            ],
            [
              -2.9825,
              40.0076
            ],
            [
              -2.9825,
              40.0081
            ]
          ]
        ]
      },
      "assembly_point": {
        "serves": [
          "general",
          "tsunami"
        ],
        "elevation_m": 50,
        "elevation_source": "verified",
        "vertical": false,
        "capacity": 200
      }
    }
  ]
}
```
