# account.password.write — Changer son mot de passe, sous une session de console : l'actuel est demandé, et les autres sessions du compte se ferment.

> Engendrée depuis le registre. Ne pas modifier à la main.

§ 7.7.3. Douze caractères au moins ; il ne reprend pas l'adresse du compte et ne figure pas parmi les mots de passe compromis. Seule une empreinte est gardée. Un jeton personnel ne peut pas l'appeler. Cinq échecs sur le mot de passe actuel font attendre le suivant.

| Propriété | Valeur |
| --- | --- |
| Niveau | `account` |
| Rang minimal | — |
| Rôle transversal | — |
| Portées | `org:admin` |
| Compte de service | ne la mène pas : elle est réservée à une personne |
| Réversibilité | E — réversible avec effort : validation d'une personne avant l'appel, puis cinq minutes pour tout défaire d'un seul appel |
| Idempotence | une clé d'idempotence est acceptée : le rejeu rend la première réponse |
| Limites de débit, par jeton | 600 appels par 60 secondes (`general`), et 60 appels par 60 secondes (`sensitive`) |

## API

`PUT /v1/account/password` — succès en `200`.

| Paramètre | Où | Type | Requis | Description |
| --- | --- | --- | --- | --- |
| `Idempotency-Key` | en-tête | texte, de 8 à 128 caractères | non | Clé d'idempotence. Un rejeu portant la même clé retourne le résultat initial sans nouvel effet de bord, et la réponse porte alors « Idempotency-Replayed: true ». Équivaut au champ « idempotencyKey » du corps ; les deux à la fois ne sont acceptés que s'ils sont identiques. |
| `currentPassword` | corps | texte, de 1 à 1024 caractères | oui | Le mot de passe actuel du compte. |
| `newPassword` | corps | texte, de 1 à 1024 caractères | oui | Le nouveau mot de passe : douze caractères au moins, 256 au plus. |
| `idempotencyKey` | corps | texte, de 8 à 128 caractères | non | Clé d'idempotence, obligatoire. Un rejeu portant la même clé rend le résultat initial, sans nouvel effet de bord. |

La réponse :

| Champ | Type | Description |
| --- | --- | --- |
| `changedAt` | texte, format date-time |  |
| `closedSessions` | entier | Les autres sessions du compte, fermées par ce changement. |
| `undoToken` | nul |  |

En-têtes de la réponse : `RateLimit-Limit`, `RateLimit-Remaining`, `RateLimit-Reset`, `RateLimit-Policy`, `Idempotency-Replayed`.

Autres réponses : `400`, `401`, `403`, `404`, `409`, `429`, `500`, `503` — communes à toute opération.

## Ligne de commande

`bastide account password write --current-password <valeur> --new-password <valeur>`

| Option | Type | Requise | Défaut | Description |
| --- | --- | --- | --- | --- |
| `--current-password` | texte | oui | — | Le mot de passe actuel du compte. |
| `--new-password` | texte | oui | — | Le nouveau mot de passe : douze caractères au moins, 256 au plus. |
| `--idempotency-key` | texte | non | — | Clé d'idempotence, obligatoire. Un rejeu portant la même clé rend le résultat initial, sans nouvel effet de bord. |

La commande demande une confirmation avant d'agir, sauf avec « --yes ».

## MCP

Aucun outil : elle touche à l'identité d'une personne ou d'un compte — ses facteurs, ses sessions, ses jetons, ce que l'organisation exige de ses membres : un agent agit sous un jeton de soixante minutes au plus et ne se fabrique aucun accès durable (§ 6.4.3, EX-MCP-080).

## Erreurs

| Code | Surface | Cause |
| --- | --- | --- |
| `session_requise` | les deux | Ce geste ne se fait que sous une session de console, ouverte par un mot de passe : un jeton personnel ne le fait pas. |
| `mot_de_passe_actuel_invalide` | les deux | Le mot de passe actuel présenté n'est pas celui du compte. |
| `mot_de_passe_refuse` | les deux | Le nouveau mot de passe est trop court, trop long, reprend l'adresse du compte, ou figure parmi les mots de passe compromis. |
| `trop_de_tentatives` | les deux | Cinq échecs en quinze minutes pour ce compte depuis cette adresse : l'essai suivant attend. |
| `idempotency_key_conflict` | API | Deux clés d'idempotence différentes ont été présentées, dans le corps et dans l'en-tête. |

S'y ajoutent les refus communs à toute opération — entrée invalide, authentification, autorisation, cible introuvable, conflit, limite de débit, indisponibilité — que le catalogue des erreurs décrit.

## Exemples

Changer son mot de passe :

```json
{
  "currentPassword": "l'ancien mot de passe",
  "newPassword": "une phrase de passe longue et à soi",
  "idempotencyKey": "changement-de-mot-de-passe-2026-10-02"
}
```
