DEVELOPERS
Ship payments in days, not quarters.
One REST API for Pay by Bank, cards and payouts. Hosted checkout or your own UI. Signed requests and callbacks, a sandbox, and no card data on your servers.
sandbox
POST /v2/payment/banks/{payment_method}/sale
{ "general": { "project_id": 42, "payment_id": "INV-2291", "signature": "<HMAC-SHA-512, base64>" }, "customer": { "id": "cust_17", "ip_address": "203.0.113.7" }, "payment": { "amount": 4200, "currency": "EUR" }, "account": { "bank_id": 54981 }}200 OK142 ms
{ "project_id": 42, "payment": { "id": "INV-2291", "status": "success" }, "operation": { "status": "success", "code": "0" }, "signature": "…"}- Gateway uptime
- 99.99%
- Median auth
- 142 ms
- Processing and storage
- UK + EU
Quickstart
Live in the sandbox in an afternoon.
Request sandbox keys
Tell us what you are building and we send keys the same day.
Create a payment
Send a signed request and send the customer on to their bank.
Handle the callback
Check its signature, read the status, reconcile, and you are done.
curl -X POST https://api.sola.live/v2/payment/banks/{payment_method}/sale \ -H "Content-Type: application/json" \ -d '{ "general": { "project_id": 42, "payment_id": "order_10482", "signature": "<HMAC-SHA-512, base64>" }, "customer": { "id": "cust_17", "ip_address": "203.0.113.7" }, "payment": { "amount": 4900, "currency": "EUR" }, "account": { "bank_id": 54981 }, "return_url": { "success": "https://shop.com/thanks", "decline": "https://shop.com/declined" } }'200 OK142 ms
{ "project_id": 42, "payment": { "id": "order_10482", "status": "success" }, "operation": { "status": "success", "code": "0" }, "signature": "…"}Cards use the same shape on /v2/payment/card/sale, with a "card" object instead of "account".
SANDBOX
keys same day
Test data
- Test project
- Test cards and a test bank flow come with your sandbox keys.
Same requests and callbacks as production — a test project and its secret key are the difference.
Two ways in
Hosted checkout
Fastest route live. We host the payment page, so PCI scope stays with us and you redirect and listen for the callback.
- Fastest to ship
- PCI stays with us
- Method picker included
API + your own UI
Full control over the experience. Hosted fields keep card data off your servers either way.
- Your design end to end
- Hosted fields for cards
- Same API, same callbacks
CALLBACKS & RECONCILIATION
Every status change, signed
Each callback is signed and retried until you answer 200. Check the signature, then act on the status. To check a payment yourself, ask the API for its status.
One settlement file across both rails.
CALLBACK STATUSES
processing- Payment in progress
success- Funds confirmed
decline- Payment did not go through
Security
Neither rail asks you to hold anything you should not be holding.
DATA HANDLING
card_dataNever touches you in the clear
Hosted fields and tokens do the work. Your servers hold a token, never a card number.
bank_credentialsNever exposed, to you or to us
Authentication happens entirely between the customer and their own bank.
data_residencyStays in the UK and EU
Processing and storage stay in the region you operate in.
- 3DS2 and SCA
- Tokenised card storage
- Signed requests and callbacks
- UK and EU residency
API ACCESS
What you get on access
One reference, kept current with the API, and libraries for the parts that are easy to get wrong.
Full API docs
Every endpoint, with request and callback examples.
SDKs
Go, Java, JavaScript, PHP and Python libraries that sign your requests and parse callbacks.
Sandbox keys, same day.
Tell us what you are building and we send keys, the API docs and the SDKs.