Every request requires a secret API key. Pass it as a Bearer token in the Authorization header. Keep keys server-side — never expose them in browser or mobile clients.
Authorization: Bearer sk_live_••••••••••••https://api.shopwooo.com/v1
Generate a checkout URL for a specific amount. Depending on payment_method, the customer is redirected either to a provider checkout or to a Shopwooo-hosted chooser.
https://api.shopwooo.com/v1/payment-links
| Parameter | Type | Required | Description |
|---|---|---|---|
| amount | number | Yes | Charge amount in major units (e.g. 149.00). |
| currency | string | Yes | Fiat quote currency (ISO 4217), e.g. USD, EUR, GBP. For crypto, this is the priced amount; the on-chain token is crypto.currency. |
| payment_method | string | Yes | auto | moonpay | qoay | stripe | paypal | binance_pay | crypto | customer_decide |
| crypto | object | If crypto | Required when payment_method is crypto. Nested chain + token currency (see Crypto payments). |
| crypto.chain | string | If crypto | Network: ethereum | polygon | tron | bsc | solana | arbitrum |
| crypto.currency | string | If crypto | On-chain token: usdt | usdc | eth | bnb | trx |
| order_id | string | No | Your internal order or invoice reference. |
| success_url | string | No | Where to send the customer after a successful payment. |
| cancel_url | string | No | Where to send the customer if they cancel checkout. |
| metadata | object | No | Arbitrary key/value pairs returned in status & webhooks. |
curl -X POST https://api.shopwooo.com/v1/payment-links \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"amount": 149.00,
"currency": "USD",
"payment_method": "moonpay",
"order_id": "ord_9f2a1c",
"success_url": "https://yoursite.com/paid",
"cancel_url": "https://yoursite.com/cancelled",
"metadata": {
"customer_email": "buyer@example.com"
}
}'When payment_method is a specific provider (or resolved via auto), url is the provider checkout. Redirect the customer there immediately.
{
"id": "plink_7c3e91ab",
"status": "pending",
"payment_method": "moonpay",
"amount": 149.00,
"currency": "USD",
"url": "https://pay.moonpay.com/...?session=...",
"hosted_page_url": null,
"expires_at": "2026-10-26T18:00:00Z",
"created_at": "2026-10-26T16:00:00Z"
}Pass a provider name to skip choice UI, use crypto with chain + token, use auto to let Shopwooo pick, or customer_decide to show a hosted selector.
Shopwooo selects the best available provider for the region and amount.
Redirects the customer straight to MoonPay checkout.
Redirects the customer straight to Qoay checkout.
Redirects the customer straight to Stripe Checkout.
Redirects the customer straight to PayPal.
Redirects the customer straight to Binance Pay.
On-chain payment. Set crypto.chain (ethereum, polygon, tron, …) and crypto.currency (usdt, usdc, …).
Opens a Shopwooo-hosted payment page. The customer picks a method; a provider link is generated and they are redirected.
Set payment_method to crypto, then pass the network and token under crypto: chain first, then currency (token).
payment_method: "crypto" — selects on-chain settlement as the main method.
crypto.chain — network to receive funds on (ethereum, polygon, tron, …).
crypto.currency — token on that chain (usdt, usdc, eth, …).
Not every token is available on every chain. For example, usdt / usdc work on ethereum, polygon, and tron; native coins like eth only apply to their home networks. Invalid pairs return 400 with a validation error.
curl -X POST https://api.shopwooo.com/v1/payment-links \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"amount": 149.00,
"currency": "USD",
"payment_method": "crypto",
"crypto": {
"chain": "ethereum",
"currency": "usdt"
},
"order_id": "ord_9f2a1c",
"success_url": "https://yoursite.com/paid",
"cancel_url": "https://yoursite.com/cancelled"
}'The response echoes crypto.chain and crypto.currency. Redirect the customer to url (or show deposit_address if you build a custom UI).
{
"id": "plink_c4d5e6f7",
"status": "pending",
"payment_method": "crypto",
"amount": 149.00,
"currency": "USD",
"crypto": {
"chain": "ethereum",
"currency": "usdt"
},
"url": "https://pay.shopwooo.com/crypto/plink_c4d5e6f7",
"deposit_address": "0xAbC…dEf1",
"hosted_page_url": null,
"expires_at": "2026-10-26T18:00:00Z",
"created_at": "2026-10-26T16:00:00Z"
}With payment_method: "customer_decide", the first URL is a Shopwooo-hosted page. After the customer picks a method, Shopwooo generates a fresh provider link and redirects them.
API returns a Shopwooo hosted_page_url. Send your customer there.
They land on pay.shopwooo.com and select MoonPay, Qoay, crypto (chain + token), Stripe, and more.
A new checkout URL is generated for the chosen platform and the browser redirects.
{
"id": "plink_a1b2c3d4",
"status": "awaiting_method",
"payment_method": "customer_decide",
"amount": 149.00,
"currency": "USD",
"url": "https://pay.shopwooo.com/p/plink_a1b2c3d4",
"hosted_page_url": "https://pay.shopwooo.com/p/plink_a1b2c3d4",
"expires_at": "2026-10-26T18:00:00Z",
"created_at": "2026-10-26T16:00:00Z"
}While the customer is on the hosted page, status is awaiting_method. After they pick a provider it moves to pending, then paid / failed / expired as usual.
Poll or look up a link by ID. Prefer webhooks for real-time updates; use this endpoint for reconciliation and dashboards.
https://api.shopwooo.com/v1/payment-links/{id}
| Parameter | Type | Required | Description |
|---|---|---|---|
| id | string | Yes | Payment link ID returned from create (path parameter). |
curl -X GET https://api.shopwooo.com/v1/payment-links/plink_7c3e91ab \
-H "Authorization: Bearer YOUR_API_KEY"{
"id": "plink_7c3e91ab",
"status": "paid",
"payment_method": "moonpay",
"provider_reference": "mp_txn_88421",
"amount": 149.00,
"currency": "USD",
"paid_at": "2026-10-26T16:12:44Z",
"created_at": "2026-10-26T16:00:00Z"
}Register a HTTPS endpoint in your Shopwooo dashboard. We POST signed JSON when a payment link changes state so you can fulfill orders without polling.
| Parameter | Type | Required | Description |
|---|---|---|---|
| payment_link.created | event | — | Fired when a payment link is created. |
| payment_link.method_selected | event | — | Fired when customer_decide resolves to a specific provider. |
| payment_link.paid | event | — | Payment confirmed by the provider. |
| payment_link.failed | event | — | Payment failed or was declined. |
| payment_link.expired | event | — | Link expired before payment completed. |
{
"id": "evt_9d2f88",
"type": "payment_link.paid",
"created_at": "2026-10-26T16:12:45Z",
"data": {
"id": "plink_7c3e91ab",
"status": "paid",
"payment_method": "moonpay",
"order_id": "ord_9f2a1c",
"amount": 149.00,
"currency": "USD",
"provider_reference": "mp_txn_88421"
}
}Each webhook includes an X-Shopwooo-Signature header (HMAC-SHA256 of the raw body with your webhook secret). Reject requests that fail verification, and return 2xx quickly — we retry failed deliveries with exponential backoff.
Create an API key from your Shopwooo dashboard, then start generating payment links in minutes.
Contact for API access