Technical reference for your backend integration.
The SAVI Platform API is RESTful. All requests use HTTPS and return JSON. Authenticate with your platform secret key on every server-side call using Authorization: Bearer sk_test_... or sk_live_...
Integration endpoints (this guide) do not include platformId in the path, your platform is bound to the API key. Dashboard endpoints under /v1/platforms/{platformId}/... require a JWT from platform login and are not used for server integrations.
Two modes exist, test and live, controlled by your API key prefix (sk_test_ vs sk_live_). Objects created in one mode are not visible in the other.
Resource IDs are CUID strings (e.g. cmqqi2r9r0055ql1m18np1wxd), not prefixed identifiers.
Amounts are expressed in halalas unless noted otherwise. 1 SAR = 100 halalas.
Base URL
https://savi-platform-backend-production.up.railway.app/v1
Integration routes vs dashboard routes
Server integrations authenticate with your secret API key (sk_test_ or sk_live_). These routes do not include platformId in the URL, your platform is inferred from the key. Call GET /v1/integration/ping to read your platformId.
Routes under /v1/platforms/{platformId}/... are for the SAVI platform dashboard (JWT login). Do not use those paths from your backend integration code.
HTTPS required
All API calls must use HTTPS. Requests over plain HTTP are rejected. Never send secret keys from browser or mobile client code.
Quick reference
GET/v1/integration/ping
Verify your API key and confirm your platform is active.
POST/v1/merchants
Register a seller when they join your platform.
PUT/v1/merchants/:id/kyc/attestation
Path 1 only, confirm your platform verified this seller.
POST/v1/merchants/:id/bank-account
Store the seller’s IBAN for future payouts.
POST/v1/payments
Create a payment when a customer checks out.