Developers

An API that behaves like you’d design it.

Versioned from day one, predictable errors with request IDs, idempotency where duplication hurts, and test keys that simulate everything. Boring in all the ways infrastructure should be boring.

request.sh — send an email
$ curl https://api.calder.click/v1/emails \
  -H "Authorization: Bearer calder_sk_live_…" \
  -H "Idempotency-Key: welcome-user-4815" \
  -d '{
    "from": "app@acme.com",
    "to": "ada@example.com",
    "subject": "Verify your email",
    "html": "<p>Your code…</p>"
  }'
Contracts

Errors you can program against

Every failure returns the same shape — a machine-readable code, a human message, and the request ID to quote when asking for help. No HTML error pages, no mystery 500s, no digging through headers.

every error, every time
{
  "error": {
    "code": "domain_not_verified",
    "message": "The sending domain has not been verified.",
    "request_id": "req_9f2k41xq…"
  }
}

Rate limits

Generous where it matters, strict where it counts.

SendingPer key, project, and organization100 / min
VerificationDomain checks are expensive — for everyone10 / min
AuthBrute force gets bored and leaves20 / min
OTPCodes are precious; treat them that way5 / min
DashboardClick around freely120 / min

Every 429 carries limit, remaining, reset, and a Retry-After. No guessing games.

Get started

Go get your first delivery.

Not your first signup form, not your first dashboard tour — your first email, landing in an inbox, with the webhook to prove it. Test keys are free and can’t hurt anything. The only thing standing between you and that little delivered tag is one POST request.