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.
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
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
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.
Authenticate
Every request uses a Bearer token. The base URL is https://api.climails.com/v1.
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.
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>"
}'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