zt-partners · Integração

Início rápido

Da criação da marca ao primeiro evento aceito.

Peça as credenciais da marca

No painel de managers, em Marcas → Nova marca, um SUPER_ADMIN cria a marca e recebe duas credenciais, exibidas uma única vez:

  • api_key: vai no header x-brand-key.
  • hmac_secret: assina cada requisição e nunca trafega.

Se perder, rotacione em Marcas → Credenciais de integração.

Capture o btag no site

O redirector manda o jogador para a sua URL com ?btag=<id>. Guarde esse valor (cookie ou storage) até o cadastro. Outros parâmetros (UTMs, click_id) também chegam na query e podem ser ignorados pela marca, porque o zt-partners já os guardou no clique.

site da marca
const btag = new URLSearchParams(location.search).get('btag');
if (btag) document.cookie = `btrack_btag=${btag}; max-age=${60 * 60 * 24 * 30}; path=/`;

Assine e envie o cadastro

backend da marca (Node)
import { createHmac } from 'node:crypto';

export async function sendAffsEvent(event: object) {
  const body = JSON.stringify(event);
  const timestamp = String(Math.floor(Date.now() / 1000));
  const signature = createHmac('sha256', process.env.ZT_AFFS_HMAC_SECRET!)
    .update(`${timestamp}.${body}`)
    .digest('hex');

  const res = await fetch(`${process.env.ZT_AFFS_URL}/v1/integration/events`, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'x-brand-key': process.env.ZT_AFFS_API_KEY!,
      'x-timestamp': timestamp,
      'x-signature': signature,
    },
    body,
  });
  return res.json();
}

await sendAffsEvent({
  type: 'player.registered',
  event_id: `reg-${player.id}`,
  occurred_at: player.createdAt.toISOString(),
  external_player_id: player.id,
  btag: cookies.btrack_btag,
});

Envie os eventos seguintes

Depois do cadastro, envie deposit.confirmed, withdrawal.confirmed, bet.placed e bet.settled do mesmo external_player_id. Use um event_id estável (por exemplo dep-<id da transação>), porque é ele que garante que um reenvio não gera comissão duplicada.

Confira no painel

Em Managers → Relatórios → Eventos da Integração cada evento aparece com o status PROCESSED, IGNORED (com o motivo) ou FAILED. As comissões geradas ficam em Movimentos → Comissões.

Quer testar sem código?

O Playground assina e envia qualquer evento direto do navegador, com as credenciais da sua marca.

On this page