Quickstart
One server-to-server REST API. Authenticate, send a charge, and verify the signed webhook - the same flow in sandbox and live.
Authentication
Every request is authenticated with a secret API key sent in the x-api-key header. Keys are environment-scoped - a ps_test_... key hits sandbox, a ps_live_... key hits live. Create and reveal keys once from your dashboard under API Keys.
# every sandbox request carries your key Authorization is via header: x-api-key: ps_test_example_key
Your first charge
Post a single JSON request to the charge endpoint. FlowAcq screens it for fraud, applies the configured live provider path, and returns a normalized result synchronously. Health and cost routing expand as approved providers come online.
Amounts are in the currency's minor units (e.g. 4200 = $42.00). The response returns a transaction id, status, and the provider that handled it.
POST /v1/orchestration/charge
Content-Type: application/json
x-api-key: ps_test_example_key
Idempotency-Key: charge_8f2c1a90
{
"amount": 4200,
"currency": "USD",
"paymentMethod": { "token": "tok_visa" },
"metadata": { "orderId": "A-10294" }
}Idempotency
Send an Idempotency-Key header on any state-changing request. Retrying with the same key returns the original result instead of charging twice - safe to retry on timeouts and network blips.
Verifying webhooks
Every event is delivered with an x-paysys-signature header - an HMAC-SHA256 of the raw body, keyed with your endpoint's signing secret. Compute the same HMAC and compare in constant time before trusting the payload.
Deliveries are logged with payload, response, and a one-click replay in the dashboard, so you can re-drive any event while you build.
const expected = crypto
.createHmac("sha256", endpointSecret)
.update(rawBody) // the exact bytes received
.digest("hex");
const ok = crypto.timingSafeEqual(
Buffer.from(expected),
Buffer.from(req.headers["x-paysys-signature"])
);Sandbox vs live
Sandbox mirrors live exactly - same endpoints, same payloads - using your ps_test_... key, with no money moved. Switch to a ps_live_... key once your business is approved through KYB.
Need something specific beyond the generated reference? Talk to us.
Generated reference
API reference from OpenAPI
This reference renders from the API's existing /openapi.json export when it is available to the web app. Protected production exports may require opening the API-hosted Swagger UI directly with operator credentials.
OpenAPI export
Reference unavailable in this environment
Set NEXT_PUBLIC_API_URL to the API host and ensure /openapi.json is reachable for this environment. The quickstart above remains valid while the generated reference is unavailable.
Raw export: /openapi.json