Rykon Mail for developers

Send receipts
from your own domain

One REST API for transactional email, your audience, campaigns and AI agent inboxes. Scoped keys, errors that say what to change, and a sending reputation that is yours alone.

Free to try, no card. Make a key in the console and send in minutes.

checkout.complete
# Send a receipt
curl -X POST https://app.rykonmail.com/api/v1/emails \
  -H "Authorization: Bearer $RYKON_MAIL_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "from": "orders@northwind-local.test",
    "fromName": "Northwind Traders",
    "to": "jamie.chen@example.com",
    "replyTo": "help@northwind-local.test",
    "subject": "Your receipt for order 10482",
    "text": "Thanks for your order.\n\nOrder 10482: 2 x Linen apron, $48.00.\nTotal paid: $48.00.",
    "html": "<p>Thanks for your order.</p><p>Order 10482: 2 x Linen apron, $48.00.<br>Total paid: <strong>$48.00</strong>.</p>",
    "category": "receipt",
    "idempotencyKey": "order-10482-receipt"
  }'

# Add the customer to your audience
curl -X POST https://app.rykonmail.com/api/v1/contacts \
  -H "Authorization: Bearer $RYKON_MAIL_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "jamie.chen@example.com",
    "name": "Jamie Chen",
    "tags": [
      "customer",
      "newsletter"
    ],
    "attributes": {
      "plan": "pro",
      "city": "Austin"
    },
    "consent": {
      "text": "Yes, send me product news and offers. I can unsubscribe at any time.",
      "source": "Checkout opt-in",
      "ip": "203.0.113.24"
    }
  }'

Security

Built so a key cannot hurt you

The defaults are the safe ones, so the secure integration is also the easy one.

Scoped keys, shown once

Each key holds only the scopes you chose, belongs to one account, and is shown a single time. Revoke one and nothing else notices.

Your own sending reputation

Every account sends under its own identity with its own bounce and complaint rates, watched day and night. Another sender’s mistakes never reach your inbox placement.

Keys never in the browser

The API sends no CORS headers, on purpose: keys belong on your server. Our own console works the same way and never hands a key to a page.

Developer experience

Docs that cannot drift from the API

The reference, the samples and the OpenAPI file are drawn from the same table that routes every request. If an endpoint is in the docs, the API answers it.

  • JSON in, JSON outPlain HTTPS and fetch. No SDK to install or keep up to date.
  • Errors you can act onA stable code and a sentence. A refusal is never confused with a failure, so you know what to retry.
  • OpenAPI 3.1The whole API as one file, generated from the table that routes every request.
POST /emails
409
{
  "error": "refused",
  "message": "jordan@example.com unsubscribed, so only account, security, receipt and order mail may go to them"
}

A refusal, as the API words it. Retrying will not change the answer, and the message says why.

Your first email is a few minutes away

Create an account, add your domain, make a key, and send.