Skip to content

Agreements and price changes

An agreement adds terms one Customer accepts beyond the Offer: a commitment, a service level with credits, and the rules for price changes.

An agreement, from template to renewal

The posted price stays the ceiling throughout. Filled: what the Customer sees. The point marks the money you are paid.

Agreements

Templates live in your file under agreements, and each Customer's copy is a versioned instance.

A Customer accepts its instance by click, by signature, or through an agent in the call.

PartWhat it does
TemplatesThe text in your file, checked at each deploy, with the plans each one covers
InstancesOne per Customer, engagement or supplier, versioned; a new template version reaches an instance only when its Customer accepts it
Acceptanceclick in the portal; signature as an envelope with signer order and an audit trail; call by an agent whose mandate covers the agreement
OverridesA price, a payment term, a service level or data terms for one Customer, layered over the Offer as an extension layers over the file
The posted ceilingNo override sells above the posted price, and the offer card says when private terms exist
ThingStatesWhat moves it
An agreementdrafted, sent, then signed or declined; a signed one is active, then endedA person on your team drafts it from a template; the Customer's signers sign in order; the term's dates
A commitmentactive, then met or short, then trued_upSpend against each period's amount; the true-up invoice at the term's end
An invoicedraft, open, then paid or void; a credit note against a paid oneThe cycle closes each period; a preview shows the next one at any time
A failed renewalretrying, grace, then recovered or degradedStripe's retries; dunning.grace; the plan dunning.then names
A price changeannounced, then applied; per Customer, grandfathered until its datechanges.notice, then changes.grandfather

Commitments

A commitment is spend promised over a term: an amount per period, ramps that raise it, an overage rate and a true-up.

Calls draw the commitment down at its agreed rate. Past it, overage bills at the rate the agreement names, never above the posted price.

At the term's end, a shortfall bills once as the true-up, or rolls into the next term where the agreement says so.

Service levels and credits

A service level is the promise in operate sold as a term: a metric, a target, a window, and the credit a miss earns.

The Verifier measures it from outside, per Verb. A missed window writes an Event, and its credit lands on the Customer's next invoice with no claim.

Price models and price changes

Beyond a price per call, an Offer prices by tier, and every price change reaches Customers by its notice rule.

ModelHow it bills
GraduatedEach unit at the price of its own tier
VolumeEvery unit at the tier the period's total reaches
PackageA credit pack: a price for a fixed amount, from credits
MinimumA plan's month price, with its includes drawn first
ChangeHow it reaches a Customer
A lower priceAt once, on every Interface and the next call
A higher price per callA breaking change: a new Version, after changes.notice
A plan's priceAt renewal after the notice; a Customer inside changes.grandfather keeps its price until that date
A failed renewalStripe's retries, then dunning.grace, then the plan dunning.then names; nothing is deleted
definition.ts
21 lines
import { define } from 'apis.dev'

/** Deals for each Customer, with a signed agreement and a service level for the largest. */
export default define({
  name: 'pipeline', domain: 'pipeline.apis.dev',
  Company: { name: 'string', domain: 'url!#', deals: '<-Deal.company' },
  Deal: {
    title: 'string', amount: 'decimal(12,2)', company: '->Company.deals',
    stage: { open: [], qualify: 'opened', win: 'qualified', lose: ['opened', 'qualified'] },
  },
  offer: {
    Team: { month: 49, seats: 5, seat: 9, includes: { 'Deal.open': 1000 } },
    Enterprise: { contact: true },
    'Deal.open': { graduated: [{ upTo: 100000, price: 0.001 }, { price: 0.0005 }] },
    agreements: { msa: { file: './agreements/msa.md', accept: 'signature', plans: ['Enterprise'] } },
    terms: { sla: { credit: 0.1, window: 'month', plans: ['Enterprise'] } },
    changes: { notice: '30d', grandfather: '365d' },
    dunning: { grace: '14d', then: 'Team' },
  },
  operate: { promise: { 'Deal.open': { success: 0.999, median: '1s' } } },
})

The posted price is the most any agreement charges, so a private agreement never costs a Customer more than the public Offer.