Skip to content

Mail

Cantila's first-party email provider: a sending API, per-project SMTP credentials, sending domains, hosted mailboxes, webmail, inbound parsing, IMAP/POP3, and forwarding/aliases — auto-wired into every project.

Mail — phase 2

What works today

  • Live today: The mail fleet, sending domains, and per-project SMTP credentials are real and auto-wired into the project env. The send API (POST /v1/projects/:id/mail/send) records events. Deliverability telemetry (/v1/mail/deliverability) is live. The webmail inbox reads persisted inbound mail (/v1/mail/inbox).
  • Pending: The actual MTA/SMTP infrastructure is not online — no real bytes leave yet. Sends run through a StubMailProvider. The live Mailcow adapter is infra-blocked on DNS / reverse-DNS / dedicated IPs / reputation warmup.

Treat Mail as a preview until the MTA lands. You can build and test against the full API surface — credentials, send calls, deliverability, inbox — but a message sent today is recorded as an event, not delivered to a real recipient.

What's auto-wired

Every project receives a mailbox and per-project SMTP credentials in its environment as SMTP_HOST, SMTP_PORT, SMTP_USER, and SMTP_PASS, plus a sending domain. These are real and managed by Cantila.

Sending mail

curl -X POST https://api.cantila.app/v1/projects/proj_123/mail/send \
  -H "Authorization: Bearer $CANTILA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "user@example.com",
    "from": "hello@yourproject.cantila.app",
    "subject": "Welcome",
    "html": "<p>Thanks for signing up.</p>"
  }'

Today this records a send event — it does not put bytes on the wire. Once the MTA is online the same call delivers.

Deliverability telemetry

curl https://api.cantila.app/v1/mail/deliverability \
  -H "Authorization: Bearer $CANTILA_API_KEY"

Webmail inbox

The webmail inbox reads persisted inbound mail:

curl https://api.cantila.app/v1/mail/inbox \
  -H "Authorization: Bearer $CANTILA_API_KEY"

API reference

MethodPathStatusNotes
POST/v1/projects/:id/mail/sendLive (records event)No real delivery until MTA lands
GET/v1/mail/deliverabilityLiveDeliverability telemetry
GET/v1/mail/inboxLiveReads persisted inbound mail
GET/v1/mail/fleetLiveMail fleet
GET/v1/mailboxesLiveHosted mailboxes
GET/v1/mail/aliasesLiveForwarding / aliases
GET/v1/mail/infoLiveSending domain / config info

Hosted mailboxes, webmail UI, inbound parsing, IMAP/POP3, and forwarding/aliases all sit behind the same Phase 2 MTA dependency for real send/receive. See the changelog for the live-delivery flip.