Skip to content
Developers & API

Send via the API

Everything in the product is available over a REST API. Wire transactional sends (order confirmations, password resets, alerts) into your backend once, then subscribe to webhooks for delivery and engagement events.

8 min read

What you'll need

  • A verified sending domain
  • Admin access to create an API key
  • A backend that can make HTTPS requests

Create an API key

  1. 1

    Open Settings → API keys → “Create”

    Issue a key scoped to exactly what it needs (e.g. messages:send), with a rate limit and an optional IP allowlist so a leaked key can't be abused.

  2. 2

    Copy the key once

    The full key (sb_live_<prefix>.<secret>) is shown only at creation. Store it in your secret manager — it can't be retrieved again.

Keys are bound to one workspace. A key for workspace A cannot read or send for workspace B.

Authenticate

Every request uses a Bearer token. The base URL is https://api.climails.com/v1.

Authorization header
Authorization: Bearer sb_live_<prefix>.<secret>

Send a message

POST to /v1/messages with a channel, a recipient and either a template_id (+ variables) or raw subject/html. Pass an Idempotency-Key so a retried request never sends twice.

Send a transactional email
curl https://api.climails.com/v1/messages \
  -H "Authorization: Bearer sb_live_<prefix>.<secret>" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: order-1042" \
  -d '{
    "channel": "email",
    "to": "[email protected]",
    "from_email": "[email protected]",
    "subject": "Your order is confirmed",
    "html": "<p>Hi Ann, your order #1042 is on its way.</p>"
  }'
The workspace is taken from the API key automatically — you don't put it in the path for /messages.

Try it in the browser

Open Settings → API & Playground to use the interactive RapiDoc console: paste your key into “Authenticate” and run real requests before writing a line of code. The same reference is public at /docs, and the raw OpenAPI spec at /openapi.yaml.

Subscribe to webhooks

Register a webhook (Settings → Webhooks, or POST /v1/workspaces/{workspace_id}/webhooks) to receive delivered, bounce, complaint, open and click events, so your app reacts to what happens after the send.

  • Workspace-scoped resources live under /v1/workspaces/{workspace_id}/… — get your workspace_id from GET /v1/workspaces.
  • Verify the webhook signature using the secret shown when you create it.

Frequently asked questions

What's the difference between transactional and campaign sends?

Transactional = one message to one person triggered by your app (POST /v1/messages). Campaigns are bulk sends to lists/segments, scheduled from the cabinet or the campaigns API.

How does idempotency work?

Send an Idempotency-Key header; a repeat within 24 hours returns the original result instead of sending again.

Where do I find my workspace_id?

Call GET /v1/workspaces with your key — it lists the workspace the key belongs to.

Start sending in minutes

Create a free account, connect your domain and reach your audience across every channel — no credit card needed.

Free plan forever · No credit card required · Set up in minutes

Send transactional messages via the REST API — Climails