---
title: "Mark every unread alert as read"
method: POST
path: "/watchlist/alerts/read"
tags: ["Watchlist"]
---

# Mark every unread alert as read

`POST /watchlist/alerts/read`

## Request

- Base URL: `https://api.companystack.co.uk`
- URL: `https://api.companystack.co.uk/watchlist/alerts/read`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-Api-Key`

Marks every unread alert of the account as read. The optional JSON body narrows it with the filters GET /watchlist/alerts takes: alert_type, company_number, since, until. Answers with marked_read, the number of alerts marked (0 when none were unread).

## Request body

- object
  - `alert_type` string
  - `company_number` string
  - `since` string, date-time
  - `until` string, date-time

## Response `200`

How many alerts were marked as read

- object
  - `success` boolean, required
  - `marked_read` integer, required: Alerts marked as read by this request; 0 when none were unread

## Other responses

- `400`: A filter is not valid (code validation_error, with the field)
- `401`: API key missing, malformed or revoked
- `403`: The key's plan does not include this endpoint (`code: plan_upgrade_required`, with `upgrade_url`), the key may not call it, or the key is beyond the plan's key limit after a downgrade (`code: key_limit_exceeded`: the newest keys are paused until keys are deleted or the plan upgraded)
- `429`: Per-minute or per-day limit reached (`code: rate_limited`, `window: minute|day`). Wait `Retry-After` seconds; when both windows are full the day is reported. A refused request does not count against either limit. A bulk lookup (`POST /company/bulk`) counts each company number in it as one request, so one that is more than you have left is refused whole, and the body adds `requested` and `fits`.

---

[API](https://skmtc.dev/companystack/apis/companystack-api.md) · [All operations](https://skmtc.dev/companystack/apis/companystack-api/llms.txt) · [OpenAPI document](https://skmtc.dev/companystack/apis/companystack-api/revisions/8f3234237d2d?raw)
