Skip to main content
Scopes are permissions your app requests from the user. Each scope unlocks a specific group of API endpoints. Request only what your app genuinely needs, users are more likely to approve a minimal, specific request than a broad one.

Scope reference

ScopeWhat it allowsSensitive
profile:readRead the user’s name and account detailsNo
kyc:readCheck the user’s KYC verification tier and transaction limitsNo
wallet:readView NGN and crypto wallet balances, portfolios, transaction historyNo
wallet:depositInitiate a deposit into the user’s walletNo
wallet:sendSend money to other Monei users (peer-to-peer)Yes
wallet:withdrawWithdraw NGN to a bank accountYes
swap:executeExecute crypto token swaps and send crypto on EVM / SolanaYes
bills:payDiscover billers, validate bills, and pay airtime, data, electricity, and cable TVNo
offramp:executeGet offramp quotes, convert crypto to NGN, track offramp transactionsYes
Sensitive scopes move or convert real money. Monei displays an extra warning to users when a sensitive scope is requested. If your app only needs to read data, stick to non-sensitive scopes, you’ll see significantly higher approval rates.

Endpoints unlocked per scope

profile:read

GET /api/v1/user/me

kyc:read

GET /api/v1/kyc/status
GET /api/v1/kyc/limits

wallet:read

GET /api/v1/wallet/me
GET /api/v1/wallet/naira-wallet
GET /api/v1/transactions
GET /api/v1/wallet/deposit/status/:reference
GET /api/v1/evm/portfolio/:chainId
GET /api/v1/evm/balance/native
GET /api/v1/evm/balance/token
GET /api/v1/solana/portfolio
GET /api/v1/solana/balance
GET /api/v1/solana/address
GET /api/v1/bills/records
GET /api/v1/offramp/ledger/history
GET /api/v1/offramp/ledger/status/:reference

wallet:deposit

POST /api/v1/wallet/deposit
POST /api/v1/wallet/deposit/payment-link

wallet:send

POST /api/v1/wallet/payout/transfer

wallet:withdraw

POST /api/v1/wallet/payout/bank-transfer

swap:execute

POST /api/v1/evm-exchange/native-to-token
POST /api/v1/evm-exchange/token-to-token
POST /api/v1/evm-exchange/token-to-native
POST /api/v1/solana-exchange/swap-sol-to-token
POST /api/v1/solana-exchange/swap-token-to-token
POST /api/v1/solana-exchange/swap-token-to-sol
POST /api/v1/evm/send/native
POST /api/v1/evm/send/token
POST /api/v1/solana/transfer
POST /api/v1/solana/transfer-token

bills:pay

GET  /api/v1/bills/discovery/categories
POST /api/v1/bills/validation/customer
POST /api/v1/bills/pay/airtime
POST /api/v1/bills/pay/data
POST /api/v1/bills/pay/electricity
POST /api/v1/bills/pay/cable-tv

offramp:execute

GET  /api/v1/offramp/exchange/assets
GET  /api/v1/offramp/exchange/quote
POST /api/v1/offramp/exchange/initiate

Requesting scopes

Pass scopes as a space-separated string in the authorization URL:
scope=wallet:read profile:read
scope=wallet:read wallet:send wallet:withdraw
scope=wallet:read bills:pay offramp:execute

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, request wallet: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.