API keys
All Sendora API requests authenticate with an API key passed in theX-API-Key request header.
Key formats
Use a deliberately limited workspace and non-destructive requests for development. A test-prefixed key is not a substitute for a separately isolated sandbox.
Creating a key
- Log in to app.sendora.ai
- Go to Settings → API Keys
- Click Generate new key
- Give it a descriptive label (e.g.,
zapier-integration,n8n-production) - Copy it immediately, it is shown only once
Rotating a key
- Generate a new key
- Update your integration to use the new key
- Delete the old key from Settings → API Keys
Permissions, scopes, role and plan
A key authenticates one workspace. What it may do is the combination of four checks, applied on every request:
Keys are created with
read, write, all or *. Any other scope is rejected with 422 when the key is created.
Your Sendora key is not your AI-provider key
There are two separate credentials, and they are never interchangeable:
You never send a provider key to the API, and the API never returns one. Sendora resolves the provider and model for each workspace on the server, from the campaign’s own AI configuration first and the workspace default after that. If your own key is missing or fails, AI steps fall back to the platform default and are billed as documented for your plan; the API does not accept a provider key or model credential in a request to override this. Connected AI assistants (the workspace MCP) sign in with OAuth, not with an API key.
Credits and usage
Requests that run a billable action (AI steps, messages, calls, enrichment) are charged to the workspace that owns the key, using the same rates as the app. AGET never spends credits. When a write may be retried, send an Idempotency-Key so a retry cannot repeat the action (see Idempotency). The usage shown in the app is the source of truth for what was charged; do not infer charges from an HTTP 200 alone.
Security checklist
- Keys stored in environment variables, not source code
- A deliberately limited workspace is used for non-production testing
- One key per integration (easier to rotate without affecting others)
- Old / unused keys deleted from the dashboard
- Webhook signatures verified on every inbound event (see Webhooks)
Error responses
Resource ownership failures are intentionally reported as
404 Not Found so a
key cannot use the API to discover another workspace’s resource IDs. 403 is
reserved for entitlement and widget-origin policy failures.