What Does ApplePaySession.canMakePayments Check?

This article explains the exact functionality of the ApplePaySession.canMakePayments method when executed by a script within the Safari web browser. It covers the specific hardware, software, and user restriction criteria this method evaluates to determine if a device is capable of processing Apple Pay transactions, while also clarifying what the method intentionally does not check, such as the presence of an active payment card in the user's Wallet.

The Core Verification Criteria

When a script running in Safari calls ApplePaySession.canMakePayments(), it returns a boolean value (true or false). To return true, the method instantly verifies the following conditions on the user's device:

  • Hardware Capability: It checks if the user is on an iPhone, iPad, or Mac that possesses the required hardware (such as the Secure Element) to process Apple Pay transactions, or is a Mac capable of handing off the payment request to a nearby iPhone or Apple Watch via Bluetooth.
  • Operating System Support: It verifies that the version of iOS, iPadOS, or macOS running on the device supports Apple Pay on the web.
  • Parental and Device Restrictions: It checks the system settings to ensure that Apple Pay has not been disabled via Screen Time (parental controls) or restricted by a Mobile Device Management (MDM) profile often used on corporate or educational devices.

Prerequisite Environment Checks

Before ApplePaySession.canMakePayments can even be called, the browser environment implicitly enforces two conditions because the ApplePaySession object will not exist otherwise:

  • Browser Compatibility: The script must be running in Safari, or an approved iOS web view like SFSafariViewController.
  • Secure Context: The webpage must be served over HTTPS. Apple Pay APIs are completely unavailable on insecure HTTP connections.

What the Method Does Not Check

A common misconception is that canMakePayments verifies whether a user is ready to pay immediately. In reality, this method does not check if the user has a credit or debit card provisioned in their Apple Wallet.

If a user is on a brand-new iPhone using Safari over HTTPS with no restrictions enabled, ApplePaySession.canMakePayments() will return true, even if their Apple Wallet is completely empty.

Apple designed the method this way so merchants can still display the Apple Pay button to capable devices. If a user without an active card taps the button, Safari will prompt them to add a card to their Wallet and then immediately complete the purchase.

Summary of Best Usage

Developers should use ApplePaySession.canMakePayments when they want to display the Apple Pay button on product pages or in the checkout flow to the widest possible audience of Apple users. Because it executes locally and does not query Apple's servers to check for active cards, it is extremely fast and protects user privacy.