
# Interface en ligne de commande

L'interface en ligne de commande (CLI) `keenauth` appelle l'API de gestion depuis un terminal ou un script. Chaque commande encapsule une méthode typée du SDK Go, de sorte que la CLI et l'API se comportent de la même manière. Il n'existe pas encore de paquet d'installation.

## Authentification et cible

La CLI lit ses identifiants uniquement depuis l'environnement. La clé d'API n'est jamais acceptée comme option, afin qu'elle n'apparaisse pas dans l'historique de votre shell.

| Variable | Obligatoire | Description |
|---|---|---|
| `KEENAUTH_API_KEY` | oui | Clé d'API de gestion. Si elle est absente, la commande se termine avec le code 3. |
| `KEENAUTH_BASE_URL` | oui, sauf si `--base-url` est fourni | URL de base de l'API de gestion de votre environnement. |

Au lieu d'une clé d'API, vous pouvez vous connecter avec le compte de votre tableau de bord : `keenauth login`, puis `keenauth env use <environment_id>`. La session n'est utilisée que si `KEENAUTH_API_KEY` n'est pas défini ; l'adresse de l'environnement provient alors du plan de contrôle (voir [Se connecter avec keenauth login](/docs/cli/login)).

L'option `--base-url` remplace `KEENAUTH_BASE_URL` pour une seule commande. La CLI n'affiche jamais la clé d'API ; si une réponse du serveur la reproduit, elle est remplacée par `[redacted]`.

## Commandes

Les commandes suivent le modèle `keenauth <group> <action> [arguments] [flags]`. Exécutez `keenauth --help` ou `keenauth <group> --help` pour obtenir la liste complète.

| Groupe | Actions |
|---|---|
| `users` | `list`, `search`, `get`, `create`, `update`, `delete`, `block`, `unblock`, `cancel-deletion`, `authenticators list`, `authenticators delete`, `authenticators reset`, `authenticators reactivate`, `send-password-reset`, `send-verification-email`, `emails send-verification`, `start-recovery`, `logs list` |
| `applications` | `list`, `create`, `get`, `update`, `delete`, `get-api-grant`, `put-api-grant`, `delete-api-grant`, `credentials list`, `credentials create`, `credentials delete` |
| `apis` | `list`, `create`, `get`, `update`, `delete` |
| `connections` | `list`, `create`, `get`, `update`, `delete`, `activate`, `deactivate` |
| `identity-settings` | `get`, `update` |
| `environment-settings` | `get`, `update` |
| `config` | `export` (sans `-o` affiche du YAML), `plan -f <file>` (affiche un diff lisible dans un terminal), `plans get`, `apply <plan_id>` (demande une confirmation ; `--secrets-from-env` lit les secrets depuis des variables d'environnement, `--confirm-deletion <kind>/<key>`), `promote --from <env> --to <env>` (exporte, planifie, affiche le diff et applique après confirmation ; voir [Promouvoir la configuration avec keenauth config promote](/docs/cli/config-promote)) |
| `api-keys` | `list`, `get`, `create`, `rotate`, `revoke` |
| `logs` | `list`, `get`, `tail` (suit les nouveaux enregistrements ; `--type`, `--user`, `--org` ; voir [Suivre les journaux avec keenauth logs tail](/docs/cli/tail)) |
| `support-access-grants` | `list`, `get`, `create`, `delete` (voir [Accorder un accès au support avec keenauth support-access-grants](/docs/cli/support-access-grants)) |
| `directories` | `simulate <directory_id> --scenario <name>` (exécute un scénario du simulateur SCIM en développement et en préproduction ; voir [Tester le provisionnement SCIM avec keenauth directories simulate](/docs/cli/directories-simulate)) |
| `audit` | `verify` (vérifie hors ligne un export d'audit téléchargé ; voir [Vérifier les exports d'audit avec keenauth audit verify](/docs/cli/audit-verify)) |
| `branding` | `get`, `update`, `applications get`, `applications put`, `organizations get`, `organizations put`, `css put`, `page-template put`, `publish`, `rollback`, `versions list`, `texts get`, `texts put`, `texts delete` |
| `signing-keys` | `list`, `rotate`, `policy get`, `policy update` |
| `events` | `tail` (suit les événements client via l'API d'événements ; voir [Suivre les événements avec keenauth events tail](/docs/cli/events-tail)), `get <event ID>` (un seul événement, exactement tel qu'envoyé par le serveur) |
| `mock` | `serve` lance un serveur OIDC factice local pour les tests hors ligne ; il ne nécessite aucune clé d'API (voir [Serveur factice local](/docs/cli/mock-server)) |
| `test` | `login --user <+test address>` connecte un utilisateur de test à un environnement `development` avec le code fixe et affiche les jetons ; il ne nécessite aucune clé d'API (voir [Connecter des utilisateurs de test avec keenauth test login](/docs/cli/test-login)) |
| `webhooks` | `listen --forward-to <local URL>` transmet les événements d'un environnement `development` ou `staging` à votre machine, signés avec un secret temporaire (voir [Tester les webhooks en local avec keenauth webhooks listen](/docs/cli/webhooks-listen)) |
| `login`, `logout`, `whoami`, `env` | `login` (`--web`, `--insecure-storage`), `logout`, `whoami`, `env use <environment_id>`, `env list` : connexion avec votre compte du tableau de bord au lieu d'une clé d'API (voir [Se connecter avec keenauth login](/docs/cli/login)) |

Les commandes de liste acceptent `--limit`, `--after`, `--before` et `--order`. Lorsque d'autres résultats existent, le curseur suivant est affiché sur stderr sous la forme `more results: --after <cursor>`.

## Format de sortie

`--output` (`-o`) sélectionne `table`, `json` ou `yaml`. Sans cette option, la CLI affiche un tableau dans un terminal et du JSON sinon. Le JSON et le YAML contiennent la réponse de l'API sans modification et ne sont jamais traduits, afin que les scripts puissent s'y fier. Les résultats vont sur stdout ; les erreurs, les conseils et la ligne `etag` vont sur stderr.

## Corps de requête

Les commandes qui envoient un corps acceptent une option par champ plat, nommée d'après la clé JSON avec des tirets (`phone_number` devient `--phone-number`). Les objets imbriqués sont fournis avec `--data` :

- `--data @file.json` lit le corps depuis un fichier.
- `--data -` lit le corps depuis l'entrée standard.

Les options remplacent les champs du fichier. Un corps est limité à 4 MiB.

```sh
keenauth users create --email ada@example.com
keenauth apis create --data @api.json
echo '{"name":"Orders"}' | keenauth apis update api_123 --data - --if-match '"v3"'
```

## Concurrence optimiste : `--if-match` et l'etag

Les commandes de mise à jour et de suppression des applications, des API et des connexions exigent `--if-match` ; `users update` l'accepte. La valeur est le `ETag` de la version que vous voulez modifier. Le serveur rejette la requête si la ressource a changé entre-temps. `identity-settings update` l'exige aussi. `environment-settings update` l'exige aussi. Les écritures de brouillon de personnalisation (`branding update`, `branding applications put`, `branding organizations put`, `branding css put`, `branding page-template put`) l'exigent également.

Chaque commande `get` (`users`, `applications`, `apis`, `connections`, `identity-settings`, `environment-settings`) affiche la réponse `ETag` sur stderr, afin que stdout reste propre :

```sh
$ keenauth apis get api_123
{ ... }
etag: "v3"
$ keenauth apis update api_123 --name Orders --if-match '"v3"'
```

La ligne `etag` n'est pas ajoutée à la sortie JSON ou YAML.

## Commandes destructives et `--yes`

Les commandes qui suppriment ou bloquent demandent une confirmation (`[y/N]`) dans un terminal. Un refus termine la commande avec le code 1 et affiche `aborted`. Lorsque l'entrée standard n'est pas un terminal, la commande refuse de s'exécuter sauf si vous passez `--yes` (`-y`) ; elle se termine avec le code 2 avant d'envoyer la moindre requête.

## Codes de sortie

| Code | Signification |
|---|---|
| `0` | Succès. |
| `1` | Erreur du serveur ou opérationnelle, confirmation refusée, ou panne réseau. |
| `2` | Erreur d'utilisation : commande ou option inconnue, argument manquant, corps invalide, ou `--yes` absent sur un terminal non interactif. |
| `3` | Erreur d'authentification : la clé est absente, ou le serveur a répondu 401 ou 403. |
| `4` | Le forfait ne comprend pas la fonctionnalité (`403` avec `plan_feature_unavailable`). |

Pour les erreurs du serveur, la CLI affiche `error`, `code`, `status`, `detail`, `request_id` et une ligne `field` par erreur de validation sur stderr. Indiquez le `request_id` lorsque vous contactez le support.

## Langue

Le texte lisible par un humain (aide, invites, erreurs, en-têtes de tableaux) est disponible en turc (`tr`), anglais (`en`), français (`fr`), allemand (`de`), coréen (`ko`), japonais (`ja`), italien (`it`) et espagnol (`es`). La langue est prise dans la première de ces variables définie : `KEENAUTH_LANG`, `LC_ALL`, `LC_MESSAGES`, `LANG` (par exemple `tr_TR.UTF-8` sélectionne `tr`). Une valeur vide ou non prise en charge sélectionne l'anglais, et un message absent dans une langue revient à l'anglais.

La sortie lisible par machine n'est jamais traduite : les noms et valeurs des champs JSON et YAML, le `code` du problème et les libellés `code`, `status` et `request_id` restent identiques dans toutes les langues. Les messages venant du serveur sont affichés tels que le serveur les a envoyés.

```sh
KEENAUTH_LANG=de keenauth users list --help
```

## Identifiants d'application

`keenauth applications credentials list|create|delete` gère les secrets client et les clés publiques enregistrées d'une application. Ces commandes n'utilisent pas `--if-match`.

```sh
keenauth applications credentials create app_123 --type client-secret --expires-at 2027-01-01T00:00:00Z
keenauth applications credentials create app_123 --type public-key --jwk-file key.pub.jwk
keenauth applications credentials delete app_123 cred_456 --yes
```

Un secret client est affiché une seule fois, sur stdout, accompagné d'un avertissement unique sur stderr. `--jwk-file` accepte une seule JWK publique (16 KiB au maximum) ; un fichier contenant des membres privés est refusé avant l'envoi de toute requête.

## Clés d'API

`keenauth api-keys list|get|create|rotate|revoke` gère les clés d'API de gestion de l'environnement. Ces commandes n'utilisent pas `--if-match`.

```sh
keenauth api-keys create --name ci --type restricted --permissions users:read,users:write --expires-at 2027-10-01T00:00:00Z
keenauth api-keys rotate key_123 --overlap-hours 24
keenauth api-keys revoke key_123 --reason leaked --yes
```

La clé brute de `create` et `rotate` est affichée une seule fois, sur stdout, accompagnée d'un avertissement unique sur stderr ; elle ne peut pas être récupérée ensuite. `list` et `get` n'affichent que des métadonnées.
