Action Required / Admin API

From 2027/1/1, "expiring"
Offline Access Tokens become mandatory for all Public apps

Non-expiring tokens stay valid forever if they leak. Shopify is requiring all Public apps to migrate to "Expiring Offline Access Tokens" that expire in 60 minutes and rotate automatically.

On this page
  1. 30-second summary: what, when, and who
  2. Timeline (2026/4 → 2027/1)
  3. Apps that are affected / apps that aren't
  4. Non-expiring vs. expiring tokens: the difference
  5. Why Shopify is making this mandatory
  6. How to migrate (3 steps)
  7. 5 key points for developers
  8. 3 practical use cases
  9. A one-line summary for your pitch

130-second summary: what, when, and who

From January 1, 2027, every Public app must call the Admin API using an "expiring Offline Access Token," or it will get an authentication error.
The rule that previously applied only to "new Public apps" from 2026/4/1 is being expanded to coverall apps, including existing Public apps.
2027/1/1

Starting when

January 1, 2027. After this date, calling the Admin API with a non-expiring token returns an authentication error.

Public

Who it affects

All Public apps, including those created before 2026/4/1. Custom apps, apps built in the Dev Dashboard, and apps created in the Admin are not affected.

What to do

Exchange existing tokens via code to switch them to expiring tokens. No reinstall is required on the merchant's side.

2Timeline

~2026/3/31Non-expiring tokens are fine for any app
2026/4/1New Public apps must use expiring tokens
2027/1/1All Public apps must use expiring tokens
Grace period
Recommended migration window
Expiration enforced
After 2027/1/1, if you haven't migrated, all Admin API calls fail with an "authentication error."For production apps, this directly translates into user impact—a service outage. Plan your migration on the assumption that you have a little over 7 months left.

3Apps that are affected / apps that aren't

Affected (migration required)

Public

Public apps that call the Admin API with non-expiring tokens

Including those created before 2026/4/1. Any app of the Public type is affected, regardless of whether it's published on the App Store.

Public apps created on or after 2026/4/1

Already required to use expiring tokens. This announcement is a follow-up rule extending the requirement to existing apps as well.

Not affected (no changes needed)

Not affected

Custom apps

Custom apps built for a single merchant are not included in this requirement.

Not affected

Apps created by merchants in the Dev Dashboard

Apps the merchant created themselves in the Dev Dashboard.

Not affected

Apps created by merchants in the admin

Apps created from the Shopify admin.

4Non-expiring vs. expiring tokens

Non-expiring token (OLD) token A Issued Valid forever (game over if leaked) Leaked Expiring token (NEW) 60min 60min 60min 60min Leaked 60min 60min 60min Expires in 60 minutes even if leaked Auto-rotation continues
ItemNon-expiring (OLD)Expiring (NEW)
Validity period No expiration 60 minutes
Renewal None Auto-rotation
Impact if leaked Can be abused permanently Expires within 60 minutes, minimizing the blast radius
Admin API on or after 2027/1/1 Authentication error Works normally
Alignment with OAuth best practices Not aligned Compliant

5Why is Shopify making this required?

Strengthening merchant data protection

If a non-expiring token leaks, it stays valid forever. That runs counter to modern OAuth best practices. Expiring tokens plus automatic refresh shrink the leak window to 60 minutes.

A "predictable refresh flow" that developers will appreciate too

Because refresh behavior is always the same, token-management design is simplified. It's already implemented in Shopify's templates and official API libraries.

6How to migrate (3 steps)

1

Inventory your existing tokens following the migration guide

Audit your database for which stores and which scopes you're holding non-expiring tokens for.

2

Exchange tokens via code

No merchant reinstall required. Your app's code exchanges "non-expiring → expiring" tokens.

3

Update your storage logic and refresh implementation

Store the new access_token / refresh_token / expires_at and get the refresh flow running.

If you're using Shopify's official App Template / API Library, refresh handling is already implemented.All you need is "token exchange" and "updating your storage logic." It's far easier than a full from-scratch implementation.
The specific steps are documented step-by-step in Shopify's migration guide . If you get stuck, there's a clear path to ask the dev platform community.

7Five points engineers should keep in mind

401

1. The deadline is 2027/1/1; after that, auth errors

No grace period. The moment you call the Admin API with a non-expiring token, an auth error is returned. To avoid production impact, switching over at a time that doesn't span the year-end/new-year freeze is the realistic choice.

no re-install

2. No merchant reinstall required

You only need to exchange existing tokens in your app's code. There's basically no need to ask installed stores for extra operations, and notifications to sales/CS are lightweight too.

SDK ✓

3. The official API libraries/templates already support this

If you're using Shopify's official Library, refresh handling is already built in. The more a legacy implementation hand-wrote its own OAuth, the more work it takes.

4. You need to update your token storage schema

Move from a single access_token column to operating with the three-piece set of access_token / refresh_token / expires_at. Decide on your migration design and how you'll backfill existing records.

Custom OK

5. Custom apps / merchant-built apps are out of scope

The impact is limited to "Public apps" only.Apps that merchants create in the Admin or Dev Dashboard, and Custom apps, are not included in this requirement, so start by classifying the app type for your project and producing an impact assessment.

8Three use cases you can apply in your work

USE CASE 1

A "token inventory + migration plan" project for a Public app in operation

Challenge
A Public app already published on the App Store holds hundreds to thousands of installed stores' worth of non-expiring tokens in its database. Unless they're all migrated to expiring tokens by 2027/1/1, the service stops.
Approach
① Investigate the impact (Public determination / target scopes / number of target stores) ② Design review following the official migration guide ③ Migrate with a two-stage approach: a token-exchange batch plus online refresh.
Outcome
Reduces the 2027/1/1 service-stoppage risk to zero. Since no merchant reinstall request is needed, CS effort is minimized too.
Technical notes
The article itself doesn't describe a specific batch operation method. When implementing, refer to the migration guide and run a single store through a sandbox first.
access_token refresh_token expires_at
USE CASE 2

A "migrate to the official SDK" refactoring proposal for a legacy OAuth implementation

Challenge
Legacy apps that implement their own OAuth flow will need to build a new Refresh flow, which inflates testing effort.
Action
Use this mandate as an opportunity to refactor toward Shopify's official API library / App Template in parallel, delegating token-related responsibilities to the SDK.
Impact
The Refresh implementation is left to the SDK, narrowing the test scope. It also becomes easier to keep up with future OAuth spec changes.
Technical notes
Run the DB migration for the token storage schema (access_token / refresh_token / expires_at) alongside the SDK migration.
Scoring
USE CASE 3

Turning a "2027/1/1 risk assessment" of owned apps into a service

Challenge
A business holds multiple Public apps built in-house or outsourced and has no clear picture of which are affected and which are already handled.
Action
Take inventory of app types (Public / Custom / Dev Dashboard-built) and current token method (expiring / non-expiring), build a migration priority matrix, and fold it into the sprint plan.
Impact
Complete the migration methodically over the 7-plus months until 2027/1/1, avoiding rushed production work across the year-end freeze period.
Technical notes
Custom apps and merchant-created apps are out of scope, so exclude them at the inventory stage. Estimate effort for Public apps only.

9One-line summary you can use in a proposal

"From 2027/1/1, all Public apps require expiring Offline Access Tokens.
Leave it unaddressed and the Admin API dies entirely with authentication errors.
No merchant reinstall needed; if you use the official SDK, Refresh is already implemented,
so all you have to do is two things: 'token exchange' and 'storage schema update.'"