Catálogo de eventos
O consumidor assina somente a lista abaixo. O type público remove o prefixo gateway. ou gateway.payment. e a versão. gateway.payment.charge.paid.v1 e gateway.payment.charge.paid.v2 viram o mesmo charge.paid. payout.completed sai de gateway.payout.completed.v2.
Não existe checkout_session.paid. Os tipos de sessão são checkout_session.created, checkout_session.completed e checkout_session.expired.
O filtro * pode ser gravado no endpoint, mas não é um type emitido. A allowlist interna de prefixos aceitaria outros nomes charge., checkout_session., subscription., invoice., customer., affiliate., refund., payout. e dispute. se eles chegassem ao consumidor. Hoje o consumidor não assina esses extras. Documente apenas os tipos inscritos, mais o ping webhook.test.
Tipos inscritos
apikey.rotation_warningcharge.cancelledcharge.createdcharge.disputedcharge.expiredcharge.failedcharge.paidcharge.partially_refundedcharge.payment_failedcharge.refundedcharge.under_reviewcharge.updatedcheckout_session.completedcheckout_session.createdcheckout_session.expireddispute.lostdispute.openeddispute.wonrefund.completedrefund.failedrefund.requestedrefund.unknownpayout.completedpayout.failedsubscription.activatedsubscription.canceledsubscription.canceled_due_to_payment_failuresubscription.card_updatedsubscription.createdsubscription.endedsubscription.initial_payment_settledsubscription.invoice.paidsubscription.invoice.payment_failedsubscription.past_duesubscription.pausedsubscription.payment_failedsubscription.payment_method_update_requiredsubscription.payment_unknownsubscription.plan_change_scheduledsubscription.plan_changedsubscription.reactivatedsubscription.recoveredsubscription.resumedsubscription.retention_coupon_appliedsubscription.unpaidsubscription.updated
Corpo
{"id":"<event id>","type":"charge.paid","data":{}}
data copia só os campos da allowlist que existem na origem, ou o objeto data explícito limitado à mesma allowlist. additionalProperties fora dessa lista não seguem. Se merchant_id faltar, o consumidor acrescenta o do evento. O ping de cadastro é a exceção: o corpo é exatamente {"id":"webhook.test","type":"webhook.test","data":{"ping":true}}, e ping é boolean.
Em charge.*, charge_id é alias de aggregate_id e amount_cents é alias de gross_amount_cents quando o campo público ainda não veio preenchido. Em payout.*, payout_id é alias de aggregate_id e amount_cents é alias de net_amount_cents. O aviso apikey.rotation_warning não inclui secret.
Campos possíveis, com o tipo que a origem já trouxe (não há um tipo único por campo; days_before já chegou como string): aggregate_id, api_key_id, grace_until, days_before, amount_cents, attempt_number, cancelled_at, charge_id, checkout_session_id, coupon_id, currency, customer_id, discount_applied_cents, environment, fee_cents, from_status, invoice_id, invoice_sequence, merchant_id, net_amount_cents, next_billing_date, occurred_at, paid_at, paused_at, payment_link_id, payment_method, payout_id, payout_state, plan_id, product_id, reactivated_at, recorded_at, requested_amount_cents, resumed_at, status, subscription_id, to_status.
A assinatura MuPag-Signature cobre esse JSON cru. X-Gateway-Event-Id e X-Gateway-Timestamp acompanham a entrega, e X-Gateway-Signature repete o HMAC-SHA256.
Esta página liberou seu próximo passo?
O feedback permanece no fluxo da documentação e nunca deve incluir dados de clientes ou cartões.