Aller au contenu principal

Codes d'erreur

Reference complete des codes d'erreur retournes par l'API MyTelevision v2.

Codes HTTP

CodeSignificationAction recommandee
200OKRequete reussie
201CreatedRessource creee avec succes
204No ContentSuppression reussie / pas de contenu
400Bad RequestVerifier le format de la requete
401UnauthorizedVerifier le token d'authentification
403ForbiddenVerifier les permissions
404Not FoundVerifier l'identifiant de la ressource
409ConflictLa ressource existe deja
422Unprocessable EntityDonnees invalides (validation echouee)
429Too Many RequestsRate limit atteint, attendre avant de reessayer
500Internal Server ErrorErreur serveur, contacter le support
502Bad GatewayErreur de gateway
503Service UnavailableService temporairement indisponible

Format d'erreur standard

Toutes les erreurs suivent le meme format :

{
"statusCode": 400,
"message": "Validation failed",
"error": "Bad Request",
"timestamp": "2025-01-15T10:30:00.000Z",
"path": "/api/v2/movies",
"details": [
{
"field": "title",
"message": "title must be a string"
}
]
}
ChampTypeDescription
statusCodenumberCode HTTP
messagestringMessage d'erreur lisible
errorstringType d'erreur
timestampstringDate/heure de l'erreur (ISO 8601)
pathstringEndpoint appele
detailsarrayDetails de validation (optionnel)

Erreurs par module

Authentication (AUTH_*)

CodeMessageDescriptionSolution
AUTH_001Invalid credentialsEmail ou mot de passe incorrectVerifier les credentials
AUTH_002Token expiredJWT expireUtiliser le refresh token
AUTH_003Invalid tokenToken malforme ou invalideSe reconnecter
AUTH_004Account suspendedCompte suspendu par l'administrationContacter le support
AUTH_005Account lockedTrop de tentatives de connexionAttendre 15 minutes
AUTH_006Email not verifiedAdresse email non verifieeVerifier l'email

Accounts (ACCOUNT_*)

CodeMessageDescription
ACCOUNT_001Email already existsEmail deja utilise par un autre compte
ACCOUNT_002Max profiles reachedMaximum de 4 profils atteint
ACCOUNT_003Cannot delete defaultLe profil par defaut ne peut pas etre supprime
ACCOUNT_004PIN requiredPIN necessaire pour acceder au profil
ACCOUNT_005PIN incorrectCode PIN invalide
ACCOUNT_006PIN lockedTrop de tentatives PIN (verrouille 15 min)

Content (CONTENT_*)

CodeMessageDescription
CONTENT_001Not foundContenu introuvable
CONTENT_002Access deniedAcces refuse au contenu
CONTENT_003Subscription requiredAbonnement requis pour ce contenu
CONTENT_004Region blockedContenu indisponible dans cette region

Streaming (STREAM_*)

CodeMessageDescription
STREAM_001Token expiredToken de streaming expire
STREAM_002Max uses exceededNombre maximum d'utilisations atteint
STREAM_003IP mismatchIP differente de celle du token
STREAM_004Token revokedToken revoque
STREAM_005DRM errorErreur de gestion DRM

Engagement (ENGAGE_*)

CodeMessageDescription
ENGAGE_001Already reactedReaction deja existante
ENGAGE_002Already favoritedContenu deja en favori
ENGAGE_003Cooldown activeCooldown de 30 min entre vues du meme contenu

Devices (DEVICE_*)

CodeHTTPDescription
DEVICE_001404Appareil introuvable
DEVICE_002409Limite d'appareils depassee
DEVICE_003403Impossible de revoquer l'appareil courant
DEVICE_004403Appareil marque comme suspect
DEVICE_005400Empreinte (fingerprint) invalide

Sessions (SESSION_*)

CodeHTTPDescription
SESSION_001404Session introuvable
SESSION_002403Impossible de revoquer la session courante
SESSION_003403Session appartenant a un autre compte
SESSION_004401Session revoquee
SESSION_005401Session expiree
SESSION_006403Re-authentification requise

Signals (SIGNAL_*)

CodeHTTPDescription
SIGNAL_001400Type de signal invalide
SIGNAL_002400ID de contenu invalide
SIGNAL_003400Batch trop volumineux (max 100 signaux)
SIGNAL_004429Rate limit depasse

Subscriptions (SUB_*)

CodeHTTPDescription
SUB_001404Aucun abonnement actif
SUB_002409Deja abonne
SUB_003409Periode d'essai deja utilisee
SUB_004400ID de plan invalide
SUB_005402Paiement requis
SUB_006402Paiement echoue
SUB_007409Impossible de reactiver

Risk (RISK_*)

CodeHTTPDescription
RISK_001404Evenement de risque introuvable
RISK_002400Evenement deja acquitte
RISK_003403Acces aux evenements d'un autre compte interdit

Rate Limiting (RATE_*)

CodeMessageDescription
RATE_001Rate limit exceededLimite de requetes atteinte

Validation (VALID_*)

CodeMessageDescription
VALID_001Required fieldChamp obligatoire manquant
VALID_002Invalid formatFormat invalide
VALID_003Too shortValeur trop courte
VALID_004Too longValeur trop longue
VALID_005Invalid enumValeur non autorisee pour l'enumeration

Gestion des erreurs cote client

JavaScript / TypeScript

import axios from 'axios';

const api = axios.create({
baseURL: 'https://api.mytelevision.app/api/v2',
});

try {
const response = await api.get('/movies');
return response.data;
} catch (error) {
if (axios.isAxiosError(error) && error.response) {
switch (error.response.status) {
case 401:
// Token expire : rafraichir le token ou rediriger vers le login
await refreshToken();
break;
case 403:
// Acces refuse : verifier les permissions ou l'abonnement
showAccessDenied();
break;
case 429:
// Rate limit : attendre et reessayer
const retryAfter = error.response.headers['retry-after'];
await delay(parseInt(retryAfter) * 1000);
break;
default:
// Afficher le message d'erreur de l'API
console.error(error.response.data.message);
}
}
}

Retry avec backoff exponentiel

async function fetchWithRetry(url: string, maxRetries = 3): Promise<any> {
for (let attempt = 0; attempt < maxRetries; attempt++) {
try {
return await api.get(url);
} catch (error) {
if (axios.isAxiosError(error) && error.response?.status === 429) {
const delay = Math.pow(2, attempt) * 1000;
await new Promise((resolve) => setTimeout(resolve, delay));
} else {
throw error;
}
}
}
throw new Error('Nombre maximum de tentatives atteint');
}