Withdrawal Restrictions
Withdrawal Restriction System Technical Documentation
1. Overview
The system implements multiple levels of daily (24-hour) withdrawal volume restrictions.
Withdrawal volumes are set in the key platform currency, then recalculated to any other currency at the withdrawal request submission, according to leftover per user.
2. Recalculation Process
Withdrawal volume is recalculated in any currency, according to the current rate with the key platform currency (key platform currency is set during deployment of WithdrawalRestriction service)
Recalculation occurs at the exchange rate prevailing at the withdrawal request submitted by the User
WARNING! The Administrator has to make sure each currency has a market or rate source with the key platform currency
3. Market Availability
Restrictions are applied during the withdrawal of any currency in case the market is available and has the last trading price or the rate source.
4. Calculation Period
Withdrawal volume is valid from 0:00 to 23:59 server time
Includes all completed or in-progress withdrawal requests during this period
Completed withdrawals of the previous day no longer affect new calculation periods
5. User Levels and Names
Default Levels:
Level 0: Unverified
Level 1: Verified
An Administrator can create additional levels, set and edit their names, set and edit withdrawal limits, and set up the image per level
Every User automatically receives Level 1 after successful identity verification
An Administrator can manually increase/decrease the User’s level beyond Level 1
6. Implementation Details
WithdrawalRestriction service manages 24-hour withdrawal volume per user restriction logic
The exchange rate retrieval mechanism is essential for accurate recalculations
User verification levels determine applicable restrictions
7. Example Scenario
The withdrawal limit for Level 1 users is 200 EUR, as EUR is the key platform currency
User A (Level 1) requests a withdrawal of 100 USD
If 1 USD = 0.8 EUR, the withdrawal volume is recalculated as 80 EUR
The withdrawal volume left for this User will be 120 EUR after that withdrawal is complete
Users will be able to withdraw up to 120 EUR equivalent in any currency till 23:59 server time
Stating 0:00 the 24h withdrawal limit will become 200 EUR again
8. Admin Panel
8.1 Admin can review:
- Level
- Level Name
- Limits by levels in the key platform currency
- Users amount for each level
8.2 Admin can create a New Withdrawal Restriction Level
- Add level. The new Level number should be with +1 number of the previously existing level number
- Edit name for the Level.
- Key platform currency is without an option to be changed.
- Edit amount for withdrawal restriction level in key platform currency.
8.3 Admin can review Details and options for existing levels:
- Icon with the option to upload the file that would be displayed for USer on UI
- Name of the Level
- Amount for withdrawal restriction level in key platform currency
- The Rates section displays details for existing markets and their respective rates. If the enabled currency does not have a market with the key platform currency, it will show a 'No market' status. Similarly, if the existing market with the key platform currency has no rate, it will display a 'No rate' status.
8.4. Admin can make edits for existing levels:
- Change the name of a level
- Change the amount for withdrawal restriction level in key platform currency
8.5. Admin can review Users of the existing level:
- User email
- User’s current step of the KYC verification
- Option to visit User`s directory using ‘3 dots’ button
- Option to search Users by email or pagination features
8.6. Admin can review and edit verified User`s Withdrawal Restriction Level in the ‘User Profile’
A. If the users are at Level 0, the admin has no option to top up their level. The users must verify their identity first.
B. The admin has no option to lower the user's level to 0.
C. Admin can top-up verified user’s level
D. Admin can lower verified user’s level
9. User App queries
9.1 The front end receives information about daily limits and the already selected amount of limits upon receiving the request.
type Query {
currency(id: String): Currency
}
Example:
query GetWithdrawWalletPaymentInterface($id: String!) {
currency(id: $id) {
withdrawPaymentInterfaces {
type
paymentInterface {
id
title
logoUrl
subtitle
}
currency {
id
name
icon_url
}
recipients {
id
data
description
}
recipientSchema
minWithdrawAmount
maxWithdrawAmount
withdrawFee
minWithdrawFee
maxWithdrawFee
maxWithdrawAmount24h
restWithdrawAmount24h
}
}
}
Response Parameters:
maxWithdrawAmount24h
: This parameter represents the withdrawal limit for the user group in the requested currency relative to the key platform currency. The value is calculated using the current exchange rate. If the exchange rate is unavailable, the rate is considered as 0, resulting in a recalculation of 0 as well.restWithdrawAmount24h
: This parameter indicates the amount of withdrawal already utilized by the user in the requested currency. The rate for each transaction is fixed at the time of its creation. If no exchange rate is available at the time of submitting the withdrawal request, the rate is considered as 0, and such withdrawals are excluded from the total withdrawal amount.
9.2. To display the user's withdrawal limit level, the following query is utilized:
type Query {
withdrawalLevel: WithdrawRestriction
}
Example:
9.3. To display the all withdrawal limit levels, the following query is utilized:
Example: