| Key | Purpose | Sent where | Secret? |
|---|---|---|---|
| Public key | Identifies your merchant on the public Checkout endpoint. Safe to embed in browser/mobile code. | Inside the URL path: POST /v1/orders/checkout/{publicKey} | No |
| Private key | Authenticates server-to-server API calls on behalf of your merchant. | x-api-key header on every authenticated request | Yes — never expose |
Get your keys
Sign in
Sign in to the Points Business dashboard.
Copy the values
Click to copy each key. Store the Private key in your server-side secrets manager (AWS Secrets Manager, HashiCorp Vault,
.env — wherever you keep production secrets).Using the Private key (authenticated endpoints)
Every endpoint except the public Checkout endpoint requires thex-api-key header:
400.
Example — earning order
Using the Public key (Checkout endpoint)
The redirect-to-checkout flow uses the Public key embedded in the URL path. Nox-api-key header is needed because this endpoint is designed to be called from the customer’s browser:
checkout_url that you redirect the customer to. See Checkout flow for the full sequence.
The Public key does not grant read access to orders or any other merchant data. It only authorises creating checkout sessions for your merchant.
Rotating keys
Rotate immediately if you suspect leakage (committed to git, shared in chat, old employee, etc.):Generate a new Private key in the dashboard
Go to Settings → API Keys → Regenerate. The new key is returned once; copy it immediately.
Deploy the new key to all production services
Update your secrets store and redeploy. For zero-downtime rotation, dual-write to both keys briefly if your deployment is staggered.
Environments
Production and sandbox environments use separate keys. Keys from one environment never authenticate against the other.| Environment | Dashboard | API base URL |
|---|---|---|
| Production | business.papp.sa | https://api.papp.sa/api/v1 |
| Sandbox | Provided on request | Provided with sandbox credentials |
Best practices
Store the Private key only in server-side secrets
Store the Private key only in server-side secrets
Never put it in client-side JavaScript, mobile apps, public repositories, CI logs, or customer-facing config files. Only your backend should ever see it.
Use environment variables or a secrets manager
Use environment variables or a secrets manager
Keep the key out of source control. Load it at runtime from environment variables (
POINTS_API_KEY) or a managed secret store (AWS Secrets Manager, GCP Secret Manager, Vault).Scope access per service
Scope access per service
If multiple internal services call Points, consider provisioning separate keys per service so you can rotate individually and audit traffic by key.
Rotate on any suspicion of leakage
Rotate on any suspicion of leakage
Rotation is cheap and the old key is revoked instantly. When in doubt, rotate.
Monitor 400 rates
Monitor 400 rates
A sudden spike in
Invalid or inactive API key responses can signal a stale key in a newly deployed service, or a leaked key being probed.Next steps
Security
TLS, IP allow-listing, webhook secrets, and related hardening.
Quickstart
Ready with a key? Make your first call.

