transloadit/uppy · error · Error
Failed to get session
Error message
Failed to get session
What it means
Thrown inside pollPickingSession when the periodic GET to photospicker.googleapis.com/v1/sessions/{id} returns non-OK. This poll is what detects when the user finishes picking photos in the Google-side UI; a failure here breaks the polling loop.
Source
Thrown at packages/@uppy/core/src/companion-client/googlePicker.ts:548
setTimeout(() => {
signal.removeEventListener('abort', reject)
resolve()
}, interval * 1000)
signal.addEventListener('abort', reject, { once: true })
})
const accessToken = getAccessToken()
pickingSession = getPickingSession()
if (pickingSession != null && accessToken != null) {
const headers = getAuthHeader(accessToken)
// https://developers.google.com/photos/picker/reference/rest/v1/sessions
const response = await fetch(
`https://photospicker.googleapis.com/v1/sessions/${encodeURIComponent(pickingSession.id)}`,
{ headers, signal },
)
if (!response.ok) throw new Error('Failed to get session')
const json: PickingSession = await response.json()
if (json.mediaItemsSet) {
// console.log('User picked!', json)
const resolvedPhotos = await resolvePickedPhotos({
accessToken,
pickingSession,
signal,
})
onPickingSessionClear()
onFilesPicked(resolvedPhotos, accessToken)
}
if (pickingSession.pollingConfig.timeoutIn === '0s') {
onPickingSessionClear()
}
}
} catch (err) {
if (err instanceof Error && err.name === 'AbortError') {
returnView on GitHub (pinned to 5d4dedd02a)
Solutions
- Restart the picker flow (a fresh session is created) when this error surfaces
- Provide onAccessTokenRequired to keep the token fresh during long picking sessions
- Catch the error around showPicker and show a user-facing 'please try again' message
- Check the network tab for the exact status (404=session expired, 401=token, 429=quota)
Example fix
// before
await picker.showPicker() // session poll 404 after idle -> Failed to get session
// after
try { await picker.showPicker() }
catch (err) {
if (err.message === 'Failed to get session') {
uppy.info('Photo picking timed out. Please try again.', 'error', 5000)
}
} Defensive patterns
Strategy: try-catch
Validate before calling
null
Type guard
function isGetSessionError(e: unknown): boolean {
return e instanceof Error && e.message === 'Failed to get session'
} Try / catch
try { await picker.showPicker() }
catch (err) {
if (isGetSessionError(err)) {
uppy.info('Photo picking timed out. Please try again.', 'error', 5000)
}
} Prevention
- Restart (re-create) the picking session on failure
- Keep tokens fresh with onAccessTokenRequired
- Handle poll failures gracefully — sessions expire if idle
When it happens
Trigger: Starting the photos picker (init -> pollPickingSession) and any subsequent poll of the session endpoint failing — invalid session id (expired/already consumed), token revoked, 429/5xx from Google.
Common situations: User takes too long and the picking session expires server-side; token revoked by the user mid-flow; network interruption during polling; polling rate hitting quota.
Related errors
- Failed to create a session
- Failed to get a media items
- OAuth2 error: ${response.error}
- Failed to list folder contents for '${doc.name}' (${doc.id})
- Invalid request body
AI-assisted analysis of transloadit/uppy@5d4dedd02a (2026-08-28).
Data as JSON: /api/errors/6ac0cf50420a9465.
Report an issue: GitHub.