Migrating from non expiring to expiring access tokens

@TerenceShopify can we please get the deadline moved to April next year? :folded_hands:

If the current deadline remains, I expect the worst for both merchants and partners during the busiest time of the year.

A lot of people are postponing the migration, myself included, because of reports of migrations causing issues. If problems arise during the final quarter of the year, it’s going to put significant strain on partners, merchants, and Shopify Support.

Overall, I think this could reflect poorly on Shopify and lead to a lot of frustrated partners and customers.

I think Shopify postponing it is a good idea, but as you have no guarantee they will do that, it would be better to migrate sooner rather than later. There have been tons of people who have migrated without any issues (myself included), and waiting is only going to make issues for yourself and your merchants. If you do it correctly there will be no issues, but waiting means you have less time to implement and validate, which could lead to mistakes.

I would do the migration slowly over time, starting with new merchants and migrating a few each day.

I’ve worked through the migration myself across all my apps. It was simple enough and I didn’t run into any issues, but I do understand people’s concerns, especially with the timing.

My recommendation would be the same as others have suggested: take it slowly. Start with your test stores first and make sure the full token and refresh flow is working properly before touching your production stores. Leave those running for a day or two using whatever ongoing refresh strategy you’ve chosen before rolling it out to the rest of your stores.

Personally, I refresh access tokens as they’re needed, and I also run a maintenance script each day to check that refresh tokens are still present, active and stored correctly.

I always test as much of the process end-to-end as possible first, although a true dry run is a little difficult with this one. Back everything up, but more importantly, make absolutely sure you’re correctly saving the new access and refresh tokens before considering a store migrated.

Definitely not something I’d rush through across every install at once!

I’d say the concern is not so much the mechanical implementation of it, or even the deadline, but a lack of confidence in the process.

Luke asked about a refresh token being retired without clear reason. To proceed without knowing the cause of stuff like that is kinda rough.

There’s a ton of deadlines and announcements for features in preview, opt-in, rolling out, upcoming, unstable, plus-only, deprecating, deprecated etc. Some new things are announced and launch the same day. Other features are suddenly released weeks or months ahead of the stable and release candidate APIs.

It seems like the feedback process and libraries are not able to keep up with the fast pace of changes, which makes even mechanical updates feel unnerving.

Apparently, many seasoned partners have not yet migrated to the expiring token system, almost a year in, and I think it’s a symptom of that. I actually didn’t even know there were problems with these tokens :sweat_smile:. I simply wanted to postpone to the “last minute” because that’s kind of what I got used to doing to avoid burning out.

PS: Sorry, Luke. I’ll resurface your questions:

We’ve been running this for a couple weeks now (refreshing thousands of stores every 45min) and whilst there’s been plenty of outages on the oauth API itself (we get all sorts of errors daily), the actual recovery is working and we haven’t lost access to any stores as of yet on the latest flows.

There still doesn’t seem to be a recovery pathway should there be an outage on your own end though, however i would argue this is probably your own problem.

It seems like lately the new features being rolled out are generally poor quality (both in design and implementation - there are plenty of bugs)

Actually, I’ve found an issue as well.

We have an instance where a new refresh token was obtain using token exchange from a session token. The new refresh token was never used, however has invalidated the existing refresh token.

Based on the latest changes, the existing refresh token should have continued to work rather than be invalidated.

@TerenceShopify Does the session token exchange work differently and exhibit different behaviour to the refresh token grant type?

I would like to kindly ask Shopify to consider extending the deadline for this migration to April 1, 2027.

As others have mentioned, the final quarter of the year is typically the busiest and most critical period for e-commerce. For Shopify app developers, this is also a time when maintaining stability, supporting merchants quickly, and responding to ongoing platform changes becomes especially important.

We fully understand the need for changes such as expiring access tokens and appreciate the long-term security benefits they bring. At the same time, this particular migration affects a core part of many apps infrastructure and authentication flows, which makes it significantly more sensitive than a smaller API or platform update.

Implementing and thoroughly testing such a change during the busiest period of the year naturally carries additional risk. Even a small issue i n authentication or token handling could potentially affect merchants at a time when they rely most heavily on their stores and apps.

For that reason, moving the deadline to April 1, 2027 would give app developers the opportunity to implement, test, and deploy the migration more carefully after the holiday season, while minimizing unnecessary risk for merchants.

It would also be greatly appreciated if someone from Shopify could let us know whether an extension of the deadline is being considered, or whether the January 1 deadline is expected to remain firm. Having some clarity on this would help developers plan the migration and allocate resources accordingly.

Thank you for considering this feedback

We’re looking into the reports above of refresh tokens that should be valid not working.

Regarding the deadline for now I can say that I understand the (valid) feedback and we’re taking this into consideration. Nothing official to share on that at the moment, but we’ll update everybody as soon as there’s something to share on that end.

[Urgent] We’re using expiring offline access tokens for a public app and store both access_token and refresh_token metadata (expires_in / refresh_token_expires_in) in our database. For one specific store, at the time of failure our DB showed the access token still had about 30 minutes before expiry and the refresh token was valid until December 2026, but Admin GraphQL started returning 401 “Unauthorized” and our refresh flow for that store began failing, while the exact same refresh logic continues to work for other stores. Are there any documented situations where Shopify can invalidate an expiring offline access_token and its corresponding refresh_token earlier than their reported expires_in / refresh_token_expires_in, and what’s the recommended way to recover from this without forcing the merchant to manually re-authorize the app at that moment?

I’m facing a similar issue: even though the token pair in the data hasn’t expired yet, an error occurs when trying to use it. Have you found a solution? It happens sporadically across certain stores. Right now, I have to call the customer and ask them to open the app so the token gets updated, but this isn’t sustainable—it could lead to negative reviews for the app.

Have you found the cause and resolved this situation yet?

Hi @TerenceShopify, thanks for looking into this.

Is there any update on the root cause, or a recommended workaround in the meantime? This is having a serious impact on our side. Several of our merchants are losing orders because their tokens expire (including refresh tokens that should still be valid), and orders stop syncing until the merchant reinstalls or re-authenticates the app.

Our merchants are frustrated and are contacting support every day. Some have already said they will leave 1-star reviews, even though the problem isn’t in our app.

A few questions:

Have you identified what is causing valid refresh tokens to be rejected?
Is there a temporary workaround we can use to avoid losing orders until a fix is released?
Is there an estimated timeline for a fix, or for a decision on extending the deadline?

Additional question:

You’ve made a recovery solution for transient errors during normal token refresh. But what about a faulty migration token exchange?

From all resources I’ve been able to find, there is no way to recover if we somehow fail to store the new offline keypair during the migration.

Is there any news about extending the deadline for this migration to April 1, 2027?

@TerenceShopify it would be great if we could get an update on the deadline.

To be honest, the number of updates Shopify is pushing in Q4 is becoming a lot to handle, and I’ve seen many partners share the same sentiment. Most of us would much rather focus on adding value for our customers, but instead we’re currently dealing with, among other things:

  • The review purge and filing appeals.

  • The new Shopify UI and related Polaris issues.

  • Sidekick input causing confusion for customers and adding to the support workload. Integrating with Sidekick is also not possible for legacy install flows.

  • Script tag deprecation with only six days’ notice for apps still using them. No prior reports were sent, and due to a bug, this wasn’t shown in the dev dashboard either.

  • App deployments being blocked unless UI extensions are updated to Polaris.

  • Shopify Canvas launching without app embed/block support.

  • Access token migration.

Q4 is the busiest time of the year for many partners. It would be greatly appreciated if we could get a little more breathing room so we can focus on delivering the best possible experience to our customers, rather than dealing with a constant stream of deadlines and changes that, from my perspective, don’t always warrant such tight timelines.

and adapt our strategy to stay alive vs AI changes

how are we all supposed to play GTA6 in november with this amount of work due by end of Q4

it’s an outrage

Indeed :rofl: good point.

Will GTA 6 drop before Terence responds?