API reference

BlueyEmail API

Send transactional email, manage contacts, run campaigns, and receive HMAC-signed webhooks — a single REST API over 127 JSON endpoints.

v2 APIREST · JSONHMAC webhooks1k–10k req/hr

Base URL  https://api.blueyemail.com

Building a connector? Download the OpenAPI spec to auto-generate one. Public, no auth required.

Open in dashboard to run live requests Signed in, your key fills in automatically — never paste a secret key on a public page.

Explore the API

Authentication

Every request needs an API key. Pass it as an X-API-Key header (recommended) or a Bearer token. Create keys in Settings → Integrations.

X-API-Key header
X-API-Key: YOUR_API_KEY
Authorization: Bearer
Authorization: Bearer YOUR_API_KEY

Test the connection

Confirm a key works with a single call to GET /api/v2/me. It needs no scope and returns the workspace plus the key’s auth context — ideal for a platform’s “Test connection” step.

curl -X GET "https://api.blueyemail.com/api/v2/me" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json"
Response
{
  "success": true,
  "data": {
    "workspace": { "id": "uuid", "name": "Acme Inc" },
    "auth": { "method": "api_key", "mode": "live", "sandbox": false, "scopes": ["leads:write", "emails:send"] }
  }
}

Quick start

Send your first transactional email in one request.

curl -X POST "https://api.blueyemail.com/api/v2/transactional/send" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": "you@example.com",
"subject": "Hello from BlueyEmail",
"html": "<h1>It works!</h1>"
}'

The API sends transactional email — receipts, OTPs, notifications — via /api/v2/transactional/send. For marketing (newsletters, campaigns), don't send per-recipient: (POST /api/v2/campaigns/:id/leads) so unsubscribes, warmup, and segments are respected.

Sending over SMTP

BlueyEmail sends over HTTPS instead of SMTP. There is less to set up — no host, port, encryption mode or mail password — and it keeps working on hosting that blocks outbound SMTP ports, which is one of the most common reasons email quietly stops sending.

Here is how to connect, depending on what you are sending from:

Your own code or appAvailable now

Send with the REST API — one POST with your API key. Attachments, scheduling, custom headers and Reply-To are all supported. See Quick Start above to send your first email in a couple of minutes.

WordPress or WooCommerceIn development

We are building an official BlueyEmail plugin so you can skip SMTP entirely. Install it, paste your API key, and every email your site sends goes through BlueyEmail — WooCommerce orders and invoices, password resets, contact form replies. Nothing else to configure.

Connecting something else, or a platform you would like us to support? Tell us what you are working with — it genuinely shapes what we build next.

Rate limits & sending volume

Two different limits apply, and it helps to keep them separate.

1 · API request rate

How many HTTP calls your workspace can make. Your allowance is set by your plan and is shared across every API key and OAuth token in the workspace — creating more keys does not raise it. Both a per-minute and a per-hour cap apply. Exceeding either returns 429 RATE_LIMITED. Every response carries your live budget in headers:

PlanRequests / minuteRequests / hour
Free301,000
Spark1205,000
Grow30020,000
Business60050,000
API Free603,000
API Essentials30030,000
API Pro600150,000
API Premier1,200500,000
X-RateLimit-Limit1000Requests allowed this hour
X-RateLimit-Remaining842Requests left this hour
X-RateLimit-Reset1710415260Unix time the window resets
Retry-AfterimpactedSeconds to wait (on 429)

2 · Email sending volume

This is separate from the request rate. How many emails you can actually send is governed by a daily transactional ceiling (protects your sending reputation — raise it in Sending settings) and your monthly plan limit. Sends beyond a soft limit are queued, not dropped.

Sending to thousands? You don't make one call per recipient. Use (POST /api/v2/transactional/batch) — up to 1,000 messages per request. So 5,000 emails is just 5 API calls, far inside any rate limit. The single-send endpoint also accepts up to 50 recipients per call.

Errors

Errors return a nested error object with a type (derived from the HTTP status), a human-readable message, and a machine-readable code. The HTTP status is on the response itself. Some endpoints add extra fields (e.g. limit, reset_at, or the required scopes).

Error response
{
  "error": {
    "type": "auth_error",
    "message": "Invalid API key",
    "code": "INVALID_API_KEY"
  }
}
400validation_errorInvalid or missing parameters
401auth_errorInvalid or missing API key
403permission_errorAPI key lacks the required scope
404not_found_errorResource does not exist
409conflict_errorDuplicate idempotency key
429rate_limit_errorSlow down — check Retry-After
500api_errorServer error — retry with backoff