Who is affected by Shopify's expiring offline access tokens?
Public apps that call the Admin API with a non-expiring offline token. If your app is listed on the Shopify App Store and was installed before it moved to expiring tokens, check which tokens your stores still hold.
Not affected: custom apps, merchant-created apps and online access tokens. Shopify names all three as exempt.
What changes for Shopify public apps on January 1, 2027?
Public apps that still use non-expiring offline tokens are delisted from the Shopify App Store and blocked from new installs. Existing installs keep working.
Shopify's changelog of October 27, 2026 says: "All public apps that call the Admin API must migrate to expiring offline access tokens by January 1, 2027."
On that date, apps that haven't moved are "Delisted from the Shopify App Store and blocked from new installs." Shopify adds: "Existing installs keep working."
Shopify also gives later dates, and says plainly how to read them: "January 1 is the migration deadline: The later dates give merchants time to prepare, and should not be treated as extra time to migrate." Plan your move for before January 1.
How does the token exchange work for existing stores?
Shopify lets your app swap a store's old non-expiring token for an expiring pair, with no merchant involved. Your server sends the old token to Shopify's token endpoint with expiring=1, and gets back an access token and a refresh token.
- It needs "no ID token or user session", so merchants don't open or approve anything.
- It "permanently invalidates the old token". Any other system still using that token stops working for that store, so swap each store once, and only from the server that keeps the new tokens.
- If the response gets lost, repeating the same call within 7 days recovers it.
- After the swap, refresh each access token before it runs out. The refresh token changes with every refresh, so keep only the newest pair.
For new installs, use token exchange with expiring=1 from the start.
What if my app is built on Gadget?
Gadget shuts down on March 31, 2027, so a Gadget app has two dates: Shopify's January 1, 2027 deadline for public apps, and Gadget's own shutdown. Moving off Gadget before January 1 lets you handle both in one switch.
Checklist for a public app owner
1
- What to do
- Check whether your app is public or custom
- Why
- Only public apps have the January 1, 2027 deadline
2
- What to do
- Find which stores still hold non-expiring tokens
- Why
- Those are the stores to swap
3
- What to do
- Pick one server to own the tokens
- Why
- Every swap and refresh replaces the token other systems use
4
- What to do
- Swap each store's old token with expiring=1
- Why
- No merchant is needed while the old token still works
5
- What to do
- Save the access token, the refresh token and both expiry times
- Why
- The refresh token changes on every refresh
6
- What to do
- Refresh tokens before they expire, and handle failures
- Why
- An expired pair means calls fail for that store
7
- What to do
- Switch new installs to token exchange with expiring=1
- Why
- New stores start on expiring tokens
8
- What to do
- Test on a development store, then finish before January 1, 2027
- Why
- Shopify calls it "the migration deadline"

