Security
An overview of Sendexa's security model — how credentials work, how webhooks are signed, and the practices we recommend to keep your integration secure.
All connections to api.sendexa.co must use HTTPS. The API rejects plain HTTP with a 301 Moved Permanently redirect — never rely on the redirect; always use HTTPS from the start.
Minimum TLS version
TLS 1.2
Certificate authority
Let's Encrypt / DigiCert
HSTS
Enabled, max-age 1 year
Sendexa uses HTTP Basic Auth. Requests must include an Authorization header with a Base64-encoded apiKey:apiSecret token.
# Compute the token once:echo -n "your_api_key:your_api_secret" | base64# Use in every request:Authorization: Basic <base64_token>
You can generate a new API key from the Dashboard at any time without downtime by using a brief overlap window.
- Go to Dashboard → Settings → API Keys.
- Click Generate New Key. The old key remains active.
- Update all services and environment variables to use the new key.
- Once all deployments are using the new key, click Revoke Old Key.
Revoking is immediate
401. Ensure you have fully migrated before revoking.Every webhook Sendexa delivers is signed with HMAC-SHA256 using your webhook secret. Always verify the signature before processing the event — this prevents attackers from sending fake payloads to your endpoint.
import { createHmac, timingSafeEqual } from "crypto";function verifyWebhook(signature: string, // X-Sendexa-Signature header valuerawBody: Buffer, // raw, unparsed request bodysecret: string, // your webhook secret from the dashboard): boolean {const sig = signature.startsWith("sha256=")? signature.slice(7): signature;const expected = createHmac("sha256", secret).update(rawBody).digest("hex");// timingSafeEqual prevents timing attacksreturn timingSafeEqual(Buffer.from(expected, "hex"),Buffer.from(sig, "hex"),);}
Use the raw body
If you discover a security vulnerability in Sendexa's API, dashboard, or SDKs, please report it privately before public disclosure.
Email security@sendexa.co with a description of the issue and reproduction steps. We aim to acknowledge reports within 24 hours and resolve critical issues within 72 hours.
We ask that you do not disclose the vulnerability publicly until we have had a reasonable opportunity to investigate and remediate.