{"record":{"id":"62be0f755c5c482f","repo":"atuinsh/atuin","slug":"service-unavailable-check-https-status-atuin-sh","errorCode":null,"errorMessage":"Service unavailable: check https://status.atuin.sh (or get in touch with your host)","messagePattern":"Service unavailable: check https://status\\.atuin\\.sh \\(or get in touch with your host\\)","errorType":"http","errorClass":null,"httpStatus":503,"severity":"error","filePath":"crates/atuin-client/src/api_client.rs","lineNumber":236,"sourceCode":"            \"Atuin version mismatch! In order to successfully sync, the server needs to run a \\\n             newer version of Atuin\"\n        );\n        println!(\"Client: {ATUIN_CARGO_VERSION}\");\n        println!(\"Server: {version}\");\n\n        return Ok(false);\n    }\n\n    Ok(true)\n}\n\n#[instrument(level = \"trace\", skip_all, err)]\nasync fn handle_resp_error(resp: Response) -> Result<Response> {\n    let status = resp.status();\n    let url = resp.url().to_string();\n\n    if status == StatusCode::SERVICE_UNAVAILABLE {\n        bail!(\n            \"Service unavailable: check https://status.atuin.sh (or get in touch with your host)\"\n        );\n    }\n\n    if status == StatusCode::TOO_MANY_REQUESTS {\n        bail!(\"Rate limited; please wait before doing that again\");\n    }\n\n    if !status.is_success() {\n        let body = resp.text().await.unwrap_or_default();\n\n        if let Ok(error) = serde_json::from_str::<ErrorResponse>(&body) {\n            let reason = error.reason;\n\n            if status.is_client_error() {\n                bail!(\"Invalid request to the service at {url}, {status} - {reason}.\");\n            }\n","sourceCodeStart":218,"sourceCodeEnd":254,"githubUrl":"https://github.com/atuinsh/atuin/blob/c0c717ab04c881764bcad4b3d169a507e2432643/crates/atuin-client/src/api_client.rs#L218-L254","documentation":"Sentinel guard inside handle_resp_error: fires when any sync API response (from register, login, latest_version, page, me, delete_store) returns HTTP 503 SERVICE_UNAVAILABLE. It converts the bare status code into a user-facing pointer to the service status page; the sync server is reachable but reporting it cannot serve requests.","triggerScenarios":"Thrown at crates/atuin-client/src/api_client.rs:236 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Check https://status.atuin.sh for an outage and wait until the service recovers","Retry the sync operation after a delay; 503 is typically transient","If self-hosting, inspect the server's logs and process health — the host is responsible for the unavailable backend","If the problem persists, contact the host or Atuin support"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"c0c717ab04c881764bcad4b3d169a507e2432643","analyzedAt":"2026-09-12T07:40:01.341Z","contentChangedAt":"2026-09-12T07:40:01.341Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}