diff --git a/Examples/xx-messenger/Sources/AppCore/AuthCallbackHandler/AuthCallbackHandlerRequest.swift b/Examples/xx-messenger/Sources/AppCore/AuthCallbackHandler/AuthCallbackHandlerRequest.swift
index 1ec239230874c79e3d670bf377c57ab45400895b..e8f14806ba8d088dc976365741387b502e7bbb42 100644
--- a/Examples/xx-messenger/Sources/AppCore/AuthCallbackHandler/AuthCallbackHandlerRequest.swift
+++ b/Examples/xx-messenger/Sources/AppCore/AuthCallbackHandler/AuthCallbackHandlerRequest.swift
@@ -1,6 +1,7 @@
 import Foundation
 import XCTestDynamicOverlay
 import XXClient
+import XXMessengerClient
 import XXModels
 
 public struct AuthCallbackHandlerRequest {
@@ -14,6 +15,7 @@ public struct AuthCallbackHandlerRequest {
 extension AuthCallbackHandlerRequest {
   public static func live(
     db: DBManagerGetDB,
+    messenger: Messenger,
     now: @escaping () -> Date
   ) -> AuthCallbackHandlerRequest {
     AuthCallbackHandlerRequest { xxContact in
@@ -29,6 +31,16 @@ extension AuthCallbackHandlerRequest {
       dbContact.authStatus = .verificationInProgress
       dbContact.createdAt = now()
       dbContact = try db().saveContact(dbContact)
+
+      do {
+        let verified = try messenger.verifyContact(xxContact)
+        dbContact.authStatus = verified ? .verified : .verificationFailed
+        dbContact = try db().saveContact(dbContact)
+      } catch {
+        dbContact.authStatus = .verificationFailed
+        dbContact = try db().saveContact(dbContact)
+        throw error
+      }
     }
   }
 }
diff --git a/Examples/xx-messenger/Sources/AppFeature/AppEnvironment+Live.swift b/Examples/xx-messenger/Sources/AppFeature/AppEnvironment+Live.swift
index c45c93ef4fb5b3f3f7052d1b99aa15c1b038709b..5267fcc3f1a42445702386278b8fbeeb600785ae 100644
--- a/Examples/xx-messenger/Sources/AppFeature/AppEnvironment+Live.swift
+++ b/Examples/xx-messenger/Sources/AppFeature/AppEnvironment+Live.swift
@@ -18,7 +18,11 @@ extension AppEnvironment {
     let messenger = Messenger.live(messengerEnv)
     let authHandler = AuthCallbackHandler.live(
       messenger: messenger,
-      handleRequest: .live(db: dbManager.getDB, now: Date.init),
+      handleRequest: .live(
+        db: dbManager.getDB,
+        messenger: messenger,
+        now: Date.init
+      ),
       handleConfirm: .live(db: dbManager.getDB),
       handleReset: .live(db: dbManager.getDB)
     )
diff --git a/Examples/xx-messenger/Tests/AppCoreTests/AuthCallbackHandler/AuthCallbackHandlerRequestTests.swift b/Examples/xx-messenger/Tests/AppCoreTests/AuthCallbackHandler/AuthCallbackHandlerRequestTests.swift
index fb92a5b8871258b61c88f5bfd43bdb53d64208ba..07359d1f99234d8faabf1b0b9dff29c6af963b70 100644
--- a/Examples/xx-messenger/Tests/AppCoreTests/AuthCallbackHandler/AuthCallbackHandlerRequestTests.swift
+++ b/Examples/xx-messenger/Tests/AppCoreTests/AuthCallbackHandler/AuthCallbackHandlerRequestTests.swift
@@ -1,16 +1,24 @@
 import CustomDump
 import XCTest
-import XXModels
-import XXClient
 import XCTestDynamicOverlay
+import XXClient
+import XXMessengerClient
+import XXModels
 @testable import AppCore
 
 final class AuthCallbackHandlerRequestTests: XCTestCase {
   func testRequestFromNewContact() throws {
     let now = Date()
     var didFetchContacts: [XXModels.Contact.Query] = []
+    var didVerifyContact: [XXClient.Contact] = []
     var didSaveContact: [XXModels.Contact] = []
 
+    var messenger: Messenger = .unimplemented
+    messenger.verifyContact.run = { contact in
+      didVerifyContact.append(contact)
+      return true
+    }
+
     let request = AuthCallbackHandlerRequest.live(
       db: .init {
         var db: Database = .failing
@@ -24,6 +32,7 @@ final class AuthCallbackHandlerRequestTests: XCTestCase {
         }
         return db
       },
+      messenger: messenger,
       now: { now }
     )
     var xxContact = XXClient.Contact.unimplemented("contact".data(using: .utf8)!)
@@ -39,15 +48,26 @@ final class AuthCallbackHandlerRequestTests: XCTestCase {
     try request(xxContact)
 
     XCTAssertNoDifference(didFetchContacts, [.init(id: ["id".data(using: .utf8)!])])
-    XCTAssertNoDifference(didSaveContact, [.init(
-      id: "id".data(using: .utf8)!,
-      marshaled: "contact".data(using: .utf8)!,
-      username: "username",
-      email: "email",
-      phone: "phone",
-      authStatus: .verificationInProgress,
-      createdAt: now
-    )])
+    XCTAssertNoDifference(didSaveContact, [
+      .init(
+        id: "id".data(using: .utf8)!,
+        marshaled: "contact".data(using: .utf8)!,
+        username: "username",
+        email: "email",
+        phone: "phone",
+        authStatus: .verificationInProgress,
+        createdAt: now
+      ),
+      .init(
+        id: "id".data(using: .utf8)!,
+        marshaled: "contact".data(using: .utf8)!,
+        username: "username",
+        email: "email",
+        phone: "phone",
+        authStatus: .verified,
+        createdAt: now
+      )
+    ])
   }
 
   func testRequestWhenContactInDatabase() throws {
@@ -57,6 +77,7 @@ final class AuthCallbackHandlerRequestTests: XCTestCase {
         db.fetchContacts.run = { _ in [.init(id: "id".data(using: .utf8)!)] }
         return db
       },
+      messenger: .unimplemented,
       now: XCTUnimplemented("now", placeholder: Date())
     )
     var contact = XXClient.Contact.unimplemented("contact".data(using: .utf8)!)
@@ -64,4 +85,92 @@ final class AuthCallbackHandlerRequestTests: XCTestCase {
 
     try request(contact)
   }
+
+  func testRequestFromNewContactVerificationFalse() throws {
+    let now = Date()
+    var didSaveContact: [XXModels.Contact] = []
+
+    var messenger: Messenger = .unimplemented
+    messenger.verifyContact.run = { _ in false }
+
+    let request = AuthCallbackHandlerRequest.live(
+      db: .init {
+        var db: Database = .failing
+        db.fetchContacts.run = { query in return [] }
+        db.saveContact.run = { contact in
+          didSaveContact.append(contact)
+          return contact
+        }
+        return db
+      },
+      messenger: messenger,
+      now: { now }
+    )
+    var xxContact = XXClient.Contact.unimplemented("contact".data(using: .utf8)!)
+    xxContact.getIdFromContact.run = { _ in "id".data(using: .utf8)! }
+    xxContact.getFactsFromContact.run = { _ in [] }
+
+    try request(xxContact)
+
+    XCTAssertNoDifference(didSaveContact, [
+      .init(
+        id: "id".data(using: .utf8)!,
+        marshaled: "contact".data(using: .utf8)!,
+        authStatus: .verificationInProgress,
+        createdAt: now
+      ),
+      .init(
+        id: "id".data(using: .utf8)!,
+        marshaled: "contact".data(using: .utf8)!,
+        authStatus: .verificationFailed,
+        createdAt: now
+      )
+    ])
+  }
+
+  func testRequestFromNewContactVerificationFailure() throws {
+    struct Failure: Error, Equatable {}
+    let failure = Failure()
+    let now = Date()
+    var didSaveContact: [XXModels.Contact] = []
+
+    var messenger: Messenger = .unimplemented
+    messenger.verifyContact.run = { _ in throw failure }
+
+    let request = AuthCallbackHandlerRequest.live(
+      db: .init {
+        var db: Database = .failing
+        db.fetchContacts.run = { query in return [] }
+        db.saveContact.run = { contact in
+          didSaveContact.append(contact)
+          return contact
+        }
+        return db
+      },
+      messenger: messenger,
+      now: { now }
+    )
+    var xxContact = XXClient.Contact.unimplemented("contact".data(using: .utf8)!)
+    xxContact.getIdFromContact.run = { _ in "id".data(using: .utf8)! }
+    xxContact.getFactsFromContact.run = { _ in [] }
+
+    XCTAssertThrowsError(try request(xxContact)) { error in
+      XCTAssertNoDifference(error as? Failure, failure)
+    }
+
+    XCTAssertNoDifference(didSaveContact, [
+      .init(
+        id: "id".data(using: .utf8)!,
+        marshaled: "contact".data(using: .utf8)!,
+        authStatus: .verificationInProgress,
+        createdAt: now
+      ),
+      .init(
+        id: "id".data(using: .utf8)!,
+        marshaled: "contact".data(using: .utf8)!,
+        authStatus: .verificationFailed,
+        createdAt: now
+      )
+    ])
+  }
 }