{"record":{"id":"9aeb74899341160c","repo":"BerriAI/litellm","slug":"urn-litellm-error-duplicate-query-parameter","errorCode":"urn:litellm:error:duplicate-query-parameter","errorMessage":"Repeated query parameter(s): {', '.join(duplicates)}. Each may appear once; use a comma-separated list for multiple sort keys or filter values.","messagePattern":"Repeated query parameter\\(s\\): (.+?)\\. Each may appear once; use a comma-separated list for multiple sort keys or filter values\\.","errorType":"http","errorClass":"ManagementProblem","httpStatus":400,"severity":"error","filePath":"litellm/proxy/management_endpoints/management_v1/list_framework.py","lineNumber":522,"sourceCode":"\n\nasync def handle_list(\n    spec: ListSpec[TRow, TOut],\n    executor: ListExecutor[TRow],\n    request: Request,\n    caller: UserAPIKeyAuth,\n) -> ListResponse[TOut]:\n    \"\"\"Plan, execute, count, serialize, envelope. Failures reach the client as RFC 9457 problems.\"\"\"\n    plan: Final = build_query_plan(spec=spec, params=request.query_params, caller=caller)\n    if isinstance(plan, ProblemDetail):\n        raise ManagementProblem(plan)\n\n    # Checked here rather than in build_query_plan because a Mapping[str, str] cannot\n    # represent a repeat: query_params.get() silently keeps the last one, so ?page=1&page=999\n    # would page from 999 without the caller ever being told which value won.\n    duplicates: Final = _duplicate_params(request)\n    if duplicates:\n        raise ManagementProblem(\n            _problem(\n                \"duplicate-query-parameter\",\n                \"Duplicate query parameter\",\n                400,\n                f\"Repeated query parameter(s): {', '.join(duplicates)}. Each may appear once; \"\n                f\"use a comma-separated list for multiple sort keys or filter values.\",\n            )\n        )\n\n    total_count: Final = await executor.count(plan.where)\n    rows: Final = await executor.find_many(plan)\n    total_pages: Final = ceil(total_count / plan.take)\n    page: Final = plan.skip // plan.take + 1\n    return ListResponse[TOut](\n        data=tuple(spec.serialize(row) for row in rows),\n        meta=ListMeta(\n            total_count=total_count,\n            page=page,","sourceCodeStart":504,"sourceCodeEnd":540,"githubUrl":"https://github.com/BerriAI/litellm/blob/77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8/litellm/proxy/management_endpoints/management_v1/list_framework.py#L504-L540","documentation":"Error \"Repeated query parameter(s): {', '.join(duplicates)}. Each may appear once; use a comma-separated list for multiple sort keys or filter values.\" thrown in BerriAI/litellm.","triggerScenarios":"Thrown at litellm/proxy/management_endpoints/management_v1/list_framework.py:522 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Pass each query parameter only once; combine multiple values as a comma-separated list.","Remove the duplicate parameter occurrences from the request URL."],"exampleFix":null,"handlingStrategy":null,"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"}