# Update a patient

Canonical page: https://docs.ovok.com/signals/standalone/api/patients/update-a-patient

{/* Generated from the API Explorer document by scripts/generate-signals-api-pages.mjs. Edit ovok-core, not this page. */}


# Update a patient [#update-a-patient]

| Method | Path |
| --- | --- |
| `POST` | `/v1/signals/api/patient/{id}` |

<Availability route="POST /v1/signals/api/patient/{id}" />

Only the fields present are changed; `metadata` is merged, not replaced. Answered with the v1 document.

### Through ovok [#through-ovok]

- **Who can call it:** Manager apps, and users whose access policy grants the capabilities.
- **Capabilities, all required:** `signals_patients:update`. Project admins have every capability; client applications get no admin bypass.
- When you send `submitters` or `metadata`, ovok keeps your project's submitter and stamp in them. Sending `alertsPaused`, `alertIfEmpty`, `alertIfNote` or `alertInactiveDays` also needs `signals_config:update` and `signals_silence:update`.
- If your access covers only some patients (anyone but project admins, manager or submitter apps, and anyone whose Patient access has no criteria), the patient, and one a `refId` in the body names, must be ones you can update. A patient is named by its Signals id, or by its Medplum Patient id where Signals takes a `refId`; ovok asks Signals which patient a Signals id is.

## Request [#request]

### Path parameters [#path-parameters]

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | string | Yes | The Signals patient id. |

### Body [#body]

Required. Schema `UpdatePatientDto`.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `refId` | string | No | v1 let an update move the patient to a new `refId`; one another patient holds is a 409. |
| `name` | string | No | — |
| `submitters` | array of string | No | — |
| `subscribers` | array of string | No | — |
| `alertIfEmpty` | boolean | No | — |
| `alertIfNote` | boolean | No | — |
| `alertInactiveDays` | number | No | — |
| `alertsPaused` | boolean | No | — |
| `metadata` | object | No | Merged into the existing metadata, not replaced — a write that omits `project` does not clear the stamp. |
| `email` | string | No | — |
| `bsn` | string | No | — |
| `umoId` | string | No | — |
| `dateOfBirth` | string | No | — |
| `tags` | object | No | — |

## Responses [#responses]

| Status | Meaning |
| --- | --- |
| `200` | The patient as it now stands. |
| `400` | A path value holds a character ovok does not send to Signals, such as a raw `:` or `+`. Percent-encode it. The query carries a raw `#`, or more than 200 parameters. |
| `401` | Your ovok access token, or your client id and secret, are missing or invalid. |
| `403` | ovok refused the call: you lack a capability this route needs, or your session has no project, or a patient is stamped with another project, or you can read a patient the call names but not update it. From Signals: Authenticated, but the client's role does not permit this, or it is not attached to the patient. |
| `404` | A patient the call names is not one you can read. From Signals: No such patient in this tenant. |
| `409` | Your project has no Signals tenant of its own (`SIGNALS_TENANT_NOT_OWN`), or it is moving to another one. From Signals: Another patient in this tenant already has that `refId`. |
| `415` | The body is not JSON. |
| `422` | A number in the body is out of range. A patient id is not 1 to 64 letters, digits, `.`, `_`, `~` or `-`. From Signals: The payload failed validation. |
| `429` | Too many requests. Retry after the seconds in `Retry-After`. |
| `500` | ovok hit an unexpected fault, such as your project having no Signals submitter. |
| `502` | Signals answered with something ovok couldn't use, or refused ovok's own credential. |
| `503` | Signals is unavailable. Retry after the seconds in `Retry-After`. |
| `504` | Signals did not answer in time. |

## Example [#example]

```bash
curl --request POST 'https://api.sandbox.ovok.com/v1/signals/api/patient/:id' \
  --user "${OVOK_CLIENT_ID}:${OVOK_CLIENT_SECRET}" \
  --header 'Content-Type: application/json' \
  --data @body.json
```
