Waymaker
WaymakerDocs
Developer Documentation
Documentation

Transactional Email — send as your app

Your Host app sends its own receipts, resets and notifications. Each app has one sending address, and each accepted send is charged in credits to the Solution that owns the app.

Send without any setup

waymaker host email send <app_id> \
  --to someone@example.com \
  --subject "Your booking is confirmed" \
  --text "See you Tuesday at 10am." \
  --from bookings

If the app has no sending address yet, the first send gives it one on a domain Waymaker owns:

"<App name>" <bookings@{app-slug}.{org-slug}.waymakermail.com>

You don't need DNS, a domain or a key. The display name is the app's name. --from sets only the part before the @; the domain is always the app's own, so one app can't send as another.

To see the address before the first send:

waymaker host email domain register <app_id>          # no domain = shows the ready-made address

Nothing is created until the app's first send. The response has planned: true and the expected address. After the first send, domain list shows it:

waymaker host email domain list --app <app_id> --json

kind is default for a ready-made address and custom for your own domain. A brand-new address can report pending for a minute while its records propagate. The next send or verify checks again.

Send from your own domain (optional)

waymaker host email domain register <app_id> mail.acme.com

The response's dns_records lists CNAME records only, and each one points at a Waymaker hostname. Add them at the domain's DNS provider, then:

waymaker host email domain verify <domain_id>

Pick a subdomain the domain doesn't already send mail from, so the records can't clash with existing mail. Each record carries its own status, so you can tell which one is still missing.

Sending health

waymaker host email health <app_id> [--json]

This returns:

  • daily: sends and outcomes per day (delivered, hard_bounced, soft_bounced, complained, delayed);
  • window: the 7-day bounce and complaint rates and the volume they're measured over;
  • limits: the rates that pause sending automatically;
  • sending_enabled, paused_at and paused_reason;
  • suppressed_recipients.

Automatic pause. Sending is paused when hard bounces reach 4%, or spam complaints reach 0.1% of delivered mail, over 7 days. It applies only after at least 100 messages, and only when at least 2 such events have happened. From then on send returns 403. A pause is lifted only by Waymaker support, never automatically. The rates count from that moment, so the history that caused the pause doesn't immediately cause another.

Suppression. A hard bounce or a spam complaint stops this app from mailing that address again. If every recipient of a send is suppressed, send returns 422 and records the attempt with status: "suppressed". Nothing is sent and nothing is charged. If only some are suppressed, the rest are sent and the response lists suppressed.

MCP

The same actions are available as MCP tools: host_email_domain_register (domain is optional), host_email_domain_list, host_email_domain_get, host_email_domain_verify, host_email_send, host_email_send_status, host_email_quota and host_email_health. Every response includes full ids.

Limits

LimitWhat happens
Daily rampA new address can send 100 on its first day, doubling each day up to 10,000. Over the limit, send returns 429 with the current cap.
Ratehost_email_quota reports the per-second rate.
PausedA paused address returns 403, and nothing is charged.
Transactional onlyUse it for mail someone expects. Marketing belongs in Journeys.

Errors

StatusMeaning
400Missing or invalid app_id, to, subject, body or from_local_part
402The account that owns the Solution can't send (paid capability)
404No such app or domain in your organization
403Sending is paused for this app (see Sending health)
409The address isn't verified yet. A ready-made one says it's still being set up.
422Every recipient is suppressed (bounced or complained before); nothing sent or charged
429Over today's sending limit
503Sending addresses aren't available right now, or sending capacity is full (contact Waymaker)