Plan Sharp · REST · JSON
Documentación de la API
Los datos de tu panel, en JSON, con los mismos filtros (tus casas; si no, las de tu país y las internacionales): oportunidades del último escaneo (un escaneo por minuto), surebets, combinadas y probabilidades justas de cada partido (actualizadas cada 5 minutos). URL base: https://proba.bet.
Autenticación
Crea una clave en Ajustes → API (plan Sharp, 3 claves activas como máximo). Envíala en la cabecera Authorization: Bearer. El parámetro ?api_key= se acepta para hojas de cálculo, pero no se recomienda: la clave acaba entonces en los registros y el historial. La clave se muestra una sola vez; solo guardamos su hash SHA-256.
curl -H "Authorization: Bearer pb_live_xxxxxxxx" "https://proba.bet/api/v1/me"{ "plan": "sharp", "daily_limit": 20000, "remaining_today": 19999 }Límite de peticiones
20 000 peticiones por clave y por día (UTC), que se reinician a las 00:00 UTC. Cada respuesta correcta incluye las cabeceras X-RateLimit-Limit y X-RateLimit-Remaining (también una 429, con Retry-After). Las oportunidades cambian como máximo una vez por minuto (cuotas de las casas británicas: cada 1 a 2 minutos) y las probabilidades de los partidos, cada 5 minutos: consultar más rápido no sirve de nada.
Endpoints
| Endpoint | Parámetros | Devuelve |
|---|---|---|
GET /api/v1/me | — | plan, daily_limit, remaining_today |
GET /api/v1/opportunities | kind=value|surebet|combo (por defecto value) · min_ev (fracción; ventaja para value, por defecto 0,02; beneficio para surebet, por defecto 0,005; se ignora para combo) · sport (sin efecto en combo) · limit (≤ 1000, por defecto 300) | kind, count, generated_at, data[] (event_id, sport_key, home, away, commence_time, market_key, outcome, point, book, book_title, price, link, fair_prob, fair_odds, ev, ev_expected, kelly, grade, flags, alt_books, exchange, first_seen, published_at… ; surebet : profit, legs[] ; combo : legs[]) |
GET /api/v1/matches | sport · hours (1–96, por defecto 96; ganadores de torneo o de carrera hasta 14 días) · limit (≤ 1000, por defecto 600) — o id=<event_id>: una fila por resultado (market_key, line, outcome, point, fair_prob, fair_odds) | count, generated_at, data[] (event_id, home, away, commence_time, p_home, p_draw, p_away, total_line, p_over, p_under, source, matched, thin, kind, updated_at) |
Ejemplo: value bets
curl -H "Authorization: Bearer pb_live_xxxxxxxx" \
"https://proba.bet/api/v1/opportunities?kind=value&min_ev=0.02&sport=soccer_epl&limit=50"{
"kind": "value", "count": 12, "generated_at": "2026-09-19T21:03:44.120Z",
"data": [{
"event_id": "0ab3…", "sport_key": "soccer_epl", "home": "Arsenal", "away": "Chelsea", "commence_time": "2026-09-20T15:00:00+00:00",
"market_key": "h2h", "outcome": "Draw", "point": null,
"book": "unibet_fr", "book_title": "Unibet (FR)", "price": 3.60, "link": "https://…",
"fair_prob": 0.2914, "fair_odds": 3.43, "ev": 0.0490, "ev_expected": 0.0294, "kelly": 0.0113, "grade": "A", "flags": [],
"alt_books": [{ "book": "betclic_fr", "price": 3.55, "ev": 0.0344, "ev_expected": 0.0206, "grade": "A" }],
"first_seen": "2026-09-19T21:01:40+00:00", "published_at": "2026-09-19T21:02:41+00:00"
}]
}Solo se devuelven las apuestas jugables en tus casas (Ajustes) —si no has elegido ninguna, en las de tu país y las internacionales—; para un surebet, todas sus patas. book / price / ev indican la mejor oferta entre todas las casas: elige la tuya en book o alt_books. grado A = selección de Babeth (seguida en el historial público); B = publicada con avisos (flags); C = verificar antes de apostar. ev_expected = parte de la ventaja esperada al cierre (base del importe); kelly = Kelly completo sobre ev_expected; published_at = hora del escaneo; first_seen = primera aparición. Las fechas están en ISO 8601 UTC.
Ejemplo: probabilidades de los partidos
curl -H "Authorization: Bearer pb_live_xxxxxxxx" "https://proba.bet/api/v1/matches?sport=soccer_epl&hours=48"
curl -H "Authorization: Bearer pb_live_xxxxxxxx" "https://proba.bet/api/v1/matches?id=0ab3c9d1"Errores
400— parámetro no válido (kind, id, sport)401 missing_or_invalid_api_key— falta la cabecera Authorization o la clave está mal formada401 unknown_api_key— clave desconocida o revocada403 plan_required:sharp— la cuenta de la clave no está en el plan Sharp429 daily_quota_exceeded— límite diario alcanzado — se reinicia a las 00:00 UTC500 internal_error— error interno, vuelve a intentarlo503 upstream_unavailable— datos no disponibles temporalmente (/matches), vuelve a intentarlo en un minuto
Webhooks
En lugar de consultar la API, deja que Babeth te llame: en Ajustes → Webhook, introduce una URL HTTPS pública y deja marcada la opción «Activar alertas». Cada nueva apuesta de la selección en tus casas (mismos filtros que tus alertas, horas de silencio incluidas) se envía (POST) con tu importe. Una llamada fallida (tiempo de espera agotado, código fuera de 2xx, redirección) se reintenta en el siguiente escaneo; tras 5 fallos, el envío se pausa 10 minutos. Excepcionalmente, una misma apuesta puede llegar dos veces: elimina duplicados con event_id + market_key + outcome + point.
POST https://example.com/proba (Settings → Webhook)
Content-Type: application/json
X-Proba-Event: picks | test
X-Proba-Signature: sha256=<HMAC-SHA256(secret, body)>
{
"event": "picks", "sent_at": "2026-09-20T09:00:12Z", "user_id": "…",
"picks": [{
"event_id": "0ab3…", "sport_key": "soccer_epl", "home": "Arsenal", "away": "Chelsea", "commence_time": "2026-09-20T15:00:00Z",
"sport_title": "EPL", "market_key": "h2h", "outcome": "Draw", "point": null,
"book": "unibet_fr", "book_title": "Unibet (FR)", "price": 3.60, "link": "https://…", "book_url": "https://…",
"fair_prob": 0.2914, "fair_odds": 3.43, "min_odds": 3.50, "ev": 0.049, "ev_expected": 0.0294, "grade": "A",
"stake": 3, "currency": "EUR", "exchange": null
}]
}Verifica la firma antes de confiar en el mensaje:
# Node.js
const sig = req.headers["x-proba-signature"]; // "sha256=…"
const mac = crypto.createHmac("sha256", SECRET).update(rawBody).digest("hex");
const a = Buffer.from(sig || ""), b = Buffer.from("sha256=" + mac);
const ok = a.length === b.length && crypto.timingSafeEqual(a, b);
# Python
ok = hmac.compare_digest(sig, "sha256=" + hmac.new(SECRET.encode(), raw_body, hashlib.sha256).hexdigest())Responde 2xx en menos de 5 segundos, sin redirección. El evento `test` proviene del botón «Enviar una prueba».
Condiciones
Uso personal o para tus propias herramientas. Sin reventa de los datos ni redistribución pública. Las claves pueden revocarse en cualquier momento desde Ajustes. Datos de ayuda a la decisión, sin garantía de ganancias.
¿Necesitas la API?
El plan Sharp incluye la API, los movimientos de línea, varias bankrolls y el comparador completo.