The provider-agnostic CPQ pricing and quote pipeline. Dispatch a configuration to a pricing engine, create a quote, push line items, and read price books — all through one adapter model. Wire the pipeline once, then switch the CPQ behind it without rebuilding your workflow.
RenderDraw's pricing and quote blocks are provider-agnostic. Each block routes to a tenant's CPQ connection through an adapter — so the same four blocks drive RenderDraw's internal pricing engine or Logik, Conga, Infor, Salesforce Revenue Cloud, Salesforce CPQ Legacy, and Salesforce B2B Commerce.
Wire the pipeline once. Switch the CPQ behind it by changing the connection on each block — the wires, the data shapes, and the run logic stay exactly the same. The core four-block flow is Price → Create Quote → Push Line Items, with Read Price Items as a standalone read of the price book.
rd_cpq/price@v1
rd_cpq/create_quote@v1
rd_cpq/push_line_items@v1
Read Price Items (rd_cpq/read_price_items@v1) runs standalone — a read-only page of the tenant's price book, used anywhere a workflow needs catalog prices.
rd_cpq/price@v1 · Category: Quote
Dispatch a configuration to a CPQ pricing adapter and emit a price_result for downstream quote, line-item, and approval blocks. This is the entry point of the pipeline — it turns a configured product or a priced bucket rollup into a structured price.
configuration_result or pricing_bucket_rollup. The configured product or the aggregated bucket rollup to price.price_result. The structured price, wired forward to Create Quote and the approval gate.internal, logik, conga_cpq_sfdc, infor_cpq, sf_rclUSD)resolve | force_internal | force_external (default resolve)Price an AI-extracted configuration mid-RFP, re-price after a human edits quantities, or pull an internal sanity price alongside the external CPQ price for margin comparison.
authorityMode decides who prices. resolve lets the connection's adapter decide; force_internal always prices with RenderDraw's native engine (useful for a fast internal estimate); force_external always defers to the third-party CPQ as the system of record.
Two input kinds, one block. Wire a configuration_result straight from the configurator, or a pricing_bucket_rollup from the RFP pricing rollup helper — Price accepts either and emits the same price_result.
rd_cpq/create_quote@v1 · Category: Quote
Create a fresh CPQ quote from a wired price_result. Adapts to Conga, Salesforce, Infor, Logik, and RD-internal — and surfaces a unified quote_handle for downstream blocks, so the rest of your workflow never needs to know which CPQ created the quote.
rd_cpq/price@v1internal, logik, conga_cpq_sfdc, infor_cpq, sf_rcl, sf_cpq_legacy, sf_b2b_commerceOpen a quote in your CPQ the moment a price is approved, attach it to the originating Salesforce opportunity via buyer_context, or stand up a quote in RD-internal when no third-party CPQ is in play.
The quote_handle is the contract. Every downstream block — Push Line Items, approval gates, proposal generation — works off the unified quote_handle rather than a provider-specific quote ID. Switch CPQ adapters and the wiring is unchanged.
Widest adapter coverage. Create Quote supports all seven adapters — including sf_cpq_legacy and sf_b2b_commerce — so quote creation works against legacy Steelbrick orgs and B2B Commerce carts alike.
rd_cpq/push_line_items@v1 · Category: Quote
Push a wired line_item_set onto a wired quote_handle. Idempotent per LogicalLineKey with a deterministic externalRequestId — so a retried or re-run workflow never double-writes lines into the CPQ.
rd_cpq/create_quote@v1quote_handle's adapter — a mismatch fails loud. Adapters: internal, logik, conga_cpq_sfdc, infor_cpq, sf_rcl, sf_cpq_legacyWrite a priced bill of materials onto a fresh quote, append add-on lines after a human gate, or safely re-run a failed push without creating duplicate lines.
The connection must match the quote. Push Line Items checks that its connectionId matches the adapter that created the wired quote_handle. A mismatch fails loud rather than silently writing into the wrong CPQ — there is no cross-adapter line push.
Safe to retry. Idempotency is keyed on LogicalLineKey + a deterministic externalRequestId. Durable re-runs and retries converge to the same line set instead of duplicating it.
rd_cpq/read_price_items@v1 · Category: Quote
Read a page of price-list / price-book entries from the tenant's CPQ adapter. Read-only — price-list authoring lives in the provider's own admin UI. Use it anywhere a workflow needs catalog prices without creating or modifying a quote.
internal, logik, conga_cpq_sfdc, infor_cpq, sf_rcl, sf_cpq_legacyPre-fill an AI extraction with current catalog prices, validate that an RFP's requested SKUs exist in the price book, or surface a price list to a human reviewer before a quote is built.
Read-only by design. Read Price Items never writes. Price-list authoring stays in the provider's own admin UI — this block only pages through what is already published, so it is safe to call freely from any branch of a workflow.
Scope with skus or read all. Pass a SKU array to read just the entries you need, or leave it empty to page the full price book — the same block serves a targeted lookup and a full catalog sync.
Two RFP-side helper blocks feed and gate the CPQ pipeline — aggregating priced buckets into a rollup that Price can consume, and pausing for margin sign-off before a quote is committed.
rd_rfp/pricing_rollup@v1
Aggregates priced buckets into a configuration / pricing rollup that feeds rd_cpq/price@v1. It emits a pricing_bucket_rollup — one of the two input kinds the Price block accepts — so RFP scope, broken into priced buckets, can flow straight into the CPQ pipeline.
Common uses: Roll up per-section RFP pricing into a single quotable total, or merge multiple AI-extracted scope buckets before pricing.
rd_rfp/price_approval_gate@v1
A human gate that pauses the workflow for margin / price sign-off before a quote is committed. Place it between Price and Create Quote so no quote leaves the system without an approver confirming margin — the durable run waits as long as needed.
Common uses: Route high-value or low-margin prices to a senior estimator before quote creation. See Human Gates for routing, SLA timers, and escalation.
The four core CPQ blocks plus the two RFP pricing helpers, with their versioned type ids, category, and primary output.
| Block | Type id | Category | Primary output |
|---|---|---|---|
| Price (CPQ) | rd_cpq/price@v1 |
Quote | price_result |
| Create Quote (CPQ) | rd_cpq/create_quote@v1 |
Quote | quote_handle |
| Push Line Items (CPQ) | rd_cpq/push_line_items@v1 |
Quote | line_item_results |
| Read Price Items (CPQ) | rd_cpq/read_price_items@v1 |
Quote | price_item_set |
| Pricing Rollup | rd_rfp/pricing_rollup@v1 |
RFP | pricing_bucket_rollup |
| Price Approval Gate | rd_rfp/price_approval_gate@v1 |
RFP / Gate | approval decision |
Provider portability is the whole point. Because every block routes through a tenant's CPQ connection via an adapter, you can prototype against RenderDraw's internal engine, then re-point the same workflow at logik, conga_cpq_sfdc, infor_cpq, sf_rcl, sf_cpq_legacy, or sf_b2b_commerce by changing connections — no re-wiring, no re-shaping of data. The one rule the engine enforces: Push Line Items' connection must match the adapter that created the quote.
Price, quote, and push line items against your CPQ of record — or RenderDraw's internal engine — with the same four blocks. Start with the adapter you have today and re-point later.