Skip to main content
Rinne provides a comprehensive user management system with role-based access control (RBAC). Organizations and merchants can create users with specific permissions.

User basics

Users are individuals who can access the Rinne platform through your organization or merchant account. Each user:
  • Has one or more identifiers (email, phone)
  • Can belong to multiple companies
  • Has roles that define their permissions
  • Can authenticate using password or OAuth

Creating users

For your organization

For a specific merchant

User identifiers

Users can have multiple identifiers for authentication:

Email identifier

Phone identifier

Users must verify their identifiers before they can log in.

Authentication methods

Users can authenticate using:
  • PASSWORD: Email/phone and password
  • GOOGLE: Google OAuth
  • CLIENT_PLATFORM: Platform-specific authentication

Roles and permissions

Rinne uses a hierarchical permission system with role-based access control (RBAC). Permissions are enforced on all protected API endpoints for both JWT-authenticated users and API key requests.
API keys carry their own set of permissions, configured at creation time. See the Authentication guide for details on creating keys with specific permissions.

Built-in roles

Rinne provides default roles:
  • admin: Full access to all resources
  • user: Basic access to view resources
  • merchant-admin: Full access to merchant resources

Custom roles

Create custom roles with specific permissions:
Caller grant ceiling. A role can only carry permissions the caller already holds. POST /v1/roles and PUT /v1/roles/{id} reject any permission that the caller’s effective permissions do not grant with 403 AUTHORIZATION_ERROR. This prevents a user with role.create or role.edit from minting a role with elevated permissions and self-assigning it via user.edit.

How the ceiling is evaluated

Role endpoints accept only JWT authentication, so the caller is always a user whose role cannot carry *.* (it is rejected with 400 at role creation). The caller’s effective permissions are checked with the same rules that gate any API request:
  • A direct match grants the permission (a caller holding transaction.refund can grant transaction.refund).
  • A resource wildcard covers every action under it (a caller holding transaction.* can grant transaction.refund, transaction.cancel, and any other transaction.<action>).
  • A rinne.admin holder can grant anything.
  • A session with no permissions fails closed.
On PUT /v1/roles/{id}, the check runs against the entire submitted permissions array, not just the diff. A role that already carries a permission the caller does not hold cannot be edited by that caller without first dropping that permission.
Unknown permission names still return 400 VALIDATION_ERROR from the catalog check, which runs before the ceiling check. If you get a 403, the name is valid but you don’t hold it.
Example rejection when a caller holding only role.create and user.list tries to mint a role granting transaction.refund:
To grant a permission to another user, first make sure your own role covers it — either directly or through a resource wildcard such as transaction.* or merchant.*.

Permission format

Permissions follow a hierarchical dot-separated format: resource[.subresource].action Basic permissions:
  • transaction.list: List transactions
  • transaction.create: Create transactions
  • user.edit: Edit users
Nested resource permissions (for merchant-scoped operations):
  • merchant.company.create: Create merchant companies
  • merchant.transaction.list: List merchant transactions
  • merchant.banking.view: View merchant banking data

Wildcard permissions

Wildcards grant access to multiple actions at once:

Permission categories

Merchant sub-resources:
  • merchant.company.*: Merchant CRUD
  • merchant.transaction.*: Merchant transactions
  • merchant.3ds.*: Merchant 3D Secure sessions
  • merchant.banking.*: Merchant balance, cashouts, bank accounts
  • merchant.affiliation.*: Merchant affiliations
  • merchant.pix.*: Merchant PIX keys
  • merchant.card.*: Merchant stored cards
  • merchant.ledger.*: Merchant ledger entries
  • merchant.kyc.*: Merchant KYC check history

Listing available permissions

Filter by resource:

User lifecycle

1. User creation

Admin creates user with email/phone identifier. User receives verification code.

2. Verification

User verifies their identifier and sets password:

3. Active user

User can now log in and access resources based on their roles.

4. Suspension

Admins can suspend users temporarily:

5. Reactivation

Suspended users can be reactivated:

Updating users

Update user information and roles:
Providing the roles array replaces all existing roles. Pass an empty array [] to remove all roles.

Multi-company access

Users can belong to multiple companies. When logging in, they select which company context to use:

Listing users

Organization users

Merchant users

Next steps

Authentication

Learn about authentication methods

API Reference

Explore user management endpoints