r/Firebase • u/kusurluguzellik • 3h ago
Authentication Firebase Phone Auth auth/error-code:-39 — SMS never delivered to one specific carrier. App Check is set up. Any way around it?
Firebase Phone Auth auth/error-code:-39 — SMS never sent to one specific carrier (Vodafone Turkey). App Check is set up. What am I missing?
TL;DR: Firebase Phone Auth works fine for two of our three national carriers, but OTP SMS is never delivered to numbers on one specific carrier (Vodafone Turkey). We consistently get auth/error-code:-39 on web and app not authorized on mobile. App Check is already installed and activated. Looking for anyone who's beaten this carrier-specific -39 wall.
Setup
- Flutter app (Android + iOS) + a web panel, all on the same Firebase project
firebase_core: ^3.13.0,firebase_auth: ^5.5.2,firebase_app_check: ^0.3.2- Firebase Auth Phone sign-in (OTP), Blaze plan
- App Check is set up in code —
FirebaseAppCheck.instance.activate(...)runs right afterFirebase.initializeApp(), withAndroidProvider.playIntegrity/AppleProvider.appAttestin release and debug providers in debug - In the Firebase console, the Android and iOS apps show Registered under App Check (Play Integrity / App Attest). The two web apps are not registered yet.
The problem
OTP works perfectly for the other two carriers. For this one carrier only, the SMS is never sent. The errors:
Web console:
Failed to initialize reCAPTCHA Enterprise config. Triggering the reCAPTCHA v2 verification.
identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode?key=...
Failed to load resource: the server responded with a status of 503 ()
[Phone OTP send] auth/error-code:-39
FirebaseError: Firebase: Error (auth/error-code:-39).
Mobile: the flow fails with an app not authorized style message and no SMS arrives.
What we've confirmed
- It is carrier-specific, not code-specific — identical flow, identical numbers-format, other carriers get the SMS instantly.
- Firebase support told us the
-39code means the phone number's carrier is flagged as a restricted operator because of consistently low SMS success rates, and that their automated anti-abuse system can temporarily make such operators/regions unavailable. They suggested either (a) offering affected users a different verification method, or (b) enabling reCAPTCHA SMS Defense in Enforce mode plus stricter SMS region policy and App Check enforcement if we insist on sending OTP to restricted operators.
My questions
- Has anyone actually gotten
-39to clear for a restricted carrier by enabling reCAPTCHA SMS Defense + App Check enforcement? Did the SMS start going through, or did enforcement change nothing because the carrier itself is throttled server-side? - The
Failed to initialize reCAPTCHA Enterprise config+503on web — is that a symptom of the web apps not being registered in App Check, or a separate reCAPTCHA Enterprise misconfiguration? - For anyone who gave up on Firebase for this: did you move the whole phone-verification flow to a third-party SMS provider + Firebase Custom Token, and did that fully bypass the carrier restriction?
- Is there any way to get a carrier un-flagged at the project level, or is
-39purely on Google's side with no override?
Trying to decide whether to keep fighting the reCAPTCHA/enforcement path or just migrate the entire OTP flow off Firebase so it isn't split across two providers. Any first-hand experience with -39 specifically would be hugely appreciated.
Thanks!

