Ejemplos
Casos de uso habituales, del más sencillo al más completo. Todos usan curl y jq, y parten de estas dos variables.
API=https://api.tutiplay.com
AUTH="Authorization: Bearer $TUTIPLAY_API_KEY"Comprobar la API key
La llamada más sencilla devuelve los datos de tu cuenta. Sirve para comprobar que la key es válida. Requiere READ.
curl -s -H "$AUTH" "$API/v1/me" | jq '{username, email}'Tus peñas y sus jornadas
Las peñas en las que juegas, cada una con su slug, y las jornadas de una de ellas, de la más reciente a la más antigua. Requiere READ.
# Tus peñas
curl -s -H "$AUTH" "$API/v1/communities" | jq '.[] | {slug, name}'
# La jornada más reciente de una peña: su temporada, su número, su fase y si se puede pronosticar
curl -s -H "$AUTH" "$API/v1/communities/bar-manolo/rounds?size=1" \
| jq '.items[0] | {season, number, phase, openForForecast, closesAt}'
# Las temporadas que ha jugado la peña, y las jornadas de una de ellas
curl -s -H "$AUTH" "$API/v1/communities/bar-manolo/seasons" | jq '.[] | {startYear, displayName}'
curl -s -H "$AUTH" "$API/v1/communities/bar-manolo/seasons/2025/rounds" | jq '.items[] | {number, phase}'Jugar por tu cuenta
Sin peña, la quiniela se juega bajo /v1/solo/rounds y sus hermanas: las mismas rutas que en una peña, sin /communities/{slug}. Cada pronóstico lleva su propio pleno, puede haber varios por jornada y no hay más límite de columnas que el saldo.
Por dentro, lo que juegas por tu cuenta es una peña de una sola persona, con su propio slug: el que aparece en la dirección de «Mi quiniela en solitario» en la web. Si lo conoces, las rutas de peña también funcionan con él; las de /v1/solo/rounds y sus hermanas son lo mismo sin necesitarlo.
# Tus últimas jornadas jugadas por tu cuenta
curl -s -H "$AUTH" "$API/v1/solo/rounds?size=1" | jq '.items[0] | {season, number, phase}'
# Tu pronóstico 1 de la jornada 7, igual que en una peña
curl -s -H "$AUTH" "$API/v1/solo/seasons/2026/rounds/7/forecast/1" | jqPartidos y escrutinio de una jornada
Una jornada es la misma para todas las peñas. Su detalle incluye los catorce partidos en matches, cada uno con el signo con el que cuenta (result), el pleno al 15 en match15 con la casilla de cada equipo y, tras el escrutinio, los premios. El signo no siempre sale de un marcador: un partido aplazado lo tiene por sorteo. Requiere READ y no tiene límite.
# Los partidos, con su signo cuando lo hay
curl -s -H "$AUTH" "$API/v1/seasons/2026/rounds/7" \
| jq '.matches[] | {n: .number, local: .localTeam.name, visitante: .visitorTeam.name, result}'
# El escrutinio: lo que pagó cada categoría
curl -s -H "$AUTH" "$API/v1/seasons/2026/rounds/7" | jq '.prizes'
# Lo que se juega en toda España en cada partido, en porcentaje
curl -s -H "$AUTH" "$API/v1/seasons/2026/rounds/7/distribution" | jq '.country.matches'Datos de fútbol: competiciones y clasificaciones
Una API aparte, bajo /v1/football/competitions, que empieza por la competición y sigue por su temporada y su jornada. Una competición se identifica por su id, que no cambia aunque cambie de nombre, y sus jornadas son las suyas, no las de la quiniela. Requiere READ y cuenta para los límites de uso.
# Las competiciones, y en qué temporadas se han jugado
curl -s -H "$AUTH" "$API/v1/football/competitions" | jq '.[] | {id, name}'
curl -s -H "$AUTH" "$API/v1/football/competitions/laliga-ea-sports" | jq '.seasons'
# Una temporada: sus equipos y sus jornadas
curl -s -H "$AUTH" "$API/v1/football/competitions/laliga-ea-sports/seasons/2026" \
| jq '{equipos: [.teams[].name], jornadas: [.rounds[].number]}'
# Una jornada: sus partidos con el marcador, y la clasificación tal como quedó tras ella
curl -s -H "$AUTH" "$API/v1/football/competitions/laliga-ea-sports/seasons/2026/rounds/7" \
| jq '.matches[] | {local: .localTeam.name, visitante: .visitorTeam.name, localGoals, visitorGoals, status}'
curl -s -H "$AUTH" "$API/v1/football/competitions/laliga-ea-sports/seasons/2026/rounds/7" \
| jq '.standings[] | {position, equipo: .team.name, points}'Jugar una jornada
El recorrido completo hasta confirmar un pronóstico. Los primeros pasos requieren READ; guardar y confirmar, PLAY.
# 1. Los partidos de la jornada: su número en el boleto es como los cita el pronóstico
curl -s -H "$AUTH" "$API/v1/seasons/2026/rounds/7" \
| jq '.matches[] | {n: .number, local: .localTeam.name, visitante: .visitorTeam.name}'
# 2. Tu pronóstico actual. Cada pronóstico se identifica por su número; si la
# peña solo admite uno, es el 1. Si todavía no existe, la respuesta es 404 y el
# cuerpo del paso 3 se construye desde cero.
curl -s -H "$AUTH" "$API/v1/communities/bar-manolo/seasons/2026/rounds/7/forecast/1" > pronostico.json
# 3. Guárdalo con "confirm": true. Confirmar cobra las columnas del saldo.
curl -s -X PUT -H "$AUTH" -H 'Content-Type: application/json' \
-d @pronostico.json \
"$API/v1/communities/bar-manolo/seasons/2026/rounds/7/forecast/1" | jqEl cuerpo contiene las columnas y el pleno al 15. Cada marca se refiere a un partido por su número en el boleto (number, del 1 al 14, el mismo del paso 1), y son tres booleanos, one, x y two. El pleno son cuatro casillas por equipo (localZero, localOne, localTwo, localM y sus equivalentes visitor). La especificación completa está en la referencia, en el grupo Pronósticos.
{
"columns": [
{ "number": 1,
"picks": [ { "number": 1, "one": true, "x": false, "two": false }, … ] }
],
"match15": { "localOne": true, "visitorZero": true },
"confirm": true
}Guardar y confirmar también se pueden hacer en dos pasos: se guarda sin confirm y después se confirma lo guardado con POST …/forecast/{n}/confirm. Para deshacer la confirmación mientras el plazo siga abierto, POST …/forecast/{n}/unconfirm, que devuelve el importe cobrado.
422. Cada columna lleva exactamente un signo por partido.Rellenar un pronóstico con una plantilla
Una plantilla propone columnas o plenos a partir de sus reglas. Estas llamadas devuelven la propuesta sin guardar nada; para jugarla hay que guardarla y confirmarla como en el ejemplo anterior. Requieren PLAY.
# Tus plantillas, con su tipo
curl -s -H "$AUTH" "$API/v1/templates" | jq '.[] | {id, kind, name}'
# La columna 1 del pronóstico 1, propuesta por una plantilla de 1X2
curl -s -X POST -H "$AUTH" \
"$API/v1/communities/bar-manolo/seasons/2026/rounds/7/forecast/1/fill?templateId=$TEMPLATE&column=1" \
| jq '.marks[] | {number, sign}'POST …/forecast/{n}/fill: una columna, con una plantilla de 1X2. El parámetrocolumnindica qué columna se sustituye.POST …/forecast/{n}/fill-match15: el pleno al 15, con una plantilla de pleno.POST …/forecast/{n}/fill-quiniela: el pronóstico completo —columnas y pleno—, con una plantilla de quiniela.
Las propuestas no repiten columnas ya confirmadas en la peña ni las demás columnas guardadas del mismo pronóstico.
Activar el juego automático
Una plantilla de quiniela puede pronosticar por ti en una peña cada jornada: rellena y confirma el pronóstico antes del cierre. Primero se consultan las plantillas que encajan con las reglas de la peña —las que no, indican el motivo en problem— y después se asigna una. Requiere PLAY.
# Las plantillas de quiniela que se pueden usar en esta peña
curl -s -H "$AUTH" "$API/v1/communities/bar-manolo/auto-play/options" \
| jq '.[] | {id, name, problem}'
# Asignar una
curl -s -X PUT -H "$AUTH" -H 'Content-Type: application/json' \
-d '{"templateId": "'"$TEMPLATE"'"}' \
"$API/v1/communities/bar-manolo/auto-play" | jq
# Desactivarlo
curl -s -X DELETE -H "$AUTH" "$API/v1/communities/bar-manolo/auto-play"