Marca blanca

Ver en Markdown

Pon tu nombre, color y logotipo en el panel, sírvelo en tu propio dominio y usa tus propios servidores de nombres.

En esta página

La marca blanca permite a una agencia mostrar el panel y sus correos con su propia marca, servir el panel en su propio dominio (un CNAME a custom.openwaf.dev) y publicar sus zonas con sus propios servidores de nombres. Estas rutas aún no tienen métodos en los SDK; los ejemplos usan curl.

OperaciónRuta
Ver la marcaGET /v1/orgs/{org}/brand
Configurar la marcaPUT /v1/orgs/{org}/brand
Ver el logotipoGET /v1/orgs/{org}/brand/logo
Subir el logotipoPUT /v1/orgs/{org}/brand/logo
Borrar el logotipoDELETE /v1/orgs/{org}/brand/logo
Ver el dominio del panelGET /v1/orgs/{org}/whitelabel/domain
Configurar el dominio del panelPUT /v1/orgs/{org}/whitelabel/domain
Borrar el dominio del panelDELETE /v1/orgs/{org}/whitelabel/domain
Verificar el dominio del panelPOST /v1/orgs/{org}/whitelabel/domain/verify
Ver los servidores de nombres propiosGET /v1/orgs/{org}/whitelabel/nameservers
Configurar servidores de nombres propiosPUT /v1/orgs/{org}/whitelabel/nameservers
Borrar los servidores de nombres propiosDELETE /v1/orgs/{org}/whitelabel/nameservers
Verificar los servidores de nombres propiosPOST /v1/orgs/{org}/whitelabel/nameservers/verify

Ver la marca

GET /v1/orgs/{org}/brand

Devuelve la marca de la organización (nombre, color de acento, logotipo y correo de soporte). Sin marca propia, la respuesta es la marca de OpenWAF (org_id nulo).

Rol necesario: readonly o superior.

Parámetros

NombreEnTipoObligatorioDescripción
orgrutastring (uuid)SíId de la organización. Cada ruta comprueba que es la del token (si no, 404).

Respuesta

CampoTipoDescripción
org_idstring (uuid) o nullOrganización de la marca; null = la marca de OpenWAF.
namestringNombre.
logo_urlstring o nullURL del logotipo en el panel, versionada por su contenido; null sin logotipo.
accentstringColor de acento #rrggbb.
support_emailstring
oauthbooleanSi el panel de este dominio ofrece la entrada con Google y GitHub (solo el dominio de OpenWAF).

Errores

EstadoDescripción
503No disponible ahora (unavailable); reinténtalo más tarde.

Ejemplo

Aún sin método en los SDK: usa la petición HTTP.

curl "https://dash.openwaf.dev/v1/orgs/$OPENWAF_ORG/brand" \
  -H "Authorization: Bearer $OPENWAF_TOKEN"
200
{
  "org_id": "1e7c9a3b-5d2f-4b8a-9c6e-0f2a4b6c8d1e",
  "name": "example.com",
  "logo_url": "/v1/brand/logo?v=3f9a1c2b7d4e",
  "accent": "#0f766e",
  "support_email": "[email protected]",
  "oauth": false
}

Configurar la marca

PUT /v1/orgs/{org}/brand

Configura el nombre, el color de acento y el correo de soporte que muestran el panel y sus correos para la organización.

Rol necesario: admin o superior. De toda la organización.

Parámetros

NombreEnTipoObligatorioDescripción
orgrutastring (uuid)SíId de la organización. Cada ruta comprueba que es la del token (si no, 404).

Cuerpo de la petición

Tipo de contenido application/json. Esquema: BrandInput.

CampoTipoObligatorioDescripción
namestringSíNombre que muestran el panel y los correos; sin saltos de línea ni < >. Como mucho 100 caracteres.
accentstringSíColor de acento #rrggbb (se pasa a minúsculas). Patrón ^#[0-9a-f]{6}$.
support_emailstring (email)NoCorreo de soporte que muestran el panel y los correos.

Respuesta

CampoTipoDescripción
org_idstring (uuid) o nullOrganización de la marca; null = la marca de OpenWAF.
namestringNombre.
logo_urlstring o nullURL del logotipo en el panel, versionada por su contenido; null sin logotipo.
accentstringColor de acento #rrggbb.
support_emailstring
oauthbooleanSi el panel de este dominio ofrece la entrada con Google y GitHub (solo el dominio de OpenWAF).

Errores

EstadoDescripción
400Petición mal formada (bad_request).
403El rol o los límites del token no lo permiten (forbidden).
422Error de validación (invalid).
503No disponible ahora (unavailable); reinténtalo más tarde.

Ejemplo

Aún sin método en los SDK: usa la petición HTTP.

curl -X PUT "https://dash.openwaf.dev/v1/orgs/$OPENWAF_ORG/brand" \
  -H "Authorization: Bearer $OPENWAF_TOKEN" \
  -H "Content-Type: application/json" \
  --data '{
    "name": "Acme Digital",
    "accent": "#0f766e",
    "support_email": "[email protected]"
  }'
200
{
  "org_id": "1e7c9a3b-5d2f-4b8a-9c6e-0f2a4b6c8d1e",
  "name": "example.com",
  "logo_url": "/v1/brand/logo?v=3f9a1c2b7d4e",
  "accent": "#0f766e",
  "support_email": "[email protected]",
  "oauth": false
}
GET /v1/orgs/{org}/brand/logo

Devuelve el logotipo de la marca como image/svg+xml o image/png.

Rol necesario: readonly o superior.

Parámetros

NombreEnTipoObligatorioDescripción
orgrutastring (uuid)SíId de la organización. Cada ruta comprueba que es la del token (si no, 404).

Respuesta

  • 200: El logotipo. Cuerpo de tipo image/png.

Errores

EstadoDescripción
404No existe o el token no lo ve (not_found).
503No disponible ahora (unavailable); reinténtalo más tarde.

Ejemplo

Aún sin método en los SDK: usa la petición HTTP.

curl "https://dash.openwaf.dev/v1/orgs/$OPENWAF_ORG/brand/logo" \
  -H "Authorization: Bearer $OPENWAF_TOKEN"
PUT /v1/orgs/{org}/brand/logo

Sube el logotipo como cuerpo de la petición, image/svg+xml o image/png, de hasta 256 KB (PNG de hasta 4096×4096 píxeles). Antes hay que configurar la marca con Configurar la marca.

Rol necesario: admin o superior. De toda la organización.

Parámetros

NombreEnTipoObligatorioDescripción
orgrutastring (uuid)SíId de la organización. Cada ruta comprueba que es la del token (si no, 404).

Cuerpo de la petición

Tipo de contenido image/png.

Como mucho 262144 caracteres.

Respuesta

CampoTipoDescripción
org_idstring (uuid) o nullOrganización de la marca; null = la marca de OpenWAF.
namestringNombre.
logo_urlstring o nullURL del logotipo en el panel, versionada por su contenido; null sin logotipo.
accentstringColor de acento #rrggbb.
support_emailstring
oauthbooleanSi el panel de este dominio ofrece la entrada con Google y GitHub (solo el dominio de OpenWAF).

Errores

EstadoDescripción
403El rol o los límites del token no lo permiten (forbidden).
422invalid: no es un SVG o PNG válido, pasa de 256 KB o de 4096×4096 píxeles, o la marca aún no tiene nombre y color.
503No disponible ahora (unavailable); reinténtalo más tarde.

Ejemplo

Aún sin método en los SDK: usa la petición HTTP.

curl -X PUT "https://dash.openwaf.dev/v1/orgs/$OPENWAF_ORG/brand/logo" \
  -H "Authorization: Bearer $OPENWAF_TOKEN" \
  -H "Content-Type: image/png" \
  --data-binary @logo.png
200
{
  "org_id": "1e7c9a3b-5d2f-4b8a-9c6e-0f2a4b6c8d1e",
  "name": "example.com",
  "logo_url": "/v1/brand/logo?v=3f9a1c2b7d4e",
  "accent": "#0f766e",
  "support_email": "[email protected]",
  "oauth": false
}
DELETE /v1/orgs/{org}/brand/logo

Quita el logotipo de la marca.

Rol necesario: admin o superior. De toda la organización.

Parámetros

NombreEnTipoObligatorioDescripción
orgrutastring (uuid)SíId de la organización. Cada ruta comprueba que es la del token (si no, 404).

Respuesta

CampoTipoDescripción
org_idstring (uuid) o nullOrganización de la marca; null = la marca de OpenWAF.
namestringNombre.
logo_urlstring o nullURL del logotipo en el panel, versionada por su contenido; null sin logotipo.
accentstringColor de acento #rrggbb.
support_emailstring
oauthbooleanSi el panel de este dominio ofrece la entrada con Google y GitHub (solo el dominio de OpenWAF).

Errores

EstadoDescripción
403El rol o los límites del token no lo permiten (forbidden).
503No disponible ahora (unavailable); reinténtalo más tarde.

Ejemplo

Aún sin método en los SDK: usa la petición HTTP.

curl -X DELETE "https://dash.openwaf.dev/v1/orgs/$OPENWAF_ORG/brand/logo" \
  -H "Authorization: Bearer $OPENWAF_TOKEN"
200
{
  "org_id": "1e7c9a3b-5d2f-4b8a-9c6e-0f2a4b6c8d1e",
  "name": "example.com",
  "logo_url": "/v1/brand/logo?v=3f9a1c2b7d4e",
  "accent": "#0f766e",
  "support_email": "[email protected]",
  "oauth": false
}

Ver el dominio del panel

GET /v1/orgs/{org}/whitelabel/domain

Devuelve el dominio propio del panel de la organización y su estado.

Rol necesario: readonly o superior. De toda la organización.

Parámetros

NombreEnTipoObligatorioDescripción
orgrutastring (uuid)SíId de la organización. Cada ruta comprueba que es la del token (si no, 404).

Respuesta

CampoTipoDescripción
hoststringDominio propio del panel, p. ej. panel.example.com.
statusstringUno de pending, active, error.
detailstringMotivo del estado error (vacío si no hay).
cname_targetstringDestino del CNAME que hay que crear (sin proxy).
checked_atstring (date-time)Última comprobación.
activated_atstring (date-time)Cuándo pasó a activa.

Errores

EstadoDescripción
403El rol o los límites del token no lo permiten (forbidden).
404not_found: la organización no tiene dominio propio.
503No disponible ahora (unavailable); reinténtalo más tarde.

Ejemplo

Aún sin método en los SDK: usa la petición HTTP.

curl "https://dash.openwaf.dev/v1/orgs/$OPENWAF_ORG/whitelabel/domain" \
  -H "Authorization: Bearer $OPENWAF_TOKEN"
200
{
  "host": "www.example.com",
  "status": "pending",
  "detail": "",
  "cname_target": "custom.openwaf.dev",
  "checked_at": "2026-10-27T09:30:00Z",
  "activated_at": "2026-10-27T09:30:00Z"
}

Configurar el dominio del panel

PUT /v1/orgs/{org}/whitelabel/domain

Configura el dominio en el que se sirve el panel con la marca de la organización. Empieza pending. Crea un registro CNAME de ese nombre a cname_target (custom.openwaf.dev, solo DNS, sin proxy) y luego llama a Verificar el dominio del panel. Cambiar el dominio deja de servir el anterior.

Rol necesario: admin o superior. De toda la organización.

Parámetros

NombreEnTipoObligatorioDescripción
orgrutastring (uuid)SíId de la organización. Cada ruta comprueba que es la del token (si no, 404).

Cuerpo de la petición

Tipo de contenido application/json.

CampoTipoObligatorioDescripción
hoststringSíDominio propio del panel, p. ej. panel.example.com.

Respuesta

CampoTipoDescripción
hoststringDominio propio del panel, p. ej. panel.example.com.
statusstringUno de pending, active, error.
detailstringMotivo del estado error (vacío si no hay).
cname_targetstringDestino del CNAME que hay que crear (sin proxy).
checked_atstring (date-time)Última comprobación.
activated_atstring (date-time)Cuándo pasó a activa.

Errores

EstadoDescripción
400Petición mal formada (bad_request).
403El rol o los límites del token no lo permiten (forbidden).
409host_taken: el nombre es de otra organización.
422Error de validación (invalid).
503No disponible ahora (unavailable); reinténtalo más tarde.

Ejemplo

Aún sin método en los SDK: usa la petición HTTP.

curl -X PUT "https://dash.openwaf.dev/v1/orgs/$OPENWAF_ORG/whitelabel/domain" \
  -H "Authorization: Bearer $OPENWAF_TOKEN" \
  -H "Content-Type: application/json" \
  --data '{
    "host": "panel.acme.example"
  }'
200
{
  "host": "www.example.com",
  "status": "pending",
  "detail": "",
  "cname_target": "custom.openwaf.dev",
  "checked_at": "2026-10-27T09:30:00Z",
  "activated_at": "2026-10-27T09:30:00Z"
}

Borrar el dominio del panel

DELETE /v1/orgs/{org}/whitelabel/domain

Quita el dominio propio del panel de la organización; el panel deja de servirse en él.

Rol necesario: admin o superior. De toda la organización.

Parámetros

NombreEnTipoObligatorioDescripción
orgrutastring (uuid)SíId de la organización. Cada ruta comprueba que es la del token (si no, 404).

Respuesta

  • 204: Borrado. Sin cuerpo.

Errores

EstadoDescripción
403El rol o los límites del token no lo permiten (forbidden).
404No existe o el token no lo ve (not_found).
503No disponible ahora (unavailable); reinténtalo más tarde.

Ejemplo

Aún sin método en los SDK: usa la petición HTTP.

curl -X DELETE "https://dash.openwaf.dev/v1/orgs/$OPENWAF_ORG/whitelabel/domain" \
  -H "Authorization: Bearer $OPENWAF_TOKEN"

Verificar el dominio del panel

POST /v1/orgs/{org}/whitelabel/domain/verify

Comprueba el registro CNAME del dominio del panel. Si apunta a cname_target, el dominio pasa a active y el panel se sirve en él con certificado; si no, el estado es error y detail dice qué corregir.

Rol necesario: admin o superior. De toda la organización.

Parámetros

NombreEnTipoObligatorioDescripción
orgrutastring (uuid)SíId de la organización. Cada ruta comprueba que es la del token (si no, 404).

Respuesta

CampoTipoDescripción
hoststringDominio propio del panel, p. ej. panel.example.com.
statusstringUno de pending, active, error.
detailstringMotivo del estado error (vacío si no hay).
cname_targetstringDestino del CNAME que hay que crear (sin proxy).
checked_atstring (date-time)Última comprobación.
activated_atstring (date-time)Cuándo pasó a activa.

Errores

EstadoDescripción
403El rol o los límites del token no lo permiten (forbidden).
404No existe o el token no lo ve (not_found).
409host_taken: el nombre es de otra organización.
503No disponible ahora (unavailable); reinténtalo más tarde.

Ejemplo

Aún sin método en los SDK: usa la petición HTTP.

curl -X POST "https://dash.openwaf.dev/v1/orgs/$OPENWAF_ORG/whitelabel/domain/verify" \
  -H "Authorization: Bearer $OPENWAF_TOKEN"
200
{
  "host": "www.example.com",
  "status": "pending",
  "detail": "",
  "cname_target": "custom.openwaf.dev",
  "checked_at": "2026-10-27T09:30:00Z",
  "activated_at": "2026-10-27T09:30:00Z"
}

Ver los servidores de nombres propios

GET /v1/orgs/{org}/whitelabel/nameservers

Devuelve los servidores de nombres propios de la organización, su estado, las direcciones a las que deben resolver y los TXT que prueban su propiedad.

Rol necesario: readonly o superior. De toda la organización.

Parámetros

NombreEnTipoObligatorioDescripción
orgrutastring (uuid)SíId de la organización. Cada ruta comprueba que es la del token (si no, 404).

Respuesta

CampoTipoDescripción
nsarray de stringLos dos servidores de nombres propios.
statusstringUno de pending, active, error.
detailstringMotivo del estado error (vacío si no hay).
required_ipsobjectDirecciones a las que deben resolver exactamente los dos nombres (A y AAAA).
required_ips.v4array de string
required_ips.v6array de string
ownership_txtarray de objectRegistros TXT que demuestran que la organización controla el dominio de sus servidores de nombres; la verificación los exige antes de activarlos.
ownership_txt[].namestringNombre.
ownership_txt[].valuestring
checked_atstring (date-time)Última comprobación.
activated_atstring (date-time)Cuándo pasó a activa.

Errores

EstadoDescripción
403El rol o los límites del token no lo permiten (forbidden).
404not_found: la organización no tiene servidores de nombres propios.
503No disponible ahora (unavailable); reinténtalo más tarde.

Ejemplo

Aún sin método en los SDK: usa la petición HTTP.

curl "https://dash.openwaf.dev/v1/orgs/$OPENWAF_ORG/whitelabel/nameservers" \
  -H "Authorization: Bearer $OPENWAF_TOKEN"
200
{
  "ns": [
    "ns1.example-dns.net",
    "ns2.example-dns.net"
  ],
  "status": "pending",
  "detail": "",
  "required_ips": {
    "v4": [
      "example"
    ],
    "v6": [
      "example"
    ]
  },
  "ownership_txt": [
    {
      "name": "example.com",
      "value": "4f1c2e9a7b3d"
    }
  ],
  "checked_at": "2026-10-27T09:30:00Z",
  "activated_at": "2026-10-27T09:30:00Z"
}

Configurar servidores de nombres propios

PUT /v1/orgs/{org}/whitelabel/nameservers

Configura dos servidores de nombres propios (por ejemplo ns1.example.com y ns2.example.com) para publicar las zonas delegadas de la organización en lugar de la pareja asignada. Empiezan pending. Antes de verificarlos:

  1. Crea los registros TXT de ownership_txt.
  2. Haz que los dos nombres resuelvan exactamente a las direcciones de required_ips (A y AAAA; añade registros glue en el registrador si los nombres están dentro de tu propio dominio).

Sustituir servidores activos hace que las zonas vuelvan a publicar la pareja asignada hasta que se verifiquen los nuevos.

Rol necesario: admin o superior. De toda la organización.

Parámetros

NombreEnTipoObligatorioDescripción
orgrutastring (uuid)SíId de la organización. Cada ruta comprueba que es la del token (si no, 404).

Cuerpo de la petición

Tipo de contenido application/json.

CampoTipoObligatorioDescripción
nsarray de stringSíDos nombres distintos, p. ej. ns1.example.com y ns2.example.com. Exactamente 2 elementos.

Respuesta

CampoTipoDescripción
nsarray de stringLos dos servidores de nombres propios.
statusstringUno de pending, active, error.
detailstringMotivo del estado error (vacío si no hay).
required_ipsobjectDirecciones a las que deben resolver exactamente los dos nombres (A y AAAA).
required_ips.v4array de string
required_ips.v6array de string
ownership_txtarray de objectRegistros TXT que demuestran que la organización controla el dominio de sus servidores de nombres; la verificación los exige antes de activarlos.
ownership_txt[].namestringNombre.
ownership_txt[].valuestring
checked_atstring (date-time)Última comprobación.
activated_atstring (date-time)Cuándo pasó a activa.

Errores

EstadoDescripción
400Petición mal formada (bad_request).
403El rol o los límites del token no lo permiten (forbidden).
409host_taken: un nombre lo usa otra organización.
422Error de validación (invalid).
503No disponible ahora (unavailable); reinténtalo más tarde.

Ejemplo

Aún sin método en los SDK: usa la petición HTTP.

curl -X PUT "https://dash.openwaf.dev/v1/orgs/$OPENWAF_ORG/whitelabel/nameservers" \
  -H "Authorization: Bearer $OPENWAF_TOKEN" \
  -H "Content-Type: application/json" \
  --data '{
    "ns": [
      "ns1.acme.example",
      "ns2.acme.example"
    ]
  }'
200
{
  "ns": [
    "ns1.example-dns.net",
    "ns2.example-dns.net"
  ],
  "status": "pending",
  "detail": "",
  "required_ips": {
    "v4": [
      "example"
    ],
    "v6": [
      "example"
    ]
  },
  "ownership_txt": [
    {
      "name": "example.com",
      "value": "4f1c2e9a7b3d"
    }
  ],
  "checked_at": "2026-10-27T09:30:00Z",
  "activated_at": "2026-10-27T09:30:00Z"
}

Borrar los servidores de nombres propios

DELETE /v1/orgs/{org}/whitelabel/nameservers

Quita los servidores de nombres propios de la organización; sus zonas delegadas vuelven a publicar la pareja asignada.

Rol necesario: admin o superior. De toda la organización.

Parámetros

NombreEnTipoObligatorioDescripción
orgrutastring (uuid)SíId de la organización. Cada ruta comprueba que es la del token (si no, 404).

Respuesta

  • 204: Borrados. Sin cuerpo.

Errores

EstadoDescripción
403El rol o los límites del token no lo permiten (forbidden).
404No existe o el token no lo ve (not_found).
503No disponible ahora (unavailable); reinténtalo más tarde.

Ejemplo

Aún sin método en los SDK: usa la petición HTTP.

curl -X DELETE "https://dash.openwaf.dev/v1/orgs/$OPENWAF_ORG/whitelabel/nameservers" \
  -H "Authorization: Bearer $OPENWAF_TOKEN"

Verificar los servidores de nombres propios

POST /v1/orgs/{org}/whitelabel/nameservers/verify

Comprueba los TXT de propiedad y que los dos nombres resuelven exactamente a required_ips. Si es así, los servidores pasan a active y todas las zonas delegadas de la organización los publican; si no, el estado es error y detail dice qué corregir.

Rol necesario: admin o superior. De toda la organización.

Parámetros

NombreEnTipoObligatorioDescripción
orgrutastring (uuid)SíId de la organización. Cada ruta comprueba que es la del token (si no, 404).

Respuesta

CampoTipoDescripción
nsarray de stringLos dos servidores de nombres propios.
statusstringUno de pending, active, error.
detailstringMotivo del estado error (vacío si no hay).
required_ipsobjectDirecciones a las que deben resolver exactamente los dos nombres (A y AAAA).
required_ips.v4array de string
required_ips.v6array de string
ownership_txtarray de objectRegistros TXT que demuestran que la organización controla el dominio de sus servidores de nombres; la verificación los exige antes de activarlos.
ownership_txt[].namestringNombre.
ownership_txt[].valuestring
checked_atstring (date-time)Última comprobación.
activated_atstring (date-time)Cuándo pasó a activa.

Errores

EstadoDescripción
403El rol o los límites del token no lo permiten (forbidden).
404No existe o el token no lo ve (not_found).
409host_taken: un nombre lo usa otra organización.
503No disponible ahora (unavailable); reinténtalo más tarde.

Ejemplo

Aún sin método en los SDK: usa la petición HTTP.

curl -X POST "https://dash.openwaf.dev/v1/orgs/$OPENWAF_ORG/whitelabel/nameservers/verify" \
  -H "Authorization: Bearer $OPENWAF_TOKEN"
200
{
  "ns": [
    "ns1.example-dns.net",
    "ns2.example-dns.net"
  ],
  "status": "pending",
  "detail": "",
  "required_ips": {
    "v4": [
      "example"
    ],
    "v6": [
      "example"
    ]
  },
  "ownership_txt": [
    {
      "name": "example.com",
      "value": "4f1c2e9a7b3d"
    }
  ],
  "checked_at": "2026-10-27T09:30:00Z",
  "activated_at": "2026-10-27T09:30:00Z"
}

Última actualización:

↑↓ para moverte↵ para abriresc para cerrar