Release Version 4.26.0 (December 24, 2024)
- Pre-deployment steps
- Post-deployment steps
- New functionality
- Improvements
- API changes
- Configuration changes
Pre-deployment steps
To be done before deployment
Verify configuration changes and define new variables if needed.
Verify API changes and implement the required updates to use the changed API.
Post-deployment steps
To be done after deployment
The implementation of the reporting module includes a migration step to add old data to the reporting database. This migration may fail if there is inconsistent data in MongoDB. In such a case, follow these steps to complete the deployment:
-
Set
reports.enabled
tofalse
. -
Perform the deployment.
After the deployment (at any time):
-
Check the migration errors.
-
Update the data in MongoDB to resolve inconsistencies.
-
Set
reports.enabled
totrue
. -
Redeploy the instance.
New functionality
Feature | Description | Benefits |
The ability for service users to send messages to the list of clients (broadcast message) | Service users can choose the required clients and send them in-system messages that will be visible on the mobile application. | It allows clients to receive important updates directly in the mobile application. |
Note: The ability for the service users to see chats in the Client profile on UI will be implemented in future versions. | ||
To view communication with the Client the following APIs can be used (check API swagger description for more details): | ||
POST /conversations/view |
||
POST /conversations/{conversationId}/messages/view |
||
The ability for service users to initiate a simple chat with a business user or a chat linked to a specific operation | This ability is implemented using API s | It improves communication by enabling direct messaging with clients within the system |
POST /conversations/create-system-broadcasts and |
||
POST /tickets/transaction and will be added on UI in further versions |
||
The ability for service users to initiate an investigation for the specified operation, view investigations and manage investigation status | This ability is implemented using APIs | It enables effective tracking and resolution of suspicious transactions, improving risk management and ensuring regulatory compliance. |
POST /investigation |
||
POST /investigation/view |
||
GET /investigation/{investigationId} |
||
PATCH /investigation/{investigationId} |
||
and will be added to UI in further versions |
Improvements
Feature | Description |
Deleted legacy sections from UI | Deleted the following legacy sections from UI: |
· Users | |
· Currencies | |
· Identification | |
Ability to create new currency/change the existing currency or set trusted domain on UI can be enabled/disabled using configuration | Added two environment variables: |
VUE_APP_CREATE_OR_EDIT_CURRENCY_NOT_ALLOWED=true VUE_APP_CREATE_OR_EDIT_TRUSTED_DOMAINS_NOT_ALLOWED=true
|
|
If the variables are not set or false, there are no restrictions on creating, editing, or deleting currencies and trusted domains. | |
The old environment variable VUE_APP_CREATE_CURRENCY_NOT_ALLOWED was deleted. | |
New technical_transit wallet at the gate_provider level is used for external operations accounting. | Adding the new technical_transit wallet at the gate_provider level improves performance, eliminates database locking, enhances system scalability and reliability, and optimizes resource utilization in high-load environments. |
Single valid OTP with timeout before resend and automatic invalidation on resend | The previously issued OTP is automatically invalidated if the user requests a resend. Additionally, a timeout is enforced before each subsequent resend request, preventing brute-force attacks and reducing system misuse. |
Timeout is set as 1 minute by default and can be changed in the configuration using variable: users.confirmation-code.resend-delay |
API changes
Updated |
POST /registration/resend-otp |
POST /authorization/resend-otp |
POST /merchant-payments/{identifier}/resend-otp |
POST /password/recovery/resend-otp |
POST /profiles/my/contact/resend-otp |
In case the OTP cannot be resent because the timeout period for resend has not yet expired, the following error is returned: |
The confirmation code is not yet available for the resend. Try again in N seconds |
Timeout is configured in the variable: users.confirmation-code.resend-delay |
POST /api/v1/cash-desks/view |
New optional properties were added to request body |
Request: |
{ "coinSerial": "052622562174", "coordinate": { "latitude": "11.33839", "longitude": "18.876011" }, "filter": { "address": "City OM 13", "cashDeskName": " SDK" } } |
POST /conversations/view |
Added new filter by businessProcessId in the request |
Added new filter includeRelatedToTransactions (true, false) in the request |
Added new filters participantId and participantType |
Added businessProcessId in the response |
Request: |
{
"pageNumber": 0,
"pageSize": 1,
"filter": {
"includeRelatedToTransactions": true,
"businessProcessId": "0193d98b-43f4-7f78-8a69-2a1dfa3f0cb0",
"participantId": "61b065de-58ef-4959-ab5e-4a2d75ab6564",
"participantType": "ORGANIZATION"
},
"sort": {
"createdAt": "desc"
}
}
|
Response: |
{
"pageNumber": 0,
"pageSize": 1,
"totalPages": 1,
"totalRecords": 1,
"records": [
{
"id": "0193d98c-666d-74a4-9b8a-848afbaf813b",
"name": "Individual topup 9999",
"broadcast": false,
"unread": false,
"createdAt": "2024-12-18T11:34:37.149Z",
"lastMessageCreatedAt": "2024-12-18T11:40:49.272Z",
"initiator": {
"id": "0193d98c-666d-7940-8be7-47d4c0f31424",
"type": "USER",
"entityId": "55d7c0fe-2608-44e5-bd7f-3b0d2a47e1e3",
"name": "Admin Default",
"email": "administrator@sdkfinance.tech"
},
"participants": [
{
"id": "0193d98c-666d-7715-8a6f-c9107356b3c7",
"type": "ORGANIZATION",
"entityId": "61b065de-58ef-4959-ab5e-4a2d75ab6564",
"name": "Alex Dot",
"phoneNumber": "380631111111",
"email": "individual@sdkfinance.tech",
"organizationType": "individual",
"tariffPlan": "base"
},
{
"id": "0193d98c-666d-7940-8be7-47d4c0f31424",
"type": "USER",
"entityId": "55d7c0fe-2608-44e5-bd7f-3b0d2a47e1e3",
"name": "Admin Default",
"email": "administrator@sdkfinance.tech"
}
],
"businessProcessId": "0193d98b-43f4-7f78-8a69-2a1dfa3f0cb0"
}
]
}
|
PUT /management/organization-settings/service-roles/{roleCode} |
added userManagementAllowed (true/false) |
Request: |
{
"permissions": [
"string"
],
"removePermissions": [
"string"
],
"supervisingRoles": [
{
"roleCode": "CFO",
"managementOperation": [
"CREATE"
]
}
],
"removeSupervisingRoles": [
{
"roleCode": "CFO",
"managementOperation": [
"CREATE"
]
}
],
"manageableRoles": [
{
"roleCode": "CFO",
"managementOperation": [
"CREATE"
]
}
],
"removeManageableRoles": [
{
"roleCode": "CFO",
"managementOperation": [
"CREATE"
]
}
],
"userManagementAllowed": true
}
|
Added |
GET /users/{userId} |
Permissions: USER_VIEWER, USER_MANAGER |
Response: |
{
"user": {
"id": "0193ce27-3c76-7055-b25f-cbc830fa0287",
"name": "Individual Default",
"createdAt": "2024-12-16T06:28:18.166Z",
"active": true,
"frozen": false,
"banned": false,
"defaultUser": true,
"contact": {
"phoneVerified": false,
"additionalPhoneVerified": false,
"email": "individual@sdkfinance.tech",
"emailVerified": true,
"countryCode": "UA"
},
"members": [
{
"id": "0193ce27-3c76-71dc-8cf3-c625ce9e6781",
"role": "individual",
"organization": {
"id": "0193ce27-37ce-7ed8-a13c-7409482aaafc",
"type": "individual",
"name": "Individual Default",
"organizationStatus": "approved",
"contract_info": {
"id": "0193ce27-2520-7c6d-a356-aef4a20e8f0d",
"personType": "base",
"name": "base contract for org individual"
}
}
}
],
"cohort": "0W",
"profileStatus": "active",
"lastLogin": "2024-12-16T06:30:02.505Z",
"lastTransaction": "2024-12-16T06:28:18.069Z",
"systemLanguage": "en"
}
}
|
POST: /api/v1/templates/withdrawal/operation/{{bankBusinessProcessId}} |
Permission: TEMPLATES_OWNER |
Request: |
{
"amount": 100.0,
"description": "string",
"name": "individual withdrawal template",
"reusable": true
}
|
Response: |
{
"id": "01936e64-1781-7947-b465-15082e7591b1",
"name": "individual withdrawal template",
"senderCoin": {
"serial": "306042148255",
"name": "TEST coin",
"amount": 100.0000,
"availableAmount": 100.0000,
"futureAmount": 0.0000,
"heldAmount": 0.0000,
"creditLimit": 0.0000,
"currency": {
"id": "01936e50-b9dd-7242-a9ba-451418dea893",
"sn": "ozi",
"code": "ozi",
"symbol": "ozi",
"type": "FIAT"
},
"active": true,
"type": "client",
"main": true,
"accounting": false,
"smartCards": []
},
"amount": 100.0000,
"description": "string",
"bankDetails": {
"iban": "AT022050302101023600",
"recipientFullName": "Test",
"bankDto": {
"address": "Maidan Nezalezhnosti, 1",
"bankId": "01936e50-a58e-7dbe-b4d5-7fe2ed08b6a3",
"bic": "ABNACEE2RFA",
"city": "Toronto",
"countryCode": "DE",
"name": "Privatbank",
"swift": "ABNACEE2RFA",
"zipCode": "12345"
}
}
}
|
POST /tickets/transaction |
Permissions: TRANSACTION_TICKET_MANAGER, SYSTEM_BROADCAST_CREATION_EXECUTOR |
Request: |
{
"businessUserOrganizationId": "61b065de-58ef-4959-ab5e-4a2d75ab6564",
"businessProcessId": "0193d98b-43f4-7f78-8a69-2a1dfa3f0cb0",
"topic": "Individual topup 9999",
"message": "Discussion of the Individual topup 9999"
}
|
Response: |
{
"ticket": {
"id": "0193d98c-666d-752b-8b1f-c9d9cc3e6bd1",
"category": "PAYMENT",
"conversation": {
"id": "0193d98c-666d-74a4-9b8a-848afbaf813b",
"name": "Individual topup 9999",
"createdAt": "2024-12-18T11:34:37.149Z",
"initiator": {
"id": "0193d98c-666d-7940-8be7-47d4c0f31424",
"type": "USER",
"entityId": "55d7c0fe-2608-44e5-bd7f-3b0d2a47e1e3",
"name": "Admin Default",
"email": "administrator@sdkfinance.tech"
}
},
"businessProcessId": "0193d98b-43f4-7f78-8a69-2a1dfa3f0cb0"
}
}
|
PATCH /v1/transactions/{transactionId} |
Permission: TRANSACTIONS_UPDATER |
Path parameters: |
- transactionId - transaction ID (business process ID) |
Request: |
{
"categoryId": "20930a95-26cf-4e61-911d-1c361f4d2f92",
"note": "my note"
}
|
POST /investigation |
Permission: INVESTIGATION_MANAGER |
Request: |
{
"transactions": [
"string"
],
"reason": "FRAUD"
}
|
Response: |
{
"id": "string",
"transactions": [
{
"transactionId": "string",
"transactionAmount": 0,
"transactionCreatedAt": "2024-12-19T14:23:02.506Z"
}
],
"investigatorId": "string",
"investigatorName": "string",
"notes": "string",
"investigationReason": "FRAUD",
"investigationConclusion": "FRAUD",
"investigationStatus": "COMPLETED",
"openedAt": "2024-12-19T14:23:02.506Z",
"completedAt": "2024-12-19T14:23:02.506Z",
"deadlineAt": "2024-12-19T14:23:02.506Z"
}
|
POST /investigation/view |
Permission: INVESTIGATION_MANAGER, INVESTIGATION_VIEWER |
Response: |
{
"id": "string",
"transactions": [
{
"transactionId": "string",
"transactionAmount": 0,
"transactionCreatedAt": "2024-12-19T14:23:02.506Z"
}
],
"investigatorId": "string",
"investigatorName": "string",
"notes": "string",
"investigationReason": "FRAUD",
"investigationConclusion": "FRAUD",
"investigationStatus": "COMPLETED",
"openedAt": "2024-12-19T14:23:02.506Z",
"completedAt": "2024-12-19T14:23:02.506Z",
"deadlineAt": "2024-12-19T14:23:02.506Z"
}
|
GET /investigation/{investigationId} |
Permission: INVESTIGATION_MANAGER, INVESTIGATION_VIEWER |
Response: |
{
"id": "string",
"transactions": [
{
"transactionId": "string",
"transactionAmount": 0,
"transactionCreatedAt": "2024-12-19T14:24:19.408Z"
}
],
"investigatorId": "string",
"investigatorName": "string",
"notes": "string",
"investigationReason": "FRAUD",
"investigationConclusion": "FRAUD",
"investigationStatus": "COMPLETED",
"openedAt": "2024-12-19T14:24:19.408Z",
"completedAt": "2024-12-19T14:24:19.408Z",
"deadlineAt": "2024-12-19T14:24:19.408Z"
}
|
PATCH /investigation/{investigationId} |
Permission: INVESTIGATION_MANAGER |
Request: |
{
"updateReason": "COMPLETE",
"investigationConclusion": {
"conclusion": "FRAUD",
"notes": "string"
},
"transactions": [
"string"
]
}
|
Response: |
{
"id": "string",
"transactions": [
{
"transactionId": "string",
"transactionAmount": 0,
"transactionCreatedAt": "2024-12-19T14:24:36.796Z"
}
],
"investigatorId": "string",
"investigatorName": "string",
"notes": "string",
"investigationReason": "FRAUD",
"investigationConclusion": "FRAUD",
"investigationStatus": "COMPLETED",
"openedAt": "2024-12-19T14:24:36.796Z",
"completedAt": "2024-12-19T14:24:36.796Z",
"deadlineAt": "2024-12-19T14:24:36.796Z"
}
|
DELETE /v1/templates/withdrawal/{id} |
Permission: TEMPLATES_OWNER |
Deprecated/Deleted |
Configuration changes
Added two environment variables:
VUE_APP_CREATE_OR_EDIT_CURRENCY_NOT_ALLOWED=true
VUE_APP_CREATE_OR_EDIT_TRUSTED_DOMAINS_NOT_ALLOWED=true
The old environment variable VUE_APP_CREATE_CURRENCY_NOT_ALLOWED
was deleted.
Timeout before resending OTP is configurable through
users.confirmation-code.resend-delay
Investigation deadline configuration:
investigations:
# deadline configuration. Value in days till the investigation must be completed
deadline: 7
Introduced a new configuration property, reports.enabled
, with a boolean value (true/false
) that provides enhanced flexibility for managing core report functionality. This property allows for the selective enabling or disabling of the initialization of key reporting components, including:
-
Kafka-based transaction writing.
-
MongoDB-related report storage.
-
Migration processes for reporting data.
Default value: true