Concepts

Fees

One fee, lower as you grow, taken by the contract. The network fee is on top, quoted first. Checkout fees are yours to add.

Example · a $100.00 price and $20.00 of VAT, at 0.99%

What your customer pays
Price$100.00
VAT (20%), your line$20.00
Processing fee$1.20 paid by your customer
Charged$121.20 + network fee, quoted before signing

Example · the contract's split

What reaches your wallet
Charged$121.20
QBitFlow's 0.99%−$1.20
You keep$120.00 the price and your line

QBitFlow's fee

It follows your organization's volume (pricing):

The schedule · GET /organization/pricing

QBitFlow's fee, by your volume
Your first $5,000 ever0.5% the offer
Then, over the last 30 days: under $50,0000.99%
$50,000 to $100,0000.75%
$100,000 and more0.5%
  • The offer comes first. A new organization pays 0.5% until its volume ever reaches $5,000. Then the offer ends for good: a later refund doesn't bring it back.
  • Then your last 30 days set the rate: today and the full UTC days before it. It goes down as your volume grows, and back up if it drops.
  • A payment takes the rate of the volume before it, on its whole amount. The payment that crosses a tier pays the old rate; the next one, the new.
  • What counts: live payments and subscription bills, your members' included, as your customers paid them (price, tax, fee lines), minus approved refunds. Test mode and unpaid checkouts don't.
  • When it's fixed: a checkout keeps the rate it had when created; a subscription's bill takes the rate of the day it's charged. A tier you cross applies to new checkouts within a minute.
  • Your organization's settings show your rate now, your volume and what's next. A custom rate set by QBitFlow replaces the schedule.

Each payment records the rate it took (settlement.feePercent) and, in settlement.split, the split as the contract paid it, in USD and in the token's smallest unit:

PartWhat it is
platformQBitFlow's fee
referralwhen someone referred you, their share of QBitFlow's fee, taken from QBitFlow's fee, never from yours (its rate: settlement.referralFee.feePercent; the standard terms: 20% of QBitFlow's fee for 6 months)
organizationa marketplace's commission on a seller's payment
merchantwhat reached your wallet

In the token, the parts add up exactly to amountMinUnits.

Avoid

Recompute the split from the rates

It rounds differently from what the contract paid.

Do

Show settlement.split as recorded

Exact, part by part, as on-chain.

Network fees

Your customer pays it, on top, never out of what you receive:

  • Quoted before signing, when they pick a currency.
  • In a token, exact: QBitFlow's operator sends the transaction and pays the gas; your customer pays it back in the token, in what they sign.
  • In a chain's own coin, the wallet sends and sets the fee: the checkout shows an estimate.
  • Recorded as networkFee in settlement.split, apart from amount. Everything the wallet sent is paidMinUnits.

When your wallet sends something (a refund, a payout), it pays that transaction's network fee.

Checkout fees

A checkout can add lines to its price, shown one by one and paid with it: once for a payment, with every bill for a subscription.

Add fees to a checkout

checkout-create-payment-fees.sh

# The customer pays the price plus your lines and, with processingFee, QBitFlow's fee (grossed up,# so you keep the price and your lines). Test mode caps the total at $5, fees included; the# network fee comes on top.curl https://api.qbitflow.app/v2/checkout-sessions/payment \  -H "X-API-Key: $QBITFLOW_API_KEY" \  -H "Content-Type: application/json" \  -H "Idempotency-Key: $(uuidgen)" \  -d '{    "productName": "T-shirt",    "description": "Blue, size M",    "priceUsd": "3.99",    "reference": "order-1044",    "successUrl": "https://shop.example.com/orders/success?uuid={{UUID}}",    "cancelUrl": "https://shop.example.com/orders/cancel",    "fees": {      "items": [{ "label": "Shipping", "description": "Standard, 3 to 5 days", "amountUsd": "0.75" }],      "processingFee": true    }  }'# 201: a CreatedCheckoutSession ({ "link": "https://…/checkout?uuid=pay@…", "uuid": "pay@…", "expiresAt": "…" })
// The customer pays the price plus your lines and, with processingFee, QBitFlow's fee (grossed// up, so you keep the price and your lines). Test mode caps the total at $5, fees included; the// network fee comes on top.const session = await client.checkoutSessions.createPayment({	productName: 'T-shirt',	description: 'Blue, size M',	priceUsd: '3.99', // USD	reference: 'order-1044',	successUrl: `https://shop.example.com/orders/success?uuid=${Placeholders.UUID}`,	cancelUrl: 'https://shop.example.com/orders/cancel',	fees: {		items: [{ label: 'Shipping', description: 'Standard, 3 to 5 days', amountUsd: '0.75' }],		processingFee: true, // omitted: your checkout.customerPaysProcessingFee setting decides	},});console.log(`Redirect the customer to ${session.link}`);
session = client.checkout_sessions.create_payment(    product_name="T-shirt",    description="Blue, size M",    price_usd="3.99",  # USD: you keep the price and your lines    reference="order-1044",    success_url=f"https://shop.example.com/orders/success?uuid={qbitflow.PLACEHOLDER_UUID}",    cancel_url="https://shop.example.com/orders/cancel",    fees=qbitflow.CheckoutFees(        # Your own lines (up to 10), shown to the customer and paid with the price.        items=[            qbitflow.FeeItem(                label="Shipping", description="Standard, 3 to 5 days", amount_usd="0.75"            ),        ],        # The customer also pays QBitFlow's processing fee, a last line computed by QBitFlow.        processing_fee=True,    ),)# The customer pays the price plus every line (then the network fee on top).print("Send the customer to", session.link)
// The customer pays the price plus every line: $3.99 + $0.75 + the processing fee. You// keep the price and your lines. Test mode caps the total, fees included, at $5.session, err := client.CheckoutSessions.CreatePayment(ctx, &qbitflow.CreatePaymentSessionParams{	ProductName: "T-shirt",	Description: "Blue, size M",	PriceUSD:    "3.99",	Reference:   "order-1044",	SuccessURL:  "https://shop.example.com/orders/success?uuid=" + qbitflow.PlaceholderUUID,	CancelURL:   "https://shop.example.com/orders/cancel",	Fees: &qbitflow.CheckoutFees{		Items: []qbitflow.FeeItem{			{Label: "Shipping", Description: "Standard, 3 to 5 days", AmountUSD: "0.75"},		},		// QBitFlow's processing fee, grossed up so you keep the price and your lines.		// Left nil, your checkout.customerPaysProcessingFee setting decides.		ProcessingFee: new(true),	},})if err != nil {	log.Fatal(err)}fmt.Println("Redirect the customer to", session.Link)
$session = $client->checkoutSessions->createPayment(new \QBitFlow\Params\CreatePaymentSessionParams(	productName: 'T-shirt',	description: 'Blue, size M',	priceUsd: '3.99',	reference: 'order-1044',	successUrl: 'https://shop.example.com/orders/success?uuid=' . \QBitFlow\Placeholders::UUID,	cancelUrl: 'https://shop.example.com/orders/cancel',	fees: new \QBitFlow\Params\CheckoutFees(		items: [			new \QBitFlow\Params\FeeItem(label: 'Shipping', amountUsd: '0.75', description: 'Standard, 3 to 5 days'),		],		processingFee: true, // the customer pays QBitFlow's fee: you keep 3.99 + 0.75	),));echo "Pay at {$session->link}\n"; // the customer pays the price, the shipping and the processing fee
  • Your lines (fees.items): up to 10, each a label (1 to 40 characters, one line), an optional description and an amountUsd (above 0, at most $1,000,000, 2 decimals).
  • The processing fee (fees.processingFee: true): your customer pays QBitFlow's fee, at the checkout's rate. Computed on the price and your lines, grossed up and rounded up to the cent, so you keep at least both. Omitted, your checkout.customerPaysProcessingFee setting decides; false turns it off. A marketplace seller's checkout follows the organization's setting: another value answers 403 processing_fee_set_by_organization.
  • The amount is the price plus every line: what's charged, split and recorded as amountUsd (amount in the token), with its priceUsd and fees. Test mode's price cap counts the lines (test mode).
  • A subscription locks its lines with its price (fees, next to priceUsd): every bill charges both, whatever the product's price or your fee becomes. The cap your customer signs is sized on that amount.
  • Lines are fixed when the session is created. A marketplace's commission is never passed on.