Payments
Serront tracks payments the way Indonesian service businesses actually take them: manual bank transfer, with the buyer's receipt as proof — works on every plan, including Free. The optional Payment module (Starter+) adds real online checkout (QRIS, virtual account, e-wallet, card) on top.
Manual bank transfer (the default)
No money moves through Serront in this flow — the buyer transfers straight to your bank account. Serront's job is to show the buyer where to pay and to keep the payment status honest on both sides.
1. Instructions
Set up to 5 bank accounts (bank name, account number, holder) plus
free-form payment instructions at
/dashboard/storefront. They appear on the
buyer's order page (/o/<token>) only while payment isn't
confirmed yet — never on your public storefront page, and they
disappear once the payment is settled. If you've set a WhatsApp
number, a wa.me contact link shows alongside.
2. The buyer claims
After transferring, the buyer taps "I have transferred" on their
order page — paymentStatus moves unpaid → payment_claimed, and
the order surfaces in your dashboard as awaiting your check.
The buyer can also upload a transfer receipt (PNG, JPEG, WebP, or
GIF, up to 5 MB). You view it from the order detail (API:
GET /api/v1/orders/:id/proof).
3. You confirm
Check your bank (and the proof), then hit Confirm payment —
paymentStatus → payment_confirmed, the buyer gets a confirmation
email, and a serront.order.payment_confirmed.v1
webhook event fires. You can confirm
directly from unpaid too (cash in hand, transfer spotted first).
curl -X POST https://serront.com/api/v1/orders/ord_01jx…/confirm-payment \
-H "Authorization: Bearer sk_live_xxx"
Honestly: Serront never verifies the transfer — confirmation is your judgment call against your own bank statement. That's the nature of manual transfer; if you want machine-verified payment, that's the Payment module below.
The Payment module — online checkout
Available on Starter and up (plans). Enable it at /dashboard/integrations — the first enable provisions a payment workspace for you on Plugipay (the Forjio family's payment service); no Plugipay sign-up needed.
Once on:
- The buyer's order page grows a "Pay online" button next to your transfer instructions. It opens a Plugipay-hosted checkout for the order's quote — QRIS, virtual account, e-wallet, or card.
- A completed payment settles the order to
payment_confirmedautomatically (webhook-driven and idempotent — a retried notification never double-settles). The buyer gets the same confirmation email a manual confirm sends. - A 0.3% module fee applies to amounts paid online. Manual transfers stay free — both paths remain available side by side, the buyer picks.
Orders that are declined or canceled, already confirmed, or have no
quote yet can't be paid online (409).
Your money: balance and payouts
With online payment, funds collect in your Plugipay-held balance — see it all on the Payments page (/dashboard/payments):
- Balance — available = ledger balance minus in-flight payouts.
- Transactions — your ledger entries.
- Payouts — request a payout to your bank account; payouts move
pending → in_transit → paid(you can cancel whilepending). - Bank account — the default payout destination.
The same surfaces exist on the API: GET /api/v1/ledger/balance,
GET /api/v1/ledger/entries, GET|POST /api/v1/payouts,
GET|PATCH /api/v1/payouts/bank-account. All of them answer
409 PAYMENT_MODULE_DISABLED while the module is off.
curl -H "Authorization: Bearer sk_live_xxx" \
https://serront.com/api/v1/payouts/balance
Honestly: payouts are operator-processed in v1 — a requested payout is reviewed and transferred manually, not instant. Disabling the module just flips it off; your Plugipay workspace, balance, and history stay intact and come back on re-enable.
See also
- Orders — the payment track in the order lifecycle.
- Billing & plans — module availability per tier.
- Webhooks —
serront.order.payment_confirmed.v1.