Welcome to spuke
Take card, wallet, bank and BNPL payments with one API — no PSP account required.
Welcome to spuke
spuke is a payments platform. You create a merchant account, we handle the PSP relationships (cards, wallets, SEPA, Klarna, iDEAL, and more), and you get one REST API to charge customers, run subscriptions, issue refunds and receive payouts to your bank.
This section gets you from zero to your first live payment.
What you can do with the API
| Capability | Endpoint | Docs |
|---|---|---|
| One-off payment | POST /v1/checkout/sessions |
Checkout Sessions |
| Recurring billing | POST /v1/subscriptions |
Subscriptions |
| Invoicing | POST /v1/invoices |
Invoices |
| Catalog | POST /v1/products · POST /v1/prices |
Products |
| Refunds | POST /v1/refunds |
Refunds |
| Realtime updates | Webhooks | How webhooks work |
Everything is JSON over HTTPS. Base URL: https://api.spuke.com/v1.
Quickstart (5 minutes)
1. Onboard your merchant account. Sign in to the dashboard, complete the 15-step onboarding, and wait for approval. You must be active before live keys work.
2. Grab an API key. Dashboard → Developers → API keys. You'll get two:
sk_test_…— sandbox, no real money, no payout.sk_live_…— real money.
Treat these like passwords. See API security best practices.
3. Make your first charge.
curl -X POST https://api.spuke.com/v1/checkout/sessions \
-H "Authorization: Bearer sk_test_…" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: order_0001" \
-d '{
"amount": 2500,
"currency": "eur",
"customer_name": "Jane Doe",
"customer_email": "jane@example.com",
"success_url": "https://example.com/thanks",
"cancel_url": "https://example.com/cart"
}'
Redirect the buyer to the returned checkout_url. Use test card 4242 4242 4242 4242 with any future expiry and any CVC.
4. Receive the webhook. Add an endpoint at Dashboard → Developers → Webhooks and listen for checkout.session.completed. Always verify the signature — instructions here.
Core concepts
- Merchant account. Your business on spuke. Owns your keys, products, transactions, payouts.
- Session / Subscription / Invoice. Three ways to collect money. Pick by use case.
client_secret. Short-lived token used by the browser to confirm a payment. Never trust it as proof of payment — details.- Fees. Per-plan, per-method, calculated in EUR and deducted per transaction. See Fees.
- Payouts. Automatic, on your configured schedule (daily/weekly), to your verified bank account.
Environments
| Mode | Keys | Money | Payouts |
|---|---|---|---|
| Test | sk_test_… / pk_test_… |
No | No |
| Live | sk_live_… / pk_live_… |
Yes | Yes |
Both modes share the same base URL and endpoints. The key alone decides which environment you hit.
Idempotency, errors, rate limits
- Send
Idempotency-Key: <your-key>on every mutating request. Safe retries, no duplicate charges. - Errors follow a stable shape:
{ "error": { "type": "…", "message": "…", "param": "…" } }. See Error reference. - Default limits: 60 req/min per key for reads, 20 req/min for writes.
429 rate_limitedincludes aRetry-Afterheader.
Where to next
- API keys & authentication
- Checkout Sessions — the fastest way to accept a payment
- How webhooks work
- Hosted Checkout — no backend required