Fees and billing
How Billium charges merchants — platform fees, customer-paid fees, and monthly billing.
Billium charges a platform fee on every payment it settles. Because Billium is non-custodial, the platform fee is never deducted from the on-chain transfer — the customer's payment arrives at your wallet in full. Fees are accumulated in a separate MonthlyBill ledger and charged to you at the end of each month.
Platform fees by tier
Every merchant belongs to one of three pricing tiers. The tier determines the percentage Billium takes from each settled payment:
| Tier | Platform fee | Typical fit |
|---|---|---|
BASE | 1.0% | Default for new merchants. |
GROWTH | 0.8% | Merchants with consistent monthly volume. Upgrade on request. |
ENTERPRISE | 0.6% | High-volume merchants, custom contracts. Contact sales. |
The fee percentage is resolved from the merchant's pricingTier field at the moment a payment is calculated — not baked into the invoice at creation time. That means if you upgrade from BASE to GROWTH mid-month, invoices created before the upgrade will still settle at the new rate when they're paid.
There's no automatic tier promotion based on volume today. Tiers are set manually by Billium — reach out if you think you should be on a better tier and we'll review your account.
How the platform fee is calculated
platformFeeUsd = invoice.rawAmount × merchant.feePercentageFor a $100 invoice on a BASE merchant, the platform fee is $1.00. That $1.00 is recorded on Payment.platformFee and added to the merchant's current MonthlyBill.totalAmountUsd when payment.paid fires.
Two things this is not:
- It is not deducted from the on-chain amount. The customer pays
$100worth of crypto, all of which arrives at your wallet. Billium invoices you separately for the$1.00fee at the end of the month. - It is not charged per invoice. Fees aggregate across all your settled payments for the current UTC calendar month and become one bill.
Customer-paid fees (optional)
You can choose to pass the fee on to the customer instead of absorbing it yourself. Three fields on the merchant's Checkout configuration control this:
| Field | Purpose |
|---|---|
coverProcessingFees | If true, the merchant absorbs all fees — endAmount = rawAmount. If false, customer-paid fees are applied. |
customFeePercentage | Percentage added on top of rawAmount when customer pays fees. |
customFixedFeeAmount | Flat fee added when the invoice amount is above customFixedFeeThreshold. |
customFixedFeeThreshold | Minimum rawAmount at which the fixed fee applies. |
With coverProcessingFees = false, the customer sees an endAmount that's higher than the rawAmount:
endAmount = rawAmount × (1 + customFeePercentage) + fixedFeeIfOverThresholdA $100 invoice with a 2% customer fee becomes a $102 checkout. The extra $2 goes into the same settled payment and is recorded alongside the base amount.
Customer-paid fees are a setting of the checkout configuration, not the invoice. Every invoice under a merchant uses whatever's currently configured — there's no per-invoice override. If you need some invoices to absorb fees and others to pass them on, create the invoice with an adjusted rawAmount yourself instead of toggling the setting.
Monthly billing
Platform fees don't hit your books one at a time — they aggregate into a single bill per calendar month. Here's how it works.
Aggregation on every paid payment
When payment.paid fires, a listener runs in the same transaction that settled the payment:
- Look up (or upsert) the
MonthlyBillfor(merchantId, billingPeriod = start of current UTC month). - Idempotency check: if
payment.monthlyBillIdis already set, skip — this payment was already billed. - Increment
MonthlyBill.totalAmountUsdby the platform fee in USD. - Link
Payment.monthlyBillIdto the bill.
If the current month's bill has already been paid (rare, but possible if a merchant pays their bill mid-month and a new payment comes in), the fee rolls forward to next month's bill instead of re-opening the closed one.
Monthly finalization
On the 1st of every month at 00:00 UTC, Billium finalizes the previous month's bills. Bills already marked PAID are left alone — you'll never be charged twice for the same period.
Overdue bills
PENDING bills older than 30 days are automatically marked OVERDUE and you'll get an email notification so you know to act on it. Persistently overdue bills can lead to account suspension — contact support if you need a payment plan.
Paying your bill
Bills can be paid two ways:
- Stripe (card / ACH / SEPA, depending on your region).
POST /api/v1/billing/stripe/pay-billcreates a StripePaymentIntentkeyed by a deterministic idempotency hash, and the bill flips toPAIDwhen Stripe'spayment_intent.succeededwebhook lands. - Crypto — Billium creates an internal invoice linked to the bill via
metadata.monthlyBillId, and the bill flips toPAIDwhen that invoice reachesPAIDstatus. A slightly recursive setup, but entirely consistent with how every other payment works.
Both flows are idempotent: hitting the pay-bill endpoint twice for the same bill is safe and will not double-charge you.
What a merchant's invoice looks like
For completeness, here's what a paid $100 invoice on a BASE-tier merchant with coverProcessingFees = true produces:
| Record | Value |
|---|---|
| Customer sent | $100.00 worth of crypto to your wallet |
Invoice.rawAmount | 100.00 |
Invoice.endAmount | 100.00 (coverProcessingFees = true) |
Payment.platformFee | 1.00 |
Payment.feeApplied | 0.01 (1%) |
MonthlyBill.totalAmountUsd | incremented by 1.00 |
| On-chain | Full $100 worth lands at your wallet |
| End of month | Billium invoices you for the $1.00 platform fee (+ any a-la-carte features) |
You can always pull your current month's fee accumulation from the reports API in the dashboard — see the Reports section of your merchant settings.