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.
Known 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.
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp