Receitas
Cashback na sua própria tela
Puxar o saldo de cashback e resgatar para o saldo do jogador pelo seu servidor.
O clube calcula o cashback (perda líquida do dia × % da faixa) a partir dos eventos bet.placed e bet.settled. Você desenha o botão e o valor do seu jeito e usa o modo servidor para ler e resgatar.
1. Configure no Studio
Gamificação › Cashback: ligue, defina as faixas e escolha o modo Resgate (o jogador resgata quando quiser, até N dias). No modo Automático o clube paga sozinho no horário configurado e o resgate responde 409 auto_mode.
2. Mostre o saldo
const API = "https://api.iclubing.com";
const headers = (userId) => ({
Authorization: `Bearer ${process.env.ICLUBING_KEY}`,
"X-Participant": userId,
});
app.get("/minha-api/cashback", async (req, res) => {
const r = await fetch(`${API}/v1/me/cashback`, { headers: headers(req.user.id) });
if (r.status === 404) return res.json({ ligado: false });
const c = await r.json();
res.json({
ligado: c.enabled,
disponivel: c.available, // R$ pronto para resgatar
acumulandoHoje: c.today.amount, // R$ que o dia de hoje está gerando
percentual: c.today.pct,
proximoDia: c.nextDayAt,
recebidoNoMes: c.monthReceived,
});
});Campo de GET /v1/me/cashback | Significado |
|---|---|
enabled, mode | Ligado; claim (resgate) ou auto. |
available | Total pronto para resgatar (R$). |
availableDays[] | dayKey, amount, pct, loss de cada dia fechado não resgatado. |
today | amount, loss, pct, band: o que o dia de hoje está acumulando. |
pctRange | Menor e maior % das faixas. |
nextDayAt, claimDays, autoHour | Quando o dia fecha, quantos dias o valor fica disponível, hora do pagamento automático. |
monthReceived | Total recebido no mês. |
3. Resgate para o saldo
app.post("/minha-api/cashback/resgatar", async (req, res) => {
const r = await fetch(`${API}/v1/me/cashback/claim`, {
method: "POST",
headers: headers(req.user.id),
});
if (r.status === 409) return res.status(409).json({ erro: "Nada para resgatar agora." });
const { claimed, deliveries } = await r.json();
// Uma entrega por dia pago: credite cada uma UMA vez (idempotente pelo delivery_id)
for (const d of deliveries) {
await carteira.creditar(req.user.id, d.amount, { ref: d.delivery_id });
await fetch(`${API}/v1/deliveries/${d.delivery_id}/confirm`, {
method: "POST",
headers: { ...headers(req.user.id), "Content-Type": "application/json" },
body: JSON.stringify({ external_ref: d.delivery_id }),
});
}
res.json({ creditado: claimed });
});Cada dia paga uma vez só: resgatar de novo responde 409 nothing_to_claim. Com o cashback desligado: 404 disabled.