Webhooks
Webhooks are POST requests from Whop to your server. Use them to react to events like payment.succeeded, membership.activated, or entry.created.
Webhooks follow the Standard Webhooks spec. Our SDKs handle unwrapping and signature verification for you.
Set up a webhook
Create the webhook in the dashboard
Navigate to the Developer tab in your dashboard.
Click Create Webhook in the top right corner.
Choose events and URL
Enter your webhook URL and select the events that you want to receive.
Ensure that you are on API version v1.
When testing locally, use ngrok or Cloudflare Tunnel to forward requests to your local development environment.
Store the webhook secret
Copy the webhook secret from the dashboard and store it as WHOP_WEBHOOK_SECRET.
Handle events on your server
Your endpoint now receives POST requests for every event you selected. See Validating webhooks for example handlers.
Validating webhooks
Always verify webhook signatures before you trust the payload. Otherwise someone could send your endpoint a fake event.
Set up your API handler
Create a route that accepts HTTP POST requests. Use the same URL you entered during webhook creation.
Our SDK unwraps and verifies the signature in one call. A bad signature raises; your handler won’t see tampered events.
The TypeScript example uses waitUntil from @vercel/functions to run the handler after responding 200. On other runtimes (Bun, Cloudflare Workers, Fastify, Hono) swap it for your framework’s equivalent background-task primitive, or a job queue. The Python and Ruby examples show framework-native equivalents.
Delivery guarantees
- At-least-once delivery. You may receive the same event more than once. Make your handler idempotent. Use the
webhook-idheader (or a unique field in the event body) as a dedup key. - Retries on non-2xx responses. Whop makes the initial delivery attempt, then retries up to 3 times after 10 seconds, 20 seconds, and 40 seconds if your endpoint errors or does not return a 2xx in time. Failed deliveries stop after that short retry window.
- Ordering is not guaranteed. An event created later may arrive before an earlier one. Don’t assume sequential delivery.
- Respond fast. Do the minimum work needed to acknowledge the event (verify + enqueue), then return 2xx. Long-running fulfillment belongs in a background task.
Available webhooks
Every webhook Whop sends is documented in the API Reference. Within each resource, the hook pages specify the event name and the exact payload schema.
Common events:
payment.succeeded: a payment is successfully processed.membership.activated: someone joins your community on a product.membership.deactivated: a membership goes invalid (failed payment, cancellation, or leaving).entry.created: someone joins a waitlist.refund.created: a payment is refunded.dispute.created: a buyer opens a chargeback.

