Olympus AscendOur official launch event, 12 November 202612 Nov 2026Learn more
Olympus Pay

Collect on a schedule, with a mandate the customer controls.

A mandate says who may debit an account, for how much, and how often. Your business creates the request; the customer authorises it in Olympus Web Banking, or a bank mandate is registered with signed evidence. Every debit after that runs through Olympus’s own authorisation, rules and retry engines before it ever touches a rail.

DescriptionMethodStatusAmount
Customer paymentPayment linkSettled+4,250.00
Payroll - MarchBulk paymentApproved−38,400.00
Stationery supplierBank transferSent−1,180.50
Invoice 1042InvoicePending+12,600.00
Office rentScheduledSent−9,500.00

Illustrative interface.

One mandate. Many debits.

Mandate

Who may debit an account, the most it may take per debit, and how often. The customer authorises it, or it never runs.

Collection

Your intent to collect a specific amount, one-off or on a recurring schedule. Retries create a new attempt, never a duplicate charge.

Rules

Limits and approval thresholds at the platform, business, customer or account level, so an out-of-pattern debit is held, not just sent.

Nothing is debited on trust.

Every debit is checked against the mandate’s own limits, the rules that apply to it, the account’s available balance and its recent activity, and is either sent, held for a second approval, or declined — with a reason recorded either way. A revoked or expired mandate can never be used again.

  • Per-debit, daily and monthly limits, on the mandate or the account
  • Approval thresholds, with maker-checker review
  • A full, auditable reason for every decision
StatusMeaning
authorizedThe customer said yes, or your business registered the mandate. Ready to send.
submittedSent to the payment rail.
successfulCollected. Funds are not yet available to withdraw.
settledCollected and settled. Now part of your available balance.
failedDid not go through. A retryable reason is retried automatically; others are not.
returnedA collected debit was returned by the customer’s bank.

Subscriptions, rent, fees — or a thousand at once.

Set a frequency and Olympus creates each collection on schedule, retries the ones that fail in a way that can succeed, and stops after too many failures in a row instead of trying forever. Submit a batch to collect from many customers in one call; one failure in the batch never corrupts the rest.

  • Daily to annual schedules, paused or resumed without losing the mandate
  • Configurable retry policy, by failure reason
  • Bulk collections with per-item status
# Create a payment link (sandbox key)
curl -X POST https://merchant.olympuspay.co/api/v1/payment-links \
  -H "Authorization: Bearer olp_test_…" \
  -H "Idempotency-Key: 7f3c1a52-order-1042" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Invoice 1042",
    "amount": 126.00,
    "currency": "BWP",
    "returnUrl": "https://example.com/thanks"
  }'
const res = await fetch("https://merchant.olympuspay.co/api/v1/payment-links", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.OLYMPUS_KEY}`,
    "Idempotency-Key": "7f3c1a52-order-1042",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    title: "Invoice 1042",
    amount: 126.00,
    currency: "BWP",
  }),
});
const link = await res.json();
// 200 OK - the payment link object (fields shown are illustrative)
{
  "id": "…",
  "title": "Invoice 1042",
  "amount": 126,
  "currency": "BWP",
  "url": "https://…"
}

Provider status is not financial truth.

A debit the rail has accepted, or even cleared, is not yet money your business can withdraw — that only happens once it settles and Olympus has matched it to a real settlement. Every debit keeps an internal reference through mandate, clearing reference and settlement, so nothing is ever assumed.

Verify a webhook
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);
}

Customers see every debit order in Web Banking.

Who can debit me

Every active, pending and revoked mandate against every account, in one place.

Before it happens

Upcoming debits, with the amount and the business collecting.

Their own limits

A customer can set a lower cap than the mandate allows, or require their own approval on every debit.

What is available.

CapabilityWhat it doesStatus
Mandates, authorisation and rulesCreate, authorise, suspend and revoke; per-debit, daily and monthly limits.Available
One-off and recurring collectionsScheduled collections with configurable retry.Available
SandboxSimulate insufficient funds, a revoked mandate, a returned debit and more, with no real clearing connectivity touched.Available
Bulk collection batches over the APISubmit and track a batch collection by API.In development
Direct Botswana clearing connectivityCurrently reaches customers through Olympus’s own accounts; direct clearing connectivity is a configuration change once Olympus holds the necessary permissions.Planned

Set up your first mandate.

Test the full lifecycle in the sandbox before a customer ever authorises anything real.