Documentation
Sending in five minutes
Add a domain, grab an API key, and send. REST or SMTP, the same signed, tracked, audited pipeline either way.
Get started
- Create an account, free, no card. You get 500 emails to start.
- Add a domain, we generate the exact DNS records to publish.
- Verify, we check your authoritative nameservers directly.
- Create an API key, or an SMTP credential, and send.
Authentication
Every API request carries a bearer token. Keep keys server-side; they grant full send rights.
Authorization header
Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxxSend a message
POST /v1/messages
curl -X POST https://api.bookmyspot.us/v1/messages \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{
"from": "hello@send.yourbrand.com",
"to": ["customer@example.com"],
"subject": "Your receipt",
"text": "Thanks for your order.",
"html": "<p>Thanks for your order.</p>"
}'Returns 202 Accepted with a message id you can trace through the dashboard and webhooks. Pass an Idempotency-Key so a retry never sends twice.
SMTP relay
Point any system that speaks SMTP at our relay. Create an SMTP credential in the dashboard.
connection settings
host: smtp.bookmyspot.us
ports: 587 (STARTTLS) · 465 (TLS) · 2525 (fallback)
username: (from the dashboard)
password: (shown once when created)Webhooks
We POST delivery events as they happen. Verify the HMAC signature over the raw body before trusting a payload.
verify.js
const expected = crypto
.createHmac('sha256', secret)
.update(req.rawBody)
.digest('hex')
if (expected === req.headers['x-bookmyspot-signature']) {
const { type, recipient } = req.body
// delivered | bounced | opened | clicked | complained
}Errors
Errors are JSON with a stable code and a human detail. Common ones:
domain_not_verified | The from-domain hasn’t passed DNS verification. |
free_allowance_exhausted | Your 500 free emails are used up, upgrade to continue. |
rate_limited | Over your plan’s hourly limit. Retry after the given seconds. |
invalid_from | The from address isn’t a valid mailbox. |