Payment orchestration gateway
One API. Every way to pay.
One REST integration. 40+ payment methods. Smart routing sends every transaction to the provider most likely to approve it — and fails over automatically when one doesn't.
This exact request runs in the API playground — keys auto-provisioned, no signup, no money moved.
curl https://api.finscale.dev/v1/payments \
-H "Authorization: Bearer sk_test_51FinscaleDemo…" \
-H "Idempotency-Key: idem_ord_9f21_0716" \
-H "Content-Type: application/json" \
-d '{
"amount": 4900,
"currency": "EUR",
"payment_method": "ideal",
"reference": "ord_9f21_0716",
"customer": { "email": "anna@example.com" },
"return_url": "https://shop.example.com/checkout/return"
}'
{
"id": "pay_8Q2mX4nT1cVb",
"object": "payment",
"amount": 4900,
"currency": "EUR",
"status": "requires_action",
"payment_method": "ideal",
"reference": "ord_9f21_0716",
"provider": "prov_eu_acq_01",
"next_action": {
"type": "redirect",
"url": "https://pay.finscale.dev/r/8Q2mX4nT"
},
"created_at": "2026-07-16T09:24:31Z",
"livemode": false
}
01 — One integration
One integration, every method
Cards are table stakes. Your customers in Amsterdam pay with iDEAL, in São Paulo with PIX, in Mumbai with UPI. Finscale puts all of them behind the same payment_method field — you never integrate a method twice.
02 — Smart routing
Routing that pays for itself
Behind your one integration sits a pool of payment providers — acquirers and PSPs you never touch directly. Each is an opaque provider id like prov_eu_acq_01.
- Smart routing. Every transaction is scored per provider: cost, historical auth-rate for that method and currency, live health, your rules. The best one wins.
- Automatic failover. A timeout or retriable decline moves the payment to the next-best provider inside the same API call. No merchant code involved.
- Per-merchant rules. Pin a corridor — BRL PIX through
prov_br_psp_01— or cap any provider's share of your traffic.
The response tells you who processed it: "provider": "prov_eu_acq_02". One point of auth-rate on €1,000,000 of monthly volume is €10,000 a month you stop losing.
Attempt 1 on prov_eu_acq_01 times out. Finscale retries on prov_eu_acq_02 — approved. One API call, two attempts, zero merchant code.
03 — Developer experience
Built for developers
The same payment in curl, Node, or Python. Idempotent by design, signed end to end, testable down to the failover path.
curl https://api.finscale.dev/v1/payments \
-H "Authorization: Bearer sk_test_51FinscaleDemo…" \
-H "Idempotency-Key: idem_ord_9f21_0716" \
-H "Content-Type: application/json" \
-d '{
"amount": 4900,
"currency": "EUR",
"payment_method": "ideal",
"reference": "ord_9f21_0716",
"customer": { "email": "anna@example.com" },
"return_url": "https://shop.example.com/checkout/return"
}'
# → 201 · "status": "requires_action" · "provider": "prov_eu_acq_01"
const res = await fetch("https://api.finscale.dev/v1/payments", {
method: "POST",
headers: {
"Authorization": "Bearer sk_test_51FinscaleDemo…",
"Idempotency-Key": "idem_ord_9f21_0716",
"Content-Type": "application/json"
},
body: JSON.stringify({
amount: 4900,
currency: "EUR",
payment_method: "ideal",
reference: "ord_9f21_0716",
customer: { email: "anna@example.com" },
return_url: "https://shop.example.com/checkout/return"
})
});
const payment = await res.json();
// payment.status === "requires_action" → redirect to payment.next_action.url
import requests
res = requests.post(
"https://api.finscale.dev/v1/payments",
headers={
"Authorization": "Bearer sk_test_51FinscaleDemo…",
"Idempotency-Key": "idem_ord_9f21_0716",
},
json={
"amount": 4900,
"currency": "EUR",
"payment_method": "ideal",
"reference": "ord_9f21_0716",
"customer": {"email": "anna@example.com"},
"return_url": "https://shop.example.com/checkout/return",
},
)
payment = res.json()
# payment["status"] == "requires_action" -> redirect to payment["next_action"]["url"]
Idempotency keys
Send Idempotency-Key on every POST. Retries replay the original response for 24 hours — never a double charge.
Signed webhooks
Every event carries Finscale-Signature (HMAC-SHA256). Verify, then trust. Retried with backoff for 72 hours.
Test mode that behaves
Test cards for every outcome. Amount 4999 forces a first-provider decline so you can watch failover live.
One error model
Six error types, machine-readable codes, a request_id on every response. The same envelope from every provider.
04 — Operations
Operations without the spreadsheet
Multiple providers usually means multiple settlement files, multiple dashboards, multiple versions of the truth. Finscale gives you one.
Unified reconciliation
Every provider's settlement files normalized into one ledger. Match payments to payouts without opening a spreadsheet.
Refunds that follow the payment
POST /v1/refunds against the payment id — full or partial. Finscale routes it to whichever provider processed the original.
Settlement reports
Per-currency reports like stl_2026_07_16_eu01, fetchable via API. settlement.report.ready fires the moment they land.
Provider health
Live auth-rates, latency, and error rates per provider id. provider.health.changed fires before your dashboard turns red.
05 — FAQ
Questions, answered
Do I sign contracts with each payment provider?
No. You contract with Finscale once. The providers behind the API are opaque provider ids — we add, tune, and retire them with zero code changes on your side.
How does smart routing choose a provider?
Per transaction: cost, historical auth-rate for that method, currency, and region, live provider health, and your routing rules. The winner is returned on the payment as provider.
What happens on a decline or timeout?
Timeouts and retriable declines fail over to the next-best provider inside the same API call. Try it in test mode: amount 4999 forces a first-provider decline.
Which payment methods can I offer?
Cards plus 40+ methods — iDEAL, PIX, UPI, BLIK, Klarna, OXXO, M-Pesa, Apple Pay, PayPal, Alipay, USDC and more. One integration covers the full catalog.
How do refunds work if the provider changed?
Refund the payment, not the provider: POST /v1/refunds with "payment": "pay_8Q2mX4nT1cVb". Finscale routes the refund to the provider that processed the original.
How does Finscale handle PCI DSS?
Finscale is built to PCI DSS Level 1 standards. With hosted checkout, card data never touches your servers — which keeps your own compliance scope as small as it gets.
06 — About
Why Finscale exists
Accepting payments in more than one market still means stitching together several provider integrations — each with its own API, its own settlement file, its own failure modes. Teams spend quarters on plumbing their customers never see, and every new market starts the project again.
Finscale is the layer we kept rebuilding, built once and done properly: one API in front of many providers, with routing, failover, reconciliation, and reporting handled centrally. Adding a market becomes a parameter, not a project. The gateway is the product — there is nothing else on the roadmap.
Three API calls to your first charge.
Create a payment, redirect your customer, listen for the webhook. Test mode is free and sk_test keys never move real money.