# Agencias y clientes

> Crea un cliente por cada cliente final, asígnale sus dominios, da de alta dominios en bloque y da a su gente acceso solo a sus dominios.

Una agencia gestiona muchos clientes finales desde una sola organización. Los **clientes** son subcuentas dentro de la
organización: cada dominio puede pertenecer a un cliente, y los miembros y tokens de API limitados a un cliente solo
ven y gestionan los dominios de ese cliente. Los dominios de todos los clientes usan la misma
[pareja de servidores de nombres](https://developers.openwaf.dev/es/dns/delegate-a-zone/), así que todos tus clientes reciben las mismas instrucciones.

## Crear un cliente

Necesitas el rol `tech` o superior, en toda la organización.

**Panel**

Abre **Clientes › Nuevo cliente**. Escribe el nombre y, si quieres, un **Correo de contacto** y una **Nota** interna
(solo la ve tu organización).
**CLI**

```sh
openwaf-cloud ctl clients add "Zapatos Acme" contact_email=it@example.com --reason "Cliente nuevo"
```
**API**

```sh
curl -X POST "https://dash.openwaf.dev/v1/orgs/$ORG/clients" \
  -H "Authorization: Bearer $OPENWAF_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "Zapatos Acme", "contact_email": "it@example.com"}'
```


Los nombres de cliente son únicos dentro de la organización (hasta 200 caracteres, sin comas ni saltos de línea); las
notas admiten hasta 2000 caracteres. Los administradores pueden editar y borrar clientes.

## Asignar un dominio a un cliente

Elige el cliente al añadir el dominio, o cámbialo después. La asignación es un [cambio versionado](https://developers.openwaf.dev/es/dns/zone-versions/)
de la zona. Necesitas el rol `tech` o superior, en toda la organización.

**Panel**

Abre el **Resumen** del dominio, busca **Cliente**, elige el cliente y pulsa **Cambiar el cliente**.
**CLI**

```sh
openwaf-cloud ctl zones set-client example.com "Zapatos Acme" --reason "Es de Zapatos Acme"
openwaf-cloud ctl zones set-client example.com - --reason "Sin cliente"
```
**API**

```sh
curl -X PATCH "https://dash.openwaf.dev/v1/orgs/$ORG/zones/$ZONE" \
  -H "Authorization: Bearer $OPENWAF_TOKEN" \
  -H "Content-Type: application/json" \
  -H "X-Change-Reason: Es de Zapatos Acme" \
  -d '{"client_id": "'"$CLIENT"'"}'
```
Envía `{"client_id": null}` para dejarlo sin cliente.
**MCP**

`add_zone` acepta un `client_id` (consulta `list_clients`) al dar de alta el dominio.


## Dar de alta muchos dominios a la vez

**Alta en bloque** crea un dominio delegado por línea a partir de una lista pegada o de un fichero CSV:

```text
domain,client
example.com,Zapatos Acme
example.org,Zapatos Acme
example.net
```

- Cada línea es `dominio[,cliente]`; la cabecera `domain,client` es opcional y `#` empieza un comentario.
- Si una línea nombra un cliente que no existe, se crea.
- Las líneas son independientes: una que falla (por ejemplo con `zone_exists`) no detiene las demás, y el resultado
  muestra lo ocurrido en cada línea.
- Hasta 1000 dominios por subida. En subidas de hasta 50 dominios se importan además los registros públicos de cada
  uno; en las mayores, búscalos después desde los registros de cada dominio.

El equivalente en la API es `POST /v1/orgs/{org}/zones/bulk` con el CSV como cuerpo de la petición.

## Dar acceso a la gente de un cliente

Invita a un miembro limitado al cliente o crea un token de API limitado a él. Los miembros y tokens limitados a un
cliente solo pueden tener el rol `tech` o `readonly`. Con ese alcance:

- solo ven los dominios de su cliente, y los dominios que añaden quedan asignados a él;
- no ven la lista de miembros de la organización, otros clientes ni los tokens ajenos;
- con `tech`, pueden leer la auditoría de los dominios de su cliente.

Consulta [Miembros del equipo](https://developers.openwaf.dev/es/fundamentals/team-members/) y [Tokens de API](https://developers.openwaf.dev/es/fundamentals/api-tokens/#scopes).

## Borrar un cliente

Los administradores pueden borrar un cliente que no tenga dominios. Pasa antes sus dominios a otro cliente (o a
ninguno); si no, el borrado se rechaza con `409 client_has_zones`. Los miembros, invitaciones y tokens de API limitados
al cliente se borran con él.

## Tu marca

Muestra la marca de tu agencia en lugar de la de OpenWAF, abre el panel en tu propio dominio y da a tus clientes
servidores de nombres con tu nombre: consulta [Panel de marca blanca](https://developers.openwaf.dev/es/fundamentals/white-label/).
