Configurando webhooks
POST /webhook · GET /webhook · DELETE /webhook/{id}
1. Por que webhooks
O ciclo de uma operação envolve múltiplos atores fora do controle do integrador: validação de elegibilidade, geração de termo na administradora, coleta de assinaturas, desembolso bancário. Em vez de você ficar pollando estado, a IORQ te avisa quando algo muda.
- Latência baixa — eventos são entregues em segundos após a mudança
- Reentrega garantida — se sua URL falha, a IORQ retenta (ver Idempotência e reentrega)
- Filtro por tipo — você assina só os eventos que interessam para sua integração
2. Pré-requisitos
- Endpoint HTTPS público com certificado válido (TLS 1.2+). HTTP e self-signed são rejeitados.
- Capacidade de responder em até 10 segundos — após esse tempo a IORQ considera falha e retenta.
- Token Bearer JWT válido para chamar
POST /webhook(ver Autenticação).
RecomendaçãoAntes de processar o evento, enfileire-o (SQS, RabbitMQ, etc.) e responda
200ao webhook. Processamento síncrono dentro do handler é frágil — uma lentidão downstream estoura o timeout de 10s.
3. Registrar uma URL de webhook
3.1 POST /webhook
POST /webhookPOST /webhook · application/json
Campos do payload
| Campo | Tipo | Descrição |
|---|---|---|
url | string (HTTPS) | URL pública que receberá os eventos. Um único endpoint para todos os tipos |
events | array<string> | Lista de eventos assinados. Use ["*"] para receber todos. Lista completa em Catálogo |
fund_ids | array<UUID> | Opcional. Filtra eventos por fundo. Omitido = todos os fundos da aplicação |
description | string | Texto livre para sua organização interna. Não afeta comportamento |
Exemplo:
curl -X POST 'https://hs-api.iorq.com.br/webhook' \
-H 'Authorization: Bearer eyJhbGciOi...' \
-H 'Content-Type: application/json' \
-d '{
"url": "https://api.meudominio.com/iorq-webhooks",
"events": ["loan_received", "loan_approved", "loan_rejected", "disbursement_completed", "installment_settled"],
"description": "Produção · principal"
}'Resposta:
{
"webhook_id": "wh_2A8f1b3c4d5e",
"url": "https://api.meudominio.com/iorq-webhooks",
"events": ["loan_received", "loan_approved", "loan_rejected", "disbursement_completed", "installment_settled"],
"signing_secret": "whsec_K8nP3qR7sT2vW9xY1zA4bC6dE0fG5hJ",
"status": "active",
"created_at": "2026-05-13T12:00:00Z"
}
Guarde osigning_secretimediatamenteEle não é retornado em nenhuma chamada subsequente. Em caso de perda, gere um novo via
POST /webhook/{id}/rotate-secret— o antigo deixa de validar a partir desse momento.
4. Formato dos eventos recebidos
Todo evento é enviado como POST JSON para a URL registrada, com headers específicos da IORQ:
Headers
| Header | Descrição |
|---|---|
Content-Type | Sempre application/json |
X-IORQ-Event | Nome do evento (ex: loan_approved) |
X-IORQ-Event-Id | UUID único do evento — use como chave de deduplicação |
X-IORQ-Signature | HMAC-SHA256 do body com o signing_secret. Detalhes em segurança |
X-IORQ-Timestamp | UNIX timestamp do envio |
X-IORQ-Delivery-Attempt | Número da tentativa (1 na primeira, incrementa em reenvio) |
Body
{
"event": "loan_approved",
"event_id": "evt_9c4a8b2d1e5f",
"originator_proposal_code": "OP-001",
"fund_id": "374485cf-f6df-467c-b91d-9f14082c6f36",
"timestamp": "2026-05-13T12:02:34Z",
"data": {
"/* payload específico do evento */": null
}
}O campo data varia por evento. Veja o Catálogo de eventos para os schemas específicos.
5. Validar o primeiro evento
Após registrar a URL, a IORQ envia um evento webhook.ping em sandbox para você confirmar que a configuração funciona:
{
"event": "webhook.ping",
"event_id": "evt_test_abc123",
"timestamp": "2026-05-13T12:00:05Z",
"data": { "message": "Webhook configured successfully" }
}Para validar a assinatura HMAC em Python:
import hmac, hashlib
def verify(payload_bytes, signature_header, secret):
expected = hmac.new(
secret.encode(),
payload_bytes,
hashlib.sha256
).hexdigest()
return hmac.compare_digest(expected, signature_header)Implementações em Node.js, Go e Java em Configuração e segurança.
6. Gerenciar webhooks existentes
| Operação | Endpoint |
|---|---|
| Listar webhooks ativos | GET /webhook |
| Atualizar URL ou eventos | PATCH /webhook/{webhook_id} |
| Desativar (pausar entrega) | POST /webhook/{webhook_id}/pause |
| Reativar | POST /webhook/{webhook_id}/resume |
| Rotacionar secret | POST /webhook/{webhook_id}/rotate-secret |
| Deletar | DELETE /webhook/{webhook_id} |
| Reenviar evento específico | POST /webhook/event/{event_id}/redeliver |
7. Próximos passos
Updated about 6 hours ago