Every dashboard action is an MCP tool your agent can call.Read the docs
Hono email

Send Hono email from any runtime that speaks fetch. No Node-only email dependency required.

Use the same server-side request shape on Workers, Deno, Bun, or Node, then trace the accepted message through signed delivery events.

Edge-ready. One fetch call, no Node-only dependencies.

Server quickstart
Hono

One request, complete trace

Request

POST /api/v1/emails

Authorization: Bearer aem_…

Idempotency-Key: welcome-8f21

{ "to": "[email protected]", "template": "welcome" }

202 Accepted

{ "id": "msg_7ca31", "status": "queued" }

RuntimeServer process
RequestPOST /api/v1/emails
Result202 · queued
Credentials stay server-side

[ 01 / 03 ]Integration shape

Keep the integration portable without making it vague.

Use a typed Hono handler

A plain fetch call keeps the send portable; runtime bindings still determine how the secret and background work are handled.

Publish product events

Publish product events from the handler that validates and commits the action, so flows do not depend on client telemetry.

Verify the webhook

Hono hands you the untouched Request via c.req.raw, which is exactly what signature verification needs.

[ 02 / 03 ]Server quickstart

Queue one email from a typed Hono handler.

The handler returns an accepted message ID while delivery continues outside the request.

Hono's standards-based request model maps directly to the REST API.

src/index.ts
app.post("/welcome", async (c) => {
  const input = await c.req.json();
  return fetch(EMAIL_URL, { method: "POST",
    headers: authHeaders(`welcome-${input.userId}`),
    body: JSON.stringify({ to: input.email, template: "welcome" }) });
});

Accepted response

{ "id": "msg_7ca31", "status": "queued" }

Questions people ask us

Ship portable email from your Hono runtime.

Queue a message with fetch and verify its delivery without adding a Node-only client.