Square vs Stripe for restaurants
Square vs Stripe for restaurant software, and the API built for the check.
The usual answer is Square for a restaurant running Square’s point of sale and Stripe for a team building its own restaurant software. Both leave the software team work: Square’s Orders API adds 1% per transaction when another processor takes the payment and its Refunds API doesn’t support itemized refunds, and Stripe has no order or check object, so modifiers, tabs, tips, and split checks are your code. Flint Pay is the third option for online ordering and QR pay-at-table: the check is an order with priced modifiers, open tabs, server-computed tips, split checks with the tip shared to the cent, service charges, and 86-ing from stock, with cards processed on Stripe.
3.79% + 35¢ on cards · no monthly fee · free sandbox · no credit card
last reviewed 2026-10-15 · sources
01The options
Three options for teams building restaurant software.
Ranked for a team that writes its own ordering or pay-at-table product and takes payments online. Each figure is from the vendor's own page, linked under Sources.
- 01
Flint Pay
Restaurant software that takes card-not-present payments: online ordering, QR pay-at-table, and payment links, with the check modeled for you.
- Check model
- order, modifiers, tabs, tips, splits
- Cards
- 3.79% + 35¢
- Monthly
- no monthly fee
- 02
Square APIs
Software for restaurants that already run Square's point of sale and take Square payments.
- Plans
- $0, $49, $149 per location/mo
- Orders API, other processor
- 1% per transaction
- Itemized refunds, API
- not in Refunds API
- 03
Stripe
Teams that will build the check, the modifiers, and the split logic themselves.
- Order or check object
- your database
- Tipping features
- Terminal readers
- Refund
- an amount
02Side by side
Square, Stripe, and Flint for restaurant software, need by need.
The middle column is what Square's and Stripe's own docs say today, each linked under Sources. The Flint column is what a Flint order does, with the API name behind it.
| What you need | Square APIs, or Stripe | Flint |
|---|---|---|
| The check | Square APIs, or Stripe: Square: an Orders API order, with a 1% fee per transaction when another processor takes the payment. Stripe: no order object since stripe-node 11.0.0 (2022); its fulfillment guide leaves saving line items to your code. Stripe Orders API | Flint: An order with line items, priced modifiers, charges, tax, and tips, totaled by Flint on every change.POST /v1/orders |
| Open tabs | Square APIs, or Stripe: Stripe: with no order object, each round and the running total live in your database. | Flint: Leave the order open and append each round. The response is the whole check with totals recomputed.POST /v1/orders/{order_id}/line-items |
| Tips | Square APIs, or Stripe: Square: tips are set per payment, and the order’s tip fields are read-only sums. Stripe: on-reader and on-receipt tipping are Terminal features. Tips on Stripe Checkout | Flint: Request a tip as a percent on the order. Flint computes the amount, and hosted checkout shows a tip picker.requested_tip |
| Split checks | Square APIs, or Stripe: Square: in Square's app, splitting one item into portions, such as a third of a bottle of wine, needs Square for Restaurants Plus or Premium. Stripe: one PaymentIntent per card, with the balance tracked by your code. | Flint: One payment leg per guest, settled in one call. Flint shares the tip across the cards in proportion to each, to the cent.payment_intent_allocations |
| Refund one dish | Square APIs, or Stripe: Square: “The Refunds API doesn’t support itemized refunds.” Stripe: a refund is an amount against a Charge or PaymentIntent. Square item refunds | Flint: Refund the dish by line item. Its share of tax goes back with it; the tip stays.line_item_allocations |
| 86 an item | Square APIs, or Stripe: Stripe: the fulfillment guide leaves updating inventory or stock records to your code. Stripe inventory tracking | Flint: Stock per location. Hold the last portions while a guest pays; if the stock is gone at payment, the payment fails before money moves.POST /v1/inventory-reservations |
03What you build
What does restaurant software build on top of Stripe?
Stripe's unit is an amount. Each box on the left is code and data your team writes so a check behaves like a check. On Flint each job is a field or an endpoint on the order.
On a payments API, you build
Modifiers
A modifiers table, price deltas, and tax flags
re-priced by your code before every charge
Open tabs
A tabs table and a running total
recomputed after every round
Tips
Tip math and a tip ledger
18% of which subtotal, asked vs collected
Service charges
Fees faked as line items
discounted by accident when a promotion lands
Split checks
Several charges and a balance you reconcile
penny rounding, stale totals, paid-twice guards
86-ing
A counter you decrement
oversold when two guests order the last one
Refund one dish
Refund arithmetic by hand
the dish, its modifiers, its share of tax
7 systems to build and keep in sync
On Flint, the order carries it
Modifiers
modifier_total_moneyline_items[].modifiersOpen tabs
running_balance_moneyPOST /v1/orders/{order_id}/line-itemsTips
requested_tipsettled_tip_moneyService charges
charges[]POST /v1/orders/{order_id}/chargesSplit checks
outstanding_moneyPOST /v1/orders/{order_id}/pay86-ing
available_quantityPOST /v1/inventory-reservationsRefund one dish
refunded_quantityPOST /v1/refunds
1 order · 1 API key · 1 webhook stream
Payments for restaurant tech →Does Stripe have an Orders API? →
04Split checks
How does a split check with a tip work on Flint?
Two guests, one $36.48 check with an 18% tip. Your code picks each guest's amount; Flint settles both cards in one call and shares the $5.21 tip between them, 261 and 260 cents.
# both cards are on the table: settle both legs in one call
curl -X POST \
https://api.withflintpay.com/v1/orders/ord_7g2TableTwelve/pay \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Idempotency-Key: table-12-close" \
-d '{
"action": "confirm_payment_intents",
"payment_intents": [
{
"payment_intent_id": "pi_1kmn0aExample",
"token": "pm_1kmn0aExample"
},
{
"payment_intent_id": "pi_2bqr7dExample",
"token": "pm_2bqr7dExample"
}
],
"expected_outstanding_money": {
"amount": 3648,
"currency": "USD"
},
"completion_behavior": "complete_order"
}'expected_outstanding_money rejects the payment before any card is charged if the check changed since the guests saw it.
{
"data": {
"order_id": "ord_7g2TableTwelve",
"status": "closed",
"payment_status": "paid",
"tips": [
{
"order_tip_id": "tip_1kmn0aExample",
"status": "settled",
"settled_amount_money": { "amount": 521, "currency": "USD" },
"payment_intent_allocations": [
{
"payment_intent_id": "pi_1kmn0aExample",
"amount_money": { "amount": 261, "currency": "USD" }
},
{
"payment_intent_id": "pi_2bqr7dExample",
"amount_money": { "amount": 260, "currency": "USD" }
}
]
}
],
"settlement_amounts": {
"settled_tip_money": { "amount": 521, "currency": "USD" },
"paid_money": { "amount": 3648, "currency": "USD" },
"outstanding_money": { "amount": 0, "currency": "USD" }
}
}
}Each card's share of the tip is on the tip itself, so a server's tip report reads it instead of computing it.
05Included
What else does a Flint order handle for restaurant software?
QR pay-at-table, modifiers, tabs, charges, and the kitchen's webhooks, all on the same order your app already holds.
A guest scans a QR code on the check and pays the open order on their own phone, with a tip picker.
POST /v1/checkout-sessionsModifier sets price each add-on and print kitchen notes on the ticket but not the receipt.
POST /v1/modifier-setsEach round appends to the open order, and the activity trail returns a running balance.
running_balance_moneyService, delivery, and packaging charges sit beside line items, so a promotion never shrinks them.
charges[]A stale total is rejected before any card is charged.
expected_outstanding_moneyThe kitchen and guest screens follow one webhook stream, and the check closes once.
order.paid06Who Flint is for
Flint is built for teams building online restaurant software in the US.
If that describes your product, the check model above is running the day you create your account.
Card-not-present
Online ordering, QR pay-at-table on the guest's phone, payment links, and the dashboard's virtual terminal. Card readers and tap to pay aren't available, so in-person card payments stay on your current reader.
US restaurants
Flint onboards businesses in the US and pays out in USD to each restaurant's own bank account. Guests can pay from anywhere with a card, Apple Pay, or Google Pay.
The whole check
Modifiers, open tabs, tips, split checks, service charges, line-item refunds, and stock per location on one order.
Developers and agents
A public OpenAPI spec, Node and PHP SDKs, a CLI, llms.txt, and MCP servers a coding agent can read.
07Switching
How do you build a restaurant check on Flint?
Five calls from menu to closed check. Each one runs in a sandbox with Stripe's test cards before you switch to live keys.
Load the menu
POST /v1/productsCreate each dish with its variants and attach modifier sets, so add-ons are priced by the catalog and kitchen notes print on the ticket.
Open the check
POST /v1/ordersCreate an order with the first round and leave it open. Append later rounds to the same order.
Let the table pay
POST /v1/checkout-sessionsCreate a checkout session for the open order with tipping on, and print its URL as a QR code on the check.
Split when the table asks
POST /v1/orders/{order_id}/payCreate one payment leg per guest and settle them in one pay call with the expected outstanding amount. Flint shares the tip across the cards.
Close it everywhere
order.paidListen for order.paid, which fires once when the whole check is covered, and update the kitchen and guest screens from it.
08Start
From a sandbox key to a paid test order in ten minutes.
Node
CLI
Test keys are prefixed flint_test_ and bound to a sandbox with its own data, so nothing you try there touches live money. Pay with 4242 4242 4242 4242, any future expiry, any CVC.
Then read these
- 01Payments for restaurant techModifiers, tabs, tips, and split checks, end to end
- 02
- 03
- 04
- 05
Sources
Where each claim comes from.
No transaction fee for orders paid with Square payments; 1% per transaction with a non-Square payments provider. Square: Payments pricing
developer.squareup.com · checked 2026-10-15The Refunds API doesn't support itemized refunds. Square: Refunds and exchanges
developer.squareup.com · checked 2026-10-15Tips are recorded per payment with tip_money; the order's tip fields are read-only and calculated by Square. Square: Take payments
developer.squareup.com · checked 2026-10-15Splitting individual items into portions, such as a third of a bottle of wine, and recombining them is available only for Square for Restaurants Plus or Premium subscribers. Square Support: Split a check by item or seat
squareup.com · checked 2026-10-15Square Free $0, Square Plus $49, and Square Premium $149 per location per month. Square press release: unified plans and pricing
squareup.com · checked 2026-10-15The fulfill_checkout function must handle repeat and concurrent calls, retrieve the session with line items, check payment_status, perform fulfillment, and record fulfillment status. Saving payment details and line items in your own database and updating inventory or stock records are listed as things you might want it to do. Stripe: Fulfill orders
docs.stripe.com · checked 2026-10-15Orders and SKU resources removed in stripe-node 11.0.0, released 2022-11-15. stripe-node migration guide for v11
github.com · checked 2026-10-15A refund names a Charge or PaymentIntent and an amount; no parameter names a line item. Stripe: Create a refund
docs.stripe.com · checked 2026-10-15On-reader and on-receipt tipping are Terminal features. Stripe: Collect tips
docs.stripe.com · checked 2026-10-15Terminal: readers and SDKs for a custom POS app or third-party POS integrations, 2.7% + 5¢ per successful US card transaction. Stripe Terminal
stripe.com · checked 2026-10-15
last reviewed 2026-10-15 · corrections: Flint Help
FAQ
Questions people ask.
Is Square or Stripe better for restaurant software?
Square sells a restaurant point of sale with hardware and monthly plans of $0, $49, or $149 per location, and its Orders API charges 1% per transaction when another processor takes the payment. Stripe sells payments APIs and Terminal card readers and leaves the check, modifiers, tabs, and splits to your code. For a team building online ordering or QR pay-at-table, Flint Pay is the third option: a payments API whose order is already a restaurant check.
Does Stripe have a POS for restaurants?
Stripe's in-person product is Terminal: card readers and SDKs for building your own point-of-sale app or connecting a third-party one, at 2.7% + 5¢ per US card transaction. On-reader and on-receipt tipping are Terminal features. The check itself, with modifiers, open tabs, and split payments, is your software's job: Stripe has no order object, and its fulfillment guide leaves saving line items in your own database to your code.
What is the best payments API for restaurant software?
For online ordering and QR pay-at-table in the US, Flint Pay. The check is an order with priced modifiers and charges, rounds append to an open tab, Flint computes the tip and shares it across split payments to the cent, refunds go back by dish, and stock per location lets you 86 an item. Cards are processed on Stripe. Payments for restaurant tech
Is Flint a good alternative to Square and Stripe for restaurant software?
Yes, for US teams building online ordering, QR pay-at-table, or kiosk ordering that runs in a web browser and takes card-not-present payments. Flint has no monthly fee and one card rate, 3.79% + 35¢, which covers Stripe’s processing fees and the check model. Flint takes card-not-present payments only, so in-person card payments stay on your current reader. Sign up on the web or from the terminal with flint signup.
How are tips shared on a split check?
On Flint, the tip is requested on the order, as a percent or an amount. When several cards settle in one pay call, Flint shares the tip across them in proportion to each card's amount, assigns the odd cents by a fixed rule, and records each card's share on the tip. On Square, tips are set on each payment. On Stripe outside Terminal, a tip is part of the amount your code charges.
Does Flint take in-person card payments?
No. Flint takes card-not-present payments: hosted checkout, QR pay-at-table on the guest's phone, payment links, Stripe Elements on your own web pages, and the dashboard's virtual terminal. Card readers and tap to pay aren't available and have no release date.
Build the restaurant app. The check is already modeled.
Free sandbox, no credit card, no sales call. Open a tab, split it across two test cards with the tip shared to the cent, and refund one dish.
Or run npm install -g @flintpay/cli && flint signup to create your account and a sandbox key from the terminal. CLI guide
More comparisons · last reviewed 2026-10-15