Billing

Build merchant pricing on a real rule canvas

Trigger, condition, and pricing nodes wired together. Drafts validate before publishing, every generated charge keeps the rule version on the receipt, and operators can explain exactly why each line exists.

Active rules

Status, version, and trace on every rule

Each rule shows trigger, conditions, pricing, and lifecycle status — published rules charge immediately, drafts hold for review, disabled rules retain history without firing.

Billing rules

3 published
1 draft
RuleTriggerConditionPricingCategoryStatusVersionUpdated

USPS label · base fee

label.purchasedcarrier == USPS$0.42 per label
shipping
Published
v3Apr 21

Zone 5+ surcharge

label.purchasedzone >= 5$1.10 graduated
shipping
Published
v2Apr 18

Heavy package handling

shipment.packedweight > 25 lb$3.50 flat
shipping
Draft
v1Apr 26

Storage · pallet day

storage.daily_snapshottype == PALLET$2.00 per pallet/day
storage
Published
v5Mar 30

Holiday weekend pickup

label.purchasedweekend == true$0.50 surcharge
shipping
Disabled
v1Jan 02

Rule lifecycle

Draft, validate, publish, version

Every charge points back to the rule version that produced it. Disputes don't end in spreadsheet forensics — they end at the rule trace.

Draft

Edit rules safely while the published version keeps charging. Drafts validate every node before publish is enabled.

Validate

Trigger and pricing coverage are checked across all node paths. Missing branches block publish until resolved.

Publish

The canvas is versioned and stamped on every charge it produces — operators can audit which version generated which line.

Version

Old versions remain readable — past invoices keep pointing to the rule version that produced them.

Rule trace · CHG-2014-A

USPS-base v3

Trigger fired

label.purchased · CY-10492

Condition matched

carrier == USPS · true branch

Pricing node

$0.42 per label · USPS-base v3

Charge created

CHG-2014-A · Picking · $0.42

Walk through your pricing rules

Show us your merchant pricing logic and we'll model it as a node graph.

Schedule a Demo