Votos com recompensa
Os votos ficam no IdleBazaar. Quando quiser recompensar um jogador (ao entrar no jogo, ou num botão "resgatar voto"), o servidor do jogo consulta a nossa API com a chave gerada na página de integração, no cabeçalho X-Api-Key.
URL base: https://api.idlebazaar.com/v1/public/games/GAME_ID
Para testar sem mexer nos dados reais, use o ambiente de teste: https://sandbox.api.idlebazaar.com.
Como funciona
- Gere a chave na página de integração do jogo e guarde-a só no servidor. Gerar outra invalida a anterior.
- Consulte quantos votos pendentes (
unclaimed) o jogador tem, se só quiser mostrar a informação. - Para entregar a recompensa, chame o resgate: ele marca os votos como resgatados e devolve quantos foram (
claimed). Dê uma recompensa para cada voto devolvido. - O resgate é atômico: chamadas repetidas ou ao mesmo tempo nunca devolvem o mesmo voto duas vezes.
- O identificador do jogador é digitado por quem vota; não prova que a conta é dele.
Chave só no servidor
Use a chave apenas no servidor do jogo, nunca no navegador ou no app do jogador.
Consultar votos do jogador
GET /player-votes?player=PLAYER_ID
| Parâmetro | Onde | Descrição |
|---|---|---|
X-Api-Key | cabeçalho | Chave de votos do jogo (ibv_…). |
player | query | Identificador do jogador no seu jogo, até 100 caracteres. |
sh
curl "https://api.idlebazaar.com/v1/public/games/GAME_ID/player-votes?player=PLAYER_ID" \
-H "X-Api-Key: ibv_…"js
const res = await fetch(`${API}/player-votes?player=${encodeURIComponent(playerId)}`, {
headers: { 'X-Api-Key': KEY },
})
const votes = await res.json()php
<?php
$ch = curl_init("$api/player-votes?player=" . urlencode($playerId));
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => ["X-Api-Key: $key"],
CURLOPT_RETURNTRANSFER => true,
]);
$votes = json_decode(curl_exec($ch), true);python
votes = requests.get(f"{API}/player-votes", params={"player": player_id},
headers={"X-Api-Key": KEY}, timeout=5).json()Resposta 200
json
{
"player": "PLAYER_ID",
"total": 12,
"unclaimed": 1,
"last_vote_at": "2026-01-01T12:00:00.000Z",
"next_vote_at": "2026-01-02T12:00:00.000Z"
}| Campo | Descrição |
|---|---|
total | Votos do jogador neste jogo, resgatados ou não. |
unclaimed | Votos ainda não resgatados. |
last_vote_at | Data do último voto, ou null. |
next_vote_at | Quando ele pode votar de novo, ou null se já pode. |
GET /player-votescurl "https://sandbox.api.idlebazaar.com/v1/public/games/GAME_ID/player-votes?player=PLAYER_ID" \
-H "X-Api-Key: SUA_CHAVE"A requisição é enviada ao sandbox
sandbox.api.idlebazaar.com. A chave não é guardada.Resgatar votos pendentes
POST /player-votes/claim
Corpo JSON com o campo player. Marca os votos pendentes como resgatados e devolve quantos foram.
sh
curl -X POST "https://api.idlebazaar.com/v1/public/games/GAME_ID/player-votes/claim" \
-H "X-Api-Key: ibv_…" \
-H "Content-Type: application/json" \
-d '{ "player": "PLAYER_ID" }'js
const API = 'https://api.idlebazaar.com/v1/public/games/' + process.env.IDLEBAZAAR_GAME_ID
const KEY = process.env.IDLEBAZAAR_VOTE_KEY
// Chame no servidor do jogo, por exemplo ao entrar ou num botão "resgatar voto".
async function claimVoteRewards(player) {
const res = await fetch(API + '/player-votes/claim', {
method: 'POST',
headers: { 'X-Api-Key': KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({ player: player.externalId }),
})
if (!res.ok) throw new Error('IdleBazaar ' + res.status)
const { claimed } = await res.json()
for (let i = 0; i < claimed; i++) await game.giveVoteReward(player)
}php
<?php
$ch = curl_init("$api/player-votes/claim");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ["X-Api-Key: $key", 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode(['player' => $playerId]),
CURLOPT_RETURNTRANSFER => true,
]);
$result = json_decode(curl_exec($ch), true);
for ($i = 0; $i < $result['claimed']; $i++) {
$game->giveVoteReward($playerId);
}python
res = requests.post(f"{API}/player-votes/claim", json={"player": player_id},
headers={"X-Api-Key": KEY}, timeout=5)
res.raise_for_status()
for _ in range(res.json()["claimed"]):
game.give_vote_reward(player_id)Os IDs de jogos e votos são Snowflake enviados como strings decimais. Preserve o texto completo; não converta para Number em JavaScript. O PLAYER_ID continua sendo o identificador definido pelo seu jogo.
Resposta 200
json
{
"player": "PLAYER_ID",
"claimed": 1,
"votes": [{ "id": "107374182400000001", "voted_at": "2026-01-01T12:00:00.000Z" }]
}POST /player-votes/claimcurl -X POST "https://sandbox.api.idlebazaar.com/v1/public/games/GAME_ID/player-votes/claim" \
-H "X-Api-Key: SUA_CHAVE" \
-H "Content-Type: application/json" \
-d '{"player":"PLAYER_ID"}'A requisição é enviada ao sandbox
sandbox.api.idlebazaar.com. A chave não é guardada.Com a chave ativa, a página de voto passa a exigir o identificador do jogador. Respostas de erro estão em Erros.
Link de voto
Para o jogador votar já identificado, divulgue o link com o parâmetro player. É esse valor que você consulta e resgata na API.
https://idlebazaar.com/vote/GAME_ID?player=PLAYER_ID