Enterprise SaaS / Custom Contracts
The enterprise SaaS pricing pattern is what happens when standard self-serve tiers stop fitting the deal: the customer is a global company with custom requirements, the sales cycle is months long, the contract is multi-year with negotiated terms, the deal is paid in the customer's local currency under their bank's FX preferences, and finance / legal / deal-desk all need to sign off before the deal closes. The same platform that serves $10/month self-serve customers must also serve $500k/year custom contracts without bending the codebase to accommodate either side.
Real-world examples. Salesforce (custom-priced multi-year contracts with deal-desk gates), Workday, ServiceNow, SAP, Atlassian Enterprise, Snowflake, Databricks, GitHub Enterprise, GitLab Ultimate, MongoDB Atlas Enterprise. Common shape: account-specific pricing dramatically different from the catalog, multi-year terms with annual or quarterly billing, multi-currency under the customer's preferred currency, internal approval gates for any deviation from standard pricing, dedicated success manager per account, custom invoice formatting and PO requirements.
The shape of the problem
Enterprise sales mechanics translate into specific billing requirements:
- Account-specific pricing across many products. A standard plan might have 8 priced products; the enterprise contract carries custom rates on most of them, plus add-ons not on the catalog. Modeling this as a one-off plan creates plan sprawl; modeling it as overrides keeps the catalog clean.
- Multi-year terms, annual billing. Contract is 3 years, but billed annually with the second/third year prices already pinned. Mid-year changes (true-ups, expansions) need handling without rebuilding the whole contract.
- Multi-currency invoicing under the customer's FX preferences. Customer wants invoices in EUR even if the catalog is USD; their finance team wants the FX rate locked at the start of each annual period for predictability (period_start FX policy).
- Deal-desk approval gates. Any deviation from standard pricing above a threshold triggers internal review - sales, deal desk, finance, legal - before the contract activates.
- Custom invoice formatting. Enterprise customers have PO numbers, Leitweg-IDs, internal cost-center codes, custom branding requirements, and (in the EU) often need XRechnung/EN 16931 e-invoice format.
- Payment terms. Net 30/60/90 instead of "due on receipt"; customer pays via wire transfer with a manual recording flow rather than auto-debit.
- Renewal forecasting. Finance needs to know which contracts are renewing in the next quarter, what they're renewing at, and which are at risk.
Kontorion blueprint
| Concern | Kontorion primitive |
|---|---|
| Account-specific pricing | Customer price overrides per (customer, product) |
| Multi-currency under customer's preference | Customer preferred_currency + org FX policy: period_start |
| PO numbers, Leitweg-IDs | Standard invoice fields buyer_reference, delivery_date |
| EN 16931 / XRechnung | GET /invoices/{id}/xrechnung |
| Net 30/60/90 payment terms | Subscription payment_terms_days override |
| Manual wire transfer recording | POST /invoices/{id}/record-payment with reference |
| Renewal pipeline forecasting | Analytics on subscription term_end field |
Build it
1. Create the enterprise customer
Code
2. Apply customer-specific price overrides
The negotiated contract gives Acme 30% off the platform fee, custom rate on metered API calls, and a flat-fee for a service that's normally per-call:
Code
3. Configure deal-desk approval workflow
Trigger an approval workflow for any new override above a threshold:
Code
When the AE creates the override above the threshold, an approval.request_created fires; the override stays inactive until all required steps approve.
4. Set FX policy to period_start for predictable annual statements
The org's FX policy is set once at the organization level:
Code
Now every invoice for any customer uses the FX rate active at the start of the billing period. Acme's annual invoice has predictable EUR amounts even if USD/EUR moves during the year.
5. Create the multi-year subscription
Code
Three-year term with annual billing (driven by the price's billing_interval: "yearly" with billing_interval_count: 1). renewal_notice_days: 90 triggers subscription.renewal_upcoming 90 days before term end, surfacing the renewal in your account-management tooling.
6. Generate the first invoice with PO and Leitweg-ID
When the first annual invoice generates, it carries the customer's buyer_reference (PO) and delivery_date automatically:
Code
7. Customer pays by wire; record the payment manually
Code
8. Export XRechnung XML for the customer's e-invoice ingestion
Code
The XML includes Leitweg-ID, supplier and buyer VAT IDs, line-by-line tax breakdown, and the PO reference - everything required by EN 16931 for B2B/B2G electronic invoicing.
Variations
- Quarterly billing. Same contract, just
billing_interval: "quarterly"on the price. Each invoice is one-quarter of the annual. - All-upfront prepay. Generate one invoice for the full term value at start; treat each subsequent year as zero-charge cycles via plan configuration.
- Mid-term true-up. Customer adds 50 seats mid-year.
POST /v1/subscriptions/{id}/change-quantitywith{ "subscription_item_id": "si_…", "new_quantity": 250 }produces a true-up invoice for the prorated additional seats. - Custom branded invoice templates. Per-customer invoice template overrides are configured via
metadata.invoice_template_idand rendered by the PDF service. - Multi-entity invoicing. Acme has subsidiaries in DE, FR, IT - each needs separate invoices with their own VAT ID. Create one customer per entity; group them under a parent account via
metadata.parent_customer_idfor unified reporting. - Renewal automation. A
auto_renew: truesubscription that approaches term end firessubscription.renewal_upcomingfor downstream listeners to act on.
What you don't have to build
- Per-customer pricing layered cleanly on top of the catalog (no plan sprawl)
- Multi-step deal-desk approval with role-based gates and timeouts
- Multi-year subscription term tracking with renewal notification
- Period-start FX rate pinning for predictable multi-year contracts
- EN 16931 / XRechnung e-invoice generation
- PO and Leitweg-ID propagation onto invoices
- Net-N payment terms enforcement and dunning behavior
- Manual wire-transfer recording with audit trail
- Renewal pipeline reporting (
/analytics/renewal-pipeline)
Next steps
- Customer Price Overrides - the core enterprise pricing primitive
- Exchange Rates - period_start FX policy for predictable annuals
- Invoices - XRechnung export, PO/Leitweg-ID handling
- Tax Compliance - reverse charge and intra-EU invoicing