Skip to main content

Proposals

The Proposals API provides CRUD access to proposals (documents sent to a client or a lead), plus ancillary actions for status, tags and cloning.
New to the API? Start with Getting started (base URL, response envelope, errors, pagination) and Authentication (API keys). Those conventions apply to every endpoint below and are not repeated here.
Identifier note: proposals are addressed by their numeric doc_id. Wherever {id} appears below it is the doc_id.
Scope: the signature accept flow, publishing & emailing, automation, estimate generation and the rich document editor are managed in-app and are not part of this API. Client accept details are exposed read-only; a proposal can still be marked declined/accepted via the status action.

The proposal object

A proposal belongs to a client or a lead — the unused side is null.

List / search proposals

Query parameters

Example request

Example response — 200 OK


Get a proposal

Returns the proposal (200) with message “Proposal retrieved successfully.”

Create a proposal

A proposal is created for a client or a lead (customer_type). Provide doc_body to set the content directly, or proposal_template to seed the body from a template. Creates a backing estimate record.

Body parameters

Example request

Example response — 201 Created


Update a proposal

Returns the proposal (200) with message “Proposal updated successfully.”

Delete a proposal

Example response — 200 OK


Change status

Changing the status clears any recorded client acceptance signature.
Returns the proposal (200) with message “Proposal status updated successfully.”

Set tags

The tags array is the full set — it replaces existing tags; an empty array clears them.
Returns the proposal (200) with message “Proposal tags updated successfully.”

Clone a proposal

Creates a new proposal from an existing one.
Returns the new proposal (201) with message “Proposal cloned successfully.”

Errors

See Getting started for the shared error format. Proposal-specific: