Wayletter is a transactional send service: JSON POST /v1/send with a Bearer API key.
It is not Gmail. Default transport is sink — messages are stored here (Activity),
not delivered to the public internet, until you configure WAYLETTER_RELAY_*.
Wayletter is a transactional send service: you POST JSON to
/v1/send with a Bearer API key. It is not Gmail and not an inbox.
Default transport is sink — the message is stored in this process,
not delivered to the public internet, until you configure WAYLETTER_RELAY_*.
Open the dashboard at
https://wayletter.waryway.com/wayletter/
and prove a first send. Create or paste an API key, then POST to
https://wayletter.waryway.com/v1/send.
You are done when Activity shows the message (sink). Relay is a later choice. The six steps below are the chores.
WAYLETTER_RELAY_*.
Longer version: What it is (sink honesty).
curl POST /v1/send with
Authorization: Bearer and see the message under Activity.
WAYLETTER_SMTP_ADDR=:2525. Then in a mail app’s outgoing server: host 127.0.0.1, port 2525,
username the word apikey, password = the same API key. PLAIN or LOGIN. Skip if you only use curl. This is not the customer send path.
POST /v1/send with
Authorization: Bearer their key (or, if SMTP is opted in as a dev opt-in / operator path, 127.0.0.1:2525, username apikey, password = their key).
Wayletter accepts JSON at POST /v1/send with from, personalizations, and content
(SMTP AUTH on the same process only if you opt in). It is not an inbox, not a mailbox client, and this round is not a billing SaaS: no dedicated IPs, no public MX.
Default transport is sink.
Messages are stored in this process (you can read them under Activity). They are
not delivered to the public internet until you configure relay with
WAYLETTER_RELAY_*. That is intentional: first send should never surprise a real recipient.
Path is process-root /v1/send (the public apps/wayletter binary).
Dashboard lives at /wayletter/. Event stream is GET /wayletter/v1/events/stream.
Open the dashboard, go to Keys (or paste a key in the header). Create one. Copy the plaintext value immediately — it is shown once.
Every HTTP send uses Authorization: Bearer YOUR_API_KEY. SMTP uses that same secret as the password.
Replace YOUR_API_KEY with the secret you just copied. Then open Activity
in the dashboard — the message should appear there (sink stores it; it does not leave the box).
curl -sS -X POST "https://wayletter.waryway.com/v1/send" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"from":{"email":"from@example.test"},"personalizations":[{"to":[{"email":"to@example.test"}]}],"subject":"Hello","content":[{"type":"text/plain","value":"first send"}]}'
| Piece | Value |
|---|---|
| Method / path | POST /v1/send (process root on the dedicated host) |
| Auth | Authorization: Bearer YOUR_API_KEY |
| Body | JSON: from, personalizations, content |
| Where to look | Dashboard Activity |
There is one send route. Do not invent a second HTTP path. The customer send path is
https://wayletter.waryway.com/v1/send.
This subsection is for operators running a local process, not customers.
Default HTTP listen is http://127.0.0.1:8080. If you changed
WAYLETTER_HTTP_ADDR, swap the host/port only. Dashboard:
http://127.0.0.1:8080/wayletter/. Send:
http://127.0.0.1:8080/v1/send.
Skip this if curl already worked. This is a dev opt-in / operator path, not the customer send path.
Library and binary leave SMTP empty/off unless
WAYLETTER_SMTP_ADDR is set. Port 2525 is a dev opt-in only
(WAYLETTER_SMTP_ADDR=:2525). Production SMTP stays off.
To send from Thunderbird, nodemailer, or another mail app after opt-in, fill outgoing server:
| Field in the mail app | What to type |
|---|---|
| Server / host | 127.0.0.1 (this computer; same as the dashboard) |
| Port | 2525 |
| Username | the word apikey — not your email. It is ignored; only the password is checked. |
| Password | paste the same API key |
| Login method | PLAIN or LOGIN if asked. Encryption can stay off on this local port. |
Login is required. This is not an open relay.
None of these are required for a first send. Key + curl + Activity is enough.
{{name}} in the subject or body; those words get filled in when you send.