Brazil · India
Collect in reais and rupees.
Settle in dollars.
Your customers pay the way they already pay — a PIX QR code in Brazil, a UPI intent in India — from their own bank app, in seconds, at three in the morning on a Sunday. You get one API, one ledger and one reconciliation.
- Country
- Brazil · BR
- Rail
- PIX
- Currency
- BRL · 2 dp
- Collect
- Live
- Pay out
- Live
- Opening hours
- 24 / 7 / 365
- Confirmed by
- End-to-end ID
- Settled in
- USDT
What is live
Two countries, done properly, rather than forty on a map.
Every corridor below is a rail we clear on, not a logo we have a meeting with. Where something does not exist, it says so.
| Country | Rail | Currency | Collect | Pay out | Method code |
|---|---|---|---|---|---|
| BR Brazil | PIX | BRL | Live | Live | pix |
| IN India | UPI | INR | Live | Not offered | upi |
India is collection only. We would rather refuse a payout than accept one
and discover at settlement that we cannot make it — so a payout
request for IN is rejected when you send it, not hours later.
How a payment moves
Five steps, and you are told the truth at each one.
-
You ask for a payment
One signed
POST /v1/paymentscarrying your own reference, the country, the rail and an amount in integer minor units. Send the same reference twice and you get the same payment back, not a second one. -
We route it and hand back instructions
A PIX copy-and-paste code for Brazil, a UPI intent for India. Show it, or send your customer to the hosted page — whichever suits your checkout.
-
Your customer pays from their own bank app
No card, no redirect to a form they distrust, no 3-D Secure step that loses a fifth of them. They approve it where they already keep their money.
-
The rail confirms, with a number you can take to a bank
An end-to-end ID in Brazil, a UTR in India. We store it against the transaction and hand it back on every read, because it is what settles an argument with a customer who says they paid.
-
We post it and tell you
A signed webhook, retried until you acknowledge it, and a double-entry journal written the moment the money moved. The webhook is a convenience; the ledger is the record.
Integrate
One request out, one webhook back.
The whole surface is seven endpoints. Here is the only one most integrations ever call, and the message it eventually produces.
POST /v1/payments X-PSP-Key-Id: key_live_7f2c… X-PSP-Timestamp: 1758657600 X-PSP-Signature: 2f9a… ← HMAC of the raw body { "reference": "order-84412", "country": "BR", "method": "pix", "currency": "BRL", "amount_minor": 125000, ← R$ 1,250.00 "customer_ref": "cust_9931" }
{
"id": "TXN_01JBQ7F3K2WZ",
"reference": "order-84412",
"direction": "payin",
"status": "paid",
"country": "BR",
"method": "pix",
"currency": "BRL",
"amount_minor": 125000,
"utr": "E1803625820250923…",
"created_at": "2026-09-23T18:04:11Z"
}
Amounts are integers. Always.
We never accept a decimal amount. "10.00" invites a float somewhere upstream, and by the time it reaches us the rounding has already happened out of our sight. Type an amount and see what you would actually send.
Underneath
A gateway you can audit, not just call.
Double-entry, append-only
Every movement is a journal whose entries sum to zero in each currency, enforced by the database rather than by good intentions. Nothing is ever edited; a correction is its own entry.
Signed in both directions
Your requests are signed and timestamped, ours are signed and retried. A replayed request is refused, not quietly executed a second time.
Idempotent by design
Your reference is the idempotency key. A lost response, a timeout, a retry from a queue you did not write — none of them create a second payment.
Reconciliation you can see
Positions per currency, per rail, in the console, against the settlement file. When a number disagrees, you find out from us first.
More than one provider
Each corridor can run on more than one underlying provider. If one degrades, the next takes the traffic — and the ledger reads the same either way.
An audit log that resists you
Operator actions are hash-chained, so a tampered history does not verify. Two-factor is mandatory for every operator, not an option in a settings page.
Tell us what you are collecting.
Corridor, volume, currency. We will tell you plainly whether we are the right fit — including when we are not.