Integrar
Eventos
O que mandar, quando, idempotência, lote e o que volta.
Cada fato do seu sistema vira um POST /v1/events. As regras do clube (editadas no Studio) decidem o que ele vale.
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
participant | string (até 128) | sim | Seu ID do usuário. |
type | string | sim | Formato dominio.acao, minúsculo (ex.: order.paid). |
id | string (até 128) | recomendado | ID único do fato no seu sistema. Repetir não conta de novo. |
amount | número | não | Valor em reais (ex.: 100 = R$ 100). |
currency | 3 letras | não | Padrão BRL. |
occurred_at | ISO 8601 | não | Quando aconteceu. Padrão: agora. |
meta | objeto | não | Detalhes livres (jogo, método de pagamento…). Nada de dados pessoais. |
Catálogo
| Grupo | Eventos |
|---|---|
| Conta | user.signed_up, user.verified, session.started, profile.completed |
| Dinheiro | deposit.confirmed, withdrawal.completed, order.paid, order.refunded, subscription.started, subscription.renewed, subscription.canceled |
| Jogo | bet.placed, bet.settled, game.round_played, tournament.joined |
| Uso | feature.used, lesson.completed, course.completed, workout.logged, post.created, comment.created, invite.sent |
| Livre | custom.qualquer_coisa com meta à vontade |
Apostas (bets e cassinos)
bet.placedcomamount= valor apostado;bet.settledcomamount= o que o jogador recebeu (0 se perdeu).meta.game_id,meta.game_name,meta.game_provideremeta.game_type(video-slots,live-casino,crash,roulette,table-games,fast-games) filtram missões, torneios e cashback por jogo/categoria. Esporte:meta.kind = "sports".meta.outcome = "lost"nobet.settledmarca perda.- Cashback é calculado a partir de
bet.placedebet.settled: perda líquida do dia = apostado − recebido. - Não mande estornos como aposta: filtre no seu lado.
Idempotência
A chave de repetição é o header Idempotency-Key ou, sem ele, o id do evento. Repetir devolve duplicate: true com os mesmos efeitos — pode reenviar com segurança depois de um timeout.
Lote
curl -X POST https://api.iclubing.com/v1/events/batch \
-H "Authorization: Bearer $ICLUBING_KEY" -H "Content-Type: application/json" \
-d '{ "events": [
{ "id": "pf:991:bet", "participant": "user_123", "type": "bet.placed", "amount": 20,
"meta": { "game_id": "fortune-tiger", "game_type": "video-slots" } },
{ "id": "pf:991:win", "participant": "user_123", "type": "bet.settled", "amount": 0,
"meta": { "game_id": "fortune-tiger", "outcome": "lost" } }
] }'Até 500 eventos; { "results": [...] } na mesma ordem. Para volume alto, mande Prefer: respond-async e receba 202 { queued: true } na hora.
Efeitos
type | Campos |
|---|---|
xp_granted / xp_debited | amount, rule_id |
currency_granted / currency_debited | currency, amount, rule_id |
level_up | from, to (números) |
tier_changed | from, to (códigos de elo) |
mission_progressed | mission_id, progress, target |
mission_completed | mission_id, period |
reward_granted | reward_code, rule_id, reward_id, delivery_id (quando o seu sistema precisa creditar) |
leaderboard_points | campaign_id, points, rule_id |
badge_granted, tagged | badge_code / tag, rule_id |
No Studio, Integrações › Registro lista os últimos eventos recebidos com o ID que você mandou e quantos efeitos cada um teve. Integrações › Eventos envia um evento de teste e mostra o efeito em português.