# Endpoint reference

> Every REST endpoint on api.actuallycare.com — 64 operations across 10 resource groups.

<!-- Source: https://docs.actuallycare.com/api/reference -->

The REST API exposes **64 operations** across **10 resource groups**. All requests use the base URL `https://api.actuallycare.com/v1` and authenticate with an [API key or JWT](/api/authentication).

This reference is generated from the live OpenAPI spec. Machine-readable version: [`openapi.json`](https://api.actuallycare.com/v1/openapi.json).

## [API Keys](/api/reference/api-keys)

| Endpoint | Summary |
| --- | --- |
| `GET /v1/api-keys` | [List API keys](/api/reference/api-keys#list-api-keys) |
| `POST /v1/api-keys` | [Create new API key](/api/reference/api-keys#create-new-api-key) |
| `PATCH /v1/api-keys/{id}/scopes` | [Update API key scopes](/api/reference/api-keys#update-api-key-scopes) |
| `PUT /v1/api-keys/{id}/revoke` | [Revoke API key](/api/reference/api-keys#revoke-api-key) |
| `DELETE /v1/api-keys/{id}` | [Delete API key](/api/reference/api-keys#delete-api-key) |

## [Appointments](/api/reference/appointments)

| Endpoint | Summary |
| --- | --- |
| `GET /v1/appointments` | [List all appointments](/api/reference/appointments#list-all-appointments) |
| `POST /v1/appointments` | [Create new appointment](/api/reference/appointments#create-new-appointment) |
| `GET /v1/appointments/{id}` | [Get appointment by ID](/api/reference/appointments#get-appointment-by-id) |
| `PUT /v1/appointments/{id}` | [Update appointment](/api/reference/appointments#update-appointment) |
| `DELETE /v1/appointments/{id}` | [Delete appointment](/api/reference/appointments#delete-appointment) |

## [Authentication](/api/reference/authentication)

| Endpoint | Summary |
| --- | --- |
| `POST /v1/auth/register` | [Register new user](/api/reference/authentication#register-new-user) |
| `POST /v1/auth/login` | [Login user](/api/reference/authentication#login-user) |
| `POST /v1/auth/refresh` | [Refresh access token](/api/reference/authentication#refresh-access-token) |
| `POST /v1/auth/logout` | [Logout user](/api/reference/authentication#logout-user) |
| `GET /v1/auth/verify` | [Verify token validity](/api/reference/authentication#verify-token-validity) |
| `GET /v1/auth/profile` | [Get user profile](/api/reference/authentication#get-user-profile) |
| `PUT /v1/auth/profile` | [Update user profile](/api/reference/authentication#update-user-profile) |
| `POST /v1/auth/logout-all` | [Logout from all devices](/api/reference/authentication#logout-from-all-devices) |
| `GET /v1/auth/sessions` | [List active sessions](/api/reference/authentication#list-active-sessions) |

## [Billing](/api/reference/billing)

| Endpoint | Summary |
| --- | --- |
| `GET /v1/billing/public-plans` | [Get public plan pricing](/api/reference/billing#get-public-plan-pricing) |
| `POST /v1/billing/public-checkout` | [Start checkout without an account](/api/reference/billing#start-checkout-without-an-account) |
| `GET /v1/billing/plans` | [Get plans with checkout identifiers](/api/reference/billing#get-plans-with-checkout-identifiers) |
| `GET /v1/billing/subscription` | [Get current subscription status](/api/reference/billing#get-current-subscription-status) |
| `POST /v1/billing/checkout` | [Start checkout for a subscription](/api/reference/billing#start-checkout-for-a-subscription) |
| `POST /v1/billing/portal` | [Open the billing portal](/api/reference/billing#open-the-billing-portal) |

## [Clients](/api/reference/clients)

| Endpoint | Summary |
| --- | --- |
| `GET /v1/clients` | [List all clients](/api/reference/clients#list-all-clients) |
| `POST /v1/clients` | [Create new client](/api/reference/clients#create-new-client) |
| `GET /v1/clients/{id}` | [Get client by ID](/api/reference/clients#get-client-by-id) |
| `PUT /v1/clients/{id}` | [Update client](/api/reference/clients#update-client) |
| `DELETE /v1/clients/{id}` | [Delete client](/api/reference/clients#delete-client) |

## [Contacts](/api/reference/contacts)

| Endpoint | Summary |
| --- | --- |
| `GET /v1/contacts` | [List contacts](/api/reference/contacts#list-contacts) |
| `POST /v1/contacts` | [Create a contact](/api/reference/contacts#create-a-contact) |
| `GET /v1/contacts/search` | [Search contacts](/api/reference/contacts#search-contacts) |
| `GET /v1/contacts/{id}` | [Get a contact](/api/reference/contacts#get-a-contact) |
| `PUT /v1/contacts/{id}` | [Update a contact](/api/reference/contacts#update-a-contact) |
| `DELETE /v1/contacts/{id}` | [Delete a contact](/api/reference/contacts#delete-a-contact) |
| `PATCH /v1/contacts/{id}/archive` | [Archive a contact](/api/reference/contacts#archive-a-contact) |
| `PATCH /v1/contacts/{id}/restore` | [Restore an archived contact](/api/reference/contacts#restore-an-archived-contact) |

## [Escrows](/api/reference/escrows)

| Endpoint | Summary |
| --- | --- |
| `GET /v1/escrows` | [List escrows](/api/reference/escrows#list-escrows) |
| `POST /v1/escrows` | [Create an escrow](/api/reference/escrows#create-an-escrow) |
| `GET /v1/escrows/{id}` | [Get an escrow](/api/reference/escrows#get-an-escrow) |
| `PUT /v1/escrows/{id}` | [Update an escrow](/api/reference/escrows#update-an-escrow) |
| `DELETE /v1/escrows/{id}` | [Delete an escrow](/api/reference/escrows#delete-an-escrow) |
| `PATCH /v1/escrows/{id}/archive` | [Archive an escrow](/api/reference/escrows#archive-an-escrow) |
| `PATCH /v1/escrows/{id}/restore` | [Restore an archived escrow](/api/reference/escrows#restore-an-archived-escrow) |
| `GET /v1/escrows/{id}/timeline` | [Get an escrow's timeline](/api/reference/escrows#get-an-escrows-timeline) |

## [Leads](/api/reference/leads)

| Endpoint | Summary |
| --- | --- |
| `GET /v1/leads` | [List all leads](/api/reference/leads#list-all-leads) |
| `POST /v1/leads` | [Create new lead](/api/reference/leads#create-new-lead) |
| `GET /v1/leads/{id}` | [Get lead by ID](/api/reference/leads#get-lead-by-id) |
| `PUT /v1/leads/{id}` | [Update lead](/api/reference/leads#update-lead) |
| `DELETE /v1/leads/{id}` | [Delete lead](/api/reference/leads#delete-lead) |
| `POST /v1/leads/{id}/convert` | [Convert lead to client](/api/reference/leads#convert-lead-to-client) |

## [Listings](/api/reference/listings)

| Endpoint | Summary |
| --- | --- |
| `GET /v1/listings` | [List all property listings](/api/reference/listings#list-all-property-listings) |
| `POST /v1/listings` | [Create new listing](/api/reference/listings#create-new-listing) |
| `GET /v1/listings/{id}` | [Get listing by ID](/api/reference/listings#get-listing-by-id) |
| `PUT /v1/listings/{id}` | [Update listing](/api/reference/listings#update-listing) |
| `DELETE /v1/listings/{id}` | [Delete listing](/api/reference/listings#delete-listing) |

## [Webhooks](/api/reference/webhooks)

| Endpoint | Summary |
| --- | --- |
| `GET /v1/webhooks` | [List webhook subscriptions](/api/reference/webhooks#list-webhook-subscriptions) |
| `POST /v1/webhooks` | [Create a webhook subscription](/api/reference/webhooks#create-a-webhook-subscription) |
| `GET /v1/webhooks/events` | [List available webhook events](/api/reference/webhooks#list-available-webhook-events) |
| `GET /v1/webhooks/events/categories` | [List webhook event categories](/api/reference/webhooks#list-webhook-event-categories) |
| `PUT /v1/webhooks/{id}` | [Update a webhook subscription](/api/reference/webhooks#update-a-webhook-subscription) |
| `DELETE /v1/webhooks/{id}` | [Deactivate a webhook subscription](/api/reference/webhooks#deactivate-a-webhook-subscription) |
| `GET /v1/webhooks/{id}/logs` | [Get webhook delivery logs](/api/reference/webhooks#get-webhook-delivery-logs) |

## Error responses

Every endpoint returns errors in the same envelope — `success` is `false` and an `error` object carries a stable machine-readable `code` and a human `message`. Branch on `error.code`, never the message. See [Errors](/api/errors) for the full status-code and error-code reference and retry guidance.

```json
{
  "success": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Invalid request data",
    "errorId": "ERR_1782972632_ab12cd",
    "correlationId": "b7e4c2a8-3f6d-4e29-9c41-8d5a2f7e1b93",
    "details": null
  },
  "timestamp": "2026-07-15T14:32:10.000Z"
}
```
