QI Tech · Carteiras & Passivos
Notificação em tempo real de que a composição (carteira) e as posições de um fundo estão prontas. A cada mudança de status, a M8 recebe o evento composition.status_change e busca os dados atualizados automaticamente.
POST
Assinatura HS256
JSON
Produção
Visão geral
A QI Tech dispara um POST para a M8 sempre que o status de uma composição muda. O processamento na M8 é assíncrono: respondemos imediatamente (200) e, em seguida, buscamos os dados pela própria API autenticada da QI Tech. O webhook é apenas o sinalizador — o dado autoritativo continua vindo da QI Tech.
Autenticação
Cada disparo da QI Tech vem assinado: o header SIGNATURE carrega um JWT HS256 assinado com a Signature Key trocada na configuração do webhook. A M8 valida a assinatura — requisições sem SIGNATURE ou com assinatura inválida recebem 401. IPs de origem: produção 54.205.166.229, sandbox 52.72.221.4.
SIGNATURE: <JWT HS256 assinado com a Signature Key>Endpoint
POST
https://m8-core-api.azurewebsites.net/WebhookQiTech/StatusChange
Corpo da requisição
{
"webhook_type": "composition.status_change",
"webhook_datetime": "2026-05-28T22:19:00",
"data": {
"composition_key": "11111111-2222-3333-4444-555555555555",
"composition_date": "2026-05-27",
"composition_type": "final_quota",
"status": "confirmed",
"fund_class_key": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
}
}| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
webhook_type | string | sim | Tipo do evento. Esperado: composition.status_change. |
webhook_datetime | string | sim | Data/hora do disparo (ISO 8601). |
data.composition_key | string | sim | Chave da composição (usada para buscar o detalhe). |
data.composition_date | string | sim | Data de referência da composição (yyyy-MM-dd). |
data.composition_type | string | sim | Tipo da composição (ex.: final_quota, pre_quota). |
data.status | string | sim | Novo status. Ver seção Comportamento por status. |
data.fund_class_key | string | sim | Chave da classe do fundo. |
Comportamento por status
| data.status | Ação da M8 |
|---|---|
confirmed | Dispara a coleta da carteira (composição) do fundo na M8. |
reprocessed | Idem — a posição mudou, a M8 recoleta a carteira. |
| outros | Recebidos e registrados, sem ação. |
Respostas
| HTTP | Significado |
|---|---|
200 | Webhook recebido. Corpo: { "message": "recebido" }. |
400 | JSON malformado / corpo inválido. |
401 | Token ausente ou inválido. |
Reenvio (retry)
O endpoint é idempotente: reenviar o mesmo evento não duplica dados (a coleta substitui a carteira do fundo na data). Recomendamos reenviar em caso de resposta diferente de 2xx (ex.: backoff exponencial com algumas tentativas).
Exemplos
cURL
curl -X POST "https://m8-core-api.azurewebsites.net/WebhookQiTech/StatusChange" \
-H "Content-Type: application/json" \
-H "SIGNATURE: <JWT HS256 — gerado pela QI Tech>" \
-d '{
"webhook_type": "composition.status_change",
"webhook_datetime": "2026-05-28T22:19:00",
"data": {
"composition_key": "11111111-2222-3333-4444-555555555555",
"composition_date": "2026-05-27",
"composition_type": "final_quota",
"status": "confirmed",
"fund_class_key": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
}
}'Payload
{
"webhook_type": "composition.status_change",
"webhook_datetime": "2026-05-28T22:19:00",
"data": {
"composition_key": "11111111-2222-3333-4444-555555555555",
"composition_date": "2026-05-27",
"composition_type": "final_quota",
"status": "confirmed",
"fund_class_key": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
}
}