SoonREST API and SMTP relay

Send email from your code.

One API call for receipts, OTPs and notifications. Verified domains, signed webhooks and logs you can search.

Ferry Send is still being built. This is the API we’re building toward, so details may change.

1const res = await fetch('https://api.ferry.et/v1/emails', {
2 method: 'POST',
3 headers: {
4 Authorization: `Bearer ${process.env.FERRY_KEY}`,
5 'Content-Type': 'application/json',
6 'Idempotency-Key': 'order-20431-shipped',
7 },
8 body: JSON.stringify({
9 from: 'Your App <[email protected]>',
11 subject: 'Your order is on its way',
12 template: 'order-shipped',
13 data: { orderId: 'AB-20431' },
14 }),
15});
202 { "id": "em_8fK2…", "status": "queued" }Planned response

Quickstart

Ready in three steps.

01

Add your domain

We generate the DNS records and check them for you.

SPFVerified
DKIMVerified
DMARCRecommended

02

Create an API key

Create keys for each workspace in the console.

Production key
fry_••••••••••••Copy

Shown once. Stored hashed.

03

Send and track

Every email gets an ID, a status and a full event history.

em_8fK2…Delivered
em_8fJx…Opened
em_8fJa…Queued

The API

Small surface, no surprises.

A REST API with predictable JSON, idempotency keys on every send and signed webhooks.

POST/v1/emailsSend an email
POST/v1/emails/batchSend a batch
GET/v1/emails/:idStatus and events
POST/v1/templatesCreate a template
GET/v1/domainsList domains
POST/v1/webhooksSubscribe to events
DEL/v1/suppressions/:emailRemove suppression

Webhook eventsSigned and retried

deliveredThe receiving server accepted it
openedThe recipient opened it
clickedThe recipient followed a link
bouncedThe address refused it
complainedThe recipient marked it as spam

Hard bounces and complaints are suppressed automatically.

SMTP relay

smtp.ferry.et for apps and tools that can’t call REST.

Signed webhooks

Delivery events, HMAC-signed and retried with backoff.

Templates

Store templates with variables and render them on the server.

Built-in protection

A suppression list and bounce limits keep your domain clean.

No SDK needed. Anything that can make an HTTPS request can use it.

Start free, send when it opens.

No card needed. Create an account and verify a domain, so you’re ready when sending opens.