Axoria
PT EN
Criar conta

Webhooks

Webhooks permitem que sistemas externos recebam notificações em tempo real sobre eventos no Axoria. Quando um evento acontece, o Axoria envia uma requisição HTTP POST para a URL configurada com um payload JSON assinado.

Acesse em Configurações → Webhooks.


Criando um Webhook

  1. Clique em + Novo Webhook.
  2. Preencha:
    • URL - endpoint que receberá os eventos (deve ser HTTPS em produção)
    • Segredo - string usada para assinar o payload (HMAC-SHA256). Guarde com segurança.
    • Eventos - selecione quais eventos disparam este webhook
    • Nome - identificação descritiva (opcional)
  3. Salve.

Eventos Disponíveis

Evento Quando é disparado
issue.created Uma nova issue é criada
issue.updated Campos de uma issue são alterados
issue.deleted Uma issue é excluída
status.changed O status de uma issue muda
comment.added Um comentário é adicionado a uma issue
sprint.started Uma sprint é iniciada
sprint.completed Uma sprint é completada

Formato do Payload

{
  "event": "status.changed",
  "payload": {
    "issue": {
      "id": "...",
      "key": "SHOP-42",
      "title": "Corrigir bug no checkout",
      "type": "BUG",
      "priority": "HIGH",
      "status": "Em Revisão"
    }
  }
}

O payload é sempre um objeto com event (string) e payload (objeto com os dados do evento).


Verificando a Assinatura

Todo payload é acompanhado dos headers:

X-Axoria-Signature: sha256=<hash-base64>
X-Axoria-Event: status.changed

A assinatura é sha256= seguido da codificação Base64 do HMAC-SHA256 do corpo da requisição.

Para verificar a autenticidade:

import hmac, hashlib, base64

def verify(secret: str, payload: bytes, signature: str) -> bool:
    mac = hmac.new(secret.encode(), payload, hashlib.sha256)
    expected = "sha256=" + base64.b64encode(mac.digest()).decode()
    return hmac.compare_digest(expected, signature)
const crypto = require('crypto');

function verify(secret, payload, signature) {
  const hmac = crypto.createHmac('sha256', secret);
  hmac.update(payload);
  const expected = 'sha256=' + hmac.digest('base64');
  return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(signature));
}

Nunca processe o payload sem verificar a assinatura.

Use a Navegação lateral para explorar toda a Documentação.