Explore Release Notes

Release Version 4.53.0 (March 9, 2026)

09. 03. 2026

Pre-deployment steps

To be done before deployment

Check configuration changes and apply them in the application.yaml if the default configuration has been overridden there

Check if the release contains migrations. Migrations can affect deployment and downtime.

Use GET /i18n/export/{fileName} to download files with current i18n properties. Check if the downloaded file is correct.

Post-deployment steps

To be done after deployment

Verify permission changes and assign or remove required permissions if they have been overridden

Add new properties from the I18n properties changes to the downloaded i18n properties file and add translation for them if needed.

Use POST /i18n/import to upload and apply previously downloaded i18n file with added new properties.

Release migrations

Release migrations

  1. Users with corporate role are migrated to individual role.

  2. Organizations with corporate type are migrated to individual type.

  3. Organizations with global corporate contract are migrated to global individual contract with the same person type (base, standart, gold, vip).

  4. Organizations with custom corporate contract are migrated to global individual contract with base person type.

  5. corporate role is deleted.

Changes to notice

Changes to notice

Teh following APIs were deleted:

  • POST /coins/organization/{organizationId}

  • POST /coins

  • GET /organizations/{organizationId}/coins

  • GET /coins

Corporate role is deleted, company creation functionality for Individual users can be used instead.

Fireblocks integration

Fireblocks is an institutional digital asset infrastructure that provides secure custody and on-chain transaction execution, and its integration with SDK.finance enables crypto assets to be managed within a ledger-based financial system with controlled withdrawals, validated deposits, policy-driven execution, and full operational and accounting oversight.

Feature

Description

Implemented omnibus sweeping for account-based assets.

SDK.finance initiates sweeping of account-based assets from user-level vault accounts into the Treasury Vault Account.

Sweeping is triggered after a successful deposit and moves the deposited amount from the user’s vault account to the treasury account used for consolidated storage.

An additional parameter to show sweeping status added to the Transaction list API.

Improvements

Feature

Description

Service users can create a bank account for the client by specifying BIC or SWIFT without a bank existing in the bank catalog.

A bank account can be created either by specifying BIC or SWIFT or by choosing a bank from the bank catalog.

Added ability to specify transaction category when executing bank topup via API POST /v1/bank-top-ups or creating bank top-up request from the Back-office UI.

When creating a bank top-up request, the service user can choose a category.

Added ability to pass description and custom information for the exchange operation.

When creating an in-system transfer in different currencies (exchange), the user is able to specify a payment reason.

UI for currency exchange rates management were changed to make it smoother and more convenient.

The main currency is removed, and source and destination currencies explicitly show the exchange direction.

Notification description is added to the System settings → Notifications

The following renaming is performed on UI:

  • Cash investment, cash desk investment → Cash desk deposit

  • Cash input → Cash desk input

  • Cash collect, Cash desk collect → Cash desk output

  • Collector → Receiver

  • Vendor → Provider

  • System vendor, System gate → System provider

  • Gate vendor, External vendor → Gate provider

  • KYC vendor → KYC provider

  • Comission → Fee

  • Commission profile → Fee profile

  • Commission period → Fee period

  • Commission rule → Fee rule

  • Commission condition → Fee condition

  • Commission limit → Fee limit

Fixes

Amounts in the statement PDF are displayed in accordance with the currency scale defined for each currency.

Removed hardcoded  valueFixed >= 0.01  validation when creating/editing commission

API changes

Updated

User notifications settings were removed from the APIs

  • PATCH ​​/profiles​/my​/security-settings

  • GET ​/profiles​/my

  • GET ​/profiles​/{userId}

  • PATCH ​/profiles​/{userId}​/security-settings

The new field swept and filtering by this field was added to POST /transactions/view API

Filtering works correctly via POST /transactions/view using GateTransactionFilter with the swept parameter.

PATCH /currencies/{currencyId} request modified, if null value is provided in the request explicitly, the withdrawalLimit value will be cleared and withdrawalLimitCheckEnabled will be set to false

PATCH /organizations/{orgId}/profile now supports nullable properties to clear data if the property is passed explicitly as null in the request.

The new field appliedRate was added to the response of the following API operations:

  • POST /exchange

  • POST /transactions/view (for records with processClass=ExchangeProcessDto)

  • GET /transactions/{transactionId} (for records with processClass=ExchangeProcessDto)

POST /bank-accounts/coin/{coinSerial}/with-bank

PATCH /bank-accounts/{bankAccountId}/with-bank

The existing request parameter bankId was marked as optional.

The new optional parameter bicOrSwift was added to the request.

One of these parameters should be passed to the request.

If both parameters are presented or absent in the request, then an error will be returned.

POST /bank-top-ups

The new optional parameter categoryId was added to the request body.

POST /exchange

The new optional parameters description and customInformation were added to the request.

POST /transactions/view

Added filtering by txSubstatus in GateTransactionFilter

POST /transactions/view

GET /transactions/{transactionId}

txSubstatus is added to the response, for Fireblocks transaction it shows validation status

POST /profiles/{userId}/history

In the response body property profileHistory.additionalHistory.type value renamed from CommonProfileExtDto to CommonProfileExtDtoResp, from RawProfileExtDto to RawProfileExtDtoResp

GET /profiles/my
PATCH /profiles/my/additional
PUT /profiles/my/additional
PATCH /profiles/my/address
PUT /profiles/my/address
PATCH /profiles/my/business
POST /profiles/my/contact/confirm
PATCH /profiles/my/person
PUT /profiles/my/person
PATCH /profiles/my/security-settings

POST /profiles/{userId}/approve
POST /profiles/{userId}/decline
POST /profiles/{userId}/reset

PATCH /profiles/{userId}
GET /profiles/{userId}

PATCH /profiles/{userId}/additional
PUT /profiles/{userId}/additional

PATCH /profiles/{userId}/address
PUT /profiles/{userId}/address

PATCH /profiles/{userId}/integration

PATCH /profiles/{userId}/business
PATCH /profiles/{userId}/contact

PATCH /profiles/{userId}/person
PUT /profiles/{userId}/person

PATCH /profiles/{userId}/security-settings

In the response body properties profile.additional.type and profile.additionalRaw.type values renamed from CommonProfileExtDto to CommonProfileExtDtoResp, from RawProfileExtDto to RawProfileExtDtoResp

GET /organizations/{organizationId}/profile

In the response body properties additionalData.type and additionalRawData.type values renamed from CommonProfileExtDto to CommonProfileExtDtoResp, from RawProfileExtDto to RawProfileExtDtoResp

PATCH /organizations/{organizationId}/profile

  • In the request body properties additionalData.type value renamed from CommonProfileExtDto to CommonProfileExtDtoReq, from RawProfileExtDto to RawProfileExtDtoReq

  • In the response body properties additionalData.type and additionalRawData.type values renamed from CommonProfileExtDto to CommonProfileExtDtoResp, from RawProfileExtDto to RawProfileExtDtoResp

PATCH /profiles/my/additional

PUT /profiles/my/additional

PATCH /profiles/{userId}/additional

PUT /profiles/{userId}/additional

  • In the request body properties additional.type value renamed from CommonProfileExtDto to CommonProfileExtDtoReq, from RawProfileExtDto to RawProfileExtDtoReq

POST /transactions/view

GET /transactions/{transactionId}

txIdToRefund field was renamed to gateTxId in business process response

Added

Deprecated/Deleted

  • POST /coins/organization/{organizationId}

  • POST /coins

  • GET /organizations/{organizationId}/coins

  • GET /coins

I18n properties changes

Added

 

{
"frontend.placeholder.input.input_receiver_name": "Input receiver full name",
"frontend.placeholder.input.input_provider_name": "Input a provider name",
"frontend.placeholder.input.enter_bic_swift": "Enter BIC/SWIFT",
"frontend.placeholder.select.choose_fee_wallet": "Choose fee wallet ",
"frontend.placeholder.select.choose_category_id": "Choose category ID",
"frontend.action.deactivate_fee": "Deactivate fee",
"frontend.action.activate_fee": "Activate fee",
"frontend.action.edit_fee_period": "Edit fee period",
"frontend.action.create_fee_period": "Create fee period",
"frontend.action.update_fee_period": "Update fee period",
"frontend.action.set_fee_period": "Set fee period",
"frontend.action.activate_provider": "Activate provider",
"frontend.action.view_fee_and_limit_details": "View fee and limit details",
"frontend.action.create_fee_and_limits": "Create fee and limits",
"frontend.action.create_provider": "Create a provider",
"frontend.action.modify_provider": "Modify provider",
"frontend.action.temp_deactivate_provider": "Temporarily deactivate a provider",
"frontend.action.update_fee_and_limits": "Update fee and limits",
"frontend.action.view_fee_and_limits": "View fee and limits",
"frontend.action.withdraw_collected_fee": "Withdraw collected fee",
"frontend.action.view_fee_and_limits_details": "View fee and limits details",
"frontend.action.send_for_update": "Send for update",
"frontend.action.delete_currency": "Delete currency",
"frontend.action.cancel_withdrawal": "Cancel withdrawal",
"frontend.action.process_withdrawal": "Process withdrawal",
"frontend.action.add_currency_pair": "Add currency pair",
"frontend.navigation.link.view_fee_and_limits": "View fee and limits",
"frontend.navigation.link.webhook_notifications": "Webhook notifications",
"frontend.notification.provider_activated": "Provider activated",
"frontend.notification.provider_created": "Provider successfully created",
"frontend.notification.provider_deactivated": "Provider successfully deactivated",
"frontend.notification.provider_updated": "Provider successfully updated",
"frontend.notification.fee_rule_updated": "Fee rule successfully updated",
"frontend.notification.limit_rules_updated": "Limit rules successfully updated",
"frontend.notification.login_credentials_changed": "Login credentials successfully changed",
"frontend.notification.success_resend_otp": "OTP successfully sent ",
"frontend.notification.currency_exchange_status_updated": "Currency exchange status successfully updated",
"frontend.notification.currency_exchange_rate_updated": "Currency exchange rate successfully updated",
"frontend.notification.error_notification.something_went_wrong": "Something went wrong",
"frontend.pages.contracts.provider_operations": "Provider operations",
"frontend.pages.contracts.rule_details_form.contract_fee_details": "Contract fee details",
"frontend.pages.contracts.rule_details_form.provider_fee_details": "Provider fee details",
"frontend.pages.provider_operations.temp_deactivate_provider_modal_title": "Temporarily deactivate a {providerName}",
"frontend.pages.provider_operations.activate_provider_modal_title": "Activate a {providerName}",
"frontend.pages.provider_operations.create_operation_modal_title": "Create operation for {providerName}",
"frontend.pages.provider_operations.integration_settings": "Integration settings",
"frontend.pages.provider_operations.fee_and_limits.view_title": "{operationName} fee and limits",
"frontend.pages.provider_operation_details.disable_operation_modal_title": "Temporarily disable operation for {providerName}",
"frontend.pages.provider_operation_details.activate_operation_modal_title": "Activate operation for {providerName}",
"frontend.pages.provider_monthly_fee.disable_operation_modal_title": "Temporary disable monthly fee",
"frontend.pages.provider_monthly_fee.enable_operation_modal_title": "Enable monthly fee",
"frontend.pages.provider_monthly_fee.deactivate_monthly_fee_modal_description": "Are you sure that you want disable this monthly fee?",
"frontend.pages.provider_monthly_fee.activate_monthly_fee_modal_description": "Are you sure that you want enable this monthly fee?",
"frontend.pages.provider_monthly_fee.create_monthly_fee_modal_title": "Create monthly fee",
"frontend.pages.provider_monthly_fee.update_monthly_fee_modal_title": "Edit monthly fee",
"frontend.pages.provider_monthly_fee.page_title": "Monthly Fee",
"frontend.pages.provider_monthly_fee.monthly_fee_status": "Monthly fee status",
"frontend.pages.cfo_currencies.withdraw_collected_fee_modal_text": "Are you sure that you want to withdraw collected fee?",
"frontend.pages.cfo_currencies.delete_currency.description": "You can delete only currencies that have not had any transactions.",
"frontend.table.label.provider_fee_status": "Provider fee status",
"frontend.table.label.fee_type": "Fee type",
"frontend.table.label.total_fee": "Total fee",
"frontend.table.label.fee_status": "Fee status",
"frontend.table.label.sender_fee": "Sender fee",
"frontend.table.label.receiver_fee": "Receiver fee",
"frontend.table.label.collected_fee": "Collected fee",
"frontend.table.label.event_type": "Event type",
"frontend.table.label.resource_id": "Resource ID",
"frontend.table.label.sent_at": "Sent at",
"frontend.table.label.delivery_attempts": "Delivery attempts",
"frontend.table.label.notification_id": "Notification ID",
"frontend.table.label.rate_ratio": "Rate ratio",
"frontend.filter.receiver": "Receiver",
"frontend.filter.resource_id": "Resource ID",
"frontend.filter.notification_id": "Notification ID",
"frontend.filter.webhook_event_type": "Webhook event type",
"frontend.form.label.fee_wallet_name": "Fee wallet name",
"frontend.form.label.fee_wallet_serial": "Fee wallet serial",
"frontend.form.label.fee_details": "Fee details",
"frontend.form.label.provider_name": "Provider name",
"frontend.form.label.fee_type": "Fee type",
"frontend.form.label.provider_limit": "Provider limit",
"frontend.form.label.fee_wallet": "Fee wallet",
"frontend.form.label.duplicate_fee": "Duplicate fee",
"frontend.form.label.show_provider_fee": "Show provider fee",
"frontend.form.label.show_provider_limits": "Show provider limits",
"frontend.form.label.secondary_phone_number": "Secondary phone number",
"frontend.form.label.add_bic_swift_manually": "Input BIC/SWIFT manually",
"frontend.form.label.bic_swift": "BIC/SWIFT",
"frontend.entity.fee_types.zero": "Zero",
"frontend.entity.fee_types.percent": "Percent",
"frontend.entity.fee_types.fixed": "Fixed",
"frontend.entity.fee_types.greater_of_fixed_or_percent": "Greater of fixed or percent",
"frontend.entity.fee_types.lesser_of_fixed_or_percent": "Lesser of fixed or percent",
"frontend.entity.fee_types.fixed_and_percent": "Fixed and percent",
"frontend.entity.badge_status.delivered": "Delivered",
"frontend.entity.webhook_event_type.kyc_check_required": "KYC check required",
"frontend.entity.webhook_event_type.gate_topup_initiated": "Gate topup initiated",
"frontend.entity.webhook_event_type.gate_withdrawal_initiated": "Gate withdrawal initiated",
"frontend.update_login_credentials.add_email": "Add email",
"frontend.update_login_credentials.edit_email": "Edit email",
"frontend.update_login_credentials.add_phone_number": "Add phone number",
"frontend.update_login_credentials.edit_phone_number": "Edit phone number",
"frontend.update_login_credentials.enter_security_code_sent_to": "Enter the security code we sent to {login}"
}

{
"mobile.common.credentialNotVerified": "{{credential}} not verified",
"mobile.action.clickHereToVerify": "Click here to verify",
"mobile.action.verifyEmail": "Verify email",
"mobile.action.verifyPhone": "Verify phone"
}