diff --git a/app/src/main/java/org/futo/circles/feature/sign_up/subscription_stage/SubscriptionStageDataSource.kt b/app/src/main/java/org/futo/circles/feature/sign_up/subscription_stage/SubscriptionStageDataSource.kt
index 681b9ea27006a0a9796097fcd91b1b04c3432bcf..6bbac319a6fe07b9046eb6a05cb6265eb5908916 100644
--- a/app/src/main/java/org/futo/circles/feature/sign_up/subscription_stage/SubscriptionStageDataSource.kt
+++ b/app/src/main/java/org/futo/circles/feature/sign_up/subscription_stage/SubscriptionStageDataSource.kt
@@ -1,4 +1,34 @@
 package org.futo.circles.feature.sign_up.subscription_stage
 
-class SubscriptionStageDataSource {
+import org.futo.circles.extensions.Response
+import org.futo.circles.extensions.createResult
+import org.futo.circles.feature.sign_up.SignUpDataSource
+import org.futo.circles.provider.MatrixInstanceProvider
+import org.matrix.android.sdk.api.auth.registration.RegistrationResult
+import org.matrix.android.sdk.api.auth.registration.Stage
+
+class SubscriptionStageDataSource(
+    private val signUpDataSource: SignUpDataSource
+) {
+
+    private val wizard by lazy {
+        MatrixInstanceProvider.matrix.authenticationService().getRegistrationWizard()
+    }
+
+    suspend fun validateSubscriptionReceipt(receipt: String): Response<RegistrationResult> {
+        val type = (signUpDataSource.currentStage as? Stage.Other)?.type ?: ""
+
+        val result = createResult {
+            wizard.registrationCustom(
+                mapOf(
+                    "type" to type,
+                    "product" to receipt
+                )
+            )
+        }
+
+        (result as? Response.Success)?.let { signUpDataSource.stageCompleted(result.data) }
+
+        return result
+    }
 }
\ No newline at end of file
diff --git a/app/src/main/java/org/futo/circles/feature/sign_up/subscription_stage/SubscriptionStageFragment.kt b/app/src/main/java/org/futo/circles/feature/sign_up/subscription_stage/SubscriptionStageFragment.kt
index 7ce95fa1fbba880b04769398f3f6fa1bf1bda893..a2090033e2db22cc158e9398b4d40443c6ee566f 100644
--- a/app/src/main/java/org/futo/circles/feature/sign_up/subscription_stage/SubscriptionStageFragment.kt
+++ b/app/src/main/java/org/futo/circles/feature/sign_up/subscription_stage/SubscriptionStageFragment.kt
@@ -6,6 +6,7 @@ import by.kirich1409.viewbindingdelegate.viewBinding
 import org.futo.circles.R
 import org.futo.circles.core.fragment.ParentBackPressOwnerFragment
 import org.futo.circles.databinding.SubscriptionStageFragmentBinding
+import org.futo.circles.extensions.observeResponse
 import org.koin.androidx.viewmodel.ext.android.viewModel
 
 class SubscriptionStageFragment :
@@ -27,6 +28,6 @@ class SubscriptionStageFragment :
     }
 
     private fun setupObservers() {
-
+        viewModel.subscribeLiveData.observeResponse(this)
     }
 }
\ No newline at end of file
diff --git a/app/src/main/java/org/futo/circles/feature/sign_up/subscription_stage/SubscriptionStageViewModel.kt b/app/src/main/java/org/futo/circles/feature/sign_up/subscription_stage/SubscriptionStageViewModel.kt
index f9c16bb199bf80bb14b2bd2546aaaf4de1db1b85..e115434d27db79b372d7e000d3205469165b5535 100644
--- a/app/src/main/java/org/futo/circles/feature/sign_up/subscription_stage/SubscriptionStageViewModel.kt
+++ b/app/src/main/java/org/futo/circles/feature/sign_up/subscription_stage/SubscriptionStageViewModel.kt
@@ -1,6 +1,21 @@
 package org.futo.circles.feature.sign_up.subscription_stage
 
 import androidx.lifecycle.ViewModel
+import org.futo.circles.core.SingleEventLiveData
+import org.futo.circles.extensions.Response
+import org.futo.circles.extensions.launchBg
+import org.matrix.android.sdk.api.auth.registration.RegistrationResult
+
+class SubscriptionStageViewModel(
+    private val dataSource: SubscriptionStageDataSource
+) : ViewModel() {
+
+    val subscribeLiveData = SingleEventLiveData<Response<RegistrationResult>>()
+
+    fun validateSubscriptionReceipt(receipt: String) {
+        launchBg {
+            subscribeLiveData.postValue(dataSource.validateSubscriptionReceipt(receipt))
+        }
+    }
 
-class SubscriptionStageViewModel:ViewModel() {
 }
\ No newline at end of file