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).
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

