Explore Release Notes

Release Version 4.14.0 (November 22, 2023)

22. 11. 2023

What’s new

The commission calculation logic for all types of operations was changed. Now the commission amounts (with details) for all supported operations in any statuses are present in the response on API POST /v1​/transactions​/view in one node. See the “API Changes” section of the release notes to know more about changes related to API.

The issuer definition was replaced by the currency definition in the code and in the API. See the “API Changes” section of the release notes to know more about changes related to API.
The ability to view in the API which roles are allowed to be created with the user by the provided role was added. See “API Changes” section of the release notes to know more about changes related to API.
A New UI Kit of components for the Back-office was implemented.

New Integration with ComplyAdvantage as a KYC service provider was implemented. The integration with ComplyAdvantage API for Customer Screening and Monitoring was implemented through NodeRed low-code solution.

The set of basic external provider APIs to perform Customer identification checks were implemented. Also, the set of internal SDK APIs for changing users’ identification status according to the check result inside the SDK system was extended. See the “API Changes” section of the release notes to know more about changes related to API.

So the SDK system implemented the skeleton of the technical integration through NodeRed solution with basic features for ComplyAdvantage API for Customer Screening and Monitoring and embedded it into the Onboarding process within the SDK system. All features that will be available from the vendor (ComplyAdvantage) to the client (for both, the source code or cloud clients) depend on the client’s needs and their agreements with the vendor. On the SDK side, a quick way to integrate with the provider from the SDK system.

How it works

The User of the SDK platform provides User Profile data and uploads the documents within the front-end app (web or mobile). The SDK system communicates with the NodeRed system via Kafka`s message bus (regarding the conditions). The integration with ComplyAdvantage REST APIs is implemented on the NodeRed side. When the response from the provider is received NodeRed calls SDK APIs to change the status of the user identification and create notes about the user with provider response details.

Current solutions allow us to extend the flow and change the configuration for integration without development in the code of Core SDK application.

Flow supported on the Test Environment (if external KYC service is available):

  1. The User uploads documents during the onboarding process
  2. The Compliance Manager reviews and confirms the user’s documents (DocumentApprovalStatus = APPROVED)
  3. The System changes the User Identification Status to Pending (OrganizationStatus=pending)
  4. If all conditions are satisfied the System submits the User Profile data to the KYC service provider the Kafka`s topics
  5. After the provider responds the System changes the User identification status according to the provider’s response and creates notes about the user with response details. Notes available for Compliance to review.

The new OrganizationStatus REVIEW_REQUIRED was added. Status means that the response from the KYC service provider was received and the check result needs to be reviewed by Compliance.

Improvements

  • Validation that credit limit is equal to 0 or greater in API POST /coins/{serial}/credit-limit was added
  • The ability to create/update/delete limits for product commissions was added
  • Migration from vue-cli Webpack to Vite was done
  • The additional API endpoint for creating and updating separate international properties was added
  • The pagination and filters for provider operation, and provider product were added
  • Marqeta Integration as a separate Service application was implemented
  • New extra nodes to enhance the operational stability were added to the Kafka configuration
  • The ability for an Administrator to modify the Contract Name after creation was added
  • Logic to create a Casier wallet with type=cash automatically when setting up a commission for cash desk operation into Contract was added
  • The ability to see account types on the UI for Individual and Merchant Users was added
  • The autofill option for Exp Date during Invoice creation via UI was added. Now by default system sets the next day from the current as the Expiration date for the Invoice, the User can change it if needed.
  • The ability to perform Withdrawals via bank through UI for Business Users was added
  • The ability to see all commission and gate account balances on the UI for Service users (Administrator and Accountant) was added
  • The ability to choose operation type during the setup of the Limits for Provider Operation was added
  • The setting of irrelevant commission configurations for supported operations was prohibited
  • The CI/CD pipeline on the NoreRed instance was set

Fixes

  • Exception during processing subscriptions that are based on a previously created template was fixed
  • The issue with voucher redeeming after changing its PIN was fixed
  • The Status Code for trying to use endpoints without authorization (modules Coin management and Subscriptions) was fixed. 500 status code was replaced by 403 “Operation forbidden”
  • Unexpected response when trying to delete the already deleted invoice template was fixed. 200 status code was replaced by 404 “Not Found”
  • The incorrect amount limit calculation of Limits for Provider operation was fixed
  • The issuer with currency ID in the POST /gate/transactions/calculate endpoint was fixed. The currency ID was added in currencyDTO
  • The issue with filter by currencyCode on the Transactions List form was fixed
  • The issue with amount calculation during the Withdrawal operation decline was fixed.
  • The new correct exception when the Marqeta provider is not enabled was added
  • The issue with the PIN change for prepaid vouchers was fixed. Now the PIN is present in the notification which is sent after POST /prepaid-coins/{serial}/change-pin call
  • The error when trying to submit the file for approval as the profile document was fixed. Successful notification for
  • Compliance Manager after submitting a file for approval as profile document received
  • The issue with limits for gate operation (incorrect count limit calculation) was fixed
  • The issue while Top up via bank with OUT commission direction was fixed

API Changes

Endpoint
Updated
POST ​/transactoins​/view
New node commissionAmounts for commission amounts was added to the response body:
commissionAmounts.source - an amount that was charged from an source account (wallet), which means OUT or SHARED direction for Commissions in Contract
commissionAmounts.destination- an amount that was charged from the destination account (wallet), which means IN or SHARED direction for Commissions in Contract
Operation can have only one (.source or .destination) set of commissions or have both (.source and .destination), in case of SHARED direction was set in the Contract for this type of operation.
Both, commissionAmounts.source and commissionAmounts.destination can have three types of amount, depends on Operation Type (internal, external) and Commission Direction (IN, OUT, SHERED):
·         total - total amount of the commission that was charged from the user`s wallet (for external operation total=system+provider, for internal operation total=system)
·         system - amount of the commission that was charged by the system (for internal operation total=system)
·         provider - amount of the commission that was charged by the provider (present only for external operation)
{ "internalSourceAmount": 0, (was added in 4.12)  "internalDestinationAmount": 0, (was added in 4.12)  "externalSourceAmount": 0, (was added in 4.12)  "externalDestinationAmount": 0, (was added in 4.12)  "commissionAmount": 20.22 .....,  "commissionAmounts": {    "source" : {      "total": 20.22,      "system": 11.22,      "provider": 9.00  (only for gate oprerations)     },    "destination" : {      "total": 20.15,      "system": 11.15,      "provider": 9.00  (only for gate oprerations)    }  },  .....}
New field commissionAmount was added to the response body.
commissionAmount - the total commission amount, that was charged for operation processing
In all API requests and responses that contains issuerId, sourceIssuer, destinationIssuer, issuer
Due to changes implemented in Release 4.11.0 where Issuer and Currency entities were combined into one (in order to facilitate the work of the business) in release 4.14.0 issuer definition was replaced by the currency definition in the code and in the API. In API all issuer-related fields were replaced by currncy-related.
1.      Filed issuerId was replaced by currencyId
2. Node issuer:
"issuer": {        "id": "string",        "sn": "string",        "currency": "string",        "symbol": "string"
was replaced by node currency:
"currency": {        "id": "string",        "sn": "string",        "code": "string",        "symbol": "string"
field currency.code in currency node has the same meaning as it was issuer.currency in the issuer node: code of the currency, can be any code specified by user or ISO currency code for fiat currency
3.      Fields sourceIssuer and destinationIssuer ware replaced by sourceCurrency and destinationCurrency accordingly.
After the release 4.14.0 is applied, only new names (currency insted issuer) will be supported in all API endpoints.
PATCH /profiles/my/person
PATCH /profiles/{userId}/person
user profile data was extended by field gender.
The set of gender type is possible to setup in the configuration file.
bootstrap:  core:    system:      user-profile:        genders:          - male          - female          - lesbian          - gay          - bisexual          - transgender
request body:
{  "person": {   ....    "gender": "male"  }}
response body:
response body:{    "profile": {        "person": {          ...            "gender": "male"          ...        }    ]}
POST ​/v1​/users​/note
format for the field note was adjusted in the request and response to support value in JSON format
Endpoint
Added
POST /i18n
additional API endpoint for creating and updating separate international properties was added for technical use only (off the Swagger)
{  "key": "",  "values": [    {      "locale": "en",      "value": ""    },    {      "locale": "uk",      "value": ""    },    {      "locale": "ru",      "value": ""    }  ]}
POST /role-groups-is-able-to-create
added new API endpoint to view in the API which roles groups are allowed to be created with the user by provided role groups.
Permission USER_MANAGER is required
request body:
{    "roles": [        "administrator",        "compliance_specialist",        "cfo",        "customer_support",        "merchant",        "individual"    ]}
response body:
{    "records": [        {            "role": "individual",            "isSelfRegistrationAllowed": true,            "creationMethods": [                "CREATE_NEW_ORGANIZATION"            ],            "hasUserManagerPermission": true,            "isAbleToCreateRoles": [                "individual"            ]        },        {            "role": "merchant",            "isSelfRegistrationAllowed": true,            "creationMethods": [                "CREATE_NEW_ORGANIZATION"            ],            "hasUserManagerPermission": false,            "isAbleToCreateRoles": [                "merchant"            ]        },        {            "role": "customer_support",            "isSelfRegistrationAllowed": false,            "creationMethods": [                "ATTACH_MULTIPLE"            ],            "hasUserManagerPermission": false,            "isAbleToCreateRoles": []        },        {            "role": "cfo",            "isSelfRegistrationAllowed": false,            "creationMethods": [                "ATTACH_SINGLE"            ],            "hasUserManagerPermission": true,            "isAbleToCreateRoles": [                "administrator",                "financial_specialist",                "individual",                "cfo"            ]        },        {            "role": "compliance_specialist",            "isSelfRegistrationAllowed": false,            "creationMethods": [                "ATTACH_MULTIPLE"            ],            "hasUserManagerPermission": false,            "isAbleToCreateRoles": []        },        {            "role": "administrator",            "isSelfRegistrationAllowed": false,            "creationMethods": [                "ATTACH_SINGLE"            ],            "hasUserManagerPermission": true,            "isAbleToCreateRoles": [                "administrator",                "individual",                "financial_specialist"            ]        }    ]}
PATCH ​/v1​/contracts​/{contractId}
added API to change the contract name or to activate/deactivate the contract
contractId Internal contract identifier
request body:
{  "name": "New contract name",  "active": true}
response body:
{  "id": "string",  "organizationType": "individual",  "personType": "standart",  "name": "string",  "description": "string",  "active": true,  "global": true}
PATCH /profiles/{userId}
added API to update organization status (user identification status)
All documents should be approved to update to review_required or approved Organization status.
userId User Internal Identifier. UserId is returned in the API response for user registration POST /users or can be taken from the API POST /users/view.
available values for status parameter: pending|review_required|approved|declined
Permission required: ORGANIZATION_STATUS_MANAGER
request body:
{    "status": "review_required"}
response body:
{    "profile": {        "person": {            "namePlain": {                "first": "John",                "last": "Golt",                "middle": "string"            },            "nameIntl": {                "first": "John",                "last": "Golt",                "middle": "string"            },            "description": "SDK.finance engineer"        },        "contact": {            "phoneVerified": false,            "email": "sdk_stage_open_api_test_marqeta_artem_0003@mailinator.com",            "emailVerified": true        },        "type": "base",        "status": "review_required",        "business": {},        "address": {            "country": "UA",            "zipCode": "04209",            "city": "Kyiv",            "street": "Heroiv Dnipra",            "houseNumber": "25"        },        "additional": {            "type": "common",            "sex": "MALE",            "paidInvoicesAmount": 0.0000        },        "security": {            "twoFactorsAuthEnabled": false,            "transactionNotification": {                "phone": false,                "email": false            },            "authorizationNotification": {                "phone": false,                "email": false            }        }    }}
POST /profiles/{userId}
added new API endpoint to send user profile data for verification to third party KYC service provider
userId User Internal Identifier. UserId is returned in the API response for user registration POST /users or can be taken from the API POST /users/view.
Permission required: ORGANIZATION_STATUS_MANAGER
Endpoint
Deprecated/Deleted
POST /cash-desks/report-turnover
PATCH /coins/{serial}/credit-limit
GET /management/filter-templates
POST /management/filter-templates
PUT /management/filter-templates/{filterTemplateId}
DELETE /management/filter-templates/{filterTemplateId}
GET /notification/message/keys
POST /gate/transactions/payment-points
deprecated endpoints was removed