immich-app/immich · warning
Version check request failed with status
Error message
Version check request failed with status ${response.status}: ${await response.text()} What it means
getLatestRelease fetches the GitHub release feed to check for a new version. When the HTTP response is not ok (non-2xx), it throws an error embedding the status code and response body, which is then wrapped in 'Failed to fetch latest release' by the outer catch.
Solutions
- Check the response status/body in the message — 403 usually means GitHub API rate limiting; wait or use an authenticated token
- Verify the release-check URL is correct for this build/version
- Retry the version check later; this is transient and does not affect core functionality
- Disable/skip version checking if the server has no outbound internet access
Defensive patterns
Strategy: retry
Validate before calling
const url = buildReleaseUrl(serverVersion);
if (!URL.canParse(url)) throw new Error(`Invalid release-check URL: ${url}`); Try / catch
try {
return await getLatestRelease();
} catch (e) {
// non-fatal: log and continue without version check
logger.warn(`Version check skipped: ${(e as Error).message}`);
return null;
} Prevention
- Treat version checks as best-effort, never blocking startup
- Handle GitHub 403 rate limits by backing off or caching results
- Verify outbound network/proxy access in containerized deployments
- Cache the last successful release check to reduce API calls
When it happens
Trigger: GitHub API returning 403 (rate limited), 404 (bad buildMetadataUrl), 5xx outages, or network-level failures during the version check.
Common situations: Unauthenticated GitHub API rate-limiting a busy server (X-RateLimit exhausted), a configured/derived release URL that no longer exists, or transient GitHub outages.
Understand the failure class
Background: "API error: {status}" and "HTTP 401/403/404/429/5xx" errors: non-2xx HTTP responses explained — this error's family across 27 libraries.
Related errors
- await response.text()
- EOFException
- errors.unable_to_upload_file
- Failed to fetch activation key
- Machine learning request to
AI-assisted analysis of immich-app/immich@e55ac299a4 (2026-09-15).
Data as JSON: /api/errors/e2a60b0e8a0f9fbb.
Report an issue: GitHub.
Appendix: source
Thrown at server/src/repositories/server-info.repository.ts:75
async getLatestRelease(channel: ReleaseChannel): Promise<VersionResponse> {
try {
const { versionCheck } = this.configRepository.getEnv();
const url = new URL(versionCheck.url);
switch (channel) {
case ReleaseChannel.Stable: {
url.searchParams.append('channel', 'stable');
break;
}
case ReleaseChannel.ReleaseCandidate: {
url.searchParams.append('channel', 'rc');
break;
}
}
const response = await fetch(url);
if (!response.ok) {
throw new Error(`Version check request failed with status ${response.status}: ${await response.text()}`);
}
return response.json();
} catch (error) {
throw new Error('Failed to fetch latest release', { cause: error });
}
}
buildVersions?: ServerBuildVersions;
private async retrieveVersionFallback(
command: string,
commandTransform?: (output: string) => string,
version?: string,
): Promise<string> {
if (!version) {
const output = await maybeFirstLine(command);
version = commandTransform ? commandTransform(output) : output;View on GitHub (pinned to e55ac299a4)