Billing and the Celebration Pass
Free up to 20 guests; one ₦50,000 pass per larger event, paid through Paystack.
For: Owners and planners
What is free and what is paid
| Plan | Price | Includes |
|---|---|---|
| Free | ₦0 | Invite and send to up to 20 guests |
| Celebration Pass | ₦50,000 per event (5,000,000 kobo) | Unlimited invitations, batch delivery, automated reminders and seating allocations |
No subscription. Planners pay the same pass per client event. Going over 20 on a free event raises an explicit error (PAYMENT_REQUIRED) rather than failing silently.
How a payment works
- From
/events/[id]/billingchoose to pay. A server action creates a Paystack transaction. - Paystack redirects back to
/events/[id]/billing/callback. - Paystack also calls
/api/webhooks/paystackwithcharge.success. - The server checks the signature, asks Paystack again to verify, and records the payment.
Webhook safeguards
- Signature: HMAC-SHA512 of the raw body with
PAYSTACK_SECRET_KEY, compared in constant time (timingSafeEqual). - Re-verification: the server calls Paystack's verify endpoint to confirm currency (NGN), exact amount and settlement before trusting the event.
- Idempotent:
record_successful_paymentreturns early for a reference it has already processed, so retries never double-charge or double-record. - A trigger (
tr_event_protection) stops a user from marking an event paid themselves. - Staff cannot see any of this.
Setting up the webhook
In the Paystack dashboard set the webhook URL to https://ariya-two.vercel.app/api/webhooks/paystack (or your own domain) and select charge.success.