Visão geral da API
A API servidor a servidor é com quem o backend do seu casino conversa. Ela é pequena: uma rota de catálogo, sete rotas de batalha e uma rota de token.
| URL base | A sua instância, ou a que o host da plataforma te deu |
| Auth | Authorization: Bearer sbk_... |
| Content type | application/json |
| Limite de corpo | 1 MiB |
| Erros | {"error":{"code":"...","message":"..."}} em toda falha |
→ Referência completa com Try It
As rotas
| Rota | Escopo | O que faz |
|---|---|---|
GET /games | games:read | O catálogo, filtrado pela sua allowlist |
POST /battles | battles:write | Abre um lobby |
GET /battles | battles:read | Lista as suas batalhas |
GET /battles/{id} | battles:read | Lê uma |
POST /battles/{id}/seats | battles:write | Senta um jogador |
POST /battles/{id}/bot-seats | bots:write | Preenche o resto com bots |
POST /battles/{id}/leave | battles:write | Libera um assento |
POST /battles/{id}/cancel | battles:write | Cancela um lobby aberto |
POST /battles/{id}/viewer-tokens | viewer:mint | Emite um token do feed ao vivo |
Não existe endpoint de início. Uma batalha começa sozinha quando todos os assentos estão
READY. Veja Ciclo de vida da batalha.
Quatro comportamentos para conhecer antes de começar
Dinheiro é string. entry_amount é uma string decimal canônica, nunca um número JSON. Ela
também é normalizada: envie "25.50" e toda resposta retorna "25.5". Compare valores fazendo
parse como decimal, nunca por igualdade de string.
Os corpos são decodificados de forma estrita. Campo desconhecido é 400, não ignorado em
silêncio. Enviar tenant_id num corpo de POST /battles falha com
unknown field "tenant_id", porque o tenant vem da sua chave de API e de lugar nenhum mais.
Allowlist vazia significa catálogo vazio. GET /games num casino sem nada liberado retorna
{"games": []} e toda criação de batalha falha com game_not_allowed. Isso é configuração,
não defeito. Uma mudança de allowlist feita no console aparece na hora; uma que o seu host faz
para você pode levar até 30 segundos para chegar nesta API.
A batalha de outro casino responde 404, não 403. Um 403 confirmaria que o id existe,
transformando um erro de permissão num oráculo de enumeração de ids.
Uma integração mínima
Quatro chamadas abrem uma batalha, preenchem e colocam a plateia assistindo:
BASE=https://slotbattle.example.com
KEY=sbk_3f9a1c...
# 1. What may we play?
curl -s "$BASE/games" -H "Authorization: Bearer $KEY"
# 2. Open a lobby. The creator is seated at index 0.
BATTLE=$(curl -s "$BASE/battles" \
-H "Authorization: Bearer $KEY" -H 'Content-Type: application/json' \
-d '{"game_id":"sweet-bonanza","seats_total":3,"entry_amount":"25.50",
"currency":"BRL","creator_player_ref":"alice",
"creator_game_url":"https://provider.example/session/abc"}')
ID=$(echo "$BATTLE" | jq -r .id)
# 3. Seat another player.
curl -s "$BASE/battles/$ID/seats" \
-H "Authorization: Bearer $KEY" -H 'Content-Type: application/json' \
-d '{"player_ref":"bob","game_url":"https://provider.example/session/def"}'
# 4. Fill what is left with bots — this is usually what starts the battle.
curl -s "$BASE/battles/$ID/bot-seats" \
-H "Authorization: Bearer $KEY" -H 'Content-Type: application/json' -d '{}'
A batalha agora está rodando. Duas coisas acontecem em seguida, e elas chegam a lugares diferentes:
- Espectadores conectam no feed WebSocket com o
ws_tokendo passo 2 ou 3. - O seu backend recebe um webhook assinado quando a batalha acaba.
Liquide pelo webhook, nunca por um frame de WebSocket. Veja Eventos.
Idempotência
Nenhuma rota aceita header Idempotency-Key. Torne as retentativas seguras do jeito comum:
POST /battles/{id}/seats é naturalmente idempotente por jogador, já que um jogador que já tem
assento READY é recusado com 409 em vez de sentado duas vezes.
Limites de taxa
A superfície S2S não tem rate limiter. As rotas de autenticação do console são limitadas, mas a
criação de batalha é limitada por capacidade e não por taxa: uma instância no limite de
batalhas em voo responde 503 unavailable, que é retentável com backoff.
Próximo
- Autenticação: chaves, escopos e os modos de falha
- Batalhas: as rotas de lobby em detalhe
- WebSocket: o feed ao vivo
- Webhooks: o resultado terminal
- Erros: todo código, e o que fazer com ele