Skip to main content
Proposals (engagements) are the commercial documents a practice sends a client. You can sync them read-only, or create / duplicate / renew them when canWrite is true.

List and filter

Useful query params: statusID, entityKey, searchFilter, userID, lastUpdated, excludeCompleted, pageNumber. The stable id is engagementKey.

Detail, pricing, PDF

Create

  • POST /api/v1/proposals/from-template when the practice already designed the package
  • POST /api/v1/proposals for adhoc services (userKey, entityKey, name, sendToClient, at least one services[] row)
  • POST /api/v1/proposals/{key}/duplicate copies pricing, billings, and jobs into a new draft
  • GET /api/v1/proposals/{key}/renew-preview then POST .../renew copies and marks the original Renewed
If 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.