---
audience: developer
summary: Priority inbox, snooze, catch-up.
title: Inbox and notifications API
path: reference/api/inbox-and-notifications
status: published
---

# Inbox and notifications API

5 endpoints.

| Method | Path | Purpose |
|---|---|---|
| `GET` | `/v1/inbox/priority` | Priority inbox (cross-room AI-curated). |
| `POST` | `/v1/rooms/{room_id}/catchup` | Trigger an AI catch-up summary in this room. |
| `POST` | `/v1/messages/{event_id}/snooze` | Snooze a single message. |
| `GET` | `/v1/me/snoozes` | List your active snoozes. |
| `DELETE` | `/v1/me/snoozes/{task_id}` | Cancel a snooze before it fires. |

## GET /v1/inbox/priority

```bash
curl "$BASE/v1/inbox/priority?limit=20" \
  -H "Authorization: Bearer $TOKEN"
```

Returns:

```json
{
  "data": [
    {
      "event_id": "evt-…",
      "room_id": "room-…",
      "room_name": "Engineering",
      "sender_id": "5e4d…",
      "sender_name": "Alice",
      "snippet": "Hey @you, can you review #1234?",
      "reason": "direct_mention",
      "created_at": "..."
    }
  ]
}
```

`reason` is one of:

- `direct_mention` — `@you`.
- `keyword_alert` — matched a configured keyword.
- `question` — heuristic; ends with `?` directed at you.
- `priority_tag` — sender tagged the message `priority`.
- `ai_catchup_call` — AI surfaced via catch-up.

## POST /v1/rooms/{room_id}/catchup

Triggers an AI catch-up summary. Body:

```json
{
  "since_event_id": "<optional; defaults to your last read marker>",
  "model_id": "<optional override>"
}
```

The summary is generated async and posted as an AI message in the
room. The POST returns immediately:

```json
{
  "data": { "job_id": "...", "estimated_seconds": 12 }
}
```

## Snooze

```bash
curl -X POST "$BASE/v1/messages/$EVENT_ID/snooze" \
  -H "Authorization: Bearer $TOKEN" \
  -d '{"until": "2026-05-18T09:00:00Z"}'
```

At the snooze time, the message re-fires as a fresh notification.
Cancel before then with:

```bash
curl -X DELETE "$BASE/v1/me/snoozes/$TASK_ID"
```
