Resellers
A reseller account runs other businesses, its tenants, entirely through the API. Each tenant is a full organization of its own — agents, phone numbers, contacts, calls, webhooks — with no login of its own: you operate it with your API key.
Reseller access is enabled by the Rindee team. On any other account the tenant
endpoints answer 403 not_a_reseller.
Create a tenant
Section titled “Create a tenant”curl -X POST https://api.rindee.ai/v1/tenants \ -H "Authorization: Bearer rk_live_your_key_here" \ -H "Content-Type: application/json" \ -d '{ "name": "Acme Dental", "timezone": "Australia/Sydney", "industry": "dental", "external_ref": "cust-42" }'external_ref— optional; your own identifier for this customer, returned on every read.- The tenant starts with a main location, starter services for its industry and a default appointment agent.
- Creating tenants needs the
settingscapability. Your account may have a limit on the number of tenants (409 tenant_limit_reached).
GET /v1/tenants lists your tenants; PATCH /v1/tenants/{id} renames one, changes its
timezone or reference, or disables it.
Act inside a tenant
Section titled “Act inside a tenant”Send your own key with the tenant’s id in the X-Tenant-Id header:
curl https://api.rindee.ai/v1/agents \ -H "Authorization: Bearer rk_live_your_key_here" \ -H "X-Tenant-Id: 5f0c2a3e-0000-0000-0000-000000000000"With the header, every endpoint in the API reference applies to that tenant — connect its carrier, add its numbers, set up its agent, import contacts, register webhooks.
- An id that is not one of your tenants answers
404 tenant_not_found. - These are not available inside a tenant and answer
403 not_available_for_tenant: balance, payments, plans, add-ons, receipts, referrals, API keys, invites, and the tenant endpoints themselves. - A tenant never gets a public booking page.
- The header works with API keys only, not with a signed-in session.
Billing and usage
Section titled “Billing and usage”A tenant has no balance of its own: its calls and charged texts are paid from your balance, at your account’s rates. Usage per tenant:
curl "https://api.rindee.ai/v1/tenants/{id}/usage?since=2026-10-01T00:00:00Z" \ -H "Authorization: Bearer rk_live_your_key_here"The response has completed calls, talk time in seconds, and what your balance was
charged for the tenant — calls, everything else (such as agent texts) and the total.
Without since / until it covers the current calendar month, UTC. A window can span
at most 366 days.
Call limits
Section titled “Call limits”Each tenant has its own outbound limits: calls at the same time and calls per hour.
GET /v1/tenants/{id}/limits shows the current values and the most you may set;
PATCH changes them:
curl -X PATCH https://api.rindee.ai/v1/tenants/{id}/limits \ -H "Authorization: Bearer rk_live_your_key_here" \ -H "Content-Type: application/json" \ -d '{"max_concurrent_calls": 3, "max_calls_per_hour": 120}'A value above your account’s ceiling answers 422 above_reseller_limit with the
limit.
Agent texts
Section titled “Agent texts”A tenant’s agent texts from the tenant’s own sending number when one is set
(PUT /v1/sms-sender with its X-Tenant-Id), otherwise from your sending number.
With neither, the tenant’s agent does not send texts. Set yours with
PUT /v1/sms-sender on your own account.
Disable a tenant
Section titled “Disable a tenant”Tenants are disabled, not deleted:
curl -X PATCH https://api.rindee.ai/v1/tenants/{id} \ -H "Authorization: Bearer rk_live_your_key_here" \ -H "Content-Type: application/json" \ -d '{"disabled": true}'A disabled tenant’s numbers stop answering, and it places no calls or texts and
incurs no charges. Reads still work — call logs and usage stay available — but
changes answer 403 tenant_disabled. Everything is kept; {"disabled": false}
switches it back on.