CCroupier

Documentación

Referencia de la API

Todo lo que necesitás para integrar resultados de mesas en vivo: autenticación, endpoints, límites de uso y ejemplos en curl, JavaScript y Python.

Introducción

Croupier mantiene una única conexión WebSocket a mesas de casino en vivo y normaliza cada resultado en Redis. Tu integración nunca toca ese WebSocket: hablás con una API REST simple, autenticada con una clave, con cuota y rate limiting predecibles.

  • • Todos los endpoints de datos son GET y devuelven JSON.
  • • La base URL en producción es https://api.getcroupier.live (ajustá al dominio real de tu despliegue).
  • • Los últimos 20 resultados de cada mesa quedan cacheados; no hay historial más largo por endpoint.

Autenticación

Cada request a la API de datos lleva tu clave en el header X-API-Key. No hay OAuth ni tokens temporales para este canal: la clave es estática hasta que la rotás vos mismo desde el dashboard.

header
X-API-Key: ppb_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Conseguís tu clave iniciando sesión con Google y activando un plan con acceso a la API. Se muestra una sola vez al crearla o rotarla — guardala en un gestor de secretos, no en el código.

Obtener una API key

Categorías

Cada mesa pertenece a una categoría (tableType del proveedor, ej. ROULETTE). El catálogo soportado por el protocolo tiene 32 categorías, pero solo las que el operador del bridge habilitó están realmente cacheadas con datos — pedir una categoría del catálogo que no está activa devuelve 403, no datos vacíos.

GET /v1/categories

Categorías activas en esta instancia ahora mismo. Son las únicas que van a devolver datos.

GET /v1/categories/catalog

Las 32 categorías que el protocolo soporta, activas o no. Útil para saber qué pedir si tu plan las habilita más adelante.

ROULETTEAMERICANROULETTEMEGAWHEELBACCARATBLACKJACKONEBJDRAGONTIGERANDARBAHARSICBOTOPCARDCASINOHOLDEMPOKERRUSSIANPOKERPOKERDRAWPOKERMTBBINGOBOOMORBUSTCOLORGAMEDICECITYMEGASICBACMONEYTIMESNAKESANDLADDERSLIVESWEETBONANZATREASUREADVENTURETREASUREISLANDTWENTYFOURDSPINGUESSTHENUMBERBIGBASSHIGHFLYERSPACEMANPOWERBALLLIVEMACHINE

Endpoints

GET/v1/categories

Categorías habilitadas en esta instancia.

response 200
{
  "categories": ["ROULETTE", "MEGAWHEEL"],
  "timestamp": "2026-07-17T20:02:51Z"
}
GET/v1/categories/catalog

Catálogo completo de categorías soportadas por el protocolo.

response 200
{
  "categories": ["AMERICANROULETTE", "ANDARBAHAR", "..."],
  "timestamp": "2026-07-17T20:02:51Z"
}
GET/v1/categories/{category}/tables

Mesas disponibles dentro de una categoría, con su metadata.

ParámetroTipoDescripción
category*pathEj. ROULETTE. Debe estar en /v1/categories.
response 200
{
  "category": "ROULETTE",
  "tables": [
    {
      "tableId": "204",
      "tableName": "Mega Roulette",
      "category": "ROULETTE",
      "tableSubtype": "megaroulette",
      "updated_at": "2026-07-17T20:02:51Z"
    }
  ],
  "timestamp": "2026-07-17T20:02:51Z"
}
GET/v1/tables

Equivalente a /v1/categories/{category}/tables, con la categoría como query param.

ParámetroTipoDescripción
category*queryEj. ?category=ROULETTE
GET/v1/categories/{category}/tables/{table_id}/results

Los últimos resultados normalizados de una mesa.

ParámetroTipoDescripción
category*pathCategoría de la mesa.
table_id*pathID de la mesa, ej. 204.
response 200
{
  "tableId": "204",
  "category": "ROULETTE",
  "tableName": "Mega Roulette",
  "tableSubtype": "megaroulette",
  "dealerName": "Normand",
  "tableOpen": true,
  "totalSeatedPlayers": 600,
  "lastResults": [
    { "time": "Jul 17, 2026 4:02:51 PM", "result": "31",
      "color": "black", "gameId": "15973291921" }
  ],
  "timestamp": "2026-07-17T20:02:51Z"
}
GET/v1/tables/{table_id}/results

Equivalente al anterior, con la categoría como query param.

ParámetroTipoDescripción
table_id*pathID de la mesa.
category*queryCategoría de la mesa.
GET/v1/me/usage

Tu consumo actual: cuota mensual/total, rate limit y plan.

response 200
{
  "monthly_used": 12500,
  "monthly_quota": 50000,
  "total_used": null,
  "total_quota": null,
  "requests_per_minute": 120,
  "plan_slug": "vip_monthly",
  "subscription_ends_at": "2026-08-17T00:00:00Z",
  "api_key_prefix": "ppb_a1b2c3d4"
}

Rate limiting y cuotas

Cada clave tiene dos límites independientes, definidos por tu plan:

  • Requests por minuto — ventana fija de 60s. Superarla devuelve 429.
  • Cuota mensual (y total, opcional) — se resetea el día 1 de cada mes. Agotarla devuelve 402.

Consultá tu consumo en cualquier momento con GET /v1/me/usage — no gasta cuota de la API de datos.

Códigos de error

CódigoNombreCausa
401UnauthorizedFalta el header X-API-Key, la clave no existe, está inactiva o expiró.
402Payment RequiredSe agotó la cuota mensual o total de la clave.
403ForbiddenTu plan no incluye acceso a la API, o pediste una categoría no habilitada en esta instancia.
404Not FoundLa mesa no existe en esa categoría, o todavía no hay resultados cacheados.
422Unprocessable EntityLa categoría enviada no existe en el catálogo (32 tipos soportados).
429Too Many RequestsSuperaste el límite de requests por minuto de tu clave.

Ejemplos de código

curl
curl "https://api.getcroupier.live/v1/tables/204/results?category=ROULETTE" \
  -H "X-API-Key: ppb_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
javascript
const res = await fetch(
  "https://api.getcroupier.live/v1/tables/204/results?category=ROULETTE",
  { headers: { "X-API-Key": process.env.CROUPIER_API_KEY } }
);

if (!res.ok) throw new Error(`API error ${res.status}`);
const data = await res.json();
console.log(data.lastResults[0]);
python
import requests

res = requests.get(
    "https://api.getcroupier.live/v1/tables/204/results",
    params={"category": "ROULETTE"},
    headers={"X-API-Key": "ppb_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"},
    timeout=5,
)
res.raise_for_status()
data = res.json()
print(data["lastResults"][0])

Buenas prácticas

  • No hagas polling más rápido que la mesa gira. Cada mesa actualiza cada 20–60s según el juego; pedir cada segundo solo gasta tu cuota sin datos nuevos.
  • Deduplicá por gameId. Es el identificador estable de cada resultado; usalo como clave si guardás resultados en tu propia base.
  • Manejá 429 y 402 con backoff. Ambos son esperables en producción, no errores de tu integración — reintentá con espera exponencial, no en loop.
  • Nunca expongas tu X-API-Key en el cliente. Hacé el fetch desde tu backend; si necesitás mostrar datos en un frontend, proxéalos vos mismo.