Take payment the way Fiji pays. Know you've been paid.
One checkout for your website, your chats, or your stall. M-PAiSA and MyCash today, more to come. Every payment confirmed by the network, not a screenshot.
Email and name only · no card · no documents until you go live
- Have a site or app? One API call
- Selling in chats or at a stall? A link or QR code, no registration needed
- Test mode in a minute
- No sales call
- Pricing published
POST /v1/checkout-sessionsPick a stage below · Illustrative
Connects to
In plain words
Taking M-PAiSA and MyCash online usually means two separate integrations, with Vodafone and with Digicel. Transxact is one: one checkout page for both wallets, and for each way to pay we add after them.
You ask for a payment
From your website or app, or with a link you share. You say how much and what it's for.
Your customer pays the way they already do
With M-PAiSA or MyCash today, confirmed on their own phone and by the network, so there's no screenshot to check. They never need a Transxact account.
The money comes to you
To your bank, or to your own wallet if you sell on your own, every Monday unless you pick another day. The fee is already taken out. Real payments start once we've checked your ID.
Your developer adds it once. After that, every payment shows up on your dashboard.
Send this to your developer
For developers: the request, field by field
That request returns a hostedUrl: the page your customer pays on. The stage you pick lights its fields; tap, hover or focus a field to trace it on its own.
POST /v1/checkout-sessions
curl https://api.transxact.io/v1/checkout-sessions \ -X POST \ -H "Authorization: Bearer sk_test_..." \ -H "Idempotency-Key: a1b2c3d4-order-9912" \ -H "Content-Type: application/json" \ -d '{ "amount": 5000, "currency": "FJD" }'
POST /v1/checkout-sessions
import { TransxactApiClient } from "@transxact/node";const client = new TransxactApiClient({ token: "sk_test_..." });const session = await client.checkoutSessions.create({ idempotencyKey: "a1b2c3d4-order-9912", amount: 5000, currency: "FJD",});
POST /v1/checkout-sessions
<?phpuse Transxact\TransxactClient;use Transxact\CheckoutSessions\Requests\CreateCheckoutSessionRequest;$client = new TransxactClient(token: 'sk_test_...');$session = $client->checkoutSessions->create( new CreateCheckoutSessionRequest([ 'idempotencyKey' => 'a1b2c3d4-order-9912', 'amount' => 5000, 'currency' => 'FJD', ]),);
201 Created
{ "id": "cs_3f9c2b1a", "status": "pending", "mode": "test", "amount": 5000, "currency": "FJD", "hostedUrl": "https://transxact.io/c/cs_3f9c2b1a", "metadata": {}, "expiresAt": 1717086400000}
Sent to your webhook URL when a payment succeeds, fails or is cancelled.
Transxact-Signature: t=1717000200000,v1=...Content-Type: application/json{ "id": "evt_8c1f4e2a9b7d4c3e5f60718293a4b5c6", "type": "checkout_session.succeeded", "data": { "object": { "id": "cs_3f9c2b1a", "status": "succeeded", "mode": "test", "amount": 5000, "currency": "FJD", "hostedUrl": "https://transxact.io/c/cs_3f9c2b1a", "metadata": { "orderId": "9912" }, "expiresAt": 1717086400000 } }}
Verify the signature (the Node and PHP SDKs include a helper)
5transxact.io/c/cs_3f9c2b1a
1Test payment · no real money moves
Pay Your shop
3TotalFJD 50.00
Choose your wallet
M-PAiSAVodafone
MyCashDigicel7Link works until tomorrow, 2:14 pm
From the quickstart and the API's own examples.
Field functions
| Pin | Field | In or out | Lands on | Description |
|---|---|---|---|---|
| 1 | Authorization | In | Test band | Your secret key. A sk_test_ key makes a Test mode session, and the checkout says so across its top. |
| 2 | Idempotency-Key | In | id, the same on a retry | Your own key for this order. Send it again and you get the original session back, not a second charge. |
| 3 | amount | In | Total | What to charge, in FJD cents. 5000 is FJD 50.00, shown to your customer as the total. |
| 4 | currency | In | Total | Always FJD in v1. |
| 5 | hostedUrl | Out | Address bar | The page your customer pays on. Redirect them to it, or send it as a link. |
| 6 | status | Out | Webhook | pending until the wallet answers, then succeeded, failed or cancelled. Each change sends a signed webhook. |
| 7 | expiresAt | Out | Checkout | After this, no payment can start. 24 hours by default; you can set anywhere from 30 minutes to 24 hours. |
Both wallets behind one page
Your server creates a Checkout Session and gets back a hostedUrl. Your customer opens it, picks M-PAiSA or MyCash, and pays.
M-PAiSA confirms on Vodafone's own page, with a PIN and a texted code; MyCash texts a one-time code. Both sit behind this one page, so you build one integration, not two, and get the same signed webhook either way. Each payment method we add joins the same page, behind the same Checkout Session. How each works: M-PAiSA, MyCash.
- One Checkout Session for both wallets: create it, send your customer to its
hostedUrl - Hosted checkout: your customer picks M-PAiSA or MyCash and confirms on their own phone
- Signed webhooks for every outcome, the same shape whichever wallet paid
- Idempotency keys on every create, so a retry never charges twice
- Test mode the moment you sign up: your customer goes through a practice version of the wallet's steps, and no real money moves. Live mode opens once your account is verified.
- Paid out every Monday by bank transfer, with the fee already taken out, or daily, fortnightly, monthly or when you ask
- A dashboard for every payment: fees and payouts line by line, Checkout Sessions to search and download as CSV, and webhook deliveries you can resend
Interface
| Part | Address | Auth |
|---|---|---|
| API | api.transxact.io/v1 | Bearer key |
| Checkout | transxact.io/c/{id} | None |
| Webhook | Your URL | Transxact-Signature |
Built for
- Online shops
- Invoices and bills
- Booking deposits
- Delivery orders
- Event tickets
- Facebook and WhatsApp sellers
One request out, one webhook back
The wallet step in the middle is the only part that differs, and it happens on your customer's phone, not in your code.
Scroll the figure sideways to see all four lanes
Operating conditions
| What | Min | Default | Max | Unit |
|---|---|---|---|---|
| Session lifetime | 0.5 | 24 | 24 | hours |
| Amount | 1 | — | — | FJD cents |
| Webhook attempts | 1 | — | 7 | over 24 h |
| Return URL length | — | — | 2048 | chars, https |
Webhook events
| Event | Sent when |
|---|---|
checkout_session.succeeded | The wallet confirmed the payment |
checkout_session.failed | The wallet declined it |
checkout_session.cancelled | You cancelled it, or it expired unpaid |
Undelivered webhooks retry at 15 min, 45 min, 2 h, 3 h, 6 h and 12 h, then stop.
Built on the wallets Fiji already uses
Transxact connects to M-PAiSA and MyCash; your customers keep paying the way they already do.
| Parameter | ||
|---|---|---|
| Network | Vodafone | Digicel |
| Customer confirms with | A PIN and a texted code, on Vodafone's page | A one-time code by text |
| Fee per payment | 4% of the payment | FJD 0.50, any amount |
| Your integration | The same Checkout Session and the same webhook | |
Nothing is charged when a payment fails, or in Test mode. Full pricing
What you get from a payment
- M-PAiSA fee
- −FJD 2.00
- You get
- FJD 48.00
- MyCash fee
- −FJD 0.50
- You get
- FJD 49.50
The fee is more than the payment, so the difference comes off your next payout.
One checkout and the same signed webhook, whichever way your customer pays.
Before you start
Do I need a developer?
Not to get paid by link. Selling on your own, you make a payment link or QR code on your dashboard and share it, with no code at all; real payments start once we've checked your ID. To take payments inside your own website or app, a developer adds the checkout once, and every payment after that shows up on your dashboard.
Is my customers' money safe?
Your customer pays from their own M-PAiSA or MyCash wallet and confirms on their own phone: for M-PAiSA on Vodafone's own page, for MyCash with a one-time code texted to them. A real payment counts only once the wallet confirms it, never on a screenshot. The money then sits with us until your payout: for now our team sends each payout by hand, and your dashboard shows what you're owed until it's sent. We're new, and we say so: real payments are open to verified accounts only.
What does my customer see?
A Transxact checkout page with your name and the amount. They pick M-PAiSA or MyCash and confirm on their phone, as drawn under 'For developers' above and step by step on the M-PAiSA and MyCash pages.
Do my customers need a Transxact account?
No. They pay with the M-PAiSA or MyCash wallet they already have, on the hosted checkout you send them to.
What does Test mode cost?
Nothing. Nothing is charged in Test mode, and nothing is charged when a payment fails.
When can I take real payments?
Once your account is verified. Send us your company registration, the company's TIN and a photo of the TIN letter or card, what the business sells and how customers usually pay, your business address, the company's legal name and registration number and the company's directors and anyone owning 30% or more, with a letter of authority from a director if you're not one. Selling on your own, it's a photo of your ID, your tax number and a photo of the card, what you sell and how people usually pay you and your home address instead. We review them. A business then creates a Live mode key on its dashboard: going live is a key swap, the same Checkout Session, the same webhook.
When do I get paid?
Every Monday by default, by bank transfer to the account you set on your dashboard, with the fee already taken out. You can switch to daily, every other Monday, the 1st of each month, or only when you ask. For now our team sends each transfer, so it shows as pending until it's sent.
Can I refund a payment through Transxact?
Not in v1. Neither wallet offers a refund through its API, so a refund to your customer happens outside Transxact.
We're new, and upfront about it.
Build in Test mode now. Once your account is verified, real payments on both wallets are a key swap away. Early accounts help shape what ships next.
| Option | Status | Get it |
|---|---|---|
| Test mode | Open today | Sign up |
| Live mode | Open to verified accounts | Verify your account |
| Payment links | Live once verified | For sellers |
| Pricing | Published | See pricing |