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
| Resource | Shared with umbrella | Owned by sub-entity |
|---|---|---|
| Caller Trust enterprise (LOA, EIN, DIR) | Yes. One umbrella LOA covers every sub-entity by default | Optional. A sub-entity can register its own enterprise if it has a separate legal identity |
| Phone numbers | ✗ | ✓ |
| Agents + voice config | ✗ | ✓ |
| Call history + recordings | ✗ | ✓ |
| Billing | Pooled at the umbrella org | n/a |
| HIPAA posture | Inherited on creation, editable per sub-entity | n/a |
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: true 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 parent auto-inherits the flag. A sub-entity can opt out by settinghipaa_enabled: false, but that’s unusual — leave it on if the parent has an executed BAA.
The parent’s BAA covers all sub-entities under it — 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.