Developers
Take payments, hold funds, read balances, over REST, against a ledger we built ourselves.
curl https://api.payer.app/checkout/sessions \
-H "Authorization: Bearer sk_live_..." \
-H "Idempotency-Key: order_10482" \
-H "Content-Type: application/json" \
-d '{
"amount": 24900,
"title": "Order #10482",
"reference": "order_10482"
}'{
"id": "9b1c8f2e-3d4a-4f11-a0c2-...",
"reference": "order_10482",
"url": "<hosted checkout link>"
}Everything we have, and everything we don't.
Underneath it is a payment service provider licensed by the Maldives Monetary Authority under the National Payment System Act, with customer funds in a segregated account. The compliance obligations are ours.
Four decisions that will affect how you write the integration.
One scope catalogue, several kinds of caller. A scope means the same thing whoever holds the credential, and every grant and revocation lands in the same audit trail.
| Credential | Who holds it | What it can do | Status |
|---|---|---|---|
| pk_ | Merchant, client-side | Create-only. Safe to ship in a browser or an app bundle. | Live |
| sk_ | Merchant, server-side | Full merchant scope, bounded by the scopes you grant the key. | Live |
| pat_ | An individual, on their own account | Read your own balances and transactions. Moving money needs a step-up on your phone. | Live |
| oat_ | A third-party app, on behalf of someone | Whatever the user granted on the consent screen, and nothing else. | Live |
Mandates add no credential of their own. Your customer's approval is the authorization, and you charge with the same secret key, so a mandate is a permission on their side rather than a token on yours. See Authentication for the scopes each one carries.
A payments API moves money when you tell it to. We're building toward money you can attach conditions to: funds that release when something becomes true, authority that expires on its own, limits the ledger enforces instead of your application code.
Holds are the part of this that already works. Money sits under conditional control and settles or releases later, as a real ledger state rather than a flag your code has to remember to check. We can offer that because the ledger is ours: conditions on money have to be enforced where the money is, not in a layer above someone else's core.
Mandates are the second piece, and they are live. Authority scoped to a purpose, capped per charge and per month, expiring on its own, revocable in one tap by the person who granted it. The caps are enforced where the money is rather than in the code doing the charging, and every charge records which mandate it happened under. An integration that misbehaves burns its own authority, not the account.
The piece still ahead is pointing that same primitive at software spending on a person's behalf: the agent proposes a payment, the person confirms the exact amount and payee on their phone, and the mandate bounds everything it can do in between. That part is the direction, not a date. If it's why you're here, say so below.
Tell us what you're building. We onboard in small batches, so you'll get answers from someone who worked on the endpoint.