Skip to content

Recurring Contracts

Recurring Contracts automate your managed-services billing. Define what a customer is charged and how often, and Breeze generates the invoices on schedule – resolving per-device and per-seat counts at billing time so the amount always reflects the customer’s actual environment. Open Contracts from the sidebar.

Contracts are partner-scoped and bound to a customer organization.

Two settings determine the rhythm:

  • Billing timingin advance (bill at the start of each period) or in arrears (bill at the end).
  • Interval – monthly, quarterly, annually, or a custom number of months.

From these, Breeze computes the next billing date. When that date arrives, a billing period is created, line quantities are resolved, and – if auto-issue is on – an invoice is generated automatically.

Status Meaning
Draft Being set up; not yet billing
Active Billing on schedule
Paused Billing temporarily stopped
Cancelled Ended
Expired Past its end date

Each line is one charge on the contract. Lines can resolve their quantity in different ways:

Line type How quantity is determined
Flat A fixed amount each period, regardless of count
Per device Counts the customer’s devices at billing time × unit price
Per device role Counts the customer’s devices whose role is in the line’s set (for example switch + router + firewall, or workstation + server) at billing time × unit price
Per device group Counts the members of one device group at billing time × unit price. Static groups bill their current members; dynamic groups are evaluated from their filter when the estimate or invoice is computed
Per seat Counts the customer’s seats/users at billing time × unit price
Manual A fixed quantity you set × unit price

Per-device and per-device-role lines can be scoped to a specific site so you bill only the devices at that location. A per-device-group line is not site-scoped: make the group itself site-bound instead. Per-seat lines always bill the organization’s whole active-user count and cannot be site-scoped. A line can link to a catalog item, which prefills its description and price.

Editing a line. On a draft or active contract you can edit a line in place – its description, price, tax flag, quantity, site, device roles, device group and catalog link – from the contract editor. The line keeps its identity, so invoices already generated from it stay linked to it and any allowance you set later is preserved. The line type cannot be changed: remove the line and add a new one instead. A catalog-linked line keeps the price it was given when it was added; use Refresh price from catalog to re-price it. Clearing a catalog link asks you for a unit price, because nothing re-prices the line afterwards. Edits apply from the next billing period onward; invoices that have already been generated are never rewritten. Adding, changing, or removing a line is recorded in the Audit Trail against the contract — the entry names which fields changed, and the old and new unit price when the price moved. There is no per-line history on the contract page itself.

Any line that counts something — per device, per device role, per device group or per seat — can carry an included quantity: “up to 25 devices included”. With an included quantity set, the line bills that quantity every period, even when fewer are counted — it is a fixed inclusion, not a cap on a variable count. Anything above it is handled one of two ways:

  • Bill extras. A second, customer-visible line is added to the invoice for the units above the included quantity, at the overage price you set, directly under the line it belongs to. It is an ordinary line: it follows the base line’s tax treatment, it counts toward margin, and you can edit or remove it on a draft invoice.
  • Flag extras for review. Nothing extra is invoiced. The excess is reported on the contract estimate, on the result of a manual Generate now, and in the nightly billing log, so somebody can decide whether to raise the included quantity or add a line.

The overage price must be valid in the contract’s currency (a yen contract cannot have a ¥12.50 rate), and an overage price of zero is allowed — the extras are itemised on the customer’s invoice at no charge. An included quantity must be a whole number greater than zero, and cannot go on a flat or manual line. While any line carries an overage price, the contract’s currency cannot be restamped: clear the allowance (or the lines) first, because an overage price you typed by hand cannot be re-derived from a price book.

Dynamic groups on a contract are evaluated live when the estimate or invoice is computed, not from the member list cached on the Device Groups page, so a device that changed since the group was last refreshed is still billed correctly. The one exception is a filter condition that tests membership in another group, which reads that group’s cached list. A group billed by a draft, active or paused contract cannot be deleted until the line is removed; a group deleted after a contract ended stays on that contract’s lines by name.

Device roles come from the agent’s automatic classification, a network discovery scan, or a manual override on the device. A device whose role is still Unknown is never billed by a per-device-role line, though a per-device or per-device-group line bills it like any other machine. The contract’s estimate and each generated invoice report how many devices on the organization are not billed by any line, broken down by role – and each role in that breakdown is a link to the devices list, already filtered to that role in that customer’s organization, so you can classify them or add a line before the next period. The link carries the organization, so opening it in a new tab switches your org scope to the contract’s customer.

Coverage is worked out live every time you look at it – nothing is stored – and only active contracts count. A device covered by a draft contract still reads “no active contract line bills this device” on its own page until the contract is activated, even though the draft contract’s own estimate counts it: the two answer different questions.

A contract is priced in the customer organization’s billing currency, which the organization inherits from your partner currency when it is created. Every line must be in that currency, and the invoices the contract generates inherit it.

  1. Go to Contracts and click New contract.
  2. Select the customer organization, name the contract, and set the billing timing, interval, and start date.
  3. Add lines – choose flat, per device, per device role, per device group, per seat, or manual, and set the price (and quantity, roles or group where applicable). Link a catalog item to prefill description and price. You can edit any line later from the same screen while the contract is a draft or active.
  4. Add any terms and notes.
  5. Review the estimated value this period – per-device, per-device-role and per-seat lines resolve to live counts so the estimate is real, not a placeholder, and any devices no line bills are called out.
  6. Activate the contract to start billing.

The contract list shows an estimated monthly recurring strip across active contracts (normalized for cadence) and a per-contract estimate column, so you can see recurring value at a glance.

When a customer accepts a quote or proposal that includes recurring (monthly or annual) line items, Breeze automatically creates a draft contract from those recurring lines — so an accepted proposal turns straight into the agreement that bills it, with no re-keying.

  • Monthly and annual lines are split into separate draft contracts (one billing cadence each).
  • The draft inherits the quote’s terms, currency, and the prices the customer agreed to.
  • It lands as a draft for you to review, adjust lines, and activate when you’re ready to start billing.

A recurring quote line that bills a device set becomes a contract line of the matching type (per device, per device role, per device group or per seat) instead of a fixed-quantity line, with the accepted unit price frozen, so the contract bills the actual count every period.

Any one-time charges on the same quote become an invoice instead, not a contract.

A contract line scoped to a site records the site’s name as well as its id. If that site is deleted, the line stops billing and says so. The contract detail shows “site deleted,” and generating an invoice refuses instead of quietly falling back to billing every device in the organization. Nothing is written — the whole generation run stops, so you never get a partial invoice. Re-scope the line to another site, or remove it, and generation resumes.

The refusal currently surfaces as the raw message from the server, naming the internal line id and the deleted site — technical-looking, but it tells you exactly which line to fix.

A line whose site was deleted before this behavior shipped cannot be recovered because its site name was never recorded. It stays organization-wide until a technician re-scopes it.

Action Effect
Activate Move a draft to active and set the next billing date
Pause Temporarily stop generating invoices
Resume Continue billing from a paused state
Cancel End the contract

You can also generate now to create the current period’s invoice immediately rather than waiting for the schedule.

Breeze records the exact devices behind every auto-counted line at generation and never re-derives them. Reclassifying, deleting or moving a device afterwards cannot change what a past invoice says it billed. If that invoice is voided and reissued, its recorded device evidence is copied to the replacement rather than recalculated.

Each billed period also records how many devices no line on that contract billed, by role, together with the flagged and billed overage totals. The contract’s billing history shows this outcome for each period.

Uncovered device identity is not stored. A period says how many devices were uncovered and by which role, never which ones. To answer “Which devices are uncovered right now?”, use the device Billing panel or the contract’s coverage notice. Both check today’s fleet live.

Periods billed before this feature was available have no recorded outcome and show Not recorded. A period on a contract with no device-counted line shows No device lines. That means no measurement was taken, not that zero devices were measured.

A contract with an end date can be set to renew itself automatically instead of expiring. When auto-renew is on, Breeze extends the contract’s term in place before it lapses, so billing continues without a gap and you never have to recreate the agreement.

To enable it, give the contract an end date, then turn on Auto-renew at end of term and set:

  • Renewal term (months) — how far each renewal extends the end date (for example, 12 to renew for another year).
  • Advance notice (days) — how many days before the end date Breeze warns you that a renewal is coming. Defaults to 30.

On the contract’s detail page, the Renewal summary shows the current setting (the renewal term, the current end date, and the notice lead time) or that the contract does not auto-renew.

Select contracts using the checkboxes in the contract list to reveal a bulk action bar.

Action Permission required
Cancel Contract management
Delete drafts Contract write

Actions run per-item in isolation, so partial success is possible.

Separate from the recurring-billing contracts above, Breeze keeps a library of contract templates – the legal-document text (or an uploaded PDF) you attach to a quote for the customer to review and effectively sign as part of accepting a proposal. Open Contracts → Templates to manage the library.

A template is owned either by your whole partner (usable on any customer’s quotes) or by a single organization, chosen when you create it.

  1. Go to Contracts → Templates and click New template.
  2. Name it and choose its owner: your partner (available to every organization) or one organization (available only there).
  3. Add a version – either author the document as rich text directly in Breeze, or upload a PDF (up to 10MB). An uploaded file must be a readable, unencrypted PDF.
  4. Publish the version once it’s ready to use on quotes.

Each template can have multiple versions. A new version starts as a draft you can keep editing; publishing it locks the content and assigns it a version number – published versions are immutable, so a template already attached to a quote never changes underneath the customer. To revise a published template, add another version and publish that one; existing quotes stay pinned to whichever version they were attached with (see Contract blocks in the quote editor).

Archive a template to stop it from being used on new quotes. Archiving doesn’t touch versions already attached to existing quotes or the executed documents generated from them.

An authored template can include {{variable}} placeholders that Breeze fills in per quote when the block is rendered or sent. Each placeholder is either:

  • Auto – filled automatically from the quote, with no data entry required. The built-in auto variables are the customer’s name and address, your organization’s (seller) name, the quote number and title, the one-time/monthly/annual/total amounts, and the effective and expiry dates.
  • Manual – anything else. The technician attaching the template to a quote fills these in by hand (for example, a scope note or a specific term).

Publishing a version scans its body for {{variable}} tokens and classifies each one automatically – a name that matches a built-in auto variable is treated as auto, everything else as manual.

Contract access is governed by role permissions: viewing requires contract read access, creating and editing requires contract write access, and lifecycle actions (activate, pause, resume, cancel) require contract management access. The same permissions gate the contract template library. Assign these through Settings → Users & Roles.