In most integrations you don’t need to think about tenant explicitly. Authentication and routing already carry the tenant context, and the API filters data behind the scenes. This page explains the model, shows how the tenant is resolved on each request, and documents the few exceptions where Customer surfaces.
The concept: why multi-tenant
Cativa is a multi-tenant platform: a single API instance serves thousands of different communities, and each one has its data fully isolated from the rest. A call made in one tenant’s context never sees or touches another tenant’s data. Think of an apartment building. The structure (elevator, plumbing, facade) is shared, but each apartment has its own door and key. Nobody enters your apartment with the neighbor’s key. In Cativa, the “structure” is the API and infrastructure, the “apartment” is the tenant, and the “key” is the credential you use.Customer and tenant are the same thing
In the product, Customer and tenant are the same concept seen from two angles:- Customer is the commercial/admin name. It shows up in billing, in the OIDC flow (
{customerName}), and in thecustomerfield of responses. - Tenant is the technical name. It is the unit of data isolation.
makersday), which is also the community’s public subdomain.
How the tenant is resolved on each request
You almost never pass the tenant by hand. The context is inferred from how the request arrives. Understanding this helps you debug empty responses or403s.
The API Key embeds the tenant
The partner key follows this shape:How to discover the current customer
If you need to know which customer your key belongs to (for logging, auditing, or an onboarding sanity check), callGET /auth/me. The customer field carries the tenant slug.
The sample JSON on this page is illustrative. The authoritative field-by-field schema lives in the API Reference tab (Auth tag).
When you handle Customer explicitly
In most integrations the tenant is invisible. These are the exceptions.1. OIDC login (Sign in with Cativa)
1. OIDC login (Sign in with Cativa)
SSO endpoints carry the customer slug in the path:The
customerName is the community’s public subdomain. Align it with the tenant admin at onboarding. See Sign in with Cativa for the step-by-step.2. Webhooks listening to multiple tenants
2. Webhooks listening to multiple tenants
If the same endpoint receives webhooks from more than one tenant (typical for apps serving multiple communities), the payload includes Persist the mapping
CustomerId at the top level so you can route.customerId -> external_account at customer onboarding. Don’t derive it on every event. Each event’s shape is documented on the webhook page (e.g. user_received_badge).3. Cross-tenant Marketplace OAuth apps
3. Cross-tenant Marketplace OAuth apps
If you are building a Zapier-style app that connects Cativa to other tools and serves many different communities, the right flow is OAuth Marketplace:
1
Install
Each community (tenant) installs your app once.
2
Token per tenant
Cativa issues an OAuth token scoped to that tenant.
3
Use
You store one token per tenant and use the right token on each call.
4. Platform console and admin tooling
4. Platform console and admin tooling
Platform operator endpoints (
/tenants/v1/admin/...) require operator credentials and a platform admin JWT. If you are an external API Key integrator, ignore this category: it isn’t publicly exposed to partners.Common tenant-context errors
403 Forbidden
403 Forbidden
The credential is valid but lacks permission for the resource, or you are trying to reach another tenant’s data. Remember: a key operates only inside its own tenant. Call
GET /auth/me and check the customer field.200 but empty or incomplete
200 but empty or incomplete
Almost always a wrong tenant resolution in production (bad domain or
Cativa-Origin header), so the API filters and returns that tenant’s empty set. Confirm the request subdomain/origin.Next steps
Identity and Users
The User model and how to tie it to your external system.
Webhooks
How to receive events from Cativa, including the
CustomerId field.