Profiles API
Gestion des profils utilisateur (max 4 par compte) avec controle parental et restrictions.
Base URL : /api/v2/profiles
Types de profil
| Type | Description |
|---|---|
STANDARD | Profil adulte normal |
KIDS | Profil enfant avec restrictions de contenu |
Endpoints
Vue d'ensemble
| Methode | Endpoint | Description | Auth |
|---|---|---|---|
| GET | /profiles | Lister les profils du compte | Oui |
| GET | /profiles/picker | Profils pour le selecteur UI | Oui |
| POST | /profiles | Creer un profil | Oui |
| POST | /profiles/kids | Creer un profil enfant | Oui |
| GET | /profiles/me | Profil courant | Oui |
| GET | /profiles/:id | Profil par ID | Oui |
| PATCH | /profiles/:id | Modifier un profil | Oui |
| DELETE | /profiles/:id | Supprimer un profil | Oui |
| POST | /profiles/:id/switch | Changer de profil | Oui |
| POST | /profiles/:id/pin | Definir/modifier le PIN | Oui |
| POST | /profiles/:id/verify-pin | Verifier le PIN | Oui |
| GET | /profiles/:id/requires-pin | Verifier si PIN requis | Oui |
| POST | /profiles/me/can-access | Verifier l'acces au contenu | Oui |
| GET | /profiles/me/time-window | Verifier les heures de visionnage | Oui |
GET /profiles
Liste des profils du compte.
GET /api/v2/profiles
Authorization: Bearer <token>
Reponse 200 OK
{
"data": [
{
"id": "uuid",
"name": "John",
"avatar": "https://...",
"type": "STANDARD",
"isDefault": true,
"hasPin": false
},
{
"id": "uuid",
"name": "Kids",
"avatar": "https://...",
"type": "KIDS",
"isDefault": false,
"hasPin": true
}
],
"meta": {
"maxProfiles": 4,
"currentCount": 2
}
}
POST /profiles
Creer un profil standard.
POST /api/v2/profiles
Authorization: Bearer <token>
Content-Type: application/json
{
"name": "Sarah",
"avatar": "avatar-3",
"type": "STANDARD"
}
POST /profiles/kids
Creer un profil enfant avec restrictions simplifiees.
POST /api/v2/profiles/kids
Authorization: Bearer <token>
Content-Type: application/json
{
"name": "Junior",
"avatar": "kids-avatar-1",
"maxAgeRating": "7+"
}
PATCH /profiles/:id
Modifier un profil.
PATCH /api/v2/profiles/:id
Authorization: Bearer <token>
Content-Type: application/json
{
"name": "New Name",
"avatar": "avatar-5"
}
DELETE /profiles/:id
Supprimer un profil (le profil par defaut ne peut pas etre supprime).
DELETE /api/v2/profiles/:id
Authorization: Bearer <token>
POST /profiles/:id/switch
Changer de profil actif.
POST /api/v2/profiles/:id/switch
Authorization: Bearer <token>
Content-Type: application/json
{
"pin": "1234"
}
Le champ pin n'est requis que si le profil cible a un PIN configure.
Gestion du PIN
POST /profiles/:id/pin
Definir ou modifier le PIN d'un profil.
POST /api/v2/profiles/:id/pin
Authorization: Bearer <token>
Content-Type: application/json
{
"currentPin": "1234",
"newPin": "5678"
}
POST /profiles/:id/verify-pin
Verifier le PIN d'un profil.
POST /api/v2/profiles/:id/verify-pin
Authorization: Bearer <token>
Content-Type: application/json
{
"pin": "1234"
}
GET /profiles/:id/requires-pin
Verifier si un PIN est requis pour un profil.
GET /api/v2/profiles/:id/requires-pin
Authorization: Bearer <token>
Controle parental
POST /profiles/me/can-access
Verifier si le profil courant a acces a un contenu.
POST /api/v2/profiles/me/can-access
Authorization: Bearer <token>
Content-Type: application/json
{
"contentId": "uuid",
"contentType": "MOVIE"
}
Reponse 200 OK (autorise)
{
"canAccess": true,
"reason": null
}
Reponse 200 OK (bloque)
{
"canAccess": false,
"reason": "AGE_RATING_EXCEEDED",
"details": {
"contentRating": "16+",
"profileMaxRating": "7+"
}
}
GET /profiles/me/time-window
Verifier les heures de visionnage autorisees pour le profil courant.
GET /api/v2/profiles/me/time-window
Authorization: Bearer <token>
Reponse 200 OK
{
"allowed": true,
"currentTime": "14:30",
"allowedWindow": {
"start": "08:00",
"end": "20:00"
},
"remainingMinutes": 330
}
Restrictions (Profil Kids)
| Restriction | Description |
|---|---|
maxAgeRating | Note d'age maximale (7+, 12+, 16+, 18+) |
allowedCategories | Categories autorisees |
blockedCategories | Categories bloquees |
timeWindowStart | Heure de debut autorisee |
timeWindowEnd | Heure de fin autorisee |
dailyLimitMinutes | Temps maximum de visionnage par jour |
Les restrictions des profils enfants sont appliquees cote serveur. Elles ne peuvent pas etre contournees par le client.
Protection brute-force PIN
- 5 tentatives echouees entrainent un verrouillage de 15 minutes
- Le compteur est reinitialise apres un deverrouillage reussi
Codes d'erreur
| Code | Message | Description |
|---|---|---|
| 400 | Max profiles reached | Maximum de 4 profils atteint |
| 403 | Cannot delete default | Le profil par defaut ne peut pas etre supprime |
| 403 | PIN required | PIN requis pour acceder a ce profil |
| 403 | Content restricted | Contenu restreint pour ce profil |
| 423 | PIN locked | Trop de tentatives PIN (verrouille) |