Pick auth by trust boundary, not convenience.
Callaro supports JWT, tenant API keys, partner API keys, and runtime server keys. The right choice depends on whether the caller acts for one tenant, many tenants, or internal runtime services.JWT
Best for user-interactive operations in the Callaro app. Subject to app role and JWT-only controller guards.
Tenant API key
Best for server integrations that operate inside a single tenant and need explicit scope control.
Partner API key
Best for platform partners managing tenant provisioning and delegated operations across tenants.
Header patterns
- JWT
- Tenant API key
- Partner API key
Decision table
| Integration scenario | Recommended auth | Why |
|---|---|---|
| Internal operator using Callaro UI | JWT | Uses app session/role model and JWT-only guards. |
| Tenant backend sync job (CRM, BI, exports) | Tenant API key | Tenant-scoped, explicit least-privilege scopes. |
| Multi-tenant partner provisioning flow | Partner API key | Supports partner namespace and delegated tenant actions. |
| Runtime service-to-service internal call | Runtime server key | Server-only routes, not customer-issued API keys. |
Scope model (source: API key permission matrix)
Scopes are granted per key and mapped to route families. Examples:bulk_call_campaigns:readandbulk_call_campaigns:writecontacts:readandcontacts:writephone_numbers:readandphone_numbers:writevoice_sessions:readbilling:tenant:readandbilling:partner:read
Some scopes are opt-in and intentionally excluded from defaults, including
billing:partner:allocate and call_traces:admin_read.X-Tenant-Id semantics
When using partner APIs that operate on behalf of a downstream tenant, include X-Tenant-Id when required by that route family to select the effective tenant context.
Least-privilege rollout pattern
Add write scopes only for required route families
Split campaign write operations from billing or contact-compliance scopes to reduce blast radius.
Use separate keys per environment and workload
Keep sandbox and production keys isolated, and rotate keys tied to specific services.
Empty or omitted scopes should not be treated as “allow all.” Use explicit scopes and audit them against the permissions matrix before go-live.