The Adapter Model

One Pipeline, Any CPQ

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.

  • Internal: RenderDraw's native pricing engine — no third-party CPQ required
  • Logik: Logik.io configuration and pricing
  • Conga CPQ (SFDC): Conga / Apttus CPQ inside Salesforce
  • Infor CPQ: Infor's configure-price-quote engine
  • Salesforce Revenue Cloud: the modern SF revenue lifecycle CPQ
  • SF CPQ Legacy: Salesforce CPQ (Steelbrick)
  • SF B2B Commerce: Salesforce B2B Commerce pricing

Core CPQ Pipeline

📊

Price

rd_cpq/price@v1

Quote
📝

Create Quote

rd_cpq/create_quote@v1

Quote
📋

Push Line Items

rd_cpq/push_line_items@v1

Quote

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.

Block Type

Price (CPQ)

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.

Inputs

  • configuration (required) — kinds: configuration_result or pricing_bucket_rollup. The configured product or the aggregated bucket rollup to price.

Outputs

  • price_result — kind: price_result. The structured price, wired forward to Create Quote and the approval gate.

Parameters

  • connectionId — CPQ Connection. Adapters: internal, logik, conga_cpq_sfdc, infor_cpq, sf_rcl
  • currency — ISO 4217 currency code (default USD)
  • authorityModeresolve | force_internal | force_external (default resolve)

Common uses

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.

Block Type

Create Quote (CPQ)

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.

Inputs

  • price_result (required) — the structured price from rd_cpq/price@v1
  • buyer_context (optional) — account / contact / opportunity context to attach to the quote

Outputs

  • quote_handle — the unified handle to the created quote, carrying the adapter identity for downstream blocks

Parameters

  • connectionId — CPQ Connection. Adapters: internal, logik, conga_cpq_sfdc, infor_cpq, sf_rcl, sf_cpq_legacy, sf_b2b_commerce
  • currency — ISO 4217 currency code

Common uses

Open 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.

Block Type

Push Line Items (CPQ)

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.

Inputs

  • quote_handle (required) — the quote created by rd_cpq/create_quote@v1
  • line_item_set (required) — the set of lines to write onto the quote

Outputs

  • line_item_results — per-line write results, keyed back to the input set

Parameters

  • connectionId — CPQ Connection. Must match the wired quote_handle's adapter — a mismatch fails loud. Adapters: internal, logik, conga_cpq_sfdc, infor_cpq, sf_rcl, sf_cpq_legacy

Common uses

Write 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.

Block Type

Read Price Items (CPQ)

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.

Inputs

  • price_item_query (optional) — an optional query to scope the price-book page returned

Outputs

  • price_item_set — a page of price-book entries from the adapter

Parameters

  • connectionId — CPQ Connection. Adapters: internal, logik, conga_cpq_sfdc, infor_cpq, sf_rcl, sf_cpq_legacy
  • currency — ISO 4217 currency code
  • skus — array of SKUs to read; empty = all

Common uses

Pre-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.

Companion Blocks

RFP Pricing Helpers

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.

Pricing Rollup

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.

Price Approval Gate

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.

Quick Reference

Pricing & Quote Block Reference

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.

Wire One Pipeline. Switch the CPQ Behind It.

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.

Related