When you need sub-entities
Your org has multiple semi-independent business units and you want each to have its own phone numbers, agents, and settings, all managed from one RevDesk seat. Common cases:- Healthcare network. One parent entity, many clinic locations, each with its own outbound numbers.
- Franchise. One brand, many franchisees.
- Agency. One agency, many end-client workspaces.
Team with parent_organization_id pointing to your umbrella org. Members can belong to the umbrella, a specific sub-entity, or both. Phone numbers, calls, reputation tracking, and brand registration are all sub-entity-scoped.
What sub-entities share vs. own
The reputation-enrollment service walks the hierarchy automatically: when a phone on a sub-entity is provisioned, it looks for a team-level enterprise first, then the parent org’s enterprise, then falls back to the Cell Labs umbrella. So you register once at the umbrella, and every sub-entity’s numbers are covered.
API key scopes
Two scopes matter for sub-entities:- Org-scoped key:
auth.teamId= umbrella org id. Sees every sub-entity under the umbrella. Use for HQ engineering or internal tools. - Sub-entity-scoped key:
auth.teamId= sub-entity id. Sees only that sub-entity’s resources (phone numbers, calls, contacts). Use when issuing keys to per-location ops or to a vendor managing a single location.
teamId = subEntityId, or have a RevDesk admin issue one on your behalf from the carrier-registrations admin panel.
Endpoints
All sub-entity endpoints require:- An umbrella-org-scoped API key, OR
- A user-scoped API key where the user is
ADMIN/OWNERof exactly one organization.
sub_entities:read, sub_entities:write.
Create a sub-entity
OWNER.
List sub-entities
cursor=<id> from meta.cursor to fetch the next page.
Get one
Update
hipaa_enabled requires the compliance:write scope in addition to sub_entities:write — it is a sensitive control and is never granted to a key by default. Setting hipaa_enabled: true also requires the umbrella org to have an executed BAA on file. If the flag won’t flip, email support@revdesk.com.
Worked example: onboard a new location end-to-end
Tenant isolation guarantees
A sub-entity-scoped key:- Reads: filters every resource (phone numbers, calls, contacts, messages, reputation) to
teamId = subEntityIdonly. Never sees the umbrella’s or sibling sub-entities’ records. - Writes: created resources are tagged with
teamId = subEntityIdso they’re visible only within that sub-entity. - Caller-trust reads (enterprise, brand, reputation): walk up to the parent umbrella’s registration. Read-only: the sub-entity can see the brand it’s calling under, but cannot modify it. To edit, use an umbrella-scoped key.
POST /v1/caller-trust/enterprise using a key scoped to that sub-entity, then sign + submit via POST /v1/caller-trust/enterprise/sign-and-submit.
HIPAA inheritance
Creating a sub-entity under a HIPAA-enabled umbrella inherits the flag at creation — the child starts HIPAA-enabled, fail-closed. This is non-downgradeable: while the umbrella is HIPAA-enabled, an attempt to sethipaa_enabled: false on a child is rejected (403). A child can only be HIPAA-disabled if the umbrella itself is not HIPAA-enabled. Enabling HIPAA on a child also defaults its call-recording retention to 30 days (adjustable per number afterward).
The parent’s BAA covers all sub-entities under it, with no separate BAA per child. The hipaa_enabled flag on each sub-entity controls whether the runtime HIPAA gates apply to that specific child.
See HIPAA & BAA coverage for what this flag gates and how to request a BAA.