Get paid. Pay out.
Collect through links, QR codes and online checkout, and against invoices. Pay suppliers, staff and merchants. Every route is recorded on the same platform and reports status the same way.
Enters card details at checkout
Authorises the charge
Records payment, fee and net amount
Net proceeds credit your balance
Creates a fixed or open-amount QR
Scans and pays from their account or card
Confirms and is recorded on the platform
Proceeds credit your merchant balance
Creates a link, optionally with a fixed amount
Opens the link and pays at hosted checkout
Confirms, sends payment.succeeded to your webhook
Proceeds settle to your chosen destination
Shares account details or a reference
Sends from their own bank
Matches the inbound transfer to the expected payment
Funds available in the account
Creates and emails an invoice
Pays through a checkout link on the invoice
Marks the invoice paid and reconciles
Proceeds settle as normal
Choose a method to see the path a payment takes.
Ways to get paid.
Each one confirms to the same webhook and settles the same way.
Payment links
A hosted checkout at a URL. Fixed or open amount, optional expiry, return URL and idempotency key.
QR codes
Fixed-amount or open-amount, single-use or reusable, for counters, tables and printed invoices.
Invoices
Send an invoice with a pay link. Payment marks it paid and reconciles it.
Subscriptions
Plans with a customer checkout and recurring charges, including failed-renewal events.
Online checkout
Card payments at a hosted checkout, for merchants where a card processor is enabled.
Bank transfer
Receive by reference and match to an expected payment.
Track every payment.
A payment moves through named states, and each change can notify your server. Refund in full or in part; large refunds and payouts can wait for a second reviewer before they run.
- Seven payment states, published in the API reference
- Full and partial refunds
- Approval threshold for large refunds (live keys)
- Signed webhooks for success, failure and refunds
| Payment status | Meaning |
|---|---|
| pending | Created, checkout not yet completed. |
| processing | Submitted to the processor, awaiting confirmation. |
| succeeded | Confirmed. Full amount collected. |
| partially_refunded | Succeeded; part has since been refunded. |
| refunded | Succeeded; fully refunded. |
| failed | Declined or did not complete. No money collected. |
| cancelled | Voided while still pending. |
Pay out.
Request a payout to your Olympus account or an external bank. Pay batches of suppliers or staff in one submission. Pay another Olympus customer directly by email. Payouts on live keys only, so a test key cannot move real funds.
- Payouts to an Olympus account or an external bank
- Bulk payment batches
- Mobile-money and bank-transfer sends where supported
- Cancel while still pending
| Description | Method | Status | Amount |
|---|---|---|---|
| Customer payment | Payment link | Settled | +4,250.00 |
| Payroll - March | Bulk payment | Approved | −38,400.00 |
| Stationery supplier | Bank transfer | Sent | −1,180.50 |
| Invoice 1042 | Invoice | Pending | +12,600.00 |
| Office rent | Scheduled | Sent | −9,500.00 |
Illustrative interface.
Cross-border payments.
Get a foreign-exchange quote before you commit, then send an international payment. Which currencies and destinations are available depends on the corridor and your account, so ask us for the current list rather than assume one.
- FX quotes before sending
- International transfer from web banking
- USD, EUR and GBP account details where provisioned
Rate and fee shown before you confirm.
Recorded with the quote it used.
Poll or receive events until it completes.
Country-specific routing.
Which payment methods and settlement routes a merchant gets is read from country capability data. Opening a new country is a configuration change. Settlement can go to an Olympus account, or to an external bank through a split-payment subaccount.
function verify(rawBody, headers, secret) {
const ts = headers["x-olympus-timestamp"];
const sig = headers["x-olympus-signature"];
// HMAC-SHA256 over "{timestamp}.{raw body}", hex encoded
const expected = hmacSha256Hex(secret, `${ts}.${rawBody}`);
// Also reject old timestamps to stop replays
return constantTimeEqual(sig, expected);
}What is available.
Start taking payments.
Make your first call in a sandbox, or talk to us about your payment flow.