Transactional mail from your own domain. Read every delivery.
Transactional mail from domains you prove with SPF and DKIM, a log of every message and its deliveries, inbound mail at the addresses you route, and a suppression list for bounces and complaints. For transactional mail only, no advertising or newsletters. Mail is in private beta.
ry mail domains add mail.example.com
Mail, in detail.
Your domains
Add a sending domain and set the records the answer names: DKIM, SPF, DMARC and a return path. ry mail domains check looks DNS up now.
A key that can only send
A key with the scope mail:send, or mail:send:<domain> for one domain, may send and nothing else. Put that one in your app.
Delivery log
Every message with every event the deliverer recorded for it, over the API, in the CLI and in the console.
Inbound
Receive at an address: a local part, a full address under the domain, or * for all. Read what arrived as text or raw.
Webhooks
Be called when a message is sent, delayed, bounces, is complained about, fails, or arrives. Each call is recorded. The signing secret is printed once.
Suppressions
Addresses that bounced or complained are not sent to again. Clear one after a genuine re-signup; complaints cannot be cleared.
Prove a domain, send, read the log.
The CLI and the API, with a key that can send and nothing else.
ry mail domains add mail.example.com # prints DKIM, SPF, DMARC, return path ry mail domains check mail.example.com ry keys create shop-mail --scope mail:send:mail.example.com ry mail log ry mail routes add mail.example.com support ry mail inbox list ry mail webhooks add https://www.example.com/hooks/rytiv --events bounced,received
curl -X POST https://api.rytiv.com/v1/mail/domains \
-H "Authorization: Bearer $RYTIV_TOKEN" \
-H "Content-Type: application/json" \
-d '{"domain": "mail.example.com"}'
# 201 with the records to set
curl -X POST https://api.rytiv.com/v1/emails \
-H "Authorization: Bearer $RYTIV_TOKEN" \
-H "Content-Type: application/json" \
-d '{"from": "shop@mail.example.com", "to": "customer@example.com",
"subject": "Your order", "text": "Thank you."}'
# 202; read it back with GET /v1/emails/:id and its events The bounds, as the platform enforces them.
Limits
- Status
- private beta
- What it is for
- transactional mail only, no advertising or newsletters
- Sending domains waiting for DNS
- 3 per organization
- Subject
- up to 998 characters
- Body, text or HTML
- up to 1,000,000 characters
- Attachments
- 0 to 10 per message
- Webhooks
- 20 per organization
Every bound is on Limits and quotas. A request outside them answers 400 with bad-request and names the field.
Errors you will meet
| 403 | token-scopeThe key's scopes do not cover this mail domain |
| 429 | too-many-pending3 sending domains are already waiting for DNS |
| 409 | name-takenThe domain is used somewhere on Rytiv |
| 403 | agent-token-production-readonlyA production agent token may not send |
Every error is JSON with a sentence and a stable code. Branch on code. See the error catalog.
During the private beta, Mail has no price of its own.
For businesses and freelancers. All prices excluding VAT. Prepaid credit in euros, no plans, no seats. Introductory pricing until 31 January 2027. Pricing
What developers ask about Mail.
Answers from the documentation. The Mail API reference has the rest.
Can I use Mail today?
Mail is in private beta. Open Mail in the console and choose Request access, or write to support@rytiv.com.
Can I send newsletters or advertising?
No. Rytiv Mail is for transactional mail only: order confirmations, password resets, notifications your users expect. No advertising and no newsletters.
Which addresses can I send from?
Addresses on domains you have proven. The domain routes show the DKIM, SPF, DMARC and return-path records to set; ry mail domains check verifies the domain once they are there.
Where is mail sent from?
From our own delivery hosts in the EU. The sending domain is yours.
What happens to bounces and complaints?
The address goes on the suppression list and is not sent to again. You can clear a bounce after a genuine re-signup; a complaint cannot be cleared.
How does my app learn about inbound mail?
A webhook with the event email.received, or by reading GET /v1/mail/inbound, which lists them. GET /v1/mail/inbound/:id carries the text and the raw message.
Can my coding agent send mail?
An agent token of class sandbox or twin may send; class production is refused. A key with the scope mail:send:<domain> sends from exactly that domain.
On the same API, the same bill.
Mail is in private beta.
Open Mail in the console and choose Request access, or write to support@rytiv.com.
claude mcp add --transport http rytiv https://api.rytiv.com/v1/mcp --header "Authorization: Bearer <your key>"
For businesses and freelancers, from a solo developer to a team. Pricing