La API de OpenWAF es una API REST con JSON sobre HTTPS. Gestiona todo lo que hace el panel: zonas y registros DNS, ajustes de borde y reglas, certificados y caché, analítica, agentes IA, egress, miembros y tokens de API. Los SDK, la CLI y el servidor MCP usan esta misma API.
URL base
https://dash.openwaf.dev/v1Los recursos de la organización están bajo /v1/orgs/{org} y los de una zona bajo /v1/orgs/{org}/zones/{zone}. {org} es el id de tu organización y {zone} el de una zona, ambos UUID. GET /v1/orgs devuelve la organización del token, y Listar zonas devuelve los ids de las zonas.
Autenticación
Cada petición lleva un token de API en la cabecera Authorization:
GET /v1/orgs HTTP/1.1
Host: dash.openwaf.dev
Authorization: Bearer owf_…Los tokens se crean en el panel (Tokens de API) o con Crear un token. Un token actúa con un rol y se puede limitar a una zona o a un cliente. Una petición sobre una organización que no es la del token responde 404, igual que un recurso que no existe. Consulta Autenticación.
Peticiones y respuestas
- Los cuerpos de las peticiones son JSON (
Content-Type: application/json) salvo que la operación diga otra cosa, de hasta 1 MiB. Los campos desconocidos se rechazan con400 bad_request. - Las fechas van en RFC 3339 y UTC, y los ids son UUID.
- Las listas responden
{"items": […]}. Las largas se paginan conlimity un cursor (cursor,before) que describe cada operación. - Las respuestas
204 No Contentno llevan cuerpo.
Cambios de configuración
La configuración de una zona (registros, ajustes de borde, reglas, su cliente) está versionada: cada cambio crea una versión con su autor y su motivo, visible en Versiones de configuración y en la auditoría. Las escrituras que cambian la configuración admiten tres controles:
| Control | Dónde | Efecto |
|---|---|---|
X-Change-Reason | Cabecera | Motivo del cambio, de 1 a 500 caracteres, que queda en el historial y en la auditoría. Lo exigen la mayoría de las escrituras: sin él responden 422 reason_required. |
dry_run=1 | Consulta | Simula el cambio: responde 200 con el plan (Applied), las diferencias y la versión que crearía. No guarda nada. |
If-Match | Cabecera | Versión actual esperada, p. ej. "12". Si la zona ha cambiado desde entonces, la escritura responde 412 version_conflict con current_version. |
Las escrituras correctas devuelven la nueva versión en la cabecera X-Config-Version y en ETag (entre comillas, lista para If-Match). La forma segura de cambiar una zona, los mismos dos pasos que exige el servidor MCP:
- Envía la escritura con
dry_run=1y revisa el plan; la versión actual está enfrom_version(o en elETagde la zona). - Envía la misma escritura sin
dry_run, conIf-Match: "<versión>"y unX-Change-Reason. Si alguien ha cambiado la zona entretanto recibirás412 version_conflict: vuelve a simular.
Errores
Los errores responden un estado HTTP y un cuerpo JSON con un code estable:
{"error": {"code": "invalid", "message": "ttl must be between 60 and 86400", "field": "ttl"}}Todos los códigos están en Errores.
Límites de peticiones
Algunas operaciones tienen sus propios límites y, al superarlos, responden 429 con una cabecera Retry-After (en segundos):
| Operación | Límite |
|---|---|
| Purgar la caché | Por organización: 10 purgas por minuto con ráfagas de 30 (todo, nombres, prefijos, etiquetas) y 500 URL por minuto. |
| Escanear la preparación para agentes | Una vez por nombre y minuto. |
| Stream de eventos de seguridad y stream de eventos de egress | 10 streams abiertos por organización. |
Versiones de la API
Todas las rutas están bajo /v1. Con el tiempo, las respuestas pueden ganar campos nuevos y los enumerados valores nuevos: los clientes deben ignorar los campos que no conozcan. Los cambios de la API se anuncian en el registro de cambios.
SDK, CLI y MCP
openwaf-cloud ctl, la API desde el terminal y desde scripts.Servidor MCPla API como herramientas para asistentes de IA, en https://mcp.openwaf.dev/mcp.La propia API sirve los ficheros de los SDK sin autenticación: https://dash.openwaf.dev/v1/sdk/openwaf.ts y https://dash.openwaf.dev/v1/sdk/openwaf.py.
Referencia
- Esquemas: todos los objetos que devuelve o acepta la API.
Sesión del panel
La entrada (/v1/auth/…), la aceptación de invitaciones y el borrado de la cuenta sirven al panel con una cookie de sesión y no forman parte de la API con tokens. Con la cookie de sesión, el panel también llama a las rutas de esta referencia; sus escrituras exigen entonces la cabecera X-CSRF-Token. Las integraciones usan siempre un token de API.