The two‑wayemail API

Send receipts, password resets and notifications from your own domain, and read the replies back through the same API. Templates are edited in the dashboard, not in the codebase.

Node.js
import { Faivelo } from 'faivelo'
​
const faivelo = new Faivelo(API_KEY)
​
await faivelo.emails.send({
  from: 'receipts@acme.com',
  to: 'anna@kellerpaper.com',
  templateAlias: 'receipt',
  variables: { firstName: 'Anna', … }
})
  1. Events
  2. request09:12:04.118
  3. email.sent09:12:04.611
  4. email.delivered09:12:05.402
  5. webhook09:12:05.647
Inboxanna@kellerpaper.com

Waiting for the email

A

Acme Supply09:12

Your order is confirmed

AAcme Supply

Thanks for your order, Anna

Here's what's on the way. We'll email tracking as soon as it ships.

Canvas tote$24.00
Sticker pack$6.00
Total$30.00
Track your order

Acme Supply, 400 Market St, Portland

Templates that ship with your account

Dozens of transactional emails, each designed for the message it carries. Pick one in the dashboard, change the words, and reference it by alias from your code.

Welcome

Cover

Verification code

Quiet

Password reset

Sheet

Receipt

Ledger sheet

Notification

Quiet

Confirm your email

Tinted

Sign-in link

Quiet

Order confirmation

Ledger sheet

Order shipped

Cover sheet

Delivered

Tinted

Left in your cart

Colour field

Refund issued

Figure sheet

Payment failed

Sheet

Invoice

Serif

New sign-in

Sheet

Security alert

Warm ink

Two-factor enabled

Tinted

Recovery codes

Monospace

Password changed

Quiet

Team invite

Colour field

Trial ending

Figure sheet

Getting started

Sheet

What is new

Colour field

We miss you

Tinted

Feedback request

Quiet

API key created

Monospace

Build failed

Warm ink

Incident update

Monospace

Usage warning

Figure sheet

Webhook failing

Warm ink

Newsletter

Serif

Weekly report

Figure sheet

Event invite

Colour field

Waitlist invite

Tinted

Announcement

Serif

Every reply comes back as a webhook

Every address you send from is a real mailbox on your domain. When a customer answers a receipt, the reply lands there and a message.received webhook is POSTed to your endpoint, with the thread id, so your code can read the whole conversation.

A webhook for every replymessage.received
message.received fires with the sender, subject, snippet and attachments, signed with your endpoint secret.
Read the thread from your codeGET /messages/{id}
List messages, fetch one in full, or pull the conversation by thread id. The same endpoints work for search, folders and attachments.
Or let an agent handle itget_thread
The MCP server exposes the same mailbox to Claude and to your own agents, with read_message and get_thread among thirty tools.
Inboxreceipts@acme.com
AK

Anna Keller09:41

Re: Thanks for your order, Anna · Could you ship the tote to the studio address instead? 12 Alder Street, second floor. Thanks!

POST https://api.acme.com/hooks/faivelo200
{
  "type": "message.received",
  "data": {
    "mailbox": "receipts@acme.com",
    "from": { "address": "anna@kellerpaper.com" },
    "subject": "Re: Thanks for your order, Anna",
    "snippet": "Could you ship the tote to the studio…",
    "thread_id": "th_01j8x4kq…",
    "message_id": "msg_01j8x4kr…"
  }
}

Signed with your endpoint secret. Retried if your server is down.

Delivery logs and webhooks

Every email has an id, a status and an event history. Read it from the API or the dashboard, or receive events by webhook.

anna@kellerpaper.com

receipt

delivered
  1. email.sent09:12:04.118

    Accepted for delivery.

  2. email.delivered09:12:05.402

    Accepted by the receiving server. 250 OK.

  3. webhook09:12:05.647

    Posted to api.acme.com, answered 200.

What the API handles for you

Validation, idempotency, signed webhooks, attachments and suppression, handled on every send.

  • Strict template rendering

    If a required variable is missing, the request fails with 422 and names the field. Nothing is sent.

    422 Unprocessable
  • Idempotency keys

    Send the same Idempotency-Key twice and only one email goes out. The second request returns the first response.

    Idempotency-Key
  • Signed webhooks

    Delivered, bounced and complained events are posted to your endpoint with an HMAC-SHA256 signature and timestamp.

    HMAC-SHA256
  • Attachments

    Up to 10 files and 10 MB per email, as base64 over REST or a Buffer in the SDK.

    10 files, 10 MB
  • Multiple recipients

    to, cc and bcc accept a single address or an array of up to 50. The from address is any address on a verified domain.

    to, cc, bcc
  • Suppression list

    Addresses that hard-bounced or reported spam are removed from the recipient list automatically.

    automatic

Three ways to build the email

Send the HTML from your code, build the whole thing in the editor, or design the frame in the editor and pass the message from your code. Switch between them to see who owns which part.

Designed in the editorNorthwind
HTML from your code

Thanks for reaching out, Anna

We received your message on 16 September and someone from the Northwind team will get back to you within one business day. Here is a copy of what you sent us.

Your message

Subject: Bulk order for canvas totes

Quantity: 250

Message: Do you print custom logos on the canvas totes, and what is the lead time for 250?

Designed in the editorView your request
Designed in the editor

You are receiving this because you filled in the contact form at northwind.com.

Northwind Supply Co., 400 Market Street, Portland, OR 97201

A hybrid of the two

Design any part of the email in the editor and pass the rest as HTML from your code. Here the header, button and footer are designed and the message comes from code, but the split is yours: one block or most of the email, anywhere in the layout, in any order.

  • HTML from your code
  • Designed in the editor

Deliverability from your own domain

Your domain's own records, written and checked for you. Nothing to warm up.

  • SPF Verified
  • DKIM Verified
  • DMARC Verified

See what happened after you sent

Every send counted, per day and per template.

4,790

emails delivered in the last 14 days

3 Sep10 Sep16 Sep

19 bounced and 3 complaints, each with its event history.

Included in every plan

Transactional email comes with the plan that already covers your mailboxes and domain. There is no per-email pricing.

Starter

3,000

emails a month

$6/mo

10 recipients a minute

Growth

20,000

emails a month

$12/mo

60 recipients a minute

Pro

50,000

emails a month

$24/mo

120 recipients a minute

Business

100,000

emails a month

$49/mo

240 recipients a minute

Questions

The short answers. The docs have the long ones.

Read the docs

Start sending from your domain

Get started

Included on every paid plan, from $6 a month.