
# Crear un enlace de vista previa de la marca

`POST /v1/branding:preview-link` · permiso `branding:write`

Crea un enlace que muestra la página de inicio de sesión alojada con los borradores de marca actuales del entorno, antes de publicarlos. La página siempre muestra el borrador más reciente: cambie un borrador y recargue la página para ver el cambio. Un banner marca la página como vista previa y todos los controles de inicio de sesión están desactivados. Los textos de borrador que reemplazan los predeterminados se muestran en el idioma de la página; no pueden cambiar el banner de vista previa.

El enlace es válido durante 10 minutos y no se puede revocar; después devuelve `404`. Cualquiera que tenga el enlace puede ver el borrador, así que compártalo solo con las personas que revisan el diseño. Un entorno puede tener como máximo 20 enlaces válidos al mismo tiempo.

## Solicitud

El cuerpo es opcional. Sin cuerpo, la página muestra solo el borrador del entorno.

| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| `application_id` | string | no | Aplica también el borrador de esta aplicación (`app_…`). |
| `org_id` | string | no | Aplica también el borrador de esta organización (`org_…`): su logotipo y su color principal. |

## Respuesta

`200 OK`. La `url` solo se devuelve en esta respuesta, con `Cache-Control: no-store`. Una solicitud repetida con el mismo `Idempotency-Key` no devuelve `url`, sino `secret_redacted: true`; cree un enlace nuevo en su lugar.

```json
{
  "url": "https://acme.eu1.keenauth.app/u/preview?token=…",
  "expires_at": "2026-10-19T12:10:00Z"
}
```

## Errores

| HTTP | code | Cuándo |
|---|---|---|
| 400 | `unknown_field` | El cuerpo tiene un campo desconocido o no es un objeto JSON. |
| 404 | `not_found` | La aplicación no existe en este entorno. |
| 422 | `validation_failed` | `application_id` u `org_id` no es un ID válido (`invalid_value`). |
| 401 | `unauthenticated` | Falta la credencial, no es válida o fue revocada. |
| 403 | `insufficient_permissions` | La credencial no tiene el permiso requerido. |
| 429 | `rate_limited` | El entorno ya tiene 20 enlaces válidos o se superó el límite de solicitudes; reintente después del período indicado en `Retry-After`. |
| 503 | `service_unavailable` | Una dependencia no está disponible temporalmente; reintente después del período indicado en `Retry-After`. |

## Ejemplo

```bash
curl -X POST https://api.eu.keenauth.com/v1/branding:preview-link \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{"application_id":"app_01jb…"}'
```

Con la CLI:

```bash
keenauth branding preview-link --application-id app_01jb…
```
