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
Authentication methods
Users can authenticate using:PASSWORD: Email/phone and passwordGOOGLE: Google OAuthCLIENT_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: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.refundcan granttransaction.refund). - A resource wildcard covers every action under it (a caller holding
transaction.*can granttransaction.refund,transaction.cancel, and any othertransaction.<action>). - A
rinne.adminholder can grant anything. - A session with no permissions fails closed.
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.
Example rejection when a caller holding only role.create and user.list tries to mint a role granting transaction.refund:
transaction.* or merchant.*.
Permission format
Permissions follow a hierarchical dot-separated format:resource[.subresource].action
Basic permissions:
transaction.list: List transactionstransaction.create: Create transactionsuser.edit: Edit users
merchant.company.create: Create merchant companiesmerchant.transaction.list: List merchant transactionsmerchant.banking.view: View merchant banking data
Wildcard permissions
Wildcards grant access to multiple actions at once:Permission categories
Merchant sub-resources:
merchant.company.*: Merchant CRUDmerchant.transaction.*: Merchant transactionsmerchant.3ds.*: Merchant 3D Secure sessionsmerchant.banking.*: Merchant balance, cashouts, bank accountsmerchant.affiliation.*: Merchant affiliationsmerchant.pix.*: Merchant PIX keysmerchant.card.*: Merchant stored cardsmerchant.ledger.*: Merchant ledger entriesmerchant.kyc.*: Merchant KYC check history
Listing available permissions
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

