Security
Copied
HTTPS¶
- API: All production traffic is TLS-terminated at the edge. Use
https://dev-api.withsema.comonly; do not usehttp://for production. - Webhooks: Your webhook endpoint must be HTTPS in production so the payload is not sent in the clear. For local development you can use a tunnel (e.g. ngrok).
The official SDKs enforce this: they reject live API keys (sk_live_...) when the base URL is non-HTTPS and not loopback, and warn for other HTTP base URLs.
API keys¶
- Create and manage keys in the dashboard under API keys. Use
sk_test_...for development andsk_live_...for production. - Do not commit keys. Use environment variables (e.g.
SEMA_API_KEY) or a secrets manager. Rotate keys if they may have been exposed. - Send the key as
Authorization: Bearer <key>orX-API-Key: <key>.
Webhook signing¶
Webhooks are signed with the Standard Webhooks scheme. Use the webhook secret returned when you create or update an inbox (e.g. whsec_...). Verify every request with the webhook-id, webhook-timestamp, and webhook-signature headers so you only process authentic deliveries.
The Python and Node.js SDKs provide a verifier.
Keep the webhook secret confidential. If it is compromised, update the inbox with a new secret so future deliveries use the new key.
Planned¶
- SSRF/egress filtering for outbound webhook requests.
- Secret rotation workflows for webhook secrets and API keys.