Conflicting Results Between canMakePayments and applePayCapabilities in Apple Pay JS

Hi everyone,

We’ve recently run into an issue with Apple Pay on the web and would appreciate some clarification.

Background:

Previously, we integrated Apple Pay without using the Apple Pay JS SDK.

We relied on ApplePaySession.canMakePayments() to check availability, and it worked fine.

After Apple announced support for browsers beyond Safari, we switched to the Apple Pay JS SDK.

According to Apple’s documentation, we should now use applePayCapabilities() for capability checks in third-party browsers.

Our current behavior:

We implemented applePayCapabilities().

Initially, it was returning either paymentCredentialStatusUnknown or paymentCredentialsUnavailable.

Based on those values, we displayed the Apple Pay button.

The problem:

About a week ago, on the same device/browser, applePayCapabilities() started returning applePayUnsupported.

Setup: MacBook Pro 13-inch (M1, 2020), Google Chrome Version 136.0.7103.93.

The Apple documentation says: “Don’t show an Apple Pay button or offer Apple Pay” when the result is applePayUnsupported.

However, at the same time, canMakePayments() is returning true.

This creates a direct conflict between the two recommendations:

canMakePayments() → true ⇒ show the button.

applePayCapabilities() → applePayUnsupported ⇒ don’t show the button.

Question:

What’s the correct approach here?

Should we prioritize applePayCapabilities() and hide the button, or is it acceptable to continue relying only on canMakePayments() as the source of truth for showing Apple Pay?

Any insights from others who’ve run into this contradiction would be very helpful.

Thanks in advance!

Also experiencing the same issue here! Here's my timeline:

  • Last time it worked: 13/08/2025
  • First time problem noticed: 18/08/2025

so it seems something changed between those dates.

We also rely on ApplePaySession.applePayCapabilities to decide whether to show the Apple Pay button.

Conflicting results between merchantIds?

Adding some additional context here, we use two different merchant IDs for our environments, and they return conflicting results when calling:

await window.ApplePaySession.applePayCapabilities(`${merchantId_credentials}`);

//env1
{
    "paymentCredentialStatus": "applePayUnsupported"
}

//env2
{
    "paymentCredentialStatus": "paymentCredentialStatusUnknown"
}

Our current implementation environment is as below,

Environment:

  • Third party browsers
  • Apple Pay JS API version 1.latest
  • No configuration setup in Apple dev account, we use the merchantId generated by a third-party payment integration app

Since the environments are on different domains, we thought the issue might be domain-related, but so far, no luck.

As mentioned by @Johnxman, canMakePayments() is returning true so we could consider using that as a workaround. However, it would be great to get a clearer understanding of what’s actually causing this.

Conflicting Results Between canMakePayments and applePayCapabilities in Apple Pay JS
 
 
Q