Card fee & platform fee
Every card-on-file charge carries up to two fees. The card fee is added on top of the balance and paid by the restaurant, unless the supplier covers it. The platform fee is Clipp's share, taken out of the supplier's Stripe payout. The restaurant never sees it. Stripe also takes its own processing fee from the payout. Whatever part of those fees the card fee doesn't cover is booked as the supplier's expense.
These are the same fees as any card payment through a pay link. See Processing fees for card, PayPal and bank compared.
Who uses it
- Supplier staff see every amount on the confirm step before they charge.
- Restaurants agree to the card fee in the consent text when they save the card, and pay it with each charge.
Calculations
Card fee
Card fee = balance due × 2.9% + $0.30, rounded to the cent (half a cent rounds up). It's $0.00 when the supplier covers the fee or nothing is owed.
Total charged = balance due + card fee.
| Balance due | × 2.9% | + $0.30 | Card fee | Total charged | Note |
|---|---|---|---|---|---|
| $250.00 | $7.25 | $7.55 | $7.55 | $257.55 | |
| $150.00 | $4.35 | $4.65 | $4.65 | $154.65 | After $100.00 was paid in cash |
| $15.00 | $0.435 | $0.735 | $0.74 | $15.74 | Exactly half a cent: rounds up |
| $100.10 | $2.9029 | $3.2029 | $3.20 | $103.30 | Rounds down |
| $48.27 | $1.39983 | $1.69983 | $1.70 | $49.97 | |
| $0.01 | $0.00029 | $0.30029 | $0.30 | $0.31 | Below Stripe's $0.50 minimum: Stripe refuses it |
| $0.00 | — | — | $0.00 | $0.00 | No Charge button |
When the supplier covers the card fee, the confirm step's Card fee line reads You cover it and the total equals the balance: $250.00 is charged as $250.00.
The fee is worked out on what the restaurant owes, then added. It doesn't compound: $257.55 is charged, not a figure that covers 2.9% of itself. That's the same rule a restaurant meets paying through a pay link, so the two ways of paying cost the same.
Platform fee
Platform fee = balance due × the supplier's revenue share %, rounded to the cent (half up). It's worked out on the balance only, never on the card fee, and it's $0.00 when the supplier has no revenue share.
| Balance due | Revenue share | Platform fee (deducted from payout) |
|---|---|---|
| $250.00 | 1% | $2.50 |
| $48.27 | 1% | $0.48 |
| $1,234.56 | 1.5% | $18.52 |
| $250.00 | none | $0.00 |
| $0.01 | 1% | $0.00 (a hundredth of a cent) |
The restaurant pays the same total whatever the platform fee is.
What the supplier receives
Stripe pays out the charge less its own fee and the platform fee. Stripe's fee depends on the supplier's Stripe pricing, so the figures below assume Stripe's standard 2.9% + $0.30 on the amount charged. They illustrate the arithmetic; the real fee is whatever Stripe reports.
| $250.00 invoice, 1% revenue share | Restaurant pays the card fee | Supplier covers it |
|---|---|---|
| Charged to the card | $257.55 | $250.00 |
| Stripe's fee (illustrative) | $7.77 | $7.55 |
| Platform fee | $2.50 | $2.50 |
| Paid out to the supplier | $247.28 | $239.95 |
| Invoice credited | $250.00 | $250.00 |
What lands in the books
Two kinds of entry, booked at different moments.
1. At the charge: the income. One income entry for the balance, "Order Payment Received" under Online Payment (split with an order fee if the invoice has one; see Charge an invoice). The card fee the restaurant paid is not booked as income.
2. Once Stripe reports its fee: the expense. Usually within moments of the charge, Clipp reads the fee Stripe actually took (its own fee plus the platform fee) and books what the card fee didn't cover:
Fee expense = (Stripe's fee + platform fee) − card fee the restaurant paid, never below $0.00.
| Field | Value |
|---|---|
| Name | Order Transaction Processing Fees |
| Type | Expense |
| Category | Other Expense – Transaction Processing Fees |
| Description | Processing fees for order {invoice number} |
| Date | The date of Stripe's record of the charge (normally the moment of the charge), not when Clipp read it |
| Financial account | The same account the income went to |
| Lines | Payment provider fee and Base platform fee. A line that comes to $0.00 is left off. |
The card fee pays Stripe's fee first; anything left over comes off the platform fee line. Worked through for a $250.00 invoice:
| Case | Stripe's fee | Platform fee | Card fee paid | Payment provider fee line | Base platform fee line | Expense booked |
|---|---|---|---|---|---|---|
| Restaurant pays the fee, 1% share | $7.77 | $2.50 | $7.55 | $0.22 | $2.50 | $2.72 |
| Supplier covers the fee, 1% share | $7.55 | $2.50 | $0.00 | $7.55 | $2.50 | $10.05 |
| Restaurant pays the fee, no share | $7.77 | $0.00 | $7.55 | $0.22 | — | $0.22 |
| Restaurant pays, supplier's Stripe rate is lower, 1% share | $6.00 | $2.50 | $7.55 | — | $0.95 | $0.95 |
| Restaurant pays, lower Stripe rate, no share | $6.00 | $0.00 | $7.55 | — | — | Nothing booked |
Before and after, for the first case:
| Book entry | After the charge | After Stripe reports its fee |
|---|---|---|
| Order Payment Received (Online Payment) | +$250.00 | +$250.00 |
| Order Transaction Processing Fees (expense) | — | −$2.72 |
| Net from this invoice | $250.00 | $247.28 |
The net matches the Stripe payout of $247.28.
- It's booked once. Stripe reports updates several times; later reports don't add a second expense. If the expense was booked before the split was known, the two lines are added to it later without changing its amount.
- If the supplier's books lack the processing-fee expense category, nothing is booked and Clipp logs it for support.
Where it shows up
- Confirm step: Balance Due, Card fee (or You cover it), Total charged, Platform fee (deducted from payout).
- Charge button: the total, for example Charge $257.55.
- Save-card page (restaurant): the consent text names the fee as "2.9% + $0.30" unless the supplier covers it.
- Supplier's books: the income and expense entries above.
- Supplier's Stripe account: the charge, Stripe's fee and the application fee.
- Invoice and PDF (supplier): the card fee isn't shown.
- Restaurant's app, order page: the card fee paid so far shows as Processing Fee, for example "+$7.55", under the order total.
Permissions
Nobody in the supplier's team can change the card fee, the "supplier covers it" switch or the revenue share from the app. Clipp sets them.
Decisions
- The restaurant pays the card fee by default; Clipp can switch a supplier to cover it. The same switch governs pay-link card payments. (Processing fees, PFP spec)
- The platform fee is worked out on the balance, not the card fee. The card fee exists to cover Stripe, so Clipp doesn't take a share of it.
- The card fee is not income. It's money collected to pay Stripe; booking it as income would overstate sales.
- The processing fee expense is booked once Stripe reports its actual fee (dated to Stripe's record of the charge, usually within moments). Using the reported fee instead of an estimate ensures the supplier's books match Stripe's payout; late reconciliation still lands in the correct accounting period.
Specs
# prefix: PFP
Feature: Payment Processing Fee Passthrough
Suppliers normally pass the card (Stripe) processing fee on to the customer at
checkout. A supplier may instead choose to absorb the card fee — the customer is
charged only the balance owed, and the supplier receives less. Absorbing the fee
is configurable for card payments only; other methods are unaffected. PayPal
always charges its convenience fee to the customer and is not configurable.
Whatever part of the processor's fee the customer does not cover is the supplier's
expense and is recorded in their accounting. Bank (ACH) payments never carry a
customer fee, so the supplier bears the whole amount — recorded once the payment
settles, since that is when the processor's charge becomes known.
QA setup note:
The absorb setting has no supplier-facing UI. Toggle it via the
`upsertSupplierSettings` mutation with `skipSurchargeCollection: { card: <bool> }`:
- `card: false` (the default, and the behavior when the setting is absent) →
the customer pays the card fee.
- `card: true` → the supplier absorbs the card fee.
Background:
Given a restaurant owes a balance on an order
Rule: The card processing fee is added to the customer's payment by default
Scenario: PFP-001 customer pays the card processing fee when the supplier has not opted to absorb it
Given the supplier has not chosen to absorb the card processing fee
When the restaurant pays the balance by card
Then the processing fee is added to the amount the restaurant pays
And the invoice shows the processing fee as a separate charge
Rule: A supplier can absorb the card processing fee instead of charging the customer
Scenario: PFP-002 customer is not charged the card processing fee when the supplier absorbs it
Given the supplier has chosen to absorb the card processing fee
When the restaurant pays the balance by card
Then no processing fee is added to the amount the restaurant pays
And the recorded payment equals the balance owed
And the invoice does not show any processing fee
Rule: The processor's fee borne by the supplier is recorded as an expense
Scenario: PFP-006 the supplier-borne card processing fee is recorded as an Other Expense, including when absorbed
Given the restaurant pays a card balance
When the payment is recorded
Then the part of the processor's fee not covered by the customer's fee payment is recorded in the supplier's accounting
And it is recorded as an expense in the dedicated "Other Expense – Transaction Processing Fees" category, separate from the payment income
And it is recorded even when the supplier has chosen to absorb the card fee (the full fee is then the supplier's expense)
And no expense is recorded when the customer's fee payment fully covers the processor's fee
Rule: The processor's fee on a bank payment is recorded once the payment settles
Scenario: PFP-008 the bank payment processing fee is recorded as an expense at settlement
Given the restaurant pays a balance by ACH
And the customer was never charged a processing fee for it
When the bank payment settles
Then the whole processor's fee is recorded in the supplier's accounting as an expense
And it is recorded in the same "Other Expense – Transaction Processing Fees" category used for card
And it is dated the day the payment settled, not the day it was submitted
Scenario: PFP-009 no expense is recorded while a bank payment is still in flight
Given the restaurant has paid a balance by ACH
When the bank payment has not settled yet
Then no processing fee expense is recorded for it
Scenario: PFP-010 a settled bank payment records its fee only once
Given a settled ACH payment whose processing fee has been recorded
When the settlement is processed again
Then the processing fee expense is not recorded a second time
Rule: The supplier sees one fee amount; its parts stay internal
Scenario: PFP-011 the recorded fee is the total the supplier was charged
Given a supplier on a contract with a platform fee
When a payment's processing fee is recorded
Then the expense is the total charged, covering both the processor's fee and Clipp's platform fee
And the supplier is never shown how that total splits between the two
Scenario: PFP-012 the split is kept for Clipp's own reporting
When a payment's processing fee is recorded
Then the processor's charge and Clipp's platform fee are stored separately against the payment
And they are not published on the API the supplier reads
Rule: Payment methods that never carry a card processing fee are unaffected
Scenario Outline: PFP-004 the absorb setting has no effect on fee-free payment methods
Given the restaurant pays the balance by <method>
When the payment is completed
Then no processing fee is added to the amount the restaurant pays, regardless of the supplier's absorb setting
Examples:
| method |
| ACH |
| cash |
| check |
Rule: PayPal always charges its convenience fee to the customer
Scenario: PFP-007 the PayPal convenience fee is always added and is not configurable
Given the restaurant pays the balance by PayPal
When the restaurant pays the balance
Then the convenience fee is added to the amount the restaurant pays
And the absorb setting has no effect on the PayPal convenience fee
Rule: Customers are only warned about a fee they will actually be charged
Scenario Outline: PFP-005 the card fee disclaimer matches whether the customer will be charged
Given the supplier has <absorb setting> for the card processing fee
When the restaurant reviews payment options for card
Then the processing fee disclaimer is <visibility>
Examples:
| absorb setting | visibility |
| chosen to absorb | hidden |
| not chosen to absorb | shown |
These scenarios cover card fees on pay-link payments; card on file uses the same rules but has no scenarios of its own.
Known limitations
- The consent text is fixed at save time. If Clipp later switches the supplier to cover the fee, or back, a saved card's consent still says what it said then.
- The fee rate is fixed at 2.9% + $0.30 for the restaurant, whatever the supplier's actual Stripe rate. A supplier on a cheaper rate makes a small gain that reduces their platform-fee expense line; one on a dearer rate bears the difference.
- Very small balances can't be charged: Stripe's $0.50 minimum applies to the total.
FAQ
Why was the restaurant charged $257.55 for a $250.00 invoice? $250.00 × 2.9% + $0.30 = $7.55 card fee. See Card fee.
Why is my payout less than the invoice even though the restaurant paid the fee? Stripe's real fee is charged on the whole $257.55, and Clipp's platform fee comes out too. The difference is booked as your processing-fee expense. See What lands in the books.
Why doesn't the invoice show the $7.55? The card fee isn't part of the invoice: the invoice is credited $250.00 and reads Paid. The fee is stored with the payment and shown to the restaurant in their app as Processing Fee.
Where do I see the platform fee? On the confirm step before you charge, and as the "Base platform fee" line of the processing-fee expense in your books.