Chargeback aprovado
Evento: TRANSACTION_CHARGEBACK_APPROVED
O banco do cliente aprovou uma contestação da compra (chargeback) e o valor foi revertido.
Quando dispara: quando o gateway avisa a PagPolar que o chargeback foi aprovado.
O que fazer: revogue o acesso ao que foi vendido e marque o pedido como contestado.
Atenção: se a venda já estava REFUNDED ou CANCELED, o evento chega com esse status, sem mudar para CHARGEBACK_APPROVED. Diferente de TRANSACTION_REFUNDED, a transação traz chargeback_approved_at e não traz refund_reason nem refund_at.
Exemplo de payload
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"event": "TRANSACTION_CHARGEBACK_APPROVED",
"creation_date": "2026-02-10T09:15:05.000Z",
"version": "1.0.0",
"data": {
"transaction": {
"id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
"identifier": "PPO0087103960",
"status": "CHARGEBACK_APPROVED",
"type": "BILLING",
"payment_method": "CREDIT_CARD",
"total_amount": "555.2400",
"net_amount": 450,
"effective_value": "426.5500",
"base_tax": "23.4500",
"installment_tax": "105.2400",
"base_fixed_tax": "0.9900",
"base_percentage_tax": "22.4600",
"installments": 12,
"cycle": 1,
"paid_at": "2026-01-29T14:35:00.000Z",
"created_at": "2026-01-29T14:00:00.000Z",
"chargeback_approved_at": "2026-02-10T09:15:00.000Z"
},
"items": [
{
"id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"quantity": 1,
"amount": "450.0000",
"original_amount": "500.0000",
"discount_value": "50.0000",
"product": {
"id": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
"name": "Curso Completo de Marketing Digital",
"type": "DIGITAL"
},
"price": {
"id": "1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed",
"title": "Plano Anual",
"price": "500.0000",
"identifier": "PPP1234567890"
}
}
],
"product": {
"id": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
"name": "Curso Completo de Marketing Digital",
"type": "DIGITAL"
},
"buyer": {
"name": "João Silva",
"email": "joao.silva@email.com",
"document": "12345678900",
"phone": "11999999999"
},
"address": {
"street": "Rua das Flores",
"number": "123",
"complement": "Apto 4B",
"neighborhood": "Centro",
"city": "São Paulo",
"state": "SP",
"postal_code": "01000-000"
},
"payment_details": {
"origin": "DIRECT",
"qr_code": null,
"billet_barcode": null,
"billet_link": null,
"last_credit_card_digits": "4242",
"shipping_value": "0.00"
},
"coupon": null,
"subscription": null,
"affiliate": null,
"source": {
"channel": "API",
"api_credential_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
}
}
}Header Parameters
Bearer <webhook_authorization>: o token do webhook, exibido uma única vez na criação da credencial. Compare com o valor guardado antes de processar o evento.
true só nos envios de teste feitos pelo Playground de webhooks do portal. Os eventos reais não trazem este header.
"true"Id desta tentativa de entrega. Cada nova tentativa do mesmo evento chega com outro id: não use este campo para evitar processamento duplicado.
uuidNome do evento.
Data e hora (UTC) em que esta tentativa foi montada.
date-timeVersão do formato do payload.
Só aparece nos envios de teste feitos pelo Playground de webhooks do portal, junto com o header X-PagPolar-Test: true. Os eventos reais não trazem este campo: ignore em produção qualquer evento com test: true.
Dados do evento. Chega vazio ({}) se a venda ou a assinatura não for encontrada no momento do envio.
Response Body
Venda reembolsada POST
**Evento:** `TRANSACTION_REFUNDED` O estorno foi concluído e o dinheiro voltou para o cliente. **Quando dispara:** quando o gateway confirma o estorno de uma venda paga, com ou sem pedido de reembolso antes. **O que fazer:** revogue o acesso ao que foi vendido e marque o pedido como reembolsado. **Atenção:** no reembolso de parte dos itens, o evento só chega quando o último item da venda é estornado; antes disso a venda volta para `PAID` e nenhum evento é enviado. O estorno de uma venda que não contava como paga chega como `TRANSACTION_CANCELED`. ### Exemplo de payload ```json { "id": "550e8400-e29b-41d4-a716-446655440000", "event": "TRANSACTION_REFUNDED", "creation_date": "2026-02-05T16:00:05.000Z", "version": "1.0.0", "data": { "transaction": { "id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d", "identifier": "PPO0087103960", "status": "REFUNDED", "type": "BILLING", "payment_method": "CREDIT_CARD", "total_amount": "555.2400", "net_amount": 450, "effective_value": "426.5500", "base_tax": "23.4500", "installment_tax": "105.2400", "base_fixed_tax": "0.9900", "base_percentage_tax": "22.4600", "installments": 12, "cycle": 1, "paid_at": "2026-01-29T14:35:00.000Z", "created_at": "2026-01-29T14:00:00.000Z", "refund_reason": "Produto não atendeu às expectativas", "refund_at": "2026-02-05T16:00:00.000Z" }, "items": [ { "id": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "quantity": 1, "amount": "450.0000", "original_amount": "500.0000", "discount_value": "50.0000", "product": { "id": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d", "name": "Curso Completo de Marketing Digital", "type": "DIGITAL" }, "price": { "id": "1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed", "title": "Plano Anual", "price": "500.0000", "identifier": "PPP1234567890" } } ], "product": { "id": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d", "name": "Curso Completo de Marketing Digital", "type": "DIGITAL" }, "buyer": { "name": "João Silva", "email": "joao.silva@email.com", "document": "12345678900", "phone": "11999999999" }, "address": { "street": "Rua das Flores", "number": "123", "complement": "Apto 4B", "neighborhood": "Centro", "city": "São Paulo", "state": "SP", "postal_code": "01000-000" }, "payment_details": { "origin": "DIRECT", "qr_code": null, "billet_barcode": null, "billet_link": null, "last_credit_card_digits": "4242", "shipping_value": "0.00" }, "coupon": null, "subscription": null, "affiliate": null, "source": { "channel": "API", "api_credential_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7" } } } ```
Assinatura criada POST
**Evento:** `SUBSCRIPTION_CREATED` Uma assinatura nova foi registrada. **Quando dispara:** logo depois da criação da assinatura, no checkout da PagPolar ou em `POST /v1/plans/offer/{id}/subscribe`. Se ainda não tiver sido enviado para a assinatura, também dispara quando o gateway ativa o primeiro ciclo no cartão. **O que fazer:** registre a assinatura pelo `subscription.id`. Não libere o acesso. No cartão, libere só quando `GET /v1/subscriptions/{id}` trouxer `status` `ACTIVE`. **Atenção:** no cartão, a assinatura nasce `DRAFT`; em PIX ou boleto, nasce `PENDING_PAYMENT`. ### Exemplo de payload ```json { "id": "550e8400-e29b-41d4-a716-446655440000", "event": "SUBSCRIPTION_CREATED", "creation_date": "2026-01-28T10:00:05.000Z", "version": "1.0.0", "data": { "subscription": { "id": "c3d4e5f6-a7b8-4012-8def-123456789012", "external_id": null, "status": "DRAFT", "start_at": "2026-01-28T10:00:00.000Z", "end_at": null, "next_billing_at": "2026-02-28T10:00:00.000Z", "payment_method": "CREDIT_CARD", "total_amount": "49.9000", "created_at": "2026-01-28T10:00:00.000Z" }, "product": { "id": "8a2cdb3c-4a6d-4bad-8add-1a0c6b2cab5c", "name": "Assinatura Premium Mensal", "type": "SUBSCRIPTION" }, "buyer": { "name": "João Silva", "email": "joao.silva@email.com", "document": "12345678900", "phone": "11999999999" }, "source": { "channel": "API", "api_credential_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7" } } } ```