Expiring offline access token refreshes now retain the previously used refresh token until an app begins using its replacement. This rollout helps apps recover when a refresh response is lost or isn’t persisted. No migration is required, but apps should continue to store every refreshed token pair atomically.
What changed
Previously, after an app used a refresh token, it could retry that token for up to 60 minutes. If the app didn’t receive or save the newly returned access token and refresh token, the previously stored refresh token could no longer be used after that window.
Now, an app can retry its previously stored refresh token until it starts using the replacement refresh token. This gives the app a recovery path after a lost response or storage failure.
The recovery period is limited to 30 days from the original refresh token’s first use and doesn’t extend the token beyond its normal 90-day lifetime. When an app uses the replacement refresh token, the preceding refresh token is retired.
Who's affected
Apps that use expiring offline access tokens. It doesn’t require a new API version, configuration change, or opt-in.
Apps that don’t use expiring offline access tokens aren’t affected.
Why this matters
A transient network interruption, worker failure, or database write failure can occur after Shopify processes a refresh request but before an app saves the returned token pair. This change lets affected apps recover without requiring a merchant to open the app again.
What to do
No migration is required if your app is already using expiring offline access tokens.
Continue to:
- Serialize refresh operations for each shop.
- Persist each returned access-token and refresh-token pair atomically.
- Use the newest refresh token for future refreshes.
- Treat this behavior as a recovery path for lost responses, not as a reason to keep using an older refresh token after its replacement has been stored.