CPQ Revenue Lifecycle Overview
CPQ Revenue Lifecycle APIs
The CPQ Revenue Lifecycle APIs are a set of RESTful endpoints that enable external systems to create quotes and orders, modify existing subscriptions, and orchestrate the entire revenue lifecycle using Nue's pricing engine. They provide a streamlined, programmatic way to handle complex pricing, configuration, and lifecycle management from initial quote through ongoing subscription changes.
AI Coding Skills
Speed up development with pre-built AI coding skills that teach your AI coding assistant the exact API schemas, field names, enum values, and common pitfalls -- so it can generate correct API payloads on the first try.
Available Skills
Skill | Covers | Download |
|---|---|---|
Create Quote & Order | POST /cpq/quotes, POST /cpq/orders -- new business quotes and orders with products, bundles, discounts, and subscription terms | |
Update Quote & Order | POST /cpq/quotes/{quoteId}:update, POST /cpq/orders/{orderId}:update -- action-oriented edits to an existing quote or Draft order: header fields, line edits, add/remove lines, bundle reconfigure, and price tags, with pricing and tax recalculated | |
Change Order | POST /cpq/change-order -- renewals, price adjustments, quantity changes, cancellations, upgrades, reconfiguration, and cross-sells |
Setup
- Download the skill file(s) above
- Place them in your project's AI coding assistant skills directory:
OpenAI Codex:
your-project/
├── .codex/
│ ├── nue-rest-create-quote-order.md
│ ├── nue-rest-update-quote-order.md
│ └── nue-rest-change-order.mdClaude Code:
your-project/
├── .claude/
│ └── skills/
│ ├── nue-rest-create-quote-order/
│ │ └── SKILL.md
│ ├── nue-rest-update-quote-order/
│ │ └── SKILL.md
│ └── nue-rest-change-order/
│ └── SKILL.md- Your AI coding assistant will automatically use the skills when generating Nue API calls
What the Skills Provide
- Complete field reference -- every request field with type, required/optional, and description
- Correct enum values -- e.g., billingPeriod: "Month" not "Monthly"
- Response schemas -- expected response structure for parsing API responses
- Common mistakes -- a "Mistakes to Avoid" table that prevents known pitfalls like using effectiveDate (invalid) instead of subscriptionStartDate
- Worked examples -- real curl commands for every major scenario
API Overview
Create Quote (POST /cpq/quotes)
Create fully-priced quotes with automatic product resolution and pricing engine execution. Products are identified by productSku + uom, and the pricing engine resolves list prices, applies discounts, evaluates price tags, and expands bundles automatically.
Endpoint | Description |
|---|---|
POST /cpq/quotes | Create and persist a quote |
POST /cpq/quotes:preview | Preview a quote without persisting (dry-run) |
GET /cpq/quotes/{quoteId} | Retrieve a quote's JSON representation |
Key capabilities:
- Automatic product resolution by SKU or name
- Bundle auto-expansion with bundled, required, and optional add-ons
- Full pricing formula: ListPrice x Quantity x Term = ListTotal
- Header-level and line-level discounts with propagation rules
- Price tag evaluation (tiered, volume, ramp)
- Preview mode for what-if scenarios
Required fields: opportunityId, name, products
Create Order (POST /cpq/orders)
Create orders that provision subscriptions, assets, and entitlements. Uses the same request format and pricing engine as Create Quote -- products are identified by productSku + uom and pricing is resolved automatically.
Endpoint | Description |
|---|---|
POST /cpq/orders | Create an order (Draft status) |
POST /cpq/orders:preview | Preview an order without persisting (dry-run) |
Key capabilities:
- Same product identification and pricing engine as Create Quote
- Orders are created in Draft status; activation is a separate step
- After activation, provisions subscriptions, assets, and entitlements
- Supports bundles, discounts, price tags, and billing options
Required fields: customerId, subscriptionStartDate, products
Update Quote & Update Order (:update)
Change a quote or a Draft order that already exists, and re-run the same pricing and tax cascade the Nue Line Editor runs internally. This is the supported alternative to writing fields directly through the Objects API, which changes the value and recalculates nothing.
Endpoint | Description |
|---|---|
POST /cpq/quotes/{quoteId}:update | Apply update actions to an existing quote |
POST /cpq/orders/{orderId}:update | Apply update actions to an existing Draft order |
Action-oriented, not payload-oriented. You do not send the record you want; you send an ordered list of actions naming what to do. Fields and lines you do not name are left untouched, and a line is deleted only when you name its id. There is no separate preview endpoint -- preview is isCommit: false on the same call.
The six actions:
Action | Description |
|---|---|
updateHeaderFields | Patch header fields -- standard and custom |
updateLineItems | Patch fields on existing lines, addressed by line id |
deleteLineItems | Remove lines by id, cascading to children and private tags |
addLineItems | Add products and bundles; parentLineId adds an option under an existing bundle |
replacePriceTags | Swap a tag for another on every scoped line that carries it |
removePriceTags | Remove tags from the scoped lines and reprice without them |
Key capabilities:
- Actions are re-ordered server-side into a canonical sequence of stages, so the result is order-independent -- with one exception: removePriceTags and replacePriceTags share a stage and run in submitted order
- recalc selects what recomputes: AUTO (default), PRICING_ONLY, TAX_ONLY, NONE
- expectedLastModified gives you an optimistic-concurrency guard instead of a silent clobber
- Bundle reconfigure, line-level custom fields, address and taxation overrides, and price-tag swaps all work in the same call
- One transaction -- a pricing failure rolls the whole update back
Scope: quotes, and orders that have not been activated. Live subscriptions go through Change Order.
Change Order (POST /cpq/change-order)
Modify existing subscriptions through a single endpoint that supports renewals, quantity changes, price adjustments, cancellations, upgrades, reconfiguration, and more. Each change targets a subscription by its assetNumber.
Endpoint | Description |
|---|---|
POST /cpq/change-order | Create a change order or change quote |
Supported change types:
Change Type | Description |
|---|---|
Renew | Extend a subscription for another term |
AdjustPrice | Change pricing -- discounts, uplifts, or fixed price overrides |
UpdateQuantity | Add or remove seats (delta-based) |
Cancel | Terminate a subscription |
UpdateTerm | Extend or shorten the subscription term |
CoTerm | Align end date to a target date |
Upgrade | Replace with a higher-tier product |
Reconfigure | Add or remove add-ons within a bundle |
ConvertFreeTrial | Convert a trial to a paid subscription |
NewProduct | Cross-sell a new product (must pair with another change) |
Processing options: Use proceedOption: "CreateOrder" for immediate execution or proceedOption: "CreateQuote" for an approval workflow.
Objects API
Create, update, and delete Nue objects (Customers, Subscriptions, Orders, etc.) directly via REST.
Quick Comparison
| Create Quote | Create Order | Update Quote / Order | Change Order |
|---|---|---|---|---|
Use case | Pricing preview, approval workflows | Direct order creation | Edit an existing quote or Draft order | Modify existing subscriptions |
Product identification | productSku + uom | productSku + uom | Line id for edits; productSku + uom for adds | assetNumber (subscription ID) |
Pricing | Pricing engine resolves automatically | Pricing engine resolves automatically | Full recalc cascade; recalc selects what runs | Varies by change type |
Preview mode | Yes (:preview) | Yes (:preview) | Yes (isCommit: false) | No |
Request shape | Full record document | Full record document | Ordered actions array | Change-type array |
Output | Quote + Quote Line Items | Order + Order Products | Recalculated record + lines | Order or Quote + updated subscriptions |
Authentication
All CPQ Revenue Lifecycle API requests require your Nue API key:
curl -X POST 'https://api.nue.io/cpq/quotes:preview' \
-H 'nue-api-key: YOUR_API_KEY_HERE' \
-H 'Content-Type: application/json' \
-d '{ ... }'