{"record":{"id":"e23f81318855073f","repo":"BerriAI/litellm","slug":"expires-after-seconds-must-be-a-valid-integer-go","errorCode":null,"errorMessage":"expires_after[seconds] must be a valid integer, got '{expires_after_seconds_str}': {e}","messagePattern":"expires_after\\[seconds\\] must be a valid integer, got '(.+?)': (.+?)","errorType":"http","errorClass":"HTTPException","httpStatus":400,"severity":"error","filePath":"litellm/proxy/openai_files_endpoints/files_endpoints.py","lineNumber":435,"sourceCode":"                    },\n                )\n            # After this check, mypy knows expires_after_seconds_str is str\n            expires_after_seconds_str_validated: Final[str] = expires_after_seconds_str\n\n            # Validate anchor is \"created_at\"\n            if expires_after_anchor != \"created_at\":\n                raise HTTPException(\n                    status_code=400,\n                    detail={\n                        \"error\": f\"expires_after[anchor] must be 'created_at', got '{expires_after_anchor}'\",\n                    },\n                )\n\n            # Convert seconds to int\n            try:\n                expires_after_seconds: Final = int(expires_after_seconds_str_validated)\n            except (ValueError, TypeError) as e:\n                raise HTTPException(\n                    status_code=400,\n                    detail={\n                        \"error\": f\"expires_after[seconds] must be a valid integer, got '{expires_after_seconds_str}': {e}\",\n                    },\n                )\n\n            # Use literal \"created_at\" (not variable) for TypedDict to satisfy Literal type\n            expires_after = FileExpiresAfter(\n                anchor=\"created_at\",  # Literal, not expires_after_anchor variable\n                seconds=expires_after_seconds,\n            )\n\n        # Include original request and headers in the data\n        data = await add_litellm_data_to_request(\n            data=data,\n            request=request,\n            general_settings=general_settings,\n            user_api_key_dict=user_api_key_dict,","sourceCodeStart":417,"sourceCodeEnd":453,"githubUrl":"https://github.com/BerriAI/litellm/blob/77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8/litellm/proxy/openai_files_endpoints/files_endpoints.py#L417-L453","documentation":"HTTPException(400) on file upload: expires_after[seconds] is a string but not a valid integer (int() raised), e.g. 'abc' or '1.5'. The offending value and parse error are embedded; the client must send whole seconds.","triggerScenarios":"Thrown at litellm/proxy/openai_files_endpoints/files_endpoints.py:435 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Set expires_after[seconds] to a valid integer string."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8","analyzedAt":"2026-08-18T11:44:31.656Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}