Tokia

Webhooks e eventos

O Tokia envia webhooks para notificar sua aplicacao sobre eventos importantes: recargas, uso de credito, saldo baixo e mudancas de conta. Use webhooks para manter seu sistema sincronizado com o estado do Tokia em tempo real.

Eventos disponiveis

EventoQuando disparaDados principais
topup.confirmedRecarga confirmada (PIX ou cartao)valor, metodo, saldo atualizado
usage.createdNova chamada de API reconciliadamodelo, tokens, custo BRL, chave
balance.lowSaldo caiu abaixo do limite configuradosaldo atual, limite
account.suspendedConta suspensa (fraude, saldo negativo)motivo, data
subscription.createdNovo plano ativadoplano, valor, ciclo
subscription.canceledPlano canceladoplano, data efetiva

Formato do payload

Todo webhook e enviado como POST com body JSON. O formato segue um envelope padrao:

json
{
  "event": "topup.confirmed",
  "created_at": "2026-10-03T14:30:00.000Z",
  "data": {
    "amount_brl": 50.00,
    "method": "pix",
    "balance_brl": 150.00,
    "topup_id": "top_abc123"
  }
}

Headers

HeaderDescricao
Content-Typeapplication/json
X-Tokia-SignatureHMAC-SHA256 do body com seu signing secret
X-Tokia-EventNome do evento (ex: topup.confirmed)

Validacao de assinatura

Sempre valide o header X-Tokia-Signature antes de processar o webhook. O signing secret esta disponivel no painel de configuracoes.

typescript
import { createHmac } from "node:crypto";

function validateSignature(body: string, signature: string, secret: string): boolean {
  const expected = createHmac("sha256", secret).update(body).digest("hex");
  return expected === signature;
}

const body = await request.text();
const signature = request.headers.get("x-tokia-signature") ?? "";

if (!validateSignature(body, signature, process.env.TOKIA_WEBHOOK_SECRET!)) {
  return new Response("Invalid signature", { status: 401 });
}

const event = JSON.parse(body);

Voce tambem pode usar o testador de assinatura para debugar sua implementacao.

Retry automatico

Se seu endpoint retornar um codigo de erro (5xx) ou nao responder em 10 segundos, o Tokia faz ate 3 retries com backoff exponencial:

  • 1a retry: 30 segundos depois
  • 2a retry: 5 minutos depois
  • 3a retry: 30 minutos depois

Se todas as tentativas falharem, o evento e descartado. Recomendamos implementar idempotencia no seu handler (usando o event_id do payload) para lidar com entregas duplicadas.

Boas praticas

  1. Responda com 200 OK o mais rapido possivel — processe o evento em background
  2. Valide a assinatura em toda requisicao
  3. Implemente idempotencia (mesmo evento processado 2x nao deve causar efeito duplicado)
  4. Monitore falhas de webhook no painel
  5. Use HTTPS — o Tokia nao envia webhooks para endpoints HTTP sem TLS