Skip to content

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.

Terminal window
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 settings capability. 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.

Send your own key with the tenant’s id in the X-Tenant-Id header:

Terminal window
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.

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:

Terminal window
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.

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:

Terminal window
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.

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.

Tenants are disabled, not deleted:

Terminal window
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.