Documentation Index
Fetch the complete documentation index at: https://docs.shoppex.io/llms.txt
Use this file to discover all available pages before exploring further.
Overview
There are three ways to accept payments with Shoppex:Storefront
Customers browse your shop and checkout directly
Payment Links
Share a link that takes customers straight to checkout
API
Create invoices programmatically from your app
This guide covers both hosted/public Shoppex flows (storefront, payment links) and Developer API flows (
POST /dev/v1/payments, POST /dev/v1/orders).The Payment Flow
You don’t need to integrate with Stripe or PayPal directly. Shoppex handles all gateway communication for you.
Important Integration Rule
One Shoppex invoice can have more than one payment attempt over time. A customer might open checkout, try PayPal, abandon it, come back and finish with Stripe. This surprises most people integrating for the first time. The important thing: redirect the customer to the Shoppex checkout URL, listen for webhook events, and fulfill based on the final invoice status. Don’t build your fulfillment logic around a single provider-side session ID.Method 1: Storefront (Hosted/Public)
Your storefront atyourshop.shoppex.io is ready out of the box:
- Customer browses products
- Adds to cart
- Completes checkout
- Receives product automatically
Method 2: Payment Links (Hosted Flow)
Create a link that goes directly to checkout - perfect for sharing on social media, emails, or anywhere.Create via Dashboard
- Go to Products → Your Product
- Click Copy Payment Link
- Share the URL:
https://yourshop.shoppex.io/product/your-product
Create via API
webhook, Shoppex sends payment lifecycle events only for that created payment/invoice to that URL. Store webhook_secret immediately; it is not returned on later reads.
Best for: Social media sales, email campaigns, one-off payments
Method 3: API Integration (Developer API)
Use the Developer API when you need your own checkout UI or backend-driven payment flow.Payment vs Order
POST /dev/v1/payments and POST /dev/v1/orders look similar, but they solve different problems.
Use POST /dev/v1/payments when you have your own checkout and just want a hosted payment URL. You don’t get Shoppex catalog line items or automatic product delivery.
Use POST /dev/v1/orders when you want to charge for real Shoppex products — with line items, variants, and automatic delivery (files, serials, subscriptions, or DYNAMIC).
The quick rule: payments = generic developer payment. orders = catalog-backed Shoppex order.
Need to know which payment methods the shop currently accepts?
UseGET /dev/v1/me/capabilities for that.
A common mistake: GET /dev/v1/payments returns existing payment records, not the shop’s payment configuration. If you want to know which gateways (Stripe, PayPal, Crypto) are enabled, use GET /dev/v1/me/capabilities instead.
White-label crypto checkout is available by manual approval. Contact support to request access.Use
GET /dev/v1/me/capabilities to check whether white_label_crypto_checkout is enabled for your shop before you build a bot or custom crypto payment UI around it.Skip the crypto picker on hosted checkout
If you want to keep Shoppex hosted checkout but open a concrete coin directly, pass:gateway: the merchant crypto provider you want Shoppex to usecrypto_gateway: the concrete coin or network the buyer should pay with
OXAPAY and CRYPTOMUS.
cURL
gateway: "OXAPAY"+crypto_gateway: "TRON"-> hosted checkout opens directly on TRONgateway: "CRYPTOMUS"+crypto_gateway: "USDT_TRC20"-> hosted checkout opens directly on USDT TRC20gateway: "NATIVE_CRYPTO"+crypto_gateway: "LITECOIN"-> Shoppex derives a non-custodial Litecoin receive address from your active native wallet
crypto_gateway, the buyer lands on the normal generic crypto payment selection first.
Native BTC/LTC Payments
Use this flow when you want BTC or LTC paid directly into your own non-custodial wallet. Shoppex derives a receive address from your active native wallet xpub, watches the chain, and marks the payment paid after the configured confirmations. Shoppex does not create a provider payment and does not hold keys or funds. Check availability first:cURL
cURL
gateway is NATIVE_CRYPTO, Shoppex fails if no active native BTC/LTC wallet exists. If you
only send crypto_gateway: "BITCOIN" or crypto_gateway: "LITECOIN", an active native wallet is
prioritized.
White-label Crypto Checkout
White-label crypto checkout is deprecated for new integrations. Use Native BTC/LTC when you want Shoppex to derive non-custodial receive addresses from your own wallet. Use OxaPay or Cryptomus when you need an external crypto provider for other coins. Historical white-label crypto payments can still be read through the Developer API and can still complete through the normal payment lifecycle. New white-label payment creation may return403 FORBIDDEN with:
Create a Payment
If you create the payment with
gateway: 'PANDABASE', Shoppex also returns checkout_url and session_id.- use
data.checkout_urlif you want the direct Pandabase checkout session URL - keep listening for Shoppex webhooks for the final paid/cancelled state
Server-side completion is also different:
POST /dev/v1/payments/:id/completeconfirms a generic developer payment onlyPOST /dev/v1/orders/:id/fulfillcompletes and fulfills a catalog-backed orderPOST /dev/v1/orders/:id/completeis the same completion pipeline, exposed as an alias for integrations that look for acompleteendpoint
Handle the Webhook
After payment, Shoppex sends a webhook to your server. Use thewebhook_secret returned by POST /dev/v1/payments for a per-payment webhook. Use the endpoint secret from Settings -> Webhooks only for global webhook endpoints.
Dynamic Product Fulfillment
If you use products withtype: "DYNAMIC", there is one more callback contract to implement: dynamic_webhook.
This is separate from normal Shoppex event webhooks and uses the product’s dynamic webhook signing secret, not the secret from Settings -> Webhooks.
The order:paid webhook tells your app that the invoice is paid. The dynamic_webhook is a separate fulfillment callback that asks your server for the delivered token, key, or access data.
Use the dedicated contract docs here:
Invoice vs Payment Link
| Feature | Invoice (API) | Payment Link |
|---|---|---|
| Use case | Custom checkout flows | Quick sharing |
| Customer email | Required | Optional |
| Multiple products | Yes | Single product |
| Custom fields | Yes | Product default |
| Expiration | Configurable | No expiration |
| Tracking | Full invoice data | Basic analytics |
- Use Payment Links for simple, shareable checkouts
- Use Invoices when you need control over the checkout or customer data
Payment Gateways
Configure your payment providers in Settings → Payments.Stripe (Recommended)
Supports: Credit cards, Apple Pay, Google Pay, SEPA, Klarna, and more.Get API Keys
Log in to Stripe Dashboard → Developers → API Keys
PayPal
Create REST App
Go to PayPal Developer → Create App
Cryptocurrency
Two options available:| Option | Setup | Fees |
|---|---|---|
| Shoppex Wallet (BTC/LTC) | Self-custodial wallet, created in-dashboard | Network fees only |
| Cryptomus / Oxapay | API key only | Provider fees |
Testing Payments
Enable Test Mode in Settings before going live.Test Card Numbers
| Card | Number | Result |
|---|---|---|
| Visa | 4242 4242 4242 4242 | Success |
| Mastercard | 5555 5555 5555 4444 | Success |
| Declined | 4000 0000 0000 0002 | Declined |
| 3D Secure | 4000 0025 0000 3155 | Requires auth |
These numbers are Stripe-specific. PayPal and crypto gateways have their own sandbox modes.
Test Checklist
Common Scenarios
Sell a digital product
Sell a digital product
- Create product with File delivery type
- Upload your file
- Share your storefront or payment link
- Customer pays → receives download automatically
Sell software licenses
Sell software licenses
- Create product with Serials delivery type
- Add license keys (one per line)
- Customer pays → receives unique license key
Custom checkout in your app
Custom checkout in your app
- Create payment via API with customer email
- Redirect customer to
data.url - Listen for
order:paidwebhook - Fulfill order in your system
Recurring subscription
Recurring subscription
- Create product with Subscription type
- Set billing interval (monthly, yearly, etc.)
- Customer pays → subscription created
- Renewals happen automatically
Next Steps
Invoices
Deep dive into invoice lifecycle and statuses
Webhooks
Set up real-time notifications
Subscriptions
Set up recurring billing
API Reference
Explore all endpoints