Overview
Roles control what each user can see and do in FinOps Hub and Embedded Banking — from expenses and invoices to payments, accounting configuration, and bank accounts. Every user has exactly one role, either system-provided or custom. The full set of permissions are documented in the Permissions reference.System roles
Tesouro provides four built-in roles available to all organizations. They cannot be modified or deleted.- Admin — full access to all operations, including user and role management
- Chief Financial Officer (CFO) — full AR/AP cycle and payments, without user management or org settings.
- Bookkeeper — read-only access to all financial objects, with the ability to export data.
- Employee — can manage their own expenses and receipts only.
| Capability | Admin | Chief Financial Officer (CFO) | Bookkeeper | Employee |
|---|---|---|---|---|
| Manage users and roles | Read + Write | — | — | — |
| Org settings | Read + Write | — | — | — |
| Bank accounts | Read + Write | Read (account-gated) | Read | — |
| Linked bank accounts | Read + Write | — | — | — |
| Counterparts | Read + Write | Read + Write | Read | — |
| Invoices (AR) | Read + Write | Read + Write | Read | — |
| Payables (AP) | Read + Write + Pay + Force approve | Read + Write + Pay | Read | — |
| Expenses | Read + Write + Force approve (org-wide) | Own + direct reports | Read (org-wide, incl. direct reports) | Own + direct reports |
| Approval policies | Read + Write | Read | Read | Read |
| Accounting config | Read + Write | — | Read | — |
| Exports | Read + Write | — | Read + Write | — |
| Embedded bank accounts | Full | Read + Transfer (account-gated) | Read | — |
System roles cannot be modified or deleted —
PATCH and DELETE requests on a system role return 403 Forbidden.Account-gated means the CFO’s access to bank accounts and embedded bank accounts is limited to only the accounts explicitly granted to them. To grant or revoke a user’s access to specific bank accounts, use the Manage access to bank accounts for users endpoint.
Reporting manager
A reporting manager is a user relationship, not a role or permission. When a user is designated as someone’s reporting manager — via thereportingManagerId field on the user object — they automatically gain access to that person’s expense records.
This is what gives expense:read:self and expense:write:self their extended reach: “self” covers the user’s own expenses plus those of their direct reports. No additional permission is required.
Note that reporting manager access does not grant approval rights — those are governed by the organization’s approval policies.
See Expense approval policies to configure approval rules for a reporting manager’s team.
Custom roles
Organizations can create custom roles with any combination of user-assignable permissions. Custom roles haveisSystemRole: false and can be updated and deleted.
Create a custom role
CallPOST /identity/v1/roles with a partner-level access token:
Assign permissions to a custom role
After creating the role, assign permissions usingPOST /identity/v1/roles/{roleId}/permissions:
204 No Content on success. To remove permissions from a role, use "type": "REMOVE" with the same endpoint and the permission IDs to revoke.
Permission IDs can be retrieved from GET /identity/v1/roles/{roleId}/permissions on any existing role, or from the Permissions reference.
Assign the role to a user
Assign the role to a user by settingroleId on POST /identity/v1/users (when creating a user) or PATCH /identity/v1/users/{userId} (to update an existing user). See Organization users.
Update a custom role
CallPATCH /identity/v1/roles/{roleId} with any subset of name, key, or description:
Delete a custom role
CallDELETE /identity/v1/roles/{roleId}. Returns 204 No Content on success. System roles cannot be deleted and return 403 Forbidden.
Read role data
List members of a role
GET /identity/v1/roles/{roleId}/members returns all users currently assigned to a role. The response is paginated and supports limit and paginationToken query parameters.
List permissions on a role
GET /identity/v1/roles/{roleId}/permissions returns all permissions assigned to a role.