{"record":{"id":"bf1cbac2dbdd34ab","repo":"ComposioHQ/composio","slug":"proxy-execute-parameters-i-type-must-be-heade","errorCode":null,"errorMessage":"proxy_execute: parameters[{i}].type must be 'header' or 'query', got {param_type!r}","messagePattern":"proxy_execute: parameters\\[(.+?)\\]\\.type must be 'header' or 'query', got (.+?)","errorType":"validation","errorClass":"ValidationError","httpStatus":null,"severity":"error","filePath":"python/composio/core/models/session_context.py","lineNumber":72,"sourceCode":"        raise ValidationError(\"proxy_execute: toolkit is required\")\n    if not endpoint:\n        raise ValidationError(\"proxy_execute: endpoint is required\")\n    if method not in _VALID_METHODS:\n        raise ValidationError(\n            f\"proxy_execute: method must be one of {sorted(_VALID_METHODS)}, got {method!r}\"\n        )\n\n    # Transform and validate parameters\n    api_params: t.List[Parameter] = []\n    if parameters:\n        for i, p in enumerate(parameters):\n            if not isinstance(p, dict) or \"name\" not in p or \"value\" not in p:\n                raise ValidationError(\n                    f\"proxy_execute: parameters[{i}] must be a dict with 'name' and 'value' keys\"\n                )\n            param_type = p.get(\"in\", p.get(\"type\", \"header\"))\n            if param_type not in _VALID_PARAM_TYPES:\n                raise ValidationError(\n                    f\"proxy_execute: parameters[{i}].type must be 'header' or 'query', \"\n                    f\"got {param_type!r}\"\n                )\n            api_params.append(\n                Parameter(\n                    name=p[\"name\"],\n                    type=param_type,  # type: ignore[typeddict-item]\n                    value=str(p[\"value\"]),\n                )\n            )\n\n    response = client.tool_router.session.proxy_execute(\n        session_id=session_id,\n        toolkit_slug=toolkit,\n        endpoint=endpoint,\n        method=method,\n        body=body if body is not None else omit,\n        parameters=api_params if api_params else omit,","sourceCodeStart":54,"sourceCodeEnd":90,"githubUrl":"https://github.com/ComposioHQ/composio/blob/64b1b85502b1beeb2379e6c9e8bf1104504fa637/python/composio/core/models/session_context.py#L54-L90","documentation":"Guard ensuring each proxy_execute parameter's location/type is 'header' or 'query'. The type is read from the 'in' key (falling back to 'type', defaulting to 'header'), so explicit wrong values like 'path' or 'body' are rejected with the index and offending value.","triggerScenarios":"Passing a parameter with {'in': 'path'} or {'type': 'body'} — endpoints don't accept path/body params through this proxy parameters mechanism.","commonSituations":"Porting an OpenAPI parameter list verbatim, which includes path parameters that must instead go into the endpoint template.","solutions":["Set 'in' to 'header' or 'query' (or omit it — header is the default)","Put path values directly in the endpoint string, not in parameters"],"exampleFix":"# before\nparameters=[{'name': 'owner', 'value': 'acme', 'in': 'path'}]\n\n# after\nsession.proxy_execute(toolkit='github', endpoint='/repos/acme/cli', parameters=[{'name': 'X-Extra', 'value': '1', 'in': 'header'}])","handlingStrategy":"validation","validationCode":"for p in parameters or []:\n    assert p.get('in', 'header') in ('header','query')","typeGuard":"def valid_param_types(params):\n    return all(p.get('in', p.get('type','header')) in ('header','query') for p in (params or []))","tryCatchPattern":null,"preventionTips":["Put path values in the endpoint template","Strip path/body params from OpenAPI lists"],"tags":["python","session","validation","parameters"],"backgroundTag":"invalid-enum-value","analyzedSha":"64b1b85502b1beeb2379e6c9e8bf1104504fa637","analyzedAt":"2026-08-28T15:39:33.623Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}