La API de Tutiplay

Errores

Todos los errores comparten formato e incluyen un código estable, que es el dato en el que debe basarse un cliente.

Formato

Todos los errores tienen el mismo formato: un código estable en error y una descripción en message. Algunos incluyen además campos con los datos necesarios para actuar, que se indican en cada caso.

json
{"error":"SCOPE","message":"This API token was not granted the permission this call needs"}

La lógica del cliente debe basarse en el código, nunca en el texto: el mensaje está pensado para una persona y puede cambiar sin previo aviso. Pueden añadirse códigos nuevos; un cliente que reciba uno que no conoce debe tratarlo como el error genérico de su estado HTTP.

API key y permisos

HTTPerrorSignificado
401UNKNOWNLa API key no existe o ha sido revocada.
401EXPIREDLa API key ha caducado.
401INACTIVELa cuenta no está activa.
403SCOPELa llamada requiere un nivel de permiso superior al de la API key.
403CLOSEDEl endpoint no está disponible para las API keys.

Límites de uso

HTTPerrorSignificado
429TOO_FASTSe ha alcanzado el límite de llamadas por minuto a los datos de fútbol. Espera el tiempo indicado en Retry-After.
429DAILY_QUOTASe ha alcanzado el límite diario de llamadas a los datos de fútbol. Espera el tiempo indicado en Retry-After.

Validación

HTTPerrorSignificado
400VALIDATION_FAILEDEl cuerpo de la petición no es válido. Incluye fields, con cada campo erróneo y el motivo.
400MALFORMED_REQUESTEl cuerpo no se puede leer —no es JSON— o un parámetro no es del tipo esperado. No llega a comprobarse ningún campo.

Pronósticos

Guardar, confirmar o deshacer un pronóstico puede devolver estos códigos. Varios comparten estado HTTP, por lo que solo el código permite distinguirlos.

HTTPerrorSignificado
409ROUND_CLOSEDEl plazo de la jornada ha terminado.
409ALREADY_CONFIRMEDEl pronóstico ya está confirmado y la llamada no pedía confirmarlo.
409NOT_CONFIRMEDEl pronóstico no está confirmado, así que no hay confirmación que deshacer.
409SINGLE_FORECASTLa peña, o esta jornada, solo admite un pronóstico por socio.
409TOO_MANY_COLUMNSSe supera el número de columnas que permite la peña. Incluye maxColumnsPerMember.
409NO_ROOM_FOR_ANOTHERNo quedan columnas libres para otro pronóstico en esta jornada.
403NOT_ALLOWED_TO_BETLas reglas de la peña no te permiten jugar en ella.
404NO_FORECASTNo tienes ningún pronóstico con ese número en esta jornada.
422FORECAST_INCOMPLETEFalta alguna marca o algún lado del pleno al 15.
422TOO_FEW_COLUMNSNo se alcanza el mínimo de columnas de la peña. Incluye minimumColumns.
422MULTIPLE_NOT_SUPPORTEDHay dos signos en un mismo partido, o dos casillas en un mismo lado del pleno al 15.
422COLUMN_NUMBERINGLas columnas deben numerarse desde 1 y sin huecos.
422FORECAST_NUMBERINGLos pronósticos deben numerarse desde 1 y sin huecos. Incluye expected.

Saldo

HTTPerrorSignificado
402INSUFFICIENT_BALANCEEl saldo no alcanza para las columnas que se confirman.

Es el único error que se resuelve fuera de la API y después se puede reintentar. Por eso incluye el detalle del importe y, en topUpUrl, la página donde el titular de la cuenta puede recargar saldo. La recarga la hace una persona desde el navegador; un cliente no puede hacerla, pero sí indicar a dónde ir.

json
{
  "error": "INSUFFICIENT_BALANCE",
  "message": "Not enough balance to confirm 2 columns",
  "columns": 2,
  "columnPrice": 1.00,
  "required": 2.00,
  "available": 0.30,
  "missing": 1.70,
  "topUpUrl": "https://…/account/balance"
}

Juego automático

HTTPerrorSignificado
422TEMPLATE_DOES_NOT_FITLa plantilla que se intenta asignar con PUT …/auto-play no es compatible con las reglas de la peña.

El motivo viene en reason, junto con los datos necesarios para corregirlo: INCOMPLETE, ONE_FORECAST_PER_MEMBER, TOO_FEW_COLUMNS (con minimum) o TOO_MANY_COLUMNS (con limit y columns).

Fallos del servidor

HTTPerrorSignificado
500INTERNAL_ERRORAlgo ha fallado por nuestra parte. Incluye reference, ocho caracteres que identifican ese fallo concreto.

No describe nada, a propósito: si pudiéramos describirlo tendría su propio código. No se puede corregir desde el cliente, así que reintentar al cabo de un momento es lo único que tiene sentido hacer — y si se repite, la reference es lo que nos permite encontrarlo.

json
{
  "error": "INTERNAL_ERROR",
  "message": "Unexpected server error",
  "reference": "ab797f5f"
}

Errores sin código propio

Cuando un error no tiene código propio, error contiene el nombre de su estado HTTP (NOT_FOUND, CONFLICT…).

HTTPCuándo se produce
404El recurso no existe o no es visible para tu cuenta. Los dos casos responden igual.
409La operación es incompatible con el estado actual del recurso.
422La petición tiene la forma correcta, pero su contenido no es válido.