email:sendScoped API keys
Every key gets
one clear job.
Choose exactly which capabilities, projects, and sender domains a workflow can use. A key can create another grant only when it has api-keys:write — and never one broader than itself.
- Secret shown once
- Immediate revocation
- Server-side credentials
ntc_xxxxxxxxxxxxxxxxxxxxShown onceThree boundaries
Define what it can do — and where.
Capabilities control the operation. Projects control the data boundary. Sender domains control which verified identities a sending workflow may use.
projects:readprojects:writeapi-keys:writedomains:readdomains:writetemplates:writeaudiences:writebroadcasts:writeautomations:writewebhooks:writesuppressions:writereceiving:readreceiving:writeCanonical capability list
The public scope list comes from the product.
This page renders the same canonical capability array used by the API. Choose a full, sending-only, or custom preset; custom grants can combine any current scopes below with selected projects and domains.
Read the agent access guide[ "email:send", "sms:send", "sms:read", "sms:manage", "sms:billing:read", "projects:read", "projects:write", "api-keys:write", "domains:read", "domains:write", "templates:write", "audiences:write", "broadcasts:write", "automations:write", "webhooks:write", "suppressions:write", "receiving:read", "receiving:write" ]
Credential lifecycle
Create narrowly. Rotate cleanly.
Separate credentials keep routine rotation or one revoked workflow from touching every integration in the workspace.
- 01GrantChoose the job
Start with full access, sending only, or a custom combination of capabilities, projects, and domains.
- 02BindSelect its resources
Keep a runtime inside one project or let a trusted operator work across a selected set.
- 03RunLet policy enforce it
Every API request checks the capability and resource boundary before the operation runs.
- 04RotateReplace, then revoke
Mint the replacement, update the workflow, and delete the old grant without changing the account.
One key per workflow
Keep the blast radius small enough to explain.
Runtime, deploy, agent, and inbound jobs do not need the same authority. Give each one a credential whose purpose is obvious from its name and grant.
Dispatch transactional mail from the allowed project and sender domain — nothing more.
email:sendGive CI its own credential for publishing template changes without a runtime send grant.
templates:writeSize the grant to the agent’s task instead of handing it the keys to the whole workspace.
custom grantRead messages and attachments for the project that owns the receiving domain.
receiving:readDelegation without escalation
A key can hand off less. Never more.
A grant needs api-keys:write to list key metadata, create credentials, or revoke them. Any credential it creates must fit inside its own capabilities, projects, and domains.
- Secrets appear only at creation
- Revocation takes effect immediately
- Permission failures stop at the boundary
api-keys:writetemplates:writeprojects: selectedtemplates:writeproject: Acme AppReady to scope it?
Give the next workflow exactly one job.
Create the grant, copy its one-time secret into a server-only environment variable, and let the API enforce the boundary.