[api rest][webhooks][mcp]
Configuração
Configure em Configurações da API → webhook_url
Assinatura
| Item | Valor |
|---|
| algorithm | HMAC-SHA256 |
| header | X-Webhook-Signature |
| secret_source | webhook_secret da API credential |
validar assinatura · php$signature = $_SERVER['HTTP_X_WEBHOOK_SIGNATURE'];
$payload = file_get_contents('php://input');
$expected = hash_hmac('sha256', $payload, $webhookSecret);
if (!hash_equals($expected, $signature)) {
http_response_code(401);
exit('Invalid signature');
}
Eventos
| Evento | Quando |
|---|
payment.received | QR PIX gerado — aguardando pagamento (cash-in) |
payment.confirmed | Pagamento PIX confirmado (cash-in) |
payment.expired | QR Code expirou sem pagamento |
withdrawal.processing | Saque PIX aceito e em processamento |
withdrawal.completed | Saque PIX (cash-out) liquidado |
card.payment.confirmed | Pagamento com cartão confirmado (cobrança única ou 1ª parcela assinatura) |
card.payment.failed | Pagamento com cartão recusado/falhou (inclui 1ª parcela assinatura) |
subscription.authorized | Assinatura cartão ativada (após 1ª cobrança OK) |
subscription.installment.paid | Renovação cartão paga (mês 2+); is_renewal true |
subscription.installment.rejected | Renovação cartão falhou (cartão recusado, etc.) |
subscription.installment.retry_requested | Nova tentativa de cobrança da renovação agendada |
subscription.canceled | Assinatura cartão cancelada ou encerrada |
chargeback.created | Chargeback/disputa de cartão aberta |
chargeback.closed | Chargeback/disputa encerrada (ganha ou perdida) |
Exemplos de payload
Payload — payment.confirmed · json{
"event": "payment.confirmed",
"transaction_id": "API-1-1704654321-xYz12AbC",
"type": "cash_in",
"status": "paid",
"amount": 99.90,
"fee": 3.99,
"net_amount": 95.91,
"customer": {
"name": "João Silva",
"email": "joao@email.com",
"document": "12345678900"
},
"pix_data": {
"end2end_id": "E12345678202501071055..."
},
"metadata": {
"order_id": "123",
"product": "Curso Online"
},
"paid_at": "2026-01-07T11:00:15.000000Z",
"created_at": "2026-01-07T10:55:21.000000Z"
}
Payload — withdrawal.completed · json{
"event": "withdrawal.completed",
"transaction_id": "a2f5aeca7762c4b1fbd65ef0f0ee6014",
"withdrawal_id": "a2f5aeca7762c4b1fbd65ef0f0ee6014",
"external_id": "WITHDRAW-707-1780261199",
"status": "completed",
"amount": 22.69,
"updated_at": "2026-05-31T18:00:32-03:00",
"pix_data": {
"end2end_id": "E29477089202602270626111199e7408",
"recipient_name": "NOME SOBRENOME"
}
}
Payload — card.payment.confirmed · json{
"event": "card.payment.confirmed",
"transaction_id": "API-1-1704654321-xYz12AbC",
"type": "cash_in",
"status": "paid",
"payment_method": "card",
"amount": 149.90,
"net_amount": 142.41,
"customer": {
"name": "João Silva",
"email": "joao@email.com",
"document": "12345678900"
},
"metadata": { "order_reference": "PEDIDO-456" },
"paid_at": "2026-01-07T11:00:15.000000Z",
"created_at": "2026-01-07T10:55:21.000000Z"
}
Payload — chargeback.created · json{
"event": "chargeback.created",
"transaction_id": "API-1-1704654321-xYz12AbC",
"type": "cash_in",
"status": "paid",
"payment_method": "card",
"amount": 149.90,
"customer": { "name": "...", "email": "...", "document": "..." },
"metadata": { },
"created_at": "..."
}