Watch all inboxes with the event feed
GET /v1/events is one ordered feed per account, across all its inboxes, read with a cursor. Today it has one event type: message.received, one per stored message. With wait= it is a long-poll.
Parameters
Section titled “Parameters”| Parameter | Default | Rules |
|---|---|---|
after |
0 |
Return events with seq greater than this |
wait |
0 |
0–60 seconds to hold when there is nothing new |
limit |
100 |
1–100 |
Example
Section titled “Example”Hold up to 30 seconds for anything after event 40:
curl -sG "https://api.replyz.io/v1/events" \ -H "Authorization: Bearer $REPLYZ_API_KEY" \ --data-urlencode 'after=40' \ --data-urlencode 'wait=30' \ --max-time 45{ "status": "ok", "events": [ { "seq": 41, "type": "message.received", "created_at": "2026-11-06T10:15:03.412Z", "data": { "message_id": "msg_01M6R5NKFM81E1CW47B1ARGRS2", "inbox_id": "ibx_01M6R4QM70KAM06ZW1G35K68B7", "thread_id": "thr_01M6R5NKFM81E1CW47B1ARGRS2", "from": "no-reply@accounts.example.com", "subject": "Your Example verification code", "otp_like": true, "sender_trust": "unauthenticated" } } ], "next_after": 41}Nothing new (the cursor stays the same):
{ "status": "timeout", "events": [], "next_after": 41 }Pass next_after as after on the next call.
How the feed behaves
Section titled “How the feed behaves”- Events come oldest first, by
seq.seqstarts at 1, only increases and is never reused; gaps can appear. created_atis when the mail was received, so it is not always inseqorder.- Events carry ids and light metadata. Read the message with
GET /v1/messages/{id}.data.fromanddata.subjectare email content and untrusted. - Reading the feed never marks messages as read. A duplicate delivery creates no event.
- Events of a deleted inbox disappear from the feed at once.
Starting point
Section titled “Starting point”after=0 returns the feed from its oldest stored event, 100 at a time. To start at the newest event, page with next_after until you get status: "timeout", then keep the last next_after. Do not guess a large after: newer events would never be returned.
Long-polls on the feed share the account’s limit of 5 holds with wait. A call that answers at once does not use a slot. Over the limit: 429 too_many_waits. Set your HTTP client timeout above wait (for example wait + 15 seconds). Expired and suspended accounts never hold.
No webhooks: the feed and wait are the ways to learn about new mail. There is no filter by inbox: filter data.inbox_id yourself, or use wait on one inbox.
Reference: Events API.