When does receipt.generated fire?
ReceiptService::generate() emits the PDF and persists it to storage. The donation row's status flips to 'receipted'.
What developers build with it
- Auto-attach the receipt PDF to a CRM contact record
- Push the receipt to DigiLocker for donors with consent
- Trigger a custom delivery channel (e.g. Telegram bot, Slack DM)
- Mirror to a document-management system for compliance archival
- Donor-portal real-time refresh
Sample payload
The full envelope (with HMAC-SHA256 signature, delivery UUID and headers) is documented on the webhooks hub page. Below is the per-event data block for receipt.generated:
{
"receipt_id": 9821,
"donation_id": 12345,
"ngo_id": 7,
"donor_id": 482,
"receipt_no": "DZ/2026-27/00921",
"amount": 5000,
"fy_label": "2026-27",
"generated_at": "2026-05-15T10:23:55+05:30",
"verify_url": "https://www.donateazy.in/verify-receipt?no=DZ%2F2026-27%2F00921",
"pdf_url": "https://www.donateazy.in/receipts/9821/download"
}
Subscribe to this event
From your NGO dashboard, head to System · Webhooks · Add new. Paste your HTTPS endpoint, copy the signing secret, tick receipt.generated in the events list, save. The first matching event fires within seconds. Verify the X-Donateazy-Signature header on every request.
// PHP example - drop into your webhook receiver
$raw = file_get_contents('php://input');
$expected = hash_hmac('sha256', $raw, $WEBHOOK_SECRET);
if (! hash_equals($expected, $_SERVER['HTTP_X_DONATEAZY_SIGNATURE'] ?? '')) {
http_response_code(401); exit;
}
$payload = json_decode($raw, true);
if ($payload['event'] !== 'receipt.generated') {
http_response_code(202); exit; // not for this handler
}
// $payload['data'] is the block documented above.
handleReceiptGenerated($payload['data'], $payload['id']);
http_response_code(200);
All 20 webhook events
donation.created
donation.paid
donation.refunded
donor.created
donor.updated
donor.merged
receipt.generated
campaign.created
campaign.completed
grant.created
grant.disbursement
payment_link.used
service_order.created
service_order.assigned
service_order.in_progress
service_order.awaiting_govt
service_order.delivered
service_order.completed
service_order.cancelled
service_order.refunded