We are integrating the Square Mobile Payments SDK (v2.5.0) via the React Native bridge (mobile-payments-sdk-react-native v2026.4.1) and receiving authorization_unsupported_country on iOS only. Android authorizes successfully with identical credentials.
Details:
- Application ID:
sq0idp-...(production) - Location ID:
LF4SA87MZ2KQB - Merchant ID:
QWWFM0ZBWDDRJ - Location country (confirmed via API):
CA - Merchant country (confirmed via API):
CA - Device locale: Canada
- iOS SDK version: SquareMobilePaymentsSDK 2.5.0
What we’ve ruled out:
- Wrong location ID — confirmed via
GET /v2/locations/LF4SA87MZ2KQB, country isCA - Wrong merchant country — confirmed via
GET /v2/merchants/QWWFM0ZBWDDRJ, country isCA - Device locale — set to Canada
- Location permission — granted before
authorize()is called - Wrong application ID — using the correct production
sq0idp-prefixed string from app build config
Behaviour:
authorize(accessToken, locationId) is called at app startup. On Android it succeeds. On iOS it immediately fails with error code authorization_unsupported_country and message: “The Square Mobile Payments SDK could not complete the authorization request because the merchant is in a country that is not supported by Mobile Payments SDK.” The debugCode field on the error is also authorization_unsupported_country with no additional detail.
I’m not sure why this is happening.