Skip to content
Not available yet. Replyz is built and tested, but not deployed: https://api.replyz.io is the planned address and does not answer yet. These pages describe the API as it is built today and may change before launch.

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.

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

Hold up to 30 seconds for anything after event 40:

Terminal window
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.

  • Events come oldest first, by seq. seq starts at 1, only increases and is never reused; gaps can appear.
  • created_at is when the mail was received, so it is not always in seq order.
  • Events carry ids and light metadata. Read the message with GET /v1/messages/{id}. data.from and data.subject are 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.

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.