Skip to content

Late Fees

Late fees charge a customer automatically when an invoice stays unpaid past its due date. Each fee is its own invoice, linked to the original. The original is never changed, and a fee never grows by compounding.

Late fees are available on Growth and Scale plans (invoicing_pro, invoicing_scale, growth and scale). They are off until you turn them on.

Go to Settings > Invoicing > Late fees.

SettingValuesDefault
Late feesOn or offOff
Fee typeFlat amount, or percent of what is still owedFlat amount
AmountFlat: more than 0, in your default currency. Percent: 0.01 to 25Empty. Required to turn on
Apply after1 to 90 days past the due date14
RepeatOnce only, or every 30 daysEvery 30 days
Maximum fees per invoice1 to 12, shown when repeating3
Fee invoice dueOn receipt, or the original invoice’s termsOn receipt
Tax on the feeNone, or one of your tax or VAT ratesNone

A live preview shows what the settings would do, for example “A $1,000.00 invoice paid 45 days late would get 2 fees: $15.00 on 14 Oct and $15.00 on 13 Nov.”

A flat fee applies only to invoices in your default currency, because a flat amount has no meaning in another currency. A percent fee works in any currency. Fees round to the currency’s own decimal places, so a yen fee is a whole number.

The policy in force at the moment an invoice is sent is copied onto that invoice, and printed on its PDF, hosted page and email: “Late fee: $15.00 if unpaid 14 days after the due date, then every 30 days, up to 3 times.”

An invoice created from an accepted estimate is the exception: it carries the late-fee terms printed on the estimate the customer accepted, not your settings at the time you send it, and none if that estimate showed none.

Changing your settings only affects invoices sent afterwards. An invoice sent while late fees were off never gets one, even if you turn them on later. Turning late fees off stops all future fees at once, including on invoices that already carry terms.

An invoice carries no terms, and can never get a fee, if it is a point-of-sale invoice, belongs to a subscription, has milestones, has no due date, is itself a fee invoice, or is in a currency your flat fee does not cover. Subscriptions have their own payment retry process.

A background process checks every minute. Days are counted on your calendar in your profile timezone, so the fee lands after local midnight of the last grace day, not at midnight UTC. If the invoice was sent after its due date, the grace period counts from the day it was sent.

When a fee comes due, it is charged unless something stops it. Some stops are permanent: the invoice will never get another fee.

  • the invoice is paid or void, or has no balance left
  • the maximum number of fees has been reached
  • the invoice is no longer eligible (for example it has no terms, or it is not a plain send-invoice)
  • you waived late fees on the invoice
  • a once-only fee would be below the smallest amount the currency allows

Others are temporary: nothing is charged now, and the invoice is checked again a day later.

  • late fees are off, or your plan no longer includes them
  • the customer has late fees turned off
  • a payment on the invoice is in flight
  • a repeating fee is below the smallest amount the currency allows

A temporary block does not consume a fee or bank the missed ones. Once it lifts, the invoice receives at most one fee, never one for every day it was blocked.

A percent fee is calculated on the original invoice’s remaining balance each time. Earlier fees sit on their own invoices, so they are never part of the base.

A fee is a normal invoice with one line, “Late fee: INV-0042 was due 30 Sep 2026”, sent to the same customer in the same currency and environment. It has its own number, link, PDF, reminders and payment, and it is not eligible for a fee of its own.

The original invoice shows it: “Late fee added: INV-0057, $15.00 (unpaid). Total now owed $1,015.00”, linking to the fee invoice. The original’s own amounts stay unchanged. A PDF downloaded before a fee was charged does not show it, which is correct, because it was true when issued.

Your platform fee applies to a fee invoice paid through stablecoin payments like any other invoice. In reports, late-fee income has its own line and is not mixed into the paid-invoices figure.

If a removed payment reopens an invoice that has terms, it resumes its schedule. A fee that came due while it was paid is not backdated, and the skipped fees are not banked.

Open the original invoice or the fee invoice and choose Remove fee, with an optional reason. This voids the fee invoice, marks it removed with who, when and why, emails the customer a short “Late fee removed” notice and fires invoice.late_fee_removed.

  • A fee that has been paid cannot be removed. Issue a credit note or refund instead.
  • A fee with a payment in flight cannot be removed until that payment settles or lapses.
  • A removed fee still counts toward the maximum and is never charged again.
  • Removing needs invoice.manage, and it works even after a downgrade, so you can always waive what you charged.

On the Customers page, switch on No late fees for a customer. New fees stop at once. A confirmation offers to also remove their unpaid fees, each removed with the reason “Customer exempted”. Paid fees are never touched, and neither are unpaid fees with a payment in flight, which stay until that payment settles or lapses. Turning the exemption off again does not restore removed fees or backdate fees for the exempt period. Changing it needs customer.manage.

To be lenient with one client on one invoice, without turning late fees off for everyone, switch on No late fees on this invoice on the invoice’s draft, in the create or edit form. The invoice is then sent with no late-fee terms, prints no late-fee line on its PDF, hosted page or email, and can never be charged a fee. The switch is off by default, and the form shows it when your plan includes late fees, whether or not the policy is on at the moment, because terms are stamped when you send and not when you write the draft.

  • It is set on the draft and read when you send. The switch decides what will be stamped. It does not edit something already stamped, so it can only be changed while the invoice is still a draft. After you send, the invoice’s terms are what your customer was told.
  • It only takes terms away. It also drops late-fee terms your customer signed on an accepted estimate. It can never add a fee or raise one.
  • It is not retroactive. It never clears the terms an already-sent invoice carries, and never removes a fee that was already charged. For those, use Remove fee or No late fees on the customer, both described above.
  • It is not tied to your plan, on purpose. Late fees are a paid feature, but the plan only controls setting up fees. Forgiving them is never blocked, the same as removing a fee and exempting a customer. So if you downgrade, a draft that is already waived still shows the switch, and you can still turn it off or on. Fees that would have come due after a downgrade are paused rather than lost: they resume if you upgrade again (see When a fee is charged).
  • Copies keep it. Duplicating a waived invoice, or an invoice that recurs, carries the waiver to each copy, because the copy is the same invoice for the same client.

Changing the switch is recorded in the audit log as invoice.late_fees_waived, only when the value actually changes, and needs invoice.manage.

The late-fee settings and the remove and exempt actions are dashboard-only and denied to API keys, so a leaked key cannot switch on or waive money owed to you. Changing the per-invoice waiver on an existing draft is denied to API keys as well.

You can create an invoice already waived from the dashboard, from GraphQL (lateFeesWaived on createInvoice) and from REST (late_fees_waived on POST /api/v1/invoices). Both APIs refuse it on an immediate sale, which has no late-fee terms to waive. Changing the waiver on an existing draft is available from the dashboard and GraphQL only, through the setInvoiceLateFeeWaiver mutation (see Mutations); there is no REST endpoint for it. An API key, over GraphQL or REST, can create an invoice already waived but cannot waive an existing draft.

Fee invoices are ordinary invoices, so they appear in the invoices list and the invoices API like any other. Events: invoice.late_fee_applied and invoice.late_fee_removed. See the payload reference.