Developer
Sandbox
Test mode loads the real checkout embed against your test plan, so the full flow — embed UI, declines, webhook → order.status = paid — runs end-to-end with no real charges. Toggle with WHOP_SANDBOX=true and NEXT_PUBLIC_WHOP_SANDBOX=true.
Mode
LiveCredentials loaded
- API keyset
- Company idset
- Product idset
- Webhook secretset
- Readyyes
Test cards
4242 4242 4242 4242Succeeds — order becomes paid
4000 0000 0000 0002Declined at the issuer
4000 0000 0000 9995Insufficient funds
4100 0000 0000 0019Blocked for fraud
Any future expiry / 3-digit CVC works. These cards are accepted by the embed when test credentials are loaded.
End-to-end test flow
- Add a product to your cart, fill in customer details and submit. You'll land on
/pay/<publicId>. - The embed renders the test-mode checkout UI.
- Choose a test card, hit Pay. The provider's test webhook fires
/api/whop/webhookand the order flips to paid. - The page refreshes and shows the “Paid in full” receipt.
Partner API · test request
With PARTNER_API_KEYS set to partner_test_demo_change_me (the default in .env.example), run:
curl -X POST https://www.monogramhaus.online/api/v1/partner/orders \
-H 'Authorization: Bearer partner_test_demo_change_me' \
-H 'Content-Type: application/json' \
-d '{
"reference": "INV-TEST-001",
"customer": {
"name": "Test Customer",
"email": "test@example.com",
"address": {
"line1": "1 Test St",
"city": "Brooklyn",
"region": "NY",
"postalCode": "11201",
"country": "US"
}
},
"items": [{
"productSlug": "monogram-tee",
"variantSku": "tee-blk-m",
"quantity": 1,
"personalization": { "monogram": "T.C.", "thread": "Ivory" }
}]
}'The response's payUrl is a live link on this site — open it, pay with a test card, and the order flips to paid.