Transport
Everything is HTTPS. TLS terminates at the edge and the origin only accepts HTTPS. Outbound mail is sent with TLS required.
Credentials
API keys are stored as a SHA-256 hash of a high-entropy random value. The plaintext is shown once at creation and cannot be recovered — there is no endpoint that will reveal it. Revoking is immediate.
Verification codes are salted per organization and hashed with scrypt rather than a bare digest. A six-digit code has only a million possibilities, so a plain hash is recoverable in about a second by anyone who obtains the stored value; a slow key-derivation function turns that into days against a code that expires in 24 hours.
Inbound mail is authenticated
Received mail carries the SPF, DKIM and DMARC verdicts from the receiving path.
A message failing DMARC — or failing both SPF and DKIM — is labelled
unauthenticated and withheld from default listings. It is kept rather than
dropped so you can inspect it, but it is never presented as though it were
genuine. An agent acting on spoofed mail is the attack this exists to prevent.
Spam and virus verdicts are applied the same way.
Notifications are verified
Every provider notification we accept is signature-verified against the signing certificate, and the topic it claims to come from is checked against the one we expect. A valid signature only proves that some topic sent it; without the topic check, anyone able to create a topic could inject mail.
A signature that cannot be verified because the certificate endpoint is unreachable is treated as transient and retried, not as a forgery — the two are opposite answers, and collapsing them loses real mail.
Tokens are audience-bound
Access tokens for the MCP endpoint are only accepted when their aud is exactly
https://api.carlyemail.com/mcp. A token issued by the same authorization server
for a different service is refused. This is the confused-deputy attack that RFC
8707's resource parameter exists to prevent, and it fails open if you skip it.
Isolation
CarlyEmail runs in a dedicated AWS account, separate from any other product. Sending reputation is enforced per account, so this is what stops one product's mail problems becoming another's.
Within the API, an inbox-scoped key cannot reach a sibling inbox, and a resource
belonging to another organization returns 404 rather than 403 — confirming
existence is itself a disclosure.
Reporting
Found something? Write to support@carlyemail.com. We will acknowledge within two business days.