Monstarlab × stripe Partner Solutions Lab · Singapore
F&B payments accelerator

Three payment surfaces.
One Connect backbone.

MakanPay is a complete implementation of the Partner Solutions Lab — Connect onboarding, online Checkout, and a server-driven Terminal integration — built as a reusable accelerator for the Singapore F&B vertical. Every flow below is live and runnable right now.

6 / 6Lab tasks implemented
5F&B-specific patterns
3Live payment surfaces
70 / 30Prebuilt vs configured

Try it yourself

Three interfaces, one shared order ledger — so a dine-in ticket and an online order are priced identically and reconcile together.

Direct charges, end to end

The outlet is merchant of record — its licences, its brand, its name on the diner's statement.

A S$100.00 order
S$97.50  →  the outlet
Outlet's own Stripe balance — S$97.50 Platform fee — S$2.50

Funds settle straight into the connected account and the platform fee is collected automatically. No transfer step, no platform treasury, nothing to reconcile between the two — and refunds reverse both sides together.

What makes it an accelerator

The Stripe primitives are documented. What isn't documented is the composition — the logic that repeats in every F&B engagement.

Running tabs, settled after the guest leaves

Hold the card at first order, let rounds accrue, capture the real total — and off-session-charge any overage to the card the reader saved. Capturing less than the hold releases the rest. setup_future_usage makes the tap leave a reusable card behind; no Customer object is involved.

Tips carry a 0% platform fee

The fee is computed on the pre-tip total and fixed at PaymentIntent creation, so an on-reader tip raises the amount but never the fee. Verified live: S$20.00 + S$3.00 tip = S$23.00, fee unchanged at S$0.50.

Refunds that reverse the platform too

With direct charges there is no transfer to reverse, so refund_application_fee is the only lever — and whether the platform forgoes its fee is a business decision, exposed at the call site rather than buried in a default.

Singapore bill composition

Service charge on the subtotal, then GST on the inclusive amount — GST applies to the service charge. Getting that order backwards under-collects tax on every transaction. Rates are per outlet.

The revenue that never touches Stripe

Delivery aggregators and OTAs collect payment themselves and remit net proceeds separately. Those orders are recorded as their own channel with no PaymentIntent and no fee, so reconciliation stays honest about the boundary.

Two onboarding models, per outlet

Stripe-hosted for an independent that self-serves; API-based for a chain that already holds its outlets' data and won't run 200 browser sessions. The same decision, configured rather than hard-coded.

Three moments worth looking at

Taken from the running application — the guest's screen, the receipt, and what the server actually did.

S710
The Golden Fork
S$26.38
Add a tip?
No tip 5%S$1.32 10%S$2.64 15%S$3.96
STRIPE TERMINAL
The guest chooses the tip Rendered on the reader, against the pre-tip total. The tip raises the PaymentIntent — never the platform fee.
1 × Wagyu Beef BurgerS$28.00
1 × Iced LatteS$7.00
Service charge 10%S$3.50
GST 9%S$3.47
Total paidS$41.97
S$40.92
The Golden Fork receivesS$40.92
MakanPay platform feeS$1.05
Where the money went GST applies to the service charge, not just the subtotal. The split is a direct charge — funds land in the outlet's own balance with no transfer step.
14:32:11GET …/status
succeeded · S$29.02 · tip S$2.64 · fee S$0.66
fee check — platform fee on the PRE-TIP total
14:32:08POST /terminal/simulate-card
14:32:04POST /terminal/process
process_config.tipping.amount_eligible
14:32:03POST /terminal/payment-intent
card_present · { stripeAccount: acct_1U8… }
Every call, as it fires A server-driven Terminal integration is otherwise invisible. The POS streams each request live — no client SDK anywhere in the flow.

Lab coverage

Every task implemented and verified against the live test API, including the optional one.

TaskImplementation
2.1 Connected accounts v2 Accounts API, Express and API-based onboarding, manual payouts Verified
2.2 Online payment Checkout Session as a direct charge, card and PayNow, fee split on the receipt Verified
2.3 Terminal payment Server-driven, no client SDK, on-reader tipping, on-screen S710 Verified
2.4 Reconciliation webhook (optional) Built anyway — Connect-routed, idempotent by event id and by state, handles disputes Verified
3A.1 Refund with clawback Application fee refunded alongside the charge, confirmed on Stripe Verified
3A.2 Pre-authorisation Hold, capture below the hold, and off-session overage against the saved card Verified

Track A patterns implemented, then documented as a Track B accelerator with the four Connect decisions reasoned through for the F&B vertical.

Documentation

The artifacts the Partner Solutions Program asks for — architecture, runbook, collection, commercial terms. The whole implementation is open source under MIT — fork it, deploy it, use it with a client.