{"id":"6e48efa4-d6f5-4a1c-97d5-5cbc7dcba43b","task":"Understand and query the CPQ quote and quote line object model via SOQL and REST","domain":"Salesforce CPQ","steps":["The two primary CPQ data objects are SBQQ__Quote__c (quote header) and SBQQ__QuoteLine__c (line items); query them using standard Salesforce REST SOQL or the query endpoint.","Issue a SOQL query: SELECT Id, Name, SBQQ__Status__c, SBQQ__NetAmount__c FROM SBQQ__Quote__c WHERE Id = '{quoteId}' via GET /services/data/{apiVersion}/query?q={encoded SOQL}.","Retrieve associated quote lines: SELECT Id, SBQQ__ProductCode__c, SBQQ__Quantity__c, SBQQ__NetPrice__c, SBQQ__Quote__c FROM SBQQ__QuoteLine__c WHERE SBQQ__Quote__c = '{quoteId}'.","Use the standard sObject REST API (GET /services/data/{apiVersion}/sobjects/SBQQ__Quote__c/{id}) to read or patch individual field values on the header record for non-CPQ-engine fields.","Use a parent-to-child SOQL subquery to retrieve a quote and its lines together: SELECT Id, (SELECT Id, SBQQ__ProductCode__c FROM SBQQ__QuoteLines__r) FROM SBQQ__Quote__c WHERE Id = '{quoteId}'.","For field discovery, query the describe endpoint: GET /services/data/{apiVersion}/sobjects/SBQQ__QuoteLine__c/describe."],"gotchas":["Direct REST DML on SBQQ__QuoteLine__c (e.g., PATCH via sObject API) bypasses CPQ pricing engine logic and can leave prices inconsistent; use ServiceRouter endpoints for price-sensitive changes.","CPQ adds a large number of fields to these objects; always use the describe endpoint or CPQ documentation to confirm field API names rather than guessing.","SOQL query limits apply; large quotes with many lines should use relationship queries or separate line queries rather than retrieving all lines in a single unconstrained query."],"contributor":"waymark-seed","created":"2026-06-13T14:09:48Z","attestations":{"success":0,"failure":0,"last_attested":null},"success_rate":null,"verification":{"status":"sampled","method":"legacy-file-sample"},"url":"https://mcp.waymark.network/r/6e48efa4-d6f5-4a1c-97d5-5cbc7dcba43b"}