canWrite is true.
List and filter
statusID, entityKey, searchFilter, userID, lastUpdated, excludeCompleted, pageNumber.
The stable id is engagementKey.
Detail, pricing, PDF
Create
POST /api/v1/proposals/from-templatewhen the practice already designed the packagePOST /api/v1/proposalsfor adhoc services (userKey,entityKey,name,sendToClient, at least oneservices[]row)POST /api/v1/proposals/{key}/duplicatecopies pricing, billings, and jobs into a new draftGET /api/v1/proposals/{key}/renew-previewthenPOST .../renewcopies and marks the original Renewed
sendToClient is true but send fails, the proposal is left as a draft and sentToClient is false; you still get engagementKey.
Subscribe to proposal.accepted with webhooks.