sendsend.email

Authentication

Every request carries a project API key as a bearer token.

Authorization: Bearer ss_live_...
  • ss_live_… keys send real email from verified domains.
  • ss_test_… keys simulate everything and never deliver.

A key belongs to one project

You never pass an organization or project id. A key can only touch its own project’s domains, templates, webhooks and messages, and a request that includes such an id is rejected.

Scopes

ScopeAllows
emails:sendSend email.
emails:readRetrieve and list emails, read usage.
domains:manageAdd, check and remove domains.
templates:manageCreate and read templates.
webhooks:manageManage webhook endpoints and deliveries.
suppressions:manageAdd, list and remove suppressed addresses.
api_keys:manageCreate, change and revoke other keys. No key has it by default.
contacts:manageManage audiences, contacts, topics and contact properties. Not in a key unless you choose it.
inbound:manageRead and delete received email.
broadcasts:manageCreate, send and cancel broadcasts. Not in a key unless you choose it.

Give each key only the scopes it needs. A server that only sends needs just emails:send.

Managing keys with a key

A key with api_keys:manage can create, list, update and revoke keys in its own project. It can only hand out permissions it has itself, and cannot touch a key more powerful than itself, so it can never be used to gain more access. Grant it only to automation you trust, such as a deployment tool that rotates keys.

Keeping keys safe

  • Keep keys on your server, in environment variables. Never put one in browser or mobile code.
  • Create a separate key per app or environment, so you can revoke one without touching the rest.
  • If a key leaks, revoke it in the dashboard. It stops working immediately.
  • Repeated failed attempts from one address are temporarily blocked.