Pide tus resúmenes sin abrir el panel: desde Claude (MCP) o desde tu propio código. Beta: seis rutas, las mismas que usa el panel, con los mismos precios y topes.
En Tu cuenta, apartado // api: crea una clave. Hace falta tener el correo verificado. Se enseña entera una sola vez; guárdala. Máximo 3 vivas; puedes revocarlas cuando quieras. Una clave puede ver tus partidas, encolar resúmenes (gastan tu saldo igual que el panel), mirar la cola y descargar. No puede comprar, publicar en tus redes, cancelar ni borrar nada, ni crear o revocar otras claves: eso solo con tu sesión del navegador.
Ponle nombre y usa una clave por máquina. El alta la deja en texto plano dentro de la configuración de Claude Code, así que si pierdes el portátil o le pasas el proyecto a tu editor, revocas solo esa y las demás siguen vivas.
Necesitas Node 18 o más nuevo y Claude Code. Descarga el paquete y añádelo:
mkdir sabo-mcp && cd sabo-mcp curl -O https://app.sabo.gg/mcp/index.js -O https://app.sabo.gg/mcp/package.json npm install claude mcp add sabo --env SABO_API_KEY=sabo_TU_CLAVE -- node "$PWD/index.js"
Abre Claude y pídele: "lista mis partidas de anoche y encola el resumen de la que mejor nota tenga". Herramientas que aparecen: sabo_partidas, sabo_resumir, sabo_estado, sabo_videos, sabo_saldo.
Cabecera Authorization: Bearer sabo_TU_CLAVE. Base https://app.sabo.gg. Respuestas JSON.
| Ruta | Qué hace | Errores propios |
|---|---|---|
GET /api/v0/matches?count=15 | Partidas resumibles de todas tus cuentas Riot, con vod.onStream si el directo la cubre, durationSec y nota sabo. Si Riot frena o falla alguna cuenta, viene parcial: la lista está coja y ahí dentro pone qué falta. Pedir historial fresco va a 1 cada 30 s y 40 a la hora; pasado eso te devuelve el último guardado con cached: true. | sin_riot_id, refresh_limitado, riot |
POST /api/v0/summaries {"matchId": "EUW1_…", "rehacer": false} | Encola el resumen. Cobra de tu saldo lo mismo que el panel por ese mismo trabajo, a la tarifa que publica /api/v0/balance: así tu código no lleva el precio escrito. Devuelve jobId y credits. | sin_riot_id, email_no_verificado, discord_requerido, match_id_invalido, no_es_tu_partida, ya_procesada, ya_en_cola, sin_vod, twitch_no_responde, kick_sin_canal, kick_sin_grabaciones, kick_sin_vod, riot, nota_baja, sin_creditos, limite_semanal, tope_diario, tope_horario, descargas_pendientes, cola_llena, demasiados_intentos |
GET /api/v0/jobs/:id | Un trabajo: estado, progreso, y si está listo la URL de descarga, expira_at y el plazo en horasEntrega. Pedirlo cuando está listo cuenta como entrega: ahí empieza a correr el plazo. | id_invalido, no_encontrado |
GET /api/v0/videos | Tus últimos 50 trabajos con estado, enlace de descarga si está listo, expira_at de cada uno y horasEntrega. Pedir la lista cuenta como entrega de todos los que ya estén listos y les arranca el plazo, así que no la uses para vigilar la cola. | |
POST /api/v0/jobs/:id/descargado | Dice que ya te has bajado ese vídeo. Libera su hueco del tope de vídeos listos sin recoger, igual que pulsar Descargar en el panel: sin esto, quien trabaja solo por API se queda bloqueado hasta que el vídeo caduca. No borra nada ni toca el fichero. Devuelve marcado: false si ese trabajo no es tuyo o no estaba entregado, y ahí no hay error, porque una descarga no puede fallar por avisarnos. | id_invalido |
GET /api/v0/balance | Saldo: credits (SB comprados) y sub (tu plan y lo que queda de la semana, que se repone los lunes). Trae también tarifa, lo que cuesta un resumen, para que tu código no lleve el precio escrito; si llega a null es que el servidor no la publica y entonces no te la inventes. |
Genéricos: no_auth (sin clave o mal formada), key_invalida (revocada o inexistente), demasiados_intentos (tres topes distintos, aquí debajo). Los errores llegan como {"error": "codigo"}, a veces con un minutos de espera al lado. Los dos topes de clave añaden limite, con cuál de ellos ha saltado, y retry_s, con los segundos que faltan.
Los tres topes que devuelven demasiados_intentos, y no son el mismo:
llamadas_por_clave.demasiados_intentos en todas las llamadas, también en las que sí llevan una clave buena. Es el que se come un agente con la clave mal copiada o ya revocada: para y arregla la clave, reintentar solo alarga el bloqueo. Llega con limite claves_invalidas_por_ip.demasiados_intentos sin más datos al encolar es éste; espera un minuto.descargas_pendientes engaña de nombre: no se quita descargando. Son vídeos entregados que siguen dentro de su plazo y ya no caben más; el hueco se libera cuando ese plazo vence. El plazo de cada uno viene en expira_at. Eso es así por la API: en el panel el hueco sí se suelta al pulsar Descargar, y desde una clave todavía no hay forma de avisar de la descarga.
Publicar en tus redes, comprar, cancelar el plan, borrar vídeos o la cuenta, clips sueltos y Studio: todo eso se hace desde el panel, con tus ojos puestos. Fuera de las seis rutas de arriba no hay nada más al alcance de una clave, ni siquiera el resto del panel. Una clave robada no puede gastar tu tarjeta ni publicar en tu nombre.
Lo único que sí puede es encolar resúmenes, y eso gasta tu saldo de SB. Si ves trabajos que no has pedido, revoca la clave desde Tu cuenta y el corte es inmediato.
¿Dudas o quieres una ruta más? Discord de SABO.