{"record":{"id":"37495896070a33c1","repo":"BerriAI/litellm","slug":"params-must-be-an-object","errorCode":null,"errorMessage":"params must be an object","messagePattern":"params must be an object","errorType":"http","errorClass":"HTTPException","httpStatus":400,"severity":"error","filePath":"litellm/proxy/agent_endpoints/a2a_endpoints.py","lineNumber":877,"sourceCode":"                served_version=served_version,\n            )\n        elif method in {\n            \"tasks/get\",\n            \"tasks/list\",\n            \"tasks/cancel\",\n            \"tasks/pushNotificationConfig/set\",\n            \"tasks/pushNotificationConfig/get\",\n            \"tasks/pushNotificationConfig/list\",\n            \"tasks/pushNotificationConfig/delete\",\n            \"agent/getAuthenticatedExtendedCard\",\n        }:\n            if not agent_url:\n                return _jsonrpc_error(request_id, -32000, f\"Agent '{agent_id}' has no URL configured\", 500)\n            if isinstance(params, dict):\n                params = normalize_request_params(params, served_version, method=method)\n            if method == \"tasks/pushNotificationConfig/set\":\n                if not isinstance(params, dict):\n                    raise HTTPException(\n                        status_code=400,\n                        detail=\"params must be an object\",\n                    )\n                push_config: Final = params.get(\"pushNotificationConfig\", {})\n                if \"pushNotificationConfig\" in params and not isinstance(push_config, dict):\n                    raise HTTPException(\n                        status_code=400,\n                        detail=\"pushNotificationConfig must be an object\",\n                    )\n                for callback_url in (params.get(\"url\"), push_config.get(\"url\")):\n                    if not callback_url:\n                        continue\n                    if not isinstance(callback_url, str):\n                        raise HTTPException(\n                            status_code=400,\n                            detail=\"Push notification URL must be a string\",\n                        )\n                    _validate_push_notification_url(callback_url)","sourceCodeStart":859,"sourceCodeEnd":895,"githubUrl":"https://github.com/BerriAI/litellm/blob/77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8/litellm/proxy/agent_endpoints/a2a_endpoints.py#L859-L895","documentation":"JSON-RPC tasks/* dispatch type check: the params member of the request is not an object, so it cannot be normalized into task operation parameters. Returned as a JSON-RPC-level 400 before the agent is called.","triggerScenarios":"Thrown at litellm/proxy/agent_endpoints/a2a_endpoints.py:877 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Send params as a JSON object."],"exampleFix":"params={...}","handlingStrategy":"type-guard","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-14T00:17:10.932Z"}