← Tous les guides

Conventions : enveloppe, catégories, pagination et erreurs

Les règles que suit chaque endpoint de l'API MotoGP : enveloppe de réponse, catégories Moto2/Moto3, pagination, identifiants, corps d'erreur et cache.

6 min de lecture

Apprenez ces règles une fois, et chaque endpoint se comporte comme prévu.

L’enveloppe de réponse

Chaque réponse réussie est un objet JSON à deux clés :

CléContenu
dataUn objet (ressource unique) ou un tableau (liste)
metatotal, page, size, total_pages — les champs de pagination valent null quand l’endpoint n’est pas paginé
{
  "data": { "year": 2026, "status": "ACTIVE" },
  "meta": { "total": 1, "page": null, "size": null, "total_pages": null }
}

Les noms de champs sont en snake_case partout (rider_number, total_points, season_year).

Catégories : MotoGP, Moto2 et Moto3

Les endpoints par saison acceptent un paramètre de requête category valant MOTOGP, MOTO2 ou MOTO3. class en est un alias aux mêmes valeurs — envoyez l’un ou l’autre, pas les deux.

GET /standings/seasons/2026/riders?category=MOTO2
GET /races/seasons/2026?category=MOTO3

Passez category explicitement pour que le résultat ne dépende jamais d’une valeur par défaut.

Pagination

Les endpoints « tout récupérer » — /riders, /teams, /races et /standings — sont paginés avec page (à partir de 1) et size (1–200, 20 par défaut) :

GET /riders?page=2&size=50
"meta": { "total": 118, "page": 2, "size": 50, "total_pages": 3 }

Bouclez jusqu’à ce que page atteigne total_pages :

async function getAll(path) {
  const rows = [];
  for (let page = 1; ; page++) {
    const { data, meta } = await getEnvelope(`${path}?page=${page}&size=200`);
    rows.push(...data);
    if (!meta.total_pages || page >= meta.total_pages) return rows;
  }
}

Les listes par saison comme /riders/seasons/{year} renvoient toute la saison en une seule réponse.

Ordre

Les classements arrivent triés par position. Les calendriers et résultats de course ne sont pas garantis triés — triez-les vous-même :

races.sort((a, b) => a.round_number - b.round_number);
results.sort((a, b) => a.position - b.position);

Identifiants

RessourceRecherche par
PiloteNuméro de course : /riders/{rider_number} (ex. 93)
ÉquipeID opaque issu d’une liste d’équipes : /teams/{id}, ou par nom : /teams/name/{name}
CourseSaison + manche : /races/seasons/{year}/round/{round}, ou ID opaque : /races/{race_id}/results
SaisonAnnée : /seasons/{year}

Récupérez les ID opaques ("82MQRdM5q7ub4OSm6Jhx") dans une réponse de liste au lieu de les coder en dur, et associez les équipes par ID plutôt que par nom — les noms de sponsors changent d’une saison à l’autre.

Types de classement

Outre les routes dédiées (/riders, /teams, /manufacturers, /bmw-m), vous pouvez demander un classement par type :

GET /standings/seasons/2026/type/MANUFACTURER?category=MOTOGP

Les types sont RIDER, TEAM, MANUFACTURER et BMW_M.

Erreurs

Les erreurs utilisent les codes de statut HTTP standard et un corps JSON :

{
  "timestamp": "2026-01-27T19:18:29",
  "status": 404,
  "error": "Not Found",
  "message": "Rider not found with number: 99",
  "path": "/riders/99"
}
StatutSignificationQue faire
400Paramètre invalide (année incorrecte, catégorie inconnue)Corrigez la requête ; validation_errors liste les problèmes quand il est présent
401 / 403Clé RapidAPI absente ou invalide, ou aucun abonnementVérifiez les deux en-têtes et votre offre
404Le pilote, l’équipe, la course ou la saison n’existe pasAffichez un état « introuvable »
429Limite de débit ou quota de votre offre atteintPatientez puis réessayez, ou changez d’offre
5xxProblème serveur temporaireRéessayez avec un backoff exponentiel ; consultez la page de statut

Cache

Les résultats et classements changent après chaque week-end de course, les profils entre les saisons. Mettez en cache généreusement pour économiser du quota et garder des pages rapides :

DonnéesDurée de cache conseillée
Saisons, pilotes, équipes, statistiques de carrière24 heures
Calendrier12 heures
Résultats et classements1 heure les week-ends de course, 12 heures sinon

Gardez votre clé côté serveur

Votre clé RapidAPI est un identifiant de facturation. Appelez l’API depuis votre backend, une fonction serverless ou une étape de build — jamais depuis du code navigateur ou mobile qui livre la clé aux utilisateurs. Le guide du tableau de classement montre un petit proxy avec cache.

Guide suivant → Créer un tableau de classement du championnat en direct