Create a subscription upgrade
Creates a subscription upgrade that can be used to add or remove add-ons from an existing contract term.
- Use
/subscriptions/{subscription_id}/upgrade/{order_id}/estimateto preview pricing before confirming - Use
/subscriptions/{subscription_id}/upgrade/{order_id}/startto begin the upgrade
How plan_id affects pricing:
plan_idomitted — the upgrade keeps the subscription’s current plan version and contracted pricing (customers stay grandfathered). Ifbricksincludes a brick that doesn’t exist on the current plan version, it is pulled in from that plan’s latest published version, producing a merged plan version.plan_idprovided — the upgrade switches to the latest published version of the referenced plan. Ifbricksreferences a brick that only exists on the subscription’s prior plan version, it is carried over into a merged plan version.plan_idmay reference a different plan than the subscription’s current plan; that is how cross-plan upgrades are expressed.plan_idis only honoured whenbricksis also provided. Sendingplan_idwithoutbricksreturns 400.
How bricks affects existing discounts:
Per-brick discounts are replaced, not merged. The discount sent on a brick becomes that brick’s complete set of discounts for this order, and a brick sent without a discount ends up with none — any discount it previously carried is dropped.
This applies to every brick in the payload, not only the ones being changed. A brick included solely to keep it on the order still needs its discount resent, or it loses it.
Read the current values from the subscription’s line items — discount is returned there in the same shape this endpoint accepts — and send them back for every brick whose discount should carry over.
Authorizations
API key for authentication
Path Parameters
^([a-zA-Z\d\-]+)$Body
- SubscriptionInputUpgradeSinglePhase
- SubscriptionInputUpgradeMultiPhase
Subscription upgrade input serializer for upgrading a subscription order.
This payload has two forms — see anyOf:
- Single-phase — omit
phases; the order-levelstarts_at,contract_length,billing_frequencyandbricksdefine the one phase and are required. - Multi-phase — send
phases; the phases own the timeline, billing frequency and bricks, and the order-level equivalents become optional (omitted, they are derived from the phases).
The fields are declared optional because OpenAPI 3.0 cannot make one field's required depend on another. Sending neither form is a 400.
The effective date of the subscription upgrade. Required only when phases is omitted: when phases is provided the phases own the timeline, so the effective date is taken from the first phase's starts_at and this order-level value is ignored.
The bricks included in subscription upgrade. Quantity is used to upgrade the add-on quantity (ie. adding 2 more units should be quantity 2 -> quantity 4). For usage, quantity is used to set the pre-commitment (ie. previously having 5 pre-commitment quantity and updating it to 10 would update the pre-commitment quantity to 10.)
Optional plan ID for the upgrade. When provided, the upgrade switches to the latest published version of that plan; when omitted, it keeps the subscription's existing plan version and contracted pricing. Must be sent together with bricks — plan_id alone is rejected with 400. See the endpoint description for full semantics including cross-plan upgrades and merged plan versions.
Discount coupon codes to apply to the subscription upgrade. Currently only supports one discount coupon - only the first one in the list will be applied.
Optional list of phases for a multi-phase upgrade. Each phase's phase_position must match a phase on the base order; only the phases being changed need to be sent, and omitted positions are inherited from the base order unchanged. Order-level bricks and starts_at are ignored when phases are provided — the phases own the timeline and the first phase's starts_at is the upgrade's effective date.
The custom order form html to use with <html><body>...</body></html> formatting
Optional metadata to add to the subscription. Sending an empty map will delete all keys. Keys prefixed with _ are private and will be ignored.
Response
Serializer for individual subscription order
Unique identifier for the order
Total contract value with currency
URL to download signed order form PDF
TRIAL- TrialSTANDARD- New BusinessRENEWAL- RenewalUPGRADE- UpgradeRECAST- Recast
TRIAL, STANDARD, RENEWAL, UPGRADE, RECAST