How It Works
- Configure your notification URL when creating the payin charge using the
notification_urlparameter - Receive notifications automatically when payin status changes
- Process the payload containing the complete payin details
- Return a 200 OK response to acknowledge receipt
Webhooks are sent only for final statuses: Credited, Canceled, Rejected
Setting Up Webhooks
To receive webhook notifications for payin transactions, include thenotification_url parameter when creating a charge:
notification_url field in the request body when creating a charge. Each charge can have its own notification URL, allowing you to route notifications to different endpoints based on your needs.
Webhook Payload
When a payin status changes, you’ll receive a POST request with the following data:Response Fields
Payin IDExample:
49339Payin invoiceExample:
eb21ce52-2897-475b-85af-a5201f4035bfPayin end-to-endExample:
END-TO-END-IDObject that contains the current status of your payin.
This object will only be returned if the payin is rejected and the merchant is using the “Account Mismatch” functionality. It provides more details on the reason for the rejection.
Last update of your payin.Format:
<date-time>Example: 2024-09-09T20:55:56.000000ZAdditional metadata about the payment.
Example Payload
Status Codes
Common payin status codes:| Status ID | Status Name | Description |
|---|---|---|
| 1 | Created | Charge has been created |
| 2 | Canceled | Charge canceled due to expiration |
| 3 | Rejected | Charge rejected due to compliance |
| 4 | Paid | Charge successfully paid |
| 5 | Credited | Amount is paid and available for withdrawal |
| 6 | Drop_requested | Cancellation requested |
Status Detail Codes
When a PIX transaction is rejected, thestatus_detail.code field provides specific information about the rejection reason:
| Code | Description |
|---|---|
reason_payer_divergence | CPF mismatch |
reason_payer_restriction_deceased_holder | CPF restriction: deceased holder |
reason_payer_restriction_canceled | CPF restriction: canceled document |
reason_payer_restriction_suspended | CPF restriction: suspended document |
reason_payer_pending_regularization | CPF restriction: pending regularization |
reason_payer_restriction_unknown | CPF restriction: unknown document |
gl_cpf_payer_restriction_underage | CPF restriction: underage (Brazilian law) |
reason_payer_restriction_age_above_limit | Restriction: age above limit (> 80 years) |
pending_challenge | Pending challenge |
reason_payer_restriction_receita | CPF restriction (Tax Authority) |
payer_restriction_high_risk | CPF high risk |
pending_review_manual | Payment created; awaiting manual review |
payer_restriction | Rejected per compliance policy |
reason_payer_restriction_pep | PEP (Politically Exposed Person) |
reason_payer_restriction_list_restrict | CPF on restriction list |
reason_payer_restriction_cpf_irregular | Irregular CPF |
reason_payer_restriction_judicial_block | Judicial block |
reason_payer_restriction_partners_and_ownership | Certified restriction (partners/ownership) |
reason_payer_restriction_ofac | CPF on OFAC list |
reason_payer_restriction_interpol | CPF on INTERPOL list |
reason_payer_restriction_onu | CPF on UN list |
reason_payer_restriction_euro | CPF on European restriction list |
WE0001 | The payment was made from an unregistered account |
WE0002 | The payment was made from an unauthorized institution |
reason_payer_restriction_pld | KYC restriction |
These codes are only returned when the payin status is Rejected and the merchant has the “Account Mismatch” functionality enabled.
Webhook Endpoint Requirements
Your webhook endpoint must:- Accept POST requests - All webhook notifications are sent via POST
- Use HTTPS - Only secure HTTPS URLs are accepted
- Return 200 OK - Respond with a 200 status code within 5 seconds
- Be publicly accessible - The endpoint must be reachable from the internet
Best Practices
Always Respond 200 OK: Your endpoint must respond with HTTP 200 to acknowledge receipt.

