Skip to main content
In LaraCopilot, a tenant is a fully isolated customer account. Every resource in the platform — extensions, DID numbers, call queues, CDRs, rates, and CRM contacts — belongs to exactly one tenant. This hard boundary means one tenant’s data is never visible to another, making LaraCopilot safe to run as a shared multi-tenant deployment without additional partitioning work on your part.

Key fields

FieldTypeDescription
namestringHuman-readable display name for the tenant.
slugstringURL-safe unique identifier. Must be unique across all tenants.
domainstringThe tenant’s dedicated hostname. Must be unique across all tenants.
statusstringLifecycle state of the tenant (e.g. active, suspended).
timezonestringDefault timezone applied to CDRs and reporting for this tenant.
max_extensionsintegerHard cap on the number of extensions this tenant may provision.
settingsarrayFreeform JSON array of tenant-level configuration overrides.

Resource relationships

A tenant acts as the root node for every billable or operational resource in LaraCopilot:

Extensions

SIP endpoints that agents and users register devices against.

DID Numbers

Inbound phone numbers that route calls into the tenant.

Call Queues

Agent pools that distribute inbound calls using configurable strategies.

CDRs & Rates

Per-call detail records and billing rates scoped to the tenant.

API examples

Create a tenant

curl -X POST https://your-instance/api/tenants \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Acme Corp",
    "slug": "acme-corp",
    "domain": "acme.example.com",
    "status": "active",
    "timezone": "America/New_York",
    "max_extensions": 50,
    "settings": []
  }'

Retrieve a tenant

curl https://your-instance/api/tenants/1
Set max_extensions conservatively when provisioning a new tenant. You can raise the limit at any time via a PUT /api/tenants/{id} request, but the platform will reject new extension registrations once the cap is reached — preventing runaway usage on shared infrastructure.