Checkout UI extension: deep-link “Join loyalty” to a Customer Account UI extension full page (/account/pages/...)?

We have a Checkout UI extension (Preact, purchase.checkout.* target). When the shopper is not a loyalty member we show “Join Loyalty Program” as an <s-button href="...">.

What we do today: we set href to the store’s generic customer account URL, built from shop.storefrontUrl or https://{myshopifyDomain}{base}/account (see getAccountUrl in our checkout extension). That opens the normal account area, not our extension’s dedicated full page.

We also have a Customer Account UI extension (customer-account.page.render, “My Rewards”) that loads on a URL like …/account/pages/<page-uuid> (Shopify-hosted customer account).

Question: What is the supported way to send someone from checkout straight to that customer account extension page? For example:

Hi @Ammaar_Farhan_Syed

There’s currently no Checkout UI Extensions API that will directly give you the URL of a Customer Account full‑page extension (the /account/pages/{id} URL). The supported pattern is to rely on the stable, documented route structure for customer account full‑page extensions: essentially {{ routes.account_url }}/pages/{extensionIdOrHandle} as shown in the customer sign‑in and full‑page extension docs (build new pages in customer accounts).

In practice, that means you combine the shop’s account base URL (which you’re already deriving from shop.storefrontUrl or myshopifyDomain + /account) with your extension’s page identifier (handle or id) to produce https://{shop-domain}/account/pages/{handleOrId}.

To get that {handleOrId} in a robust way, you resolve it on your server using the Admin GraphQL API’s CustomerAccountAppExtensionPage object, or by reading your extension’s known handle from configuration.

Your backend then either stores this URL per shop or exposes it via an endpoint, and your checkout UI extension simply uses that precomputed URL. Within the customer account surface itself you can use the special href="extension:&lt;handle&gt;/" protocol to navigate between extensions of the same app, but that mechanism does not exist on the checkout side; from checkout you must link via the full https://.../account/pages/... URL.

it seems that the handle (from shopify.extension.toml) does not work anymore; only the id is working, can you confirm? AI is telling me to copy the url id and hardcode it..

as result const returnURL = `https://shopify.com/${id}/account/pages/my-account-extension\`;
so I cannot return from external endpoints
(assume: user went to a 3rd party, signed a contract, now needs to return to its account extension, with the signature confirmed)