API Partner Billing Webhook (v1) - SADI Online¶
Ultima atualizacao: 24/02/2026
Este documento define o contrato oficial para consumo da integracao financeira do parceiro com a plataforma SADI Online.
1. Objetivo¶
A integracao funciona como webhook com payload fixo.
- o parceiro envia eventos financeiros para a SADI;
- a SADI processa de forma assincrona e aplica regras de acesso;
- o parceiro nao precisa aguardar resultado de negocio na resposta HTTP.
2. Endpoint unico¶
3. Autenticacao e autorizacao¶
Todas as requisicoes exigem:
Authorization: PartnerKey <SUA_CHAVE>- escopo:
partner.access.webhook
Regras:
- chave invalida, inativa ou expirada:
401 Unauthorized - IP fora da lista permitida do parceiro:
401 Unauthorized - escopo ausente:
403 Forbidden
4. Payload aceito¶
O payload deve seguir este formato:
{
"name": "Joao Silva",
"email": "joao.silva@exemplo.com",
"phone": "5511998765432",
"productId": "PROD-123",
"linkId": "LNK-456",
"productName": "Curso Mestre do CRM",
"amount": 197.90,
"isOrderBump": false,
"paymentType": "credit_card",
"orderId": "ORD-7890",
"source": null,
"quantity": 1,
"document": "12345678900",
"timestamp": "2026-02-23T14:30:00.000Z",
"capturedDate": "2026-02-23T14:25:00.000Z",
"createdDate": "2026-02-23T14:20:00.000Z",
"status": "PaymentApproved",
"leadId": "00Q5e00000ABCD123",
"indicatorId": "a015e00000WXYZ456",
"package": "Pacote Premium",
"utm_source": "instagram",
"utm_medium": "social",
"utm_campaign": "lancamento_fev",
"src": "bio_link"
}
Valores aceitos para status:
PaymentApprovedCanceled
Campos opcionais no payload:
indicatorIdpackageutm_sourceutm_mediumutm_campaignsrc
5. Regras de negocio por status¶
5.1 status = PaymentApproved¶
O sistema aplica a regra em cascata:
- se nao existe acesso para o email no parceiro:
- cria usuario (se necessario), organizacao, membership e subscription
-
concede acesso por 12 meses
-
se existe acesso e esta bloqueado:
-
apenas reativa o acesso
-
se existe acesso, nao esta bloqueado e ja expirou:
-
renova por mais 12 meses
-
se existe acesso ativo e nao expirado:
- mantem acesso sem estender periodo
5.2 status = Canceled¶
- bloqueia o(s) acesso(s) do usuario para o parceiro
- cancela a subscription vinculada
- desativa o usuario (
is_active = false)
6. Idempotencia¶
O processamento usa idempotencia por evento:
event_idinterno:webhook:<orderId>:<status>- repeticoes com mesmo payload e mesmo
orderId/statussao deduplicadas - reutilizacao do mesmo
orderId/statuscom payload diferente e rejeitada no processamento
7. Resposta da API¶
A API sempre responde imediatamente com 202 Accepted quando a requisicao for aceita para fila assincrona:
{
"success": true,
"message": "Webhook accepted. Processing asynchronously.",
"data": {
"queued": true,
"task_id": "uuid-da-task",
"event_id": "webhook:ORD-7890:approved"
}
}
8. Erros HTTP¶
400 Bad Request: payload invalido401 Unauthorized: autenticacao invalida403 Forbidden: escopo insuficiente429 Too Many Requests: limite de taxa excedido500 Internal Server Error: erro interno
9. Exemplo de envio¶
curl -X POST "https://api.sadionline.com.br/v1/partner/accesses/" \
-H "Authorization: PartnerKey SUA_CHAVE" \
-H "Content-Type: application/json" \
-d '{
"name": "Joao Silva",
"email": "joao.silva@exemplo.com",
"phone": "5511998765432",
"productId": "PROD-123",
"linkId": "LNK-456",
"productName": "Curso Mestre do CRM",
"amount": 197.90,
"isOrderBump": false,
"paymentType": "credit_card",
"orderId": "ORD-7890",
"source": null,
"quantity": 1,
"document": "12345678900",
"timestamp": "2026-02-23T14:30:00.000Z",
"capturedDate": "2026-02-23T14:25:00.000Z",
"createdDate": "2026-02-23T14:20:00.000Z",
"status": "PaymentApproved",
"leadId": "00Q5e00000ABCD123",
"indicatorId": "a015e00000WXYZ456",
"package": "Pacote Premium",
"utm_source": "instagram",
"utm_medium": "social",
"utm_campaign": "lancamento_fev",
"src": "bio_link"
}'