Documentation Index
Fetch the complete documentation index at: https://docs.whop.com/llms.txt
Use this file to discover all available pages before exploring further.
Accept one-time and recurring payments using checkout links or an embedded checkout component. Whop supports 100+ payment methods across 195 countries, and the right ones appear automatically based on the buyer’s location. See all payment methods.
Choose your integration
| Checkout link | Embedded checkout | |
|---|---|---|
| Effort | Low | Medium |
| Customization | Limited | Full control |
| Best for | Sharing links, quick setup | Custom UX, dynamic pricing |
| Server code required | No (Dashboard) / Yes (API) | Yes |
Option 1: Create a checkout link
Checkout links are the simplest way to accept payments. Create a plan to get a shareable checkout URL.- Dashboard
- API
- Go to your Dashboard > Checkout links
- Click + Create checkout link
- Select a product and configure your pricing (free, one-time, or recurring)
- Click Create checkout link
Option 2: Embedded checkout
For a custom checkout experience, use the embedded checkout component with a checkout configuration.Step 1: Create a checkout configuration
Create a checkout configuration on your server with an inline plan:company_idis your company IDplan.initial_priceis the payment amountplan.plan_typeis eitherone_timeorrenewalfor subscriptionsmetadatastores custom data for your reference
Step 2: Render the checkout
- React
- HTML / JavaScript
checkoutConfig.id from step 1 as the sessionId prop.returnUrl is required to handle redirects from external payment providers. When redirected, check the status query parameter:
- success: The payment succeeded. Use the receipt information to render a success page.
- error: The payment failed or was canceled. Remount the checkout so your customer can try again.
Step 3: Customize the checkout
You can customize the checkout appearance and behavior:| Prop (React) | Attribute (HTML) | Description |
|---|---|---|
theme | data-whop-checkout-theme | "light", "dark", or "system" (default) |
hidePrice | data-whop-checkout-hide-price | Hide the price display |
themeOptions.accentColor | data-whop-checkout-theme-accent-color | Custom accent color |
Handle payment webhooks
Listen for webhooks to fulfill orders on your server. This example uses Next.js on Vercel, but thewhopsdk.webhooks.unwrap pattern works with any framework:
membership.went_valid (access granted), payment.failed (payment failed).
See it work end-to-end
The fastest way to confirm everything’s wired up is to run a test charge in sandbox and watch the result flow back to your server and dashboard.1. Trigger a test charge
Switch your SDK and checkout to the sandbox environment, then run a checkout with a test card. The sandbox guide covers the URL changes and lists test cards for every payment outcome (succeeded, failed, requires action).2. Inspect the webhook payload
When the test charge settles, your webhook handler receives apayment.succeeded event shaped like this:
metadata.order_id you attached when creating the checkout configuration flows straight through to the webhook handler. That’s the hook you use to map the payment back to your own order record.
3. Verify in the sandbox dashboard
Open the sandbox dashboard athttps://sandbox.whop.com/dashboard/<your_company_id>/payments. The test charge appears in this payments list with its status and amount; use your server logs to confirm the metadata.order_id you set maps back to the same order.

payment.succeeded event on your server, the integration is live. Switch your SDK and webhook URL to production when ready.
Next steps
Webhooks
Handle payment events in real-time
Save payment methods
Save and charge payment methods
iOS payments
Accept payments in your iOS app with lower fees
Payment methods
100+ payment methods across 195 countries

