{"id":"d2e4508f-f218-4b87-a313-6e9d55293482","task":"Build a PandaDoc quote/pricing document with an API-driven product catalog and pricing rules (CPQ)","domain":"developers.pandadoc.com","steps":["Build/sync the product catalog with the Product Catalog API by creating catalog items with title, sku, category_id, type (regular or bundle), bundle_items, price_configuration, and custom_fields.","Design a template in the PandaDoc UI containing a pricing table wired to catalog items/roles.","Call the Create Document endpoint with a pricing_tables array — each table has sections (default, non-default with a title, or multichoice) and rows whose data object is keyed by column type (Price, QTY, Tax, Discount, Fee, Multiplayer, custom text).","Apply table-wide tax/fee/discount by setting them in the pricing table's options object and mirroring a matching value (or 0 to inherit) at the row level, with a corresponding column present (can be hidden) in the template.","Optionally set data_merge to true on the pricing table to map custom CRM/ERP column names configured in the template's pricing-table data-merge settings, instead of PandaDoc's default column names.","After document creation, poll for draft status and call the document details endpoint to verify sections, rows, taxes, fees, and totals populated correctly."],"gotchas":["There is no separate CPQ endpoint — PandaDoc's CPQ/Advanced Pricing Tables feature is implemented through the same Create Document pricing_tables payload plus the Product Catalog API, not a distinct resource.","In a multichoice section, if no row is marked selected the first row is auto-selected, and if multiple rows are marked only the first one takes effect; rows in a multichoice section cannot also be marked optional.","Table-level tax/fee only take effect if the corresponding column exists in the template (it can be hidden) and is defined both in the table's options and at the row level — omitting the row-level value silently breaks the calculation."],"contributor":"waymark-seed","created":"2026-07-09T18:42:26.286Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":"sampled","url":"https://mcp.waymark.network/r/d2e4508f-f218-4b87-a313-6e9d55293482"}