Skip to content

Quote → subscription provisioning

Quote → subscription provisioning

On acceptance, App\Billing\Cpq\QuoteProvisioner (bound to the App\Billing\Cpq\Contracts\ProvisionsFromQuote contract) turns the accepted quote into a real subscription through the engine App\Billing\Subscriptions\Contracts\SubscribesOrganizations seam — the same path the console and API use.

What is provisioned

  • The quote's primary plan line (the first recurring plan line) opens the subscription, with seats = its quantity, in the quote's currency.
  • The quote's order coupon, if any, is redeemed onto the subscription so its cycles are discounted exactly as quoted.
  • The subscription is linked back to the quote (subscription_id + provisioned_at), and the quote's detail cross-links to it.

Idempotency

Provisioning is idempotent: the quote's subscription_id is the guard. A quote provisions at most once — a re-accept (a retried request, a double click) returns the already-provisioned subscription and never opens a second one. Acceptance and provisioning run in one transaction.

Payment method

If the organization has no payment method on file, hand off to the hosted checkout to collect one (see Hosted checkout & portal). The subscription is provisioned on acceptance regardless; collection of a card is a separate, resumable step.

Modeling boundary (flagged)

The durable engine Subscription row carries no columns for a minimum commitment or a ramp schedule. Those committed terms are therefore not written onto the subscription — they live on the quote, which is the CPQ contract of record and computes the committed value through the engine MinimumCommitment and RampSchedule value objects. Provisioning wires the primary plan line; the full contract (term, commitment, ramp, one-off and additional lines) is preserved on the quote and its order form.

Multi-line / add-on provisioning (turning additional plan lines into subscription add-ons) is a documented extension point on QuoteProvisioner, not yet wired — the primary-plan path covers the common enterprise case (one plan, N seats, contract terms, a coupon).