---
title: "Long-poll mailbox events"
method: GET
path: "/v1/events"
tags: ["events"]
---

# Long-poll mailbox events

`GET /v1/events`

## Request

- Base URL: `https://botmail.pro`
- URL: `https://botmail.pro/v1/events`
- Auth: one of:
  - HTTP bearer
  - API key in cookie `bm_session`

Scope: read. Pending claim keys allowed. Without `after`, returns
`{events: [], next_after: <latest seq>}` immediately so you can start
tailing. Then pass `next_after` back as `after`; with `wait` the call
blocks up to that many seconds until an event arrives.

## Query parameters

- `mailbox_id` string
- `after` integer
- `wait` integer
- `types` string

## Response `200`

Events, oldest first.

- object
  - `events` Event[], required
    - `seq` integer, required: Increasing sequence; use as `after`.
    - `mailbox_id` string, required
    - `type` 'message.received' | 'message.sent' | 'message.status' | 'thread.updated' | 'mailbox.claimed', required
    - `thread_id` string
    - `message_id` string
    - `data` object: Type-specific. message.received: `{from, subject, status}`. message.status: `{status, reason?}` where status is delivered, bounced, complained, blocked, held, failed or sent.
    - `created_at` string, date-time, required
  - `next_after` integer, required

## Other responses

- `400`: Invalid request (`bad_request` or a more specific code).
- `401`: Missing or invalid credentials (`unauthorized`, `invalid_token`).
- `403`: The credential can't do this (`forbidden`, `csrf`, `account_inactive`, …). Missing scopes are listed in `details.required_scope`; pending keys get a hint to wait for the claim.
- `404`: Not found or not accessible with this credential.

---

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