# Acknowledge an alert, or an episode

Canonical page: https://docs.ovok.com/signals/standalone/api/alerts/acknowledge-an-alert-or-an-episode

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


# Acknowledge an alert, or an episode [#acknowledge-an-alert-or-an-episode]

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

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

The path segment is an alert id, or an episode id with `episodes=true`. Acknowledging closes it: an alert resolves, an episode ends its alerting window, and the next breaching reading opens a new one. The patient's triggers decide what else closing does (their `onAck` hooks). Under the default pack, acknowledging an open out-of-bed alert (103214-3) also silences the absence under way.

Idempotent: acknowledging again returns the original time and actor. Acknowledging one that already closed only stamps the acknowledgement.

### Through ovok [#through-ovok]

- **Who can call it:** Manager apps, and users whose access policy grants the capabilities.
- **Capabilities, all required:** `signals_alerts:update`. Project admins have every capability; client applications get no admin bypass.
- ovok sets `project` to your project, so you can leave it out.
- If your access covers only some patients (anyone but project admins, manager or submitter apps, and anyone whose Patient access has no criteria), the alert's patient must be one you can update: ovok reads the alert first. 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 | — |

### Query parameters [#query-parameters]

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `episodes` | boolean | No | Read the id as an episode id rather than an alert id. |

### Body [#body]

Optional.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `actor` | object | No | Who acknowledged, as your system identifies them, such as `Practitioner/<id>`. Stored as given. |
| `actor.reference` | string | Yes | — |
| `actor.display` | string | No | — |

## Responses [#responses]

| Status | Meaning |
| --- | --- |
| `200` | The alert, or the episode, now acknowledged. |
| `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 `project` names another project, or you can read the alert's patient but not update it. From Signals: `episodicAlerts` is off for this tenant, and an episode was asked for. |
| `404` | The alert's patient is not one you can read. From Signals: No such alert or episode in this tenant and project. |
| `409` | Your project has no Signals tenant of its own (`SIGNALS_TENANT_NOT_OWN`), or it is moving to another one. |
| `415` | The body is not JSON. |
| `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/alert/:id/ack' \
  --user "${OVOK_CLIENT_ID}:${OVOK_CLIENT_SECRET}" \
  --header 'Content-Type: application/json' \
  --data @body.json
```
