LiaDesenvolvedores

Guias

Pague jogadores em $LIA a partir do seu pool de recompensas do app, do seu servidor. Um bônus diário, como exemplo, seguro para tentar novamente e dentro dos seus limites.

Seu app precisa de uma pool de recompensas, financiada pela equipe Lia (veja Potes de recompensas). Recompensas só vêm sempre do seu servidor, com sua chave.

#Um bônus diário

Cada jogador pode reivindicar 2 LIA por dia, após concluir um nível.

server.js
import { lia } from "./lia.js";

app.post("/api/daily-bonus", async (req, res) => {
  const playerId = await playerFrom(req.body.session); // see Verify on your server
  if (!playerId) return res.status(401).end();
  if (!(await db.finishedALevelToday(playerId))) return res.status(403).json({ error: "play_first" });

  const day = new Date().toISOString().slice(0, 10); // 2026-11-01
  try {
    const result = await lia("POST", "/rewards", {
      playerId,
      amount: 2,
      key: `daily:${day}:${playerId}`, // one a day per player, however often this runs
      reason: "Daily bonus",
    });
    res.json({ paid: result.status === "paid", amount: result.amount });
  } catch (error) {
    if (error.data?.error === "pool_empty") return res.status(503).json({ error: "bonus_paused" });
    if (error.data?.error === "daily_limit") return res.status(429).json({ error: "come_back_tomorrow" });
    throw error;
  }
});

Na página:

const { paid, amount } = await api("/api/daily-bonus", {});
if (paid) {
  Lia.haptic("success");
  Lia.toast("+" + amount + " LIA");
}

#Escolha as chaves

A chave é o que torna uma recompensa segura. A mesma chave nunca paga duas vezes, então faça com que ela nomeie o motivo da recompensa, não o pedido:

RecompensaChave
Um bônus diáriodaily:2026-11-01:p_3f9c…
Um lugar em um torneiotournament-44:place-1:p_3f9c…
Uma missão concluídaquest-7:p_3f9c…
Um vídeo assistidoad:ad_8e1c…

Uma tentativa novamente com a mesma chave após um tempo limite responde { "status": "duplicate" } e paga nada mais, então tentar novamente sempre é seguro. Nunca tente novamente com uma nova chave.

#Fique de olho no pool

const { balance, dailyCapPerPlayer } = await lia("GET", "/pool");
if (balance < 100) alertTheTeam(`Reward pool is down to ${balance} LIA`);

Quando o pool puder'não cobrir uma recompensa, POST /rewards respostas 409 pool_empty. Diga aos jogadores educadamente e peça ao time Lia para aumentá-lo. Quando um jogador tiver seu app'limite diário, ele responde 429 daily_limit (o limite é por jogador por UTC dia, definido pela equipe).

#Em teste

Com sua chave de teste, as recompensas são fictícias: registradas, com seu webhook, mas nenhuma movimentação de $LIA, e a pool e o limite diário não'para usar. Tente suas chaves e seu tratamento de erros lá primeiro.

#Faça os prêmios justos

  • Decida no servidor. O que alguém ganhou deve vir do que seu servidor viu (um jogo concluído, um vídeo verificado), e não do que a página diz.
  • Cuide dos seus próprios limites também, por jogador e por dia, então um jogador pode'não esgotar o pool.
  • Diga por quê. O reason aparece no jogador's atividade sob o seu app's nome.

Traduzido automaticamente. O inglês é a fonte de verdade. Leia em inglês

Digite para pesquisar todas as páginas, métodos e endpoints.