The following webhook events let you track risk report generation asynchronously, so you can be notified when a report is ready to download or when generation fails, instead of polling.
| Event | Description |
|---|---|
| risk.risk_reports.completed | A risk report has been generated successfully and is ready to download. |
| risk.risk_reports.failed | Risk report generation has failed. |
Payload examples
The data object is the risk report, matching the response of the Retrieve a risk report API.
risk.risk_reports.completed
Sent when a report finishes generating. The file object contains a short-lived, signed download_url. The link expires at expires_at; if it has expired, call the Retrieve a risk report API to obtain a fresh one.
JSON
1{2 "id": "evt_100_2026070902013102020043_8321220011893766",3 "name": "risk.risk_reports.completed",4 "account_id": "acct_dk_FmEGnOSeoCCg3RpmJBA",5 "created_at": "2026-07-09T02:31:12+0000",6 "data": {7 "id": "320ef695-691a-4827-93f0-227155efca8a",8 "status": "COMPLETED",9 "start_date": "2026-04-01",10 "end_date": "2026-06-30",11 "type": "PAYMENT_FRAUD_REPORT",12 "file": {13 "name": "risk_report_123.csv",14 "download_url": "https://files.airwallex.com/d/320ef695-691a-4827-93f0-227155efca8a?signature=abc123",15 "expires_at": "2026-07-10T02:41:12Z"16 }17 }18}
risk.risk_reports.failed
Sent when report generation fails. The failure_reason field describes the cause.
JSON
1{2 "id": "evt_100_2026070902013102020044_8321220011893767",3 "name": "risk.risk_reports.failed",4 "account_id": "acct_dk_FmEGnOSeoCCg3RpmJBA",5 "created_at": "2026-07-09T02:31:12+0000",6 "data": {7 "id": "320ef695-691a-4827-93f0-227155efca8a",8 "status": "FAILED",9 "start_date": "2026-04-01",10 "end_date": "2026-06-30",11 "type": "PAYMENT_FRAUD_REPORT",12 "failure_reason": "row limit exceeded"13 }14}
Was this page helpful?