> ## Documentation Index
> Fetch the complete documentation index at: https://docs.onboardme.app/llms.txt
> Use this file to discover all available pages before exploring further.

# The Proposal

> A proposal (engagement) is the commercial document a practice sends a client. The stable id is engagementKey.

A **proposal** is an engagement: services, pricing, signatures, and optional linked onboarding. Sync with `GET /api/v1/proposals/list` and store `engagementKey`.

Create from a template, from adhoc services, or by duplicating / renewing an existing proposal. Write access is required to create.

See [Proposals](/guides/send-proposal).

## Attributes

<ResponseField name="engagementKey" type="uuid">
  Stable identifier for this proposal.
</ResponseField>

<ResponseField name="entityKey" type="uuid">
  The client this proposal belongs to.
</ResponseField>

<ResponseField name="name" type="string">
  Proposal title shown to the client.
</ResponseField>

<ResponseField name="status" type="string">
  Lifecycle status such as Draft, Sent, Accepted, or Renewed.
</ResponseField>

<ResponseField name="sentToClient" type="boolean">
  Whether OnboardMe successfully emailed the client. A create can still return `engagementKey` when send fails and the proposal is left as a draft.
</ResponseField>

<ResponseField name="lastUpdated" type="datetime">
  UTC timestamp for incremental sync.
</ResponseField>

Subscribe to `proposal.accepted` with [webhooks](/guides/webhooks) instead of polling for acceptance.

<RequestExample>
  ```json The Proposal object theme={null}
  {
    "engagementKey": "7e1a2b3c-4d5e-6f70-8192-a3b4c5d6e7f8",
    "entityKey": "2c4f6a88-1b3d-5e7f-90ab-cdef12345678",
    "name": "2026 compliance package",
    "status": "Sent",
    "sentToClient": true,
    "lastUpdated": "2026-04-16T10:00:00Z"
  }
  ```
</RequestExample>
