Skip to main content
Access in Tally Platform is controlled by two independent role dimensions on each principal’s membership record. Both must be present for a principal to act within a tenant.

Two-layer role model

Account roles (tenancy_role)

Account roles govern tenant administration — adding and removing members, managing billing. They say nothing about what a principal can do with subjects or grants. Account roles are independent capabilities, not a ranked hierarchy.

Data-access roles (api_functional_role)

Data-access roles control what a principal can do with subjects belonging to (or accessible via grants held by) their own tenant. These form a ranked hierarchy — a higher rank includes all permissions of lower ranks. A principal may hold both a tenancy_role and an api_functional_role simultaneously, or just one, depending on their responsibilities.

The tenant_owner role

tenant_owner is the accountability anchor for the Tenant↔Subject relationship. It is not simply a higher-privilege version of tenant_admin — it carries legal and compliance significance and may only be held by a human principal. Ownership of a subject (the Tenant↔Subject pairing) is permanent and structural. What transfers via the ownership transfer offer flow is the tenant_owner role within the owning tenant — not the subject itself.

Counterparty access (allow_counterparty_access)

Grants operate at the tenant level, but accessing counterparty subjects also requires a per-principal flag. A principal with allow_counterparty_access: false (the default) receives 403 on counterparty endpoints even if their tenant holds active grants. The flag is set by an account_admin and may only be enabled by a human caller. See Access Grants for the full workflow.

Setting roles

All role and flag management goes through PUT /v1/tenants/{tenant_id}/principals/{principal_id}. The endpoint uses PATCH semantics — omitted fields are unchanged.
See Authentication for details on principal_type and human-only constraints.