Key details

  1. Shopify announced the refresh-token recovery change on August 28, 2026.
  2. A previously used refresh token can now be retried until the app starts using the newly issued replacement refresh token.
  3. The behavior protects against lost refresh responses, worker crashes and failures to persist the new token pair.
  4. The recovery period is capped at 30 days from the original refresh token's first use.
  5. The change does not extend a refresh token beyond its normal lifetime; once the replacement is used, the previous token is retired.
  6. Shopify says no migration is needed for the recovery behavior itself.
  7. Public apps must use expiring offline access tokens for Admin API requests by January 1, 2027.

What builders should take away

  1. Keep refreshing token pairs atomically and serialize refresh operations per shop; treat the new recovery rule as a safety net rather than normal token-storage strategy.
  2. Test the exact failure case the change addresses: simulate a successful Shopify refresh where the response is lost before database commit, then verify that the stored old token can recover cleanly.
  3. If your public app still uses non-expiring offline Admin API tokens, prioritize the January 1 migration; this resilience improvement makes refresh-token operations safer but does not move the deadline.
  4. Monitor refresh failures separately from ordinary Admin API authorization failures so your app can distinguish retryable token rotation from a merchant who actually needs reauthentication.
  5. Do not cache multiple token generations across workers. Once a new refresh token is used, older refresh tokens should be considered retired.

What changed

On August 28, 2026, Shopify changed the retry semantics for expiring offline access-token refreshes. Previously, once an app used a refresh token, that same token could be retried for only about 60 minutes. If Shopify successfully returned a new access/refresh pair but the response was lost—or the app crashed before persisting it—the application could later be left holding an unusable old refresh token and require merchant reauthentication. Shopify now keeps the previously used refresh token valid until the app actually begins using its replacement refresh token. The recovery path is capped at 30 days from the original token's first use and does not extend a refresh token beyond its normal lifetime. Shopify says no migration is required, but applications should still serialize refreshes and persist each returned token pair atomically.

Why it matters

This removes a nasty distributed-systems failure mode from a security migration that is about to affect every public Shopify app using the Admin API. From January 1, 2027, public apps can no longer use non-expiring offline Admin API tokens. That means many long-lived Shopify integrations must rely on refresh-token rotation for the first time. A network interruption or failed database write during rotation should not be able to turn a healthy merchant installation into an authentication outage. The new semantics give apps time to recover automatically while preserving eventual token retirement once the replacement is used.

A lost successful refresh no longer necessarily strands the app

A token-refresh request can succeed at Shopify while the caller never receives or durably stores the returned token pair. Under the older behavior, the caller's old refresh token became unusable after a limited retry window, leaving reauthorization as the recovery path. Shopify now allows that old token to be retried until the replacement token has actually entered use.

The recovery window is deliberately bounded

The old refresh token is not valid indefinitely. Shopify limits recovery to 30 days from the token's first use and does not extend its normal 90-day lifetime. Once the application uses the newly issued replacement refresh token, the previous token is retired. The change therefore adds failure recovery without turning rotation into permanent multi-token validity.

Atomic storage is still the correct implementation

Shopify explicitly says apps should continue to serialize refresh attempts for each shop and persist the returned access-token/refresh-token pair atomically. The new behavior is an emergency recovery path for lost responses and failed writes, not permission to keep multiple active token generations or to ignore concurrency.

The timing matters because expiring tokens become mandatory

Shopify requires all public apps making Admin API requests to use expiring offline access tokens by January 1, 2027. After that date, a public app presenting an old non-expiring offline token receives a 403 and may need merchant reauthentication if it has not completed the migration. The new recovery semantics reduce one operational risk of that much larger mandatory transition.

Custom apps are outside the January migration

Shopify says the January 1 requirement applies to public apps using the Admin API, not custom apps or merchant-created apps. Builders should therefore distinguish the platform-wide token-rotation mechanism from which app classes are actually subject to the 2027 enforcement deadline.

What to watch next

  • Whether Shopify publishes additional recovery or observability tooling before the January 1, 2027 expiring-token enforcement date.
  • Real-world reports of concurrent-worker edge cases under the new previous-token recovery semantics.
  • Whether Shopify changes token lifetimes or rotation limits as the migration reaches a larger installed base.
  • Adoption problems among older public apps as January 1 approaches and non-expiring tokens begin returning 403 errors.

Still unclear

  • The new recovery path reduces one class of refresh failure but does not solve lost credentials, expired tokens, app-secret rotation mistakes or other OAuth failures.
  • The 30-day recovery period is bounded by normal refresh-token lifetime; applications should not assume the old token will always remain usable for a full 30 days.
  • Public apps with unusual distributed token storage may still create concurrency races if they do not serialize refreshes and atomically persist replacement pairs.

Sources

Direct reading behind this dossier.

4 sources
Access tokens
Shopify primary_documentation

Current token lifecycle and January 1, 2027 public-app requirement.

Discussion

Discussion is reader-contributed. Comments are not part of the BTN dossier or its editorial evidence.

0 visible comments

Join the discussion

Keep comments useful and relevant. Reader contributions may be moderated and are not BTN editorial evidence.

Sign in to comment