Scope reference
| Scope | What it allows | Sensitive |
|---|---|---|
profile:read | Read the user’s name and account details | No |
kyc:read | Check the user’s KYC verification tier and transaction limits | No |
wallet:read | View NGN and crypto wallet balances, portfolios, transaction history | No |
wallet:deposit | Initiate a deposit into the user’s wallet | No |
wallet:send | Send money to other Monei users (peer-to-peer) | Yes |
wallet:withdraw | Withdraw NGN to a bank account | Yes |
swap:execute | Execute crypto token swaps and send crypto on EVM / Solana | Yes |
bills:pay | Discover billers, validate bills, and pay airtime, data, electricity, and cable TV | No |
offramp:execute | Get offramp quotes, convert crypto to NGN, track offramp transactions | Yes |
Endpoints unlocked per scope
profile:read
kyc:read
wallet:read
wallet:deposit
wallet:send
wallet:withdraw
swap:execute
bills:pay
offramp:execute
Requesting scopes
Pass scopes as a space-separated string in the authorization URL:Scope best practices
Ask for the minimum. Only request scopes your app needs right now. You can always request additional scopes later by sending the user through the authorization flow again. Monei will show only the new scopes being requested. Group related scopes. If your app reads balances and pays bills, requestwallet:read and bills:pay together. Don’t request wallet:withdraw unless withdrawal is a core feature.
Explain sensitive scopes. If you need wallet:withdraw or swap:execute, tell users why in your app’s UI before redirecting to Monei. Informed users approve more.
Handle partial grants. Even with minimal scope requests, users may decline individual scopes. See Partial Grants for how to handle this.
Partial Grants →
Users can approve fewer scopes than you request. Here’s how to handle that gracefully.

