diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/common/config/ApiConfig.kt b/core/datasource/src/main/java/com/tangem/datasource/api/common/config/ApiConfig.kt
new file mode 100644
index 0000000000..7c5b88f27a
--- /dev/null
+++ b/core/datasource/src/main/java/com/tangem/datasource/api/common/config/ApiConfig.kt
@@ -0,0 +1,50 @@
+package com.tangem.datasource.api.common.config
+
+/**
+ * Api config
+ *
+ * @property currentEnvironment current api environment
+ *
+ * @see API configuration
+ *
+[REDACTED_AUTHOR]
+ */
+sealed class ApiConfig(open val currentEnvironment: ApiEnvironment) {
+
+ /** Available environments with base url */
+ abstract val environments: Map
+
+ /** Unique id */
+ val id: ID = initializeId()
+
+ enum class ID {
+ Express,
+ TangemTech,
+ }
+
+ /** Copy method for sealed class [ApiConfig] */
+ fun copySealed(currentEnvironment: ApiEnvironment): ApiConfig {
+ return when (this) {
+ is Express -> copy(currentEnvironment = currentEnvironment)
+ is TangemTech -> copy(currentEnvironment = currentEnvironment)
+ }
+ }
+
+ private fun initializeId(): ID {
+ return when (this) {
+ is Express -> ID.Express
+ is TangemTech -> ID.TangemTech
+ }
+ }
+
+ companion object {
+ internal const val DEBUG_BUILD_TYPE = "debug"
+ internal const val INTERNAL_BUILD_TYPE = "internal"
+ internal const val MOCKED_BUILD_TYPE = "mocked"
+ internal const val EXTERNAL_BUILD_TYPE = "external"
+ internal const val RELEASE_BUILD_TYPE = "release"
+
+ /** All api configs */
+ fun values() = listOf(Express(), TangemTech())
+ }
+}
\ No newline at end of file
diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/common/config/ApiEnvironment.kt b/core/datasource/src/main/java/com/tangem/datasource/api/common/config/ApiEnvironment.kt
new file mode 100644
index 0000000000..00945bf772
--- /dev/null
+++ b/core/datasource/src/main/java/com/tangem/datasource/api/common/config/ApiEnvironment.kt
@@ -0,0 +1,10 @@
+package com.tangem.datasource.api.common.config
+
+/**
+ * Api environment
+ *
+[REDACTED_AUTHOR]
+ */
+enum class ApiEnvironment {
+ DEV, STAGE, PROD
+}
\ No newline at end of file
diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/common/config/Express.kt b/core/datasource/src/main/java/com/tangem/datasource/api/common/config/Express.kt
new file mode 100644
index 0000000000..5ebf06c017
--- /dev/null
+++ b/core/datasource/src/main/java/com/tangem/datasource/api/common/config/Express.kt
@@ -0,0 +1,35 @@
+package com.tangem.datasource.api.common.config
+
+import com.tangem.datasource.BuildConfig
+
+/**
+ * Express [ApiConfig]
+ *
+ * @property currentEnvironment current api environment
+ */
+internal data class Express(
+ override val currentEnvironment: ApiEnvironment = initializeCurrentEnvironment(),
+) : ApiConfig(currentEnvironment) {
+
+ override val environments: Map = mapOf(
+ ApiEnvironment.DEV to "[REDACTED_ENV_URL]",
+ ApiEnvironment.STAGE to "[REDACTED_ENV_URL]",
+ ApiEnvironment.PROD to "https://express.tangem.com/v1/",
+ )
+
+ private companion object {
+
+ fun initializeCurrentEnvironment(): ApiEnvironment {
+ return when (BuildConfig.BUILD_TYPE) {
+ DEBUG_BUILD_TYPE -> ApiEnvironment.DEV
+ INTERNAL_BUILD_TYPE,
+ MOCKED_BUILD_TYPE,
+ -> ApiEnvironment.STAGE
+ EXTERNAL_BUILD_TYPE,
+ RELEASE_BUILD_TYPE,
+ -> ApiEnvironment.PROD
+ else -> error("Unknown build type [${BuildConfig.BUILD_TYPE}]")
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/common/config/TangemTech.kt b/core/datasource/src/main/java/com/tangem/datasource/api/common/config/TangemTech.kt
new file mode 100644
index 0000000000..25d15d3194
--- /dev/null
+++ b/core/datasource/src/main/java/com/tangem/datasource/api/common/config/TangemTech.kt
@@ -0,0 +1,34 @@
+package com.tangem.datasource.api.common.config
+
+import com.tangem.datasource.BuildConfig
+
+/**
+ * TangemTech [ApiConfig]
+ *
+ * @property currentEnvironment current api environment
+ */
+internal data class TangemTech(
+ override val currentEnvironment: ApiEnvironment = initializeCurrentEnvironment(),
+) : ApiConfig(currentEnvironment) {
+
+ override val environments: Map = mapOf(
+ ApiEnvironment.DEV to "https://devapi.tangem-tech.com/v1/",
+ ApiEnvironment.PROD to "https://api.tangem-tech.com/v1/",
+ )
+
+ private companion object {
+
+ fun initializeCurrentEnvironment(): ApiEnvironment {
+ return when (BuildConfig.BUILD_TYPE) {
+ DEBUG_BUILD_TYPE,
+ INTERNAL_BUILD_TYPE,
+ -> ApiEnvironment.DEV
+ MOCKED_BUILD_TYPE,
+ EXTERNAL_BUILD_TYPE,
+ RELEASE_BUILD_TYPE,
+ -> ApiEnvironment.PROD
+ else -> error("Unknown build type [${BuildConfig.BUILD_TYPE}]")
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/common/config/managers/ApiConfigsManager.kt b/core/datasource/src/main/java/com/tangem/datasource/api/common/config/managers/ApiConfigsManager.kt
new file mode 100644
index 0000000000..6bb9cbb6ca
--- /dev/null
+++ b/core/datasource/src/main/java/com/tangem/datasource/api/common/config/managers/ApiConfigsManager.kt
@@ -0,0 +1,17 @@
+package com.tangem.datasource.api.common.config.managers
+
+import com.tangem.datasource.api.common.config.ApiConfig
+
+/**
+ * Api configs manager
+ *
+[REDACTED_AUTHOR]
+ */
+interface ApiConfigsManager {
+
+ /** Initialize resources */
+ suspend fun initialize() {}
+
+ /** Get base url of api by [id] */
+ fun getBaseUrl(id: ApiConfig.ID): String
+}
\ No newline at end of file
diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/common/config/managers/MutableApiConfigsManager.kt b/core/datasource/src/main/java/com/tangem/datasource/api/common/config/managers/MutableApiConfigsManager.kt
new file mode 100644
index 0000000000..87ec3f21fb
--- /dev/null
+++ b/core/datasource/src/main/java/com/tangem/datasource/api/common/config/managers/MutableApiConfigsManager.kt
@@ -0,0 +1,19 @@
+package com.tangem.datasource.api.common.config.managers
+
+import com.tangem.datasource.api.common.config.ApiConfig
+import com.tangem.datasource.api.common.config.ApiEnvironment
+import kotlinx.coroutines.flow.Flow
+
+/**
+ * Mutable [ApiConfigsManager] for change information about the current api environment
+ *
+[REDACTED_AUTHOR]
+ */
+interface MutableApiConfigsManager : ApiConfigsManager {
+
+ /** Configs */
+ val configs: Flow>
+
+ /** Change api environment [environment] by [id] */
+ suspend fun changeEnvironment(id: String, environment: ApiEnvironment)
+}
\ No newline at end of file
diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/preferences/utils/AppPreferencesStoreExt.kt b/core/datasource/src/main/java/com/tangem/datasource/local/preferences/utils/AppPreferencesStoreExt.kt
index 26be12c002..a7fd3cafef 100644
--- a/core/datasource/src/main/java/com/tangem/datasource/local/preferences/utils/AppPreferencesStoreExt.kt
+++ b/core/datasource/src/main/java/com/tangem/datasource/local/preferences/utils/AppPreferencesStoreExt.kt
@@ -125,7 +125,7 @@ suspend inline fun AppPreferencesStore.storeObjectMap(
}
/** Get map with [String] key and value [V] by string [key], or empty if data is not found */
-suspend inline fun AppPreferencesStore.getObjectMap(key: Preferences.Key): Map {
+suspend inline fun AppPreferencesStore.getObjectMapSync(key: Preferences.Key): Map {
val type = Types.newParameterizedType(Map::class.java, String::class.java, V::class.java)
val adapter = moshi.adapter