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.

Receiving mail

There is nothing to call: mail sent to an inbox address is received on its own. This page explains what happens to it. To read it, see Reading mail and Waiting for mail.

Mail is accepted only when all of these are true:

  • the recipient is the address of a live inbox (case-insensitive, exact match);
  • the account is active (a sandbox account before its expires_at, or claimed) and its receiving is not paused;
  • the raw message is at most 10 MiB (10,485,760 bytes);
  • the account is under its monthly receive cap: 1,000 messages for sandbox, 5,000 for claimed (not available yet), per UTC calendar month, all inboxes together.

Otherwise the mail is rejected during delivery, permanently, with one text for every reason. The sending server sees 555 5.7.1 mailbox unavailable. (Replyz sends the text; Cloudflare adds its own code in front). The sender cannot tell why, and the agent is not told about rejected mail.

If handling a message fails on Replyz’s side, the sending server gets a temporary failure (421 4.3.0) and retries later, as mail servers do. A retried message is counted once.

abuse@youreplyz.com and postmaster@youreplyz.com are never agent inboxes.

The original message is stored as received, in EU-jurisdiction storage. Parsed messages, threads, events and attachments are stored in the EU too. See Security and privacy.

A background step parses each accepted message, so a message becomes readable a little after its received_at. In rare cases a message that keeps failing to process (25 retries, about 19 hours) is not stored and nobody is alerted; handling for this is planned. It builds:

Field What it holds
received_at When Replyz accepted the mail (not the sender’s Date header)
from The first address of the From header, lowercased. Not verified: it can be forged
to Addresses of the To and Cc headers, lowercased (at most 100)
subject Invisible characters removed; null when empty
text What a person would see: the HTML converted to text with hidden content removed, or the plain-text part when there is no visible HTML. Links appear as link text <https://…>
reply_text Only the new part of a reply: cut at the first quote header (“On … wrote:” and its forms in several languages, “Original Message” lines, Outlook’s header block) or a signature line (-- ). The whole text when nothing new is left, for example in a forwarded message
snippet The first 200 characters of reply_text (or text), whitespace collapsed
otp_like true when the message looks like a verification-code mail
injection_risk, safety Signs of prompt injection. See Untrusted content and safety
sender_trust Always unauthenticated in this version
spam_score Cloudflare’s spam score when present; informational, Replyz does not act on it
attachments Up to 50 per message, never opened. See Reading mail

Long fields are capped (for example text at 256 KiB and reply_text at 64 KiB); a cut adds the signal content_truncated. The original stays stored and can be read with include=raw (up to 2 MiB).

If the parser refuses the structure of a message, the message is still stored so the agent sees that something arrived: from and subject are null, text is empty, injection_risk is medium, and safety.signals holds parse_failed. Read the original with GET /v1/messages/{id}?include=raw.

Threads belong to one inbox. A new message joins a thread when its In-Reply-To or References header points to an earlier message of that inbox; otherwise when it has the same subject (ignoring prefixes such as Re: and Fwd:) and shares a participant with a thread active in the last 30 days; otherwise it starts a new thread.

The same mail delivered twice to the same inbox is stored once (same Message-ID, recipient and body). A copy with the same Message-ID but a different body is stored separately, so a forged copy cannot hide the real mail. One mail sent to two inboxes is stored once in each.

A message.received event is added to the event feed, and every open wait and events?wait= of the account wakes up and checks again.

  • Verified senders (sender_trust other than unauthenticated).
  • Automatic deletion after the retention periods. See Security and privacy.

Not offered: content-based spam rejection, custom domains, webhooks, sending of any kind.