BerriAI/litellm · error · HTTPException

Push notification URL must be a string

Error message

Push notification URL must be a string

What it means

Raised in the A2A tasks/pushNotificationConfig/set handler after pushNotificationConfig was confirmed to be a dict, when its 'url' member exists but is not a string (the HTTPS-scheme check happens separately). The URL must be a string to be stored and later called as a webhook, so a non-string value is rejected with HTTP 400 before forwarding to the agent.

Source

Thrown at litellm/proxy/agent_endpoints/a2a_endpoints.py:891

            if isinstance(params, dict):
                params = normalize_request_params(params, served_version, method=method)
            if method == "tasks/pushNotificationConfig/set":
                if not isinstance(params, dict):
                    raise HTTPException(
                        status_code=400,
                        detail="params must be an object",
                    )
                push_config: Final = params.get("pushNotificationConfig", {})
                if "pushNotificationConfig" in params and not isinstance(push_config, dict):
                    raise HTTPException(
                        status_code=400,
                        detail="pushNotificationConfig must be an object",
                    )
                for callback_url in (params.get("url"), push_config.get("url")):
                    if not callback_url:
                        continue
                    if not isinstance(callback_url, str):
                        raise HTTPException(
                            status_code=400,
                            detail="Push notification URL must be a string",
                        )
                    _validate_push_notification_url(callback_url)
            forward_body: dict[str, object] = {
                "jsonrpc": "2.0",
                "id": request_id,
                "method": method,
                "params": params,
            }
            caller_headers: Final = _forwarding_headers(
                user_api_key_dict=user_api_key_dict,
                request_data=data,
                agent_extra_headers=agent_extra_headers,
            )
            result = await _forward_jsonrpc(agent_url, forward_body, extra_headers=caller_headers)
            if method == "agent/getAuthenticatedExtendedCard":
                if isinstance(result.get("result"), dict):

View on GitHub (pinned to 77b7c6c40c)

Solutions

  1. Send the push notification URL as a string.

Example fix

url='https://hooks.example.com/x'
Defensive patterns

Strategy: type-guard

When it happens

Trigger: Thrown at litellm/proxy/agent_endpoints/a2a_endpoints.py:891 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of BerriAI/litellm@77b7c6c40c (2026-08-18). Data as JSON: /api/errors/7d8af086dc07ae85. Report an issue: GitHub.