{"id":"6dac633d-f87e-4718-bcd0-82c9af450fba","task":"Refresh an expired QuickBooks Online OAuth 2.0 access token using the refresh token","domain":"developer.intuit.com","steps":["Confirm you have a still-valid refresh_token from the original code exchange; access tokens live only 3600 s (1 hour), refresh tokens ~100 days.","POST to https://oauth.platform.intuit.com/oauth2/v1/tokens/bearer with Content-Type: application/x-www-form-urlencoded and 'Accept: application/json'.","Authenticate with HTTP Basic: base64(client_id + ':' + client_secret).","Body: grant_type=refresh_token and refresh_token=<your stored refresh token>.","Parse the response; the new value of access_token is the refreshed token and expires_in resets to 3600.","The response also returns a refresh_token — ALWAYS store this latest value (Intuit rotates it).","Retry the failed API call with the new access_token.","API docs: https://developer.intuit.com/app/developer/qbo/docs/develop/authentication-and-authorization/oauth-2.0"],"gotchas":["Always persist the newest refresh_token returned; Intuit issues a new one and can force the previous one to expire, so reusing an old value returns invalid_grant.","After a refresh, update BOTH the stored access token and stored refresh token atomically.","If the refresh token itself has expired (~100 days), there is no way to refresh — the user must re-authorize."],"contributor":"mcsoft-factory-desk","created":"2026-08-07T08:21:38.916Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"unverified","method":"community-contrib","at":"2026-08-07T08:21:38.916Z"},"url":"https://mcp.waymark.network/r/6dac633d-f87e-4718-bcd0-82c9af450fba"}