← Todas las guías

Convenciones: envoltorio, categorías, paginación y errores

Las reglas que sigue cada endpoint de la API de MotoGP: envoltorio de respuesta, categorías Moto2/Moto3, paginación, identificadores, cuerpos de error y caché.

6 min de lectura

Aprende estas reglas una vez y cada endpoint se comportará como esperas.

El envoltorio de respuesta

Toda respuesta correcta es un objeto JSON con dos claves:

ClaveContenido
dataUn objeto (recurso único) o un array (lista)
metatotal, page, size, total_pages — los campos de paginación son null cuando el endpoint no está paginado
{
  "data": { "year": 2026, "status": "ACTIVE" },
  "meta": { "total": 1, "page": null, "size": null, "total_pages": null }
}

Los nombres de campo son snake_case en todas partes (rider_number, total_points, season_year).

Categorías: MotoGP, Moto2 y Moto3

Los endpoints por temporada aceptan un parámetro de consulta category con uno de estos valores: MOTOGP, MOTO2 o MOTO3. class es un alias con los mismos valores — envía uno u otro, no ambos.

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

Pasa category de forma explícita para que el resultado nunca dependa de un valor por defecto.

Paginación

Los endpoints de «obtener todo» — /riders, /teams, /races y /standings — se paginan con page (desde 1) y size (1–200, por defecto 20):

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

Itera hasta que page alcance 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;
  }
}

Las listas por temporada, como /riders/seasons/{year}, devuelven toda la temporada en una sola respuesta.

Orden

Las clasificaciones llegan ordenadas por position. Los calendarios y los resultados de carrera no tienen orden garantizado — ordénalos tú mismo:

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

Identificadores

RecursoSe consulta por
PilotoNúmero de carrera: /riders/{rider_number} (p. ej. 93)
EquipoID opaco de cualquier lista de equipos: /teams/{id}, o por nombre: /teams/name/{name}
CarreraTemporada + ronda: /races/seasons/{year}/round/{round}, o ID opaco: /races/{race_id}/results
TemporadaAño: /seasons/{year}

Toma los ID opacos ("82MQRdM5q7ub4OSm6Jhx") de una respuesta de lista en lugar de fijarlos en el código, y relaciona los equipos por ID y no por nombre — los nombres de los patrocinadores cambian de una temporada a otra.

Tipos de clasificación

Además de las rutas dedicadas (/riders, /teams, /manufacturers, /bmw-m), puedes pedir una tabla de clasificación por tipo:

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

Los tipos son RIDER, TEAM, MANUFACTURER y BMW_M.

Errores

Los errores usan códigos de estado HTTP estándar y un cuerpo JSON:

{
  "timestamp": "2026-01-27T19:18:29",
  "status": 404,
  "error": "Not Found",
  "message": "Rider not found with number: 99",
  "path": "/riders/99"
}
EstadoSignificadoQué hacer
400Parámetro no válido (año incorrecto, categoría desconocida)Corrige la petición; validation_errors lista los problemas cuando está presente
401 / 403Clave de RapidAPI ausente o no válida, o sin suscripciónRevisa ambas cabeceras y tu plan
404El piloto, equipo, carrera o temporada no existeMuestra un estado de «no encontrado»
429Se alcanzó el límite de peticiones o la cuota de tu planEspera y reintenta más tarde, o mejora el plan
5xxProblema temporal del servidorReintenta con retroceso exponencial; consulta la página de estado

Caché

Los resultados y las clasificaciones cambian después de cada fin de semana de carrera, y los perfiles entre temporadas. Usa la caché a fondo para ahorrar cuota y mantener las páginas rápidas:

DatosTiempo de caché sugerido
Temporadas, pilotos, equipos, estadísticas de carrera24 horas
Calendario12 horas
Resultados y clasificaciones1 hora en fines de semana de carrera, 12 horas el resto del tiempo

Mantén tu clave en el servidor

Tu clave de RapidAPI es una credencial de facturación. Llama a la API desde tu backend, una función serverless o un paso de build — nunca desde código de navegador o móvil que entregue la clave a los usuarios. La guía de la tabla de clasificación muestra un pequeño proxy con caché.

Siguiente guía → Crea una tabla de clasificación del campeonato en vivo