I'm receiving an authorization_unsupported_country error message on iOS even though my location and device are in Canada

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 is CA
  • Wrong merchant country — confirmed via GET /v2/merchants/QWWFM0ZBWDDRJ, country is CA
  • 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.

I currently don’t have the com.apple.developer.proximity-reader.payment.acceptance entitlement could that be the cause? is it necessary even if you’re not using Tap-to-Pay?

The proximity-reader entitlement should not be an issue as that’s only needed for Tap to Pay on iPhone, not for external readers.

Since Android works with the same credentials, the most common cause of this on iOS is a mismatch between the Application ID passed to initializeWithApplicationLaunchOptions: in your AppDelegate and the one tied to your OAuth token (iOS has that extra initialization step). Could you double-check that those app IDs match exactly?

If that doesn’t resolve it, let us know and we can look into the account flags on our end!

Thank you, you helped me find the issue, there was a mismatch. Our workflow was injecting a stale id from the environment at the pre-build stage.