Developer-first email path

Email for product teams.

A clear API for transactional email, verified domains, reusable templates, event webhooks, and readable logs.

Original folded black metal and smoked glass signal object

Start sending

Send from familiar code with a placeholder key, then inspect the request before it reaches a real environment.

JavaScriptNode.js
sample only
1
2
3
4
5
6
7
8
9
10
11
12
13
import { Richese } from "@richese/node";

const courier = new Richese({
  apiKey: process.env.RICHESE_API_KEY,
});

await courier.messages.send({
  from: "updates@yourdomain.example",
  to: "dev@example.com",
  template: "welcome",
  data: { firstName: "Ari" },
});
Illustrative JavaScript — sample only; not a live request. See the send path  ›

Read the quickstart. Send the first message on your terms.

See the send path
01Request
02Template
03Event
04Log
Richese route prism

Know what happened after `send()`.

Each request, event, and log stays connected.

Richese / requestaccepted
REQUESTPOST /v1/messages
200 sent
send.jsJavaScript
010203040506
await richese.messages.send({
  from: "updates@yourdomain.example",
  to: "dev@example.com",
  template: "welcome"
});
request idrc_01H9J2

Send

Start the path from familiar code.

See webhook events
Richese / tracelive
EVENTSsame message
01
email.sentqueued
02
email.deliveredwebhook received
03
message logready to inspect
LOG DETAIL

email.delivered

messagerc_01H9J2
recipientdev@example.com
Delivered

Receive events

Connect the event to the next product state.

Inspect logsOpen the logs guide

Verify every domain

Add a sending domain, check its records, and keep sender identity visible while your team builds templates and events.

  • Add a sending domain.
  • Follow its verification status.
  • Use the verified sender in the API request.
Set up a domain
Richese / sender identity 1 verified
SENDING DOMAINSKeep the sender clear
@updates.yourdomain.exampleadded 14 minutes ago
Verified
DKIMsigning record detected
ready
SPFsending permission detected
ready
Return pathbounce handling connected
ready
last checked just nowsender updates@yourdomain.example
Richese checks the records your sending path depends on.
Folded template ribbon

Keep the message in the product.

Keep templates separate from requests. Choose a template, pass its data, and use the same send path for each product moment.

  • Welcome and onboarding messages.
  • Password and access messages.
  • Receipts and status updates.
Read the templates docs
Richese / templates
TEMPLATEWelcome / onboarding
published
contentdatahistory
subjectWelcome to your workspace
Richesewelcome
A NEW START

Welcome, Ari.

Your workspace is ready. Keep building the product and let Richese carry the message.

variable {{firstName}}saved 2m ago

Let email events reach your app.

Webhooks return message events to your server, so the product can update state, investigate exceptions, or continue a workflow.

  • Receive event notifications at your endpoint.
  • Connect each notification to the message in your system.
  • Handle the next action in the product you already own.
Read the webhook docs
Richese / event webhooks endpoint connected
EVENTS / DELIVERYPOST /api/courier/events
last event 12s ago
RECENT EVENTS04
PAYLOADemail.delivered
handled
JSONheadersattempts 1
{
  "type": "email.delivered",
  "message_id": "ck_msg_01H9J2",
  "to": "dev@example.com",
  "template": "welcome",
  "occurred_at": "09:42:19Z"
}
response200 OK184 ms
Protected delivery control dial

See the message. Respect the address.

Logs give you a readable record of a send and its latest state.

Suppression state stays in the send path, so your application can review an address before another request.

  • Trace a message from request to event.
  • Review the latest state in the log.
  • Check suppression handling before retrying.
Explore the logs Read suppression handling
Richese / message logs 24 messages
message, recipient, request id
MESSAGERECIPIENTSTATETIME

Move email without a rewrite.

Bring existing sends across in steps: map templates and domains, reconnect events, then change the default path.

  • Inventory existing sends.
  • Map templates and domains.
  • Check webhook and suppression behavior.
  • Follow the cutover notes one step at a time.
Richese / migration support guided cutover
CUTOVER PROGRESS02 / 04 steps complete
50%
STEP 02in progress

Map templates and domains.

Connect existing messages to the templates and sender identity Richese will carry forward.

Welcome → welcome
Sender → updates.yourdomain.example
Confirm fallback → support@yourdomain.example

Everything in view

Domains, logs, and suppression stay close to every send.

DOMAINSenderVisible
MESSAGELogReadable
ADDRESSSuppressionChecked

Read the quickstart.
Keep building.

Read the quickstart  ›