# Preparación para agentes

> Escanea lo preparado que está un nombre de la zona para agentes IA, reglas de robots.txt, sitemap, llms.txt, markdown y datos estructurados.

El escaneo de preparación para agentes comprueba por HTTPS lo preparado que está un nombre para agentes IA (reglas IA de robots.txt y Content-Signal, sitemap, llms.txt, markdown, datos estructurados…) y guarda el resultado.

| Operación | Ruta |
|---|---|
| [Ver la preparación para agentes](https://developers.openwaf.dev/es/api/agent-readiness/#get-agent-readiness) | `GET /v1/orgs/{org}/zones/{zone}/agent-readiness` |
| [Escanear la preparación para agentes](https://developers.openwaf.dev/es/api/agent-readiness/#scan-agent-readiness) | `POST /v1/orgs/{org}/zones/{zone}/agent-readiness/scan` |

## Ver la preparación para agentes

```http
GET /v1/orgs/{org}/zones/{zone}/agent-readiness
```

Devuelve el último escaneo de preparación para agentes de un nombre de la zona (`404` si no hay). Sin `host`, el más reciente de cualquier nombre.

**Rol necesario:** `readonly` o superior.

#### Parámetros

| Nombre | En | Tipo | Obligatorio | Descripción |
|---|---|---|---|---|
| `org` | ruta | string (uuid) | Sí | Id de la organización. Cada ruta comprueba que es la del token (si no, `404`). |
| `zone` | ruta | string (uuid) | Sí | Id de la zona (consulta [Listar zonas](https://developers.openwaf.dev/es/api/zones/#list-zones)). |
| `host` | consulta | string | No | Un nombre de la zona; sin él, el escaneo más reciente de cualquiera. |

#### Respuesta

- `200`: Devuelve [AgentReadiness](https://developers.openwaf.dev/es/api/schemas/#agent-readiness).

| Campo | Tipo | Descripción |
|---|---|---|
| `host` | string |  |
| `scanned_at` | string (date-time) |  |
| `score` | integer | De 0 a 100. |
| `verdict` | string |  |
| `levels` | array de object |  |
| `levels[].id` | string | Id. |
| `levels[].passed` | integer |  |
| `levels[].total` | integer |  |
| `levels[].checks` | array de object |  |

#### Errores

| Estado | Descripción |
|---|---|
| `400` | Petición mal formada (`bad_request`). |
| `404` | No existe o el token no lo ve (`not_found`). |

#### Ejemplo

**curl**


```sh
curl "https://dash.openwaf.dev/v1/orgs/$OPENWAF_ORG/zones/6f1d2c3b-8a4e-4b7d-9c21-5e3f7a8b9c0d/agent-readiness?host=www.example.com" \
  -H "Authorization: Bearer $OPENWAF_TOKEN"
```

**TypeScript**


```ts
import { OpenWAF } from "./openwaf";

const owf = new OpenWAF({ baseUrl: "https://dash.openwaf.dev" }); // token de OPENWAF_TOKEN
const result = await owf.getAgentReadiness({
  zone: "6f1d2c3b-8a4e-4b7d-9c21-5e3f7a8b9c0d",
  host: "www.example.com"
});
```

**Python**


```py
from openwaf import OpenWAF

owf = OpenWAF(base_url="https://dash.openwaf.dev")  # token de OPENWAF_TOKEN
result = owf.get_agent_readiness(zone="6f1d2c3b-8a4e-4b7d-9c21-5e3f7a8b9c0d", host="www.example.com")
```



```json
{
  "host": "www.example.com",
  "scanned_at": "2026-10-27T09:30:00Z",
  "score": 0,
  "verdict": "example",
  "levels": [
    {
      "id": "example",
      "passed": 0,
      "total": 128,
      "checks": [
        {}
      ]
    }
  ]
}
```

## Escanear la preparación para agentes

```http
POST /v1/orgs/{org}/zones/{zone}/agent-readiness/scan
```

Escanea ahora un nombre de la zona por HTTPS y guarda el resultado. El nombre se resuelve y solo se contactan direcciones públicas, con límites de tiempo y de tamaño. Una vez por nombre y minuto.

**Rol necesario:** `tech` o superior.

#### Parámetros

| Nombre | En | Tipo | Obligatorio | Descripción |
|---|---|---|---|---|
| `org` | ruta | string (uuid) | Sí | Id de la organización. Cada ruta comprueba que es la del token (si no, `404`). |
| `zone` | ruta | string (uuid) | Sí | Id de la zona (consulta [Listar zonas](https://developers.openwaf.dev/es/api/zones/#list-zones)). |

#### Cuerpo de la petición

Tipo de contenido `application/json`. El cuerpo es opcional.

| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| `host` | string | No | Por defecto el ápice de la zona. |

#### Respuesta

- `200`: Devuelve [AgentReadiness](https://developers.openwaf.dev/es/api/schemas/#agent-readiness).

| Campo | Tipo | Descripción |
|---|---|---|
| `host` | string |  |
| `scanned_at` | string (date-time) |  |
| `score` | integer | De 0 a 100. |
| `verdict` | string |  |
| `levels` | array de object |  |
| `levels[].id` | string | Id. |
| `levels[].passed` | integer |  |
| `levels[].total` | integer |  |
| `levels[].checks` | array de object |  |

#### Errores

| Estado | Descripción |
|---|---|
| `400` | Petición mal formada (`bad_request`). |
| `403` | El rol o los límites del token no lo permiten (`forbidden`). |
| `404` | No existe o el token no lo ve (`not_found`). |
| `429` | Demasiadas peticiones (`rate_limited`); espera los segundos de `Retry-After`. |
| `503` | No disponible ahora (`unavailable`); reinténtalo más tarde. |

#### Ejemplo

**curl**


```sh
curl -X POST "https://dash.openwaf.dev/v1/orgs/$OPENWAF_ORG/zones/6f1d2c3b-8a4e-4b7d-9c21-5e3f7a8b9c0d/agent-readiness/scan" \
  -H "Authorization: Bearer $OPENWAF_TOKEN" \
  -H "Content-Type: application/json" \
  --data '{
    "host": "www.example.com"
  }'
```

**TypeScript**


```ts
import { OpenWAF } from "./openwaf";

const owf = new OpenWAF({ baseUrl: "https://dash.openwaf.dev" }); // token de OPENWAF_TOKEN
const result = await owf.scanAgentReadiness({
  zone: "6f1d2c3b-8a4e-4b7d-9c21-5e3f7a8b9c0d",
  body: {
    host: "www.example.com"
  }
});
```

**Python**


```py
from openwaf import OpenWAF

owf = OpenWAF(base_url="https://dash.openwaf.dev")  # token de OPENWAF_TOKEN
result = owf.scan_agent_readiness(
    zone="6f1d2c3b-8a4e-4b7d-9c21-5e3f7a8b9c0d",
    body={
        "host": "www.example.com"
    },
)
```



```json
{
  "host": "www.example.com",
  "scanned_at": "2026-10-27T09:30:00Z",
  "score": 0,
  "verdict": "example",
  "levels": [
    {
      "id": "example",
      "passed": 0,
      "total": 128,
      "checks": [
        {}
      ]
    }
  ]
}
```
