<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/more-resilient-token-exchanges-when-migrating-tokens-without-a-user-session-j1htwj77f" -->

---
title: More resilient token exchanges when migrating tokens...
description: Shopify apps migrating existing non-expiring offline tokens to expiring offline access tokens without a user session can now retry a lost migration exchange...
canonical: https://daily.dev/posts/more-resilient-token-exchanges-when-migrating-tokens-without-a-user-session-j1htwj77f
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: More resilient token exchanges when migrating tokens without a user session | daily.dev
og:description: Shopify apps migrating existing non-expiring offline tokens to expiring offline access tokens without a user session can now retry a lost migration exchange...
og:url: https://daily.dev/posts/more-resilient-token-exchanges-when-migrating-tokens-without-a-user-session-j1htwj77f
og:image: https://api.daily.dev/og/posts/J1htWJ77f.png
og:image:alt: More resilient token exchanges when migrating tokens without a user session
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# More resilient token exchanges when migrating tokens without a user session

**[Shopify Developer changelog](https://daily.dev/sources/shopifychangelog)** · 2 min read · 0 upvotes · 0 comments

## Summary

Shopify apps migrating existing non-expiring offline tokens to expiring offline access tokens without a user session can now retry a lost migration exchange using the original non-expiring token for up to seven days after the initial exchange. An eligible retry returns the same access-token and refresh-token pair as the initial exchange, extending the access token's expiry when needed but not the refresh token's. Recovery ends after seven days, once the app successfully refreshes the pair, or once a new token acquisition replaces it. This lets apps recover access without forcing merchants to reauthorize when the migration response is lost or not persisted.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://shopify.dev/changelog/more-resilient-token-exchanges-when-migrating-tokens-without-a-user-session>

## Questions this post answers

### What happens if I retry a Shopify token migration request without a user session after losing the response?

An eligible retry using the same original non-expiring token and client credentials returns the same access-token and refresh-token pair as the initial exchange. Shopify extends the access token's expiry when needed but does not extend the refresh token's expiry. This recovery window lasts up to seven days after the initial exchange, ending earlier if the app successfully refreshes the pair or acquires a new token.

_Track authentication changes like Shopify's token migration retries as you plan app upgrades on daily.dev._

### How long do I have to retry a Shopify offline token migration exchange without a user session?

You have up to seven days from the initial exchange to retry the migration request with the original non-expiring token and valid client credentials. Recovery also ends earlier if the refresh succeeds or if a later token acquisition, such as a new authorization code or ID-token exchange, replaces the issued pair for that store.

_Developers migrating Shopify app tokens use daily.dev to keep up with authentication timing rules._

### What should I do if a Shopify token migration retry fails after the recovery window closes?

Acquire a new token for that store through ID-token exchange or the authorization code grant, then update stored credentials accordingly. The original non-expiring token remains invalid for requests after migration, so apps should discard it once a new access and refresh token pair is persisted.

_Keep migration fallback steps like this handy by following Shopify API changes on daily.dev._

## Similar posts on daily.dev

- [More resilient refreshes for expiring offline access tokens](https://daily.dev/posts/more-resilient-refreshes-for-expiring-offline-access-tokens-sxnqsmpn3) · Shopify Developer changelog · 0 upvotes · 0 comments
- [Offline access tokens now support expiry and refresh](https://daily.dev/posts/offline-access-tokens-now-support-expiry-and-refresh-x4a6bm6ix) · Shopify Developer changelog · 0 upvotes · 0 comments
- [A Refreshing Change](https://daily.dev/posts/a-refreshing-change-atvokjdi3) · The Daily WTF · 2 upvotes · 0 comments
- [Enforce Access Token Expiry Policies in Pulumi Cloud](https://daily.dev/posts/enforce-access-token-expiry-policies-in-pulumi-cloud-mij0qyjhx) · Pulumi · 0 upvotes · 0 comments

---

Tags: [#oauth](https://daily.dev/tags/oauth), [#shopify](https://daily.dev/tags/shopify)

[View this post on daily.dev](https://daily.dev/posts/more-resilient-token-exchanges-when-migrating-tokens-without-a-user-session-j1htwj77f)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"More resilient token exchanges when migrating tokens without a user session","url":"https://daily.dev/posts/more-resilient-token-exchanges-when-migrating-tokens-without-a-user-session-j1htwj77f","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/more-resilient-token-exchanges-when-migrating-tokens-without-a-user-session-j1htwj77f"},"datePublished":"2026-09-29T16:03:57.031Z","dateModified":"2026-09-29T19:20:39.777Z","description":"Shopify apps migrating existing non-expiring offline tokens to expiring offline access tokens without a user session can now retry a lost migration exchange...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/a5b9f0de82c011d79696b4f6b99b7364?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/a5b9f0de82c011d79696b4f6b99b7364?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Shopify Developer changelog","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Shopify Developer changelog","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/aefcb5d2c1ca4b45b5d2256b9e2a9cc3","url":"https://daily.dev/sources/shopifychangelog"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/more-resilient-token-exchanges-when-migrating-tokens-without-a-user-session-j1htwj77f","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"oauth,shopify","timeRequired":"PT2M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Shopify Developer changelog","item":"https://daily.dev/sources/shopifychangelog"},{"@type":"ListItem","position":3,"name":"More resilient token exchanges when migrating tokens without a user session"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/more-resilient-token-exchanges-when-migrating-tokens-without-a-user-session-j1htwj77f#faq","mainEntity":[{"@type":"Question","name":"What happens if I retry a Shopify token migration request without a user session after losing the response?","acceptedAnswer":{"@type":"Answer","text":"An eligible retry using the same original non-expiring token and client credentials returns the same access-token and refresh-token pair as the initial exchange. Shopify extends the access token's expiry when needed but does not extend the refresh token's expiry. This recovery window lasts up to seven days after the initial exchange, ending earlier if the app successfully refreshes the pair or acquires a new token. Track authentication changes like Shopify's token migration retries as you plan app upgrades on daily.dev."}},{"@type":"Question","name":"How long do I have to retry a Shopify offline token migration exchange without a user session?","acceptedAnswer":{"@type":"Answer","text":"You have up to seven days from the initial exchange to retry the migration request with the original non-expiring token and valid client credentials. Recovery also ends earlier if the refresh succeeds or if a later token acquisition, such as a new authorization code or ID-token exchange, replaces the issued pair for that store. Developers migrating Shopify app tokens use daily.dev to keep up with authentication timing rules."}},{"@type":"Question","name":"What should I do if a Shopify token migration retry fails after the recovery window closes?","acceptedAnswer":{"@type":"Answer","text":"Acquire a new token for that store through ID-token exchange or the authorization code grant, then update stored credentials accordingly. The original non-expiring token remains invalid for requests after migration, so apps should discard it once a new access and refresh token pair is persisted. Keep migration fallback steps like this handy by following Shopify API changes on daily.dev."}}]}
```

