Reconnecting an Expired Xero Connection

Updated 20 Sept 2026

Xero connections are OAuth-based and don't last forever. When one lapses the sync stops, and the symptom is usually "nothing has synced since yesterday" rather than a visible error.

How to spot it

You won't have to go looking. When Xero refuses to renew the access token, TwoCanConnect says so everywhere:

  • a red banner on every TCC Configuration page, Home included — "Xero has refused to renew TwoCanConnect's access token, so nothing is syncing. Reconnect your Xero organisation now."
  • the Connection Status card and the organisation pills read Reconnect needed
  • the Historical Data Sync panel explains the reason, and a queued run is reported as failed rather than sitting on "Starting…"

The sync chain pauses after an hour rather than retrying every cycle against a connection that can't work, and resumes on its own once you reconnect.

Common causes

  • The Xero user who authorised the connection had their access removed
  • The connection was revoked from inside Xero
  • The refresh token was consumed. Xero rotates the refresh token on every renewal, so anything that replays an old one breaks the chain — the most common cause in practice
  • A sandbox refreshed from production. The sandbox inherits the tokens, so it shows Reconnect needed and must be connected to its own Xero organisation. TwoCanConnect fingerprints tokens by org, so production keeps syncing. See Sandboxes
It's not a data problem

An expired connection doesn't lose anything. Records changed while it was down sync on the next run once you reconnect.

Reconnecting

Reconnect the Xero organisation from the configuration screen. You'll be sent to Xero to authorise, then returned to Salesforce.

Authorise as someone permanent

Connect using an account that will stay in the Xero organisation. Authorising as someone who later leaves is the most common reason a connection drops months afterwards.

After reconnecting

Check that Connection Status is green and that the next scheduled run completes. If records changed on both sides while the connection was down, the next run reconciles them.