Webhooks

Receba no seu sistema um aviso a cada key gerada, HWID resetado ou mudança de saldo.

Em vez de perguntar à API de tempos em tempos, o seu sistema pode receber os avisos: a cada evento, o nosso servidor faz um POST com um JSON assinado para a URL que você cadastrar.

Como cadastrar

No painel, em Notificações e logs, cada canal aceita uma URL:

  • URL de webhook do Discord: o canal recebe a mensagem pronta, formatada para o Discord.
  • Qualquer outra URL https: o seu sistema recebe o JSON descrito nesta página.

Na mesma tela ficam o botão Testar, o histórico de envios e o segredo de cada canal, usado para validar a assinatura.

Canais

CanalQuando avisaEventos
keysVocê gerou keys (pela API ou pelo painel).key.generated
hwidUm HWID foi resetado.key.hwid_reset
creditsO seu saldo mudou: compra ou ajuste.credits.purchased, credits.added, credits.removed
modsSaiu change-log de um mod da revenda.changelog.published
gamesO jogo de um mod da revenda foi atualizado.game.updated

Nos canais mods e games você pode escolher, no painel, de quais mods ou jogos quer receber. Sem escolha, recebe de todos.

Requisitos da URL

  • https, na porta padrão (443), num endereço público. Endereço de rede interna é recusado.
  • Sem usuário e senha na URL. Para saber que o aviso veio de nós, valide a assinatura.
  • Responda 2xx em até 5 segundos. O ideal é 204 sem corpo; uma resposta acima de 1 MB conta como falha.
  • Redirecionamento não é seguido: cadastre a URL final.

Cabeçalhos

CabeçalhoO que é
Content-Typeapplication/json
X-Project-EventO evento (o mesmo do campo event).
X-Project-DeliveryO id do aviso (o mesmo do campo id). Igual numa repetição.
X-Project-TimestampQuando o envio foi feito, em segundos desde 1970 (Unix).
X-Project-Signature-256sha256= seguido do HMAC-SHA256, em hex, de "{timestamp}.{corpo}" com o segredo do canal.

Corpo

Todo aviso tem o mesmo envelope; o que muda é o data de cada evento.

{
  "id": "6f1c2a4e-9d3b-4e7a-8c51-2b0d9f7a1e33",
  "event": "key.generated",
  "channel": "keys",
  "version": 1,
  "created_at": "2026-10-15T14:03:00-03:00",
  "data": {
    "generation_id": 57,
    "product": { "id": 1001, "title": "MOD EXEMPLO" },
    "quantity": 1,
    "days": 30,
    "keys": [{ "id": 204496, "code": "0a1b2c3d…c9d0e1f" }],
    "credits": { "spent": 18, "balance": 480 },
    "reseller": { "id": 12, "login": "minhaloja" }
  }
}
CampoO que é
idO id único do aviso. Use para ignorar repetições.
eventO evento (tabela abaixo).
channelO canal que recebeu.
versionA versão do formato do envelope. Hoje, 1.
created_atQuando o evento aconteceu (ISO 8601).
dataOs dados do evento.

Eventos

EventoCampos em data
key.generatedgeneration_id, product {id, title}, quantity, days, keys [{id, code}], credits {spent, balance}, reseller {id, login}
key.hwid_resetkey {id, code}, reseller {id, login}
credits.purchasedorder_id, credits, balance, reseller {id, login}
credits.addedamount, balance, reseller {id, login}
credits.removedamount, balance, reason, reseller {id, login}
changelog.publishedproduct {id, title, image}, changelog {id, items [], text_pt, text_en}
game.updatedgame {appid, name, version, link, image}, products [{id, title}]
webhook.testmessage, reseller {id, login} — enviado pelo botão Testar do painel.

Nos avisos, as keys vêm mascaradas (o começo e o fim do código). A key inteira sai pela API: Listar suas keys, com o id de keys[] em user_ids[].

Respostas e falhas

A sua respostaO que acontece
2xxEntregue.
3xx ou 4xx (menos 429)Falha. O aviso não é reenviado.
5xx, 429 ou nenhuma resposta em 5 segundosFalha. O aviso pode ser reenviado algumas vezes, com o mesmo id.

Toda falha fica no histórico de envios do painel.

Depois de 10 falhas seguidas, o canal é desativado. Corrija o seu servidor e salve a URL de novo no painel para reativar.

Próximo passo

Valide a assinatura de todo aviso antes de confiar nele.

Nesta página