Standard Salesforce Quotes (the Quote standard object, not CPQ) are linked to Opportunities; create a quote by POSTing to /services/data/{apiVersion}/sobjects/Quote with fields: Name, OpportunityId, Status, ExpirationDate, and Pricebook2Id.
Add line items by creating QuoteLineItem records: POST /services/data/{apiVersion}/sobjects/QuoteLineItem with fields QuoteId, PricebookEntryId, Quantity, and UnitPrice.
Retrieve a quote with its line items using a SOQL query: SELECT Id, Name, (SELECT Id, Product2Id, Quantity, UnitPrice FROM QuoteLineItems) FROM Quote WHERE Id = '{quoteId}'.
To sync a quote back to the opportunity (so the opportunity's amount reflects the quote), use the standard Salesforce quote-to-opportunity sync, which requires the Syncing field or an appropriate button action; programmatically, set the IsSyncing field to true on the Quote record (verify field availability in your API version).
Update a line item: PATCH /services/data/{apiVersion}/sobjects/QuoteLineItem/{lineItemId} with the fields to change.
To generate a quote PDF using a standard quote template, use the standard Quote PDF generation mechanism (via UI or the Salesforce Connect API if available for your version); direct REST-based PDF generation for standard quotes is limited.
Known gotchas
Standard Salesforce Quotes are separate from Salesforce CPQ (SBQQ) quotes; do not use CPQ ServiceRouter endpoints for standard Quote records — they are different objects with different APIs.
Only one quote per opportunity can be synced at a time (IsSyncing = true); syncing a different quote will unsync the previously synced quote.
QuoteLineItem records require a valid PricebookEntryId that exists in the price book associated with the Quote; using a PricebookEntryId from a different price book results in an error.
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