 <p>If I may expand on <a href="http://stackoverflow.com/users/987361/user987361">user987361</a>'s answer:</p> <p>From the <a href="https://developers.google.com/accounts/docs/OAuth2WebServer#offline">offline access</a> portion of the OAuth2.0 docs:</p> <blockquote> <p>When your application receives a refresh token, it is important to store that refresh token for future use. If your application loses the refresh token, it will have to re-prompt the user for consent before obtaining another refresh token. If you need to re-prompt the user for consent, include the <code>approval_prompt</code> parameter in the authorization code request, and set the value to <code>force</code>.</p> </blockquote> <p>So, when you have already granted access, subsequent requests for a <code>grant_type</code> of <code>authorization_code</code> will not return the <code>refresh_token</code>, even if <code>access_type</code> was set to <code>offline</code> in the query string of the consent page.</p> <p>As stated in the quote above, in order to obtain a <strong>new</strong> <code>refresh_token</code> after already receiving one, you will need to send your user back through the prompt, which you can do by setting <code>approval_prompt</code> to <code>force</code>.</p> <p>Cheers,</p> <p>PS This change was announced in a <a href="http://googlecode.blogspot.com/2011/10/upcoming-changes-to-oauth-20-endpoint.html">blog post</a> as well.</p>