
# Créer un lien d'aperçu de la marque

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

Crée un lien qui affiche la page de connexion hébergée avec les brouillons de marque actuels de l'environnement, avant leur publication. La page affiche toujours le dernier brouillon : modifiez un brouillon puis rechargez la page pour voir le changement. Une bannière indique que la page est un aperçu, et tous les contrôles de connexion sont désactivés. Les textes de brouillon qui remplacent les textes par défaut sont affichés dans la langue de la page ; ils ne peuvent pas modifier la bannière d'aperçu.

Le lien est valide 10 minutes et ne peut pas être révoqué ; ensuite, il renvoie `404`. Toute personne disposant du lien peut voir le brouillon ; ne le partagez donc qu'avec les personnes qui relisent le design. Un environnement peut avoir au maximum 20 liens valides en même temps.

## Requête

Le corps est facultatif. Sans corps, la page n'affiche que le brouillon de l'environnement.

| Champ | Type | Obligatoire | Description |
|---|---|---|---|
| `application_id` | string | non | Applique aussi le brouillon de cette application (`app_…`). |
| `org_id` | string | non | Applique aussi le brouillon de cette organisation (`org_…`) : son logo et sa couleur principale. |

## Réponse

`200 OK`. L'`url` n'est renvoyée que dans cette réponse, avec `Cache-Control: no-store`. Une requête répétée avec le même `Idempotency-Key` ne renvoie pas d'`url` mais `secret_redacted: true` ; créez plutôt un nouveau lien.

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

## Erreurs

| HTTP | code | Quand |
|---|---|---|
| 400 | `unknown_field` | Le corps contient un champ inconnu ou n'est pas un objet JSON. |
| 404 | `not_found` | L'application n'existe pas dans cet environnement. |
| 422 | `validation_failed` | `application_id` ou `org_id` n'est pas un identifiant valide (`invalid_value`). |
| 401 | `unauthenticated` | Les identifiants sont absents, invalides ou révoqués. |
| 403 | `insufficient_permissions` | Les identifiants n'ont pas la permission requise. |
| 429 | `rate_limited` | L'environnement a déjà 20 liens valides, ou la limite de débit a été dépassée ; réessayez après la durée indiquée par `Retry-After`. |
| 503 | `service_unavailable` | Une dépendance est temporairement indisponible ; réessayez après la durée indiquée par `Retry-After`. |

## Exemple

```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…"}'
```

Avec la CLI :

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