CanopyDocs
DocsBilling

Billing

Price each client's warehouse work with rate cards, watch the charges accrue period by period, review the one-off fees, and issue the invoice.

Billing is how your 3PL turns the work in the warehouse into money: every pick, label, carton received, bin occupied and return processed becomes a charge, priced by the client's rate card, collected into a billing period, and settled by an invoice. The section has three screens, each with its own chapter here:

  • Rules — every pricing rule across all clients in one list, plus the tenant-wide shared rules, the per-client ad-hoc charge types and recurring charges.
  • Rate Cards — one client's pricing at a time: the card's rules by category, its lifecycle (draft, scheduled, active, ended), its billing cadence, and the dialogs that create, revise, duplicate and version a card.
  • Operations — the money pipeline: billing periods and their charges, invoices, adjustments, carrier reconciliation, the ad-hoc approval inbox, and stranded money. The invoice page lives here too.

The sidebar entry is Billing, with Rules, Rate Cards and Operations beneath it; /billing itself opens Rules.

Behind a launch switch

Billing is switched on per environment. Until it is on for yours, the sidebar has no Billing entry and the pages answer Not Found; the API refuses its routes independently. Everything below describes the screens as they run where it is on.

Who can do what

Billing is warehouse staff only. A client user who opens a billing URL sees "Billing is available to warehouse staff only." and nothing else — the API lets a client read their own periods, charges, adjustments and invoices, but no portal screen shows them yet.

A partner API credential (Settings → API Access) reads billing by its Data access. One pinned to a client and holding billing:read sees that client's periods, charges, adjustments and invoices as the client's own login would, in the client shape; a tenant-wide one reads across your clients as an admin does. rate-cards:read opens the rate cards to tenant-wide credentials only, and a pinned one is refused like a client login. Neither scope writes anything. The scopes are listed under API Access.

Between the two staff roles, the split is reading versus authoring:

Tenant AdminTenant Operator
Rules and Rate CardsFull authoring — every rule, card, shared rule, ad-hoc type, recurring charge and cadence write is admin-only on the server.Reads everything; every authoring control is hidden, rows don't open an editor.
Periods and chargesRecompute a period; void a hand-entered charge; open a period from Stranded money.Reads periods and charges; adds ad-hoc charges (they land pending review).
Adjustments and carrier reconciliationBoth roles post, edit and delete adjustments and run a carrier CSV.Same.
InvoicesReads, generates, downloads.Invoice reads admit admins and client users but not operators, so the Invoices tab can't load for an operator.
Review inbox, Stranded moneyAdmin-only tabs.Not shown.

How the money is modelled

Categories

Every charge belongs to one of twelve categories, and every rule prices exactly one category:

CategoryWhat it prices
PickEach order line or item picked (or a whole order — see Charge per on the Rules page).
LabelEach shipping label bought — only when the card charges shipping labels.
Receiving — Pallet, Receiving — CartonPallets and cartons checked in on an inbound shipment.
Storage — Pallet, Storage — BinOccupancy, computed from the bins and single-client pallets holding the client's stock.
Return ProcessingEach RMA processed.
Ad-hocNamed one-off fees — shrink wrap, kitting, relabelling — from the client's ad-hoc charge catalogue, or typed in by hand.
Shipping ReconciliationPostage differences a carrier bills after the fact, imported from the carrier's CSV.
Order fees, Receiving fees, Return feesAdditive fees that stack on top of the rate above — a kraft mailer per order, pallet wrap per receipt, an inspection fee per return.

The first nine are rate categories: for each event exactly one rule wins (the highest priority, then the most specific; a catch-all sits at the bottom), and its price is the charge. The three fee categories are additive: every active fee rule that matches fires and stacks, there is no catch-all or priority, and each fee needs a name because that name is the invoice line.

Rate cards, shared rules, ad-hoc types, recurring charges

  • A rate card is one client's set of rules with an effective window. At any instant one card prices a client; a new card seals the previous one, and a live card is revised into a new version rather than edited in place.
  • A shared rule is a tenant-level template — one price, applied to many clients as a linked copy on each of their cards. Editing the template propagates to every copy; a copy can be detached to drift on its own.
  • An ad-hoc charge type is a per-client named fee that is not a card rule: it applies whenever it is active, whichever card is live. Manual types are picked by operators at the end of a workflow; automatic types are applied to matching orders at pack time.
  • A recurring charge is a standing fee (an account-management retainer, say) that materialises as one charge when each billing period opens.

Periods and invoices

A billing period is a span of time set by the client's billing cadence — a cron expression, monthly on the 1st at 00:00 UTC unless you change it. Charges accrue into the client's one open period. When the window elapses the period closes by itself (there is no close button), passes through Closing while it is finalized, and reaches Finalized; an admin then generates the invoice, which marks it Invoiced. Ad-hoc charges that need approval wait in the Review inbox; one still pending when its period closes is carried into the next period once, then denied.

Where the charges come from

Charges are generated from the events themselves — a pack completed, a receipt posted, a return closed — and re-derived whenever a period is recomputed. That is why a generator-owned charge can't be voided by hand (the next recompute would put it back): you change the rule it prices from, or post an adjustment. Only ad-hoc, recurring, manual and work-order charges are yours to void.

On this page