> ## 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.

# Read Proposals and Services from OnboardMe

> Learn how to list proposals, retrieve proposal details, and read available services and packages from OnboardMe to sync with your practice management system.

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

```bash theme={null}
curl -sS "https://anzapi.onboardme.app/api/v1/proposals/list?entityKey=2c4f6a88-1b3d-5e7f-90ab-cdef12345678" \
  -H "X-OM-Auth-ID: YOUR_CLIENT_ID" \
  -H "X-OM-Auth-Key: YOUR_CLIENT_SECRET"
```

Useful query params: `statusID`, `entityKey`, `searchFilter`, `userID`, `lastUpdated`, `excludeCompleted`, `pageNumber`.

The stable id is `engagementKey`.

## Detail, pricing, PDF

| Route                                 | Use                                                          |
| ------------------------------------- | ------------------------------------------------------------ |
| `GET /api/v1/proposals/{key}`         | Full proposal including lines, signatures, linked onboarding |
| `GET /api/v1/proposals/{key}/pricing` | Previous services, invoices, recurring billings, and jobs    |
| `GET /api/v1/proposals/{key}/pdf`     | OnboardMe proposal 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](/guides/webhooks).
