Help with Implementing Customer Payment Method Update (Public App, Remix, Subscriptions

Hi everyone,

I’m fairly new to Shopify app development and currently working on a public app using Remix, based on the Shopify Subscription app template.

I’m trying to implement a feature that allows customers to update the payment method for any of their active subscriptions by selecting from the payment methods already associated with their account.

However, I keep running into issues when trying to fetch the customer’s available payment methods. I’ve followed the documentation and guidance from the support team, tried several GraphQL queries, but nothing seems to work. Common errors include:

  • Field 'paymentMethods' doesn't exist on type 'Customer'
  • Field 'customer' doesn't accept argument 'id'

My questions:

  1. Which API should I use for this use case?

    • Admin API?
    • Storefront API?
    • Customer API?
  2. Is there any reproducible example or demo code showing how to implement this functionality?


For context, I have the required scopes added in my shopify.app.toml file:

scopes = "customer_read_orders,customer_write_customers,customer_write_own_subscription_contracts,read_all_orders,read_locales,read_locations,read_themes,read_customer_payment_methods,write_customers,write_metaobject_definitions,write_metaobjects,write_orders,write_products,write_translations,write_own_subscription_contracts,write_customer_payment_methods,read_own_subscription_contracts,read_purchase_options,write_purchase_options,customer_read_own_subscription_contracts"

Despite this, I’ve been stuck for days. I would truly appreciate any guidance, examples, or insights from the community.

Thanks in advance!

Hi @Misbah

You’re on the right track using the Admin API - this is the correct API to use for fetching details on a customers payment methods.

The query you’d use is customerPaymentMethod which requires the read_customer_payment_methods scope. This scope isn’t applied by just adding it to the .toml file, you’d need to request access from your partner dashboard, the process for this is described here: Shopify API access scopes

Once Shopify approves access to this scope, the query should return the data as expected.

From what I’ve found and understood so far, this query (via the Admin API) cannot be fetched directly from the strorefront.

So, how can I fetch all payment methods for a logged-in customer on the frontend?

Or is this process actually meant to be handled within the app/backend? (I personally don’t think so, but please correct me if I’m wrong.)

In summary, I’d really appreciate your guidance on what the correct flow for this entire feature should be.

P.S. I’ve already enabled all the required access scopes in the Partner Dashboard.

Would this be the different to all active payment methods available on a store’s checkout?

Thanks for clarifying, Liam.

To answer your question — no, I’m not referring to general store checkout payment options (like PayPal or Shop Pay).
I’m specifically referring to saved payment methods (like customer vault cards) that are associated with a logged-in customer via Shopify Payments, so they can update their existing subscription’s billing method.

My goal is to:

  • Fetch those customer-specific payment methods on the frontend
  • Let the user pick one of their existing saved cards
  • Update the subscription contract to use that card

If this will be something that a customer will be interacting with on a customer account page, you’ll need to use the Customer Account API (not the Admin API). It doesn’t look like you’ll be able to fetch vaulted card info, but you can access subscriptionContracts on the customer object: customer - Customer API

Would this help?

Hi Liam, thanks again for the clarification.

I understand that we need to use the Customer Account API for anything customer-facing, but unfortunately, my core issue is still unresolved.

I’ve opened two GitHub issues to get help with this:

What I’m trying to implement is very specific:

Let logged-in customers update or change the payment method tied to an active subscription contract, using their already saved (vaulted) payment methods via Shopify Payments.

To be clear, I’m not asking how to update or add payment methods via the profile page — that’s already possible.
Instead, I need to provide this functionality on the subscription detail page, as per the feedback I received from the Shopify review team during app approval. They suggested this is the correct flow.

Would really appreciate any guidance, clarification, or examples on how to do this — especially since accessing vaulted cards from a public app seems to be either undocumented or unsupported at the moment.

Thanks again!
My store (with my app)


Can be updated from profile section though :


What i want: