---
title: "Mark a notification read"
method: POST
path: "/api/v1/rest/notifiche/inbox/read"
tags: ["Notifications"]
---

# Mark a notification read

`POST /api/v1/rest/notifiche/inbox/read`

## Request

- Base URL: `https://api.custodo.ai`
- URL: `https://api.custodo.ai/api/v1/rest/notifiche/inbox/read`
- Auth: HTTP bearer

Marks one of YOUR OWN notifications read, or with `all: true` every unread one, optionally within a single `module`. It never sends, re-sends or deletes anything, and it can only ever touch the inbox of the member behind this credential — there is no argument for whose. Read state is set once and never cleared, so calling it twice is the same as calling it once and is never an error — safe to retry after a timeout. On an `id` the second call answers `already_read: true` with the moment it was first read; with `all: true` it answers `changed: 0`. An id that does not exist or belongs to somebody else answers not-found rather than confirming it exists. It answers with the fresh badge, so you do not need a follow-up count.

## Headers

- `X-Tenant-Id` string, uuid

## Request body

- object
  - `id` string, uuid: One notification, from notifiche_list_inbox. Omit only when `all` is true.
  - `all` boolean: Mark EVERY unread notification read instead of one. Explicit on purpose: read state is set once and never cleared, so this cannot be undone.
  - `module` 'core' | 'documents' | 'conservazione' | 'anagrafiche' | 'tabelle' | 'email' | 'whatsapp' | 'protocolli' | 'workflow' | 'attivita' | 'checklist' | 'calendario' | 'crm' | 'spese' | 'timbratura' | 'firme' | 'raccolta' | 'condivisione' | 'integrazioni' | 'agenti' | 'bi' | 'ordini' | 'notifiche': With `all`, restrict it to one module. Ignored when `id` is given.

## Response `200`

Done. `data` is the tool’s own answer.

- RestResult
  - `ok` true, required
  - `data` unknown, required

## Other responses

- `400`: The arguments did not validate: `error.message` names the field, what it expects and what arrived.
- `401`: No API key, or one that is malformed, unknown, revoked or expired.
- `403`: The call never ran: the module is off for this organisation, the credential lacks the permission or the module, the tier does not cover it, or the tool is destructive and the key was not minted for that.
- `409`: The record is in a state that does not allow it — under legal hold, already sent, already closed. `error.code` says which.
- `422`: The tool ran and refused, in a sentence of its own (`TOOL_REFUSED`): the message says what to change. Retrying the same call will not help.
- `429`: The API key has spent its minute, or its day. Every request a key makes counts. See `Retry-After`.

---

[API](https://skmtc.dev/custodo/apis/custodo-integrazioni.md) · [All operations](https://skmtc.dev/custodo/apis/custodo-integrazioni/llms.txt) · [OpenAPI document](https://skmtc.dev/custodo/apis/custodo-integrazioni/revisions/16d336d3ec2a?raw)
