5-minute integration
POST /v1/checkout/sessions with amount + return URLs. No frontend JS to maintain, no provider logic to code.
Plug-and-play payment page
No need to build your own form. Create a checkout session via the API, redirect your user to `saalapay.com/pay/cs_<id>`, and we handle UX, mobile, expiration and webhooks.
POST /v1/checkout/sessions with amount + return URLs. No frontend JS to maintain, no provider logic to code.
Native responsive page, automatic dark mode via prefers-color-scheme, WCAG AA visible focus, live aria-live countdown.
Default 30 min, configurable up to 24h. Sweeper cron moves expired sessions to EXPIRED + dispatches checkout.session.expired.
checkout.session.created → completed (with payment_id) or expired/cancelled. The merchant tracks the lifecycle without polling.
curl https://api.saalapay.com/v1/checkout/sessions \
-H "X-SP-Signature: $HMAC_SIGNATURE" \
-H "Content-Type: application/json" \
-d '{
"amount": 25000,
"currency": "XOF",
"success_url": "https://shop.example/order/ok",
"cancel_url": "https://shop.example/cart",
"expires_in_minutes": 30
}'
# Réponse → redirige l'user vers data.hosted_url
{
"data": {
"id": "cs_018f2c...",
"hosted_url": "https://saalapay.com/pay/cs_018f2c...",
"status": "pending",
"expires_at": "2026-05-04T22:55:00+00:00"
}
}
The hosted page runs in sandbox without any provider configuration.