Accounts API
Gestion des comptes utilisateur avec un systeme multi-profil de type Netflix.
Base URL : /api/v2/account-auth et /api/v2/account-deletion
Architecture des comptes
Account (email/password)
+-- Profiles (max 4)
|-- Profile 1 (Standard) -- defaut
|-- Profile 2 (Standard)
|-- Profile 3 (Kids)
+-- Profile 4 (Standard)
Endpoints Account Auth
Vue d'ensemble
| Methode | Endpoint | Description | Auth |
|---|---|---|---|
| POST | /account-auth/register | Creer un compte | Non |
| POST | /account-auth/login | Connexion (Etape 1) | Non |
| POST | /account-auth/select-profile | Selection profil (Etape 2) | Oui (temp) |
| POST | /account-auth/refresh | Rafraichir token | Non |
| POST | /account-auth/logout | Deconnexion | Oui |
| POST | /account-auth/logout-all | Deconnexion de toutes les sessions | Oui |
| GET | /account-auth/me | Obtenir le compte courant | Oui |
| POST | /account-auth/verify-2fa | Verifier le code 2FA pendant le login | MFA Token |
POST /account-auth/register
Creer un nouveau compte.
POST /api/v2/account-auth/register
Content-Type: application/json
X-Tenant-ID: tenant-slug
{
"email": "[email protected]",
"password": "SecureP@ss123",
"displayName": "John Doe"
}
POST /account-auth/login
Login et selection de profil en deux etapes.
Etape 1 -- Valider les credentials
POST /api/v2/account-auth/login
Content-Type: application/json
{
"email": "[email protected]",
"password": "SecureP@ss123"
}
Reponse 200 OK
{
"accountId": "uuid",
"profiles": [
{ "id": "uuid", "name": "John", "avatar": "url", "type": "STANDARD" },
{ "id": "uuid", "name": "Kids", "avatar": "url", "type": "KIDS" }
],
"tempToken": "eyJhbG..."
}
Etape 2 -- Selectionner un profil
POST /api/v2/account-auth/select-profile
Content-Type: application/json
Authorization: Bearer <tempToken>
{
"profileId": "uuid",
"pin": "1234"
}
Si la 2FA est activee, le login retourne un temporaryToken et requiresTwoFactor: true. Le client doit d'abord appeler POST /account-auth/verify-2fa avant de pouvoir selectionner un profil.
POST /account-auth/refresh
Rafraichir le token.
POST /api/v2/account-auth/refresh
Content-Type: application/json
{
"refreshToken": "eyJhbG..."
}
POST /account-auth/logout
Deconnexion de la session courante.
POST /api/v2/account-auth/logout
Authorization: Bearer <token>
POST /account-auth/logout-all
Deconnexion de toutes les sessions du compte.
POST /api/v2/account-auth/logout-all
Authorization: Bearer <token>
GET /account-auth/me
Obtenir les informations du compte courant.
GET /api/v2/account-auth/me
Authorization: Bearer <token>
Endpoints Account Deletion
Suppression de compte conforme RGPD avec periode de retractation de 30 jours.
| Methode | Endpoint | Description | Auth |
|---|---|---|---|
| GET | /account-deletion/status | Verifier le statut de suppression | Oui |
| GET | /account-deletion/consequences | Preview des donnees supprimees | Oui |
| POST | /account-deletion/request | Demander la suppression (30 jours) | Oui |
| DELETE | /account-deletion/cancel | Annuler la demande | Oui |
| POST | /account-deletion/confirm-immediate | Suppression immediate (irreversible) | Oui |
GET /account-deletion/consequences
Preview des donnees qui seront supprimees.
GET /api/v2/account-deletion/consequences
Authorization: Bearer <token>
POST /account-deletion/request
Demander la suppression du compte avec une periode de retractation de 30 jours.
POST /api/v2/account-deletion/request
Authorization: Bearer <token>
Content-Type: application/json
{
"password": "currentPassword",
"reason": "optional reason"
}
DELETE /account-deletion/cancel
Annuler une demande de suppression en cours.
DELETE /api/v2/account-deletion/cancel
Authorization: Bearer <token>
POST /account-deletion/confirm-immediate
Suppression immediate et irreversible du compte.
POST /api/v2/account-deletion/confirm-immediate
Authorization: Bearer <token>
Content-Type: application/json
{
"password": "currentPassword",
"confirmation": "DELETE MY ACCOUNT"
}
Cette action est irreversible. Toutes les donnees du compte seront anonymisees et les sessions revoquees.
Processus de suppression
- L'utilisateur demande la suppression -- le statut passe a
PENDING_DELETION - Date de suppression programmee = date courante + 30 jours
- L'utilisateur peut annuler a tout moment pendant la periode de retractation
- Si l'utilisateur se connecte pendant la retractation, le compte est automatiquement restaure
- Avertissement envoye 3 jours avant la suppression (cron 1:00 AM)
- Apres 30 jours, le cron effectue la suppression (cron 2:00 AM)
Actions lors de la suppression
- Toutes les sessions revoquees
- Tous les appareils marques comme revoques
- Tous les profils marques comme supprimes
- Email anonymise (
deleted_<accountId>@deleted.local) - Compte soft-delete avec timestamp
deletedAt
Codes d'erreur
| Code | Message | Description |
|---|---|---|
| 401 | Invalid credentials | Email ou mot de passe incorrect |
| 403 | Account suspended | Compte suspendu |
| 404 | Profile not found | Profil introuvable |
| 409 | Email already exists | Email deja utilise |
| 423 | Account locked | Trop de tentatives de connexion |