Aller au contenu principal

Profiles API

Gestion des profils utilisateur (max 4 par compte) avec controle parental et restrictions.

Base URL : /api/v2/profiles

Types de profil

TypeDescription
STANDARDProfil adulte normal
KIDSProfil enfant avec restrictions de contenu

Endpoints

Vue d'ensemble

MethodeEndpointDescriptionAuth
GET/profilesLister les profils du compteOui
GET/profiles/pickerProfils pour le selecteur UIOui
POST/profilesCreer un profilOui
POST/profiles/kidsCreer un profil enfantOui
GET/profiles/meProfil courantOui
GET/profiles/:idProfil par IDOui
PATCH/profiles/:idModifier un profilOui
DELETE/profiles/:idSupprimer un profilOui
POST/profiles/:id/switchChanger de profilOui
POST/profiles/:id/pinDefinir/modifier le PINOui
POST/profiles/:id/verify-pinVerifier le PINOui
GET/profiles/:id/requires-pinVerifier si PIN requisOui
POST/profiles/me/can-accessVerifier l'acces au contenuOui
GET/profiles/me/time-windowVerifier les heures de visionnageOui

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"
}
info

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)

RestrictionDescription
maxAgeRatingNote d'age maximale (7+, 12+, 16+, 18+)
allowedCategoriesCategories autorisees
blockedCategoriesCategories bloquees
timeWindowStartHeure de debut autorisee
timeWindowEndHeure de fin autorisee
dailyLimitMinutesTemps maximum de visionnage par jour
attention

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

CodeMessageDescription
400Max profiles reachedMaximum de 4 profils atteint
403Cannot delete defaultLe profil par defaut ne peut pas etre supprime
403PIN requiredPIN requis pour acceder a ce profil
403Content restrictedContenu restreint pour ce profil
423PIN lockedTrop de tentatives PIN (verrouille)