{"record":{"id":"561728c09f76c89b","repo":"alibaba/nacos","slug":"20002-561728","errorCode":"20002","errorMessage":"Required parameter 'pipelineId' is missing","messagePattern":"Required parameter 'pipelineId' is missing","errorType":"validation","errorClass":"NacosApiException","httpStatus":400,"severity":"error","filePath":"ai/src/main/java/com/alibaba/nacos/ai/form/pipeline/PipelineDetailForm.java","lineNumber":41,"sourceCode":"\nimport java.io.Serial;\n\n/**\n * Pipeline execution detail query form for {@code GET .../detail}.\n *\n * @author nacos\n */\npublic class PipelineDetailForm implements NacosForm {\n    \n    @Serial\n    private static final long serialVersionUID = 1L;\n    \n    private String pipelineId;\n    \n    @Override\n    public void validate() throws NacosApiException {\n        if (StringUtils.isBlank(pipelineId)) {\n            throw new NacosApiException(NacosApiException.INVALID_PARAM,\n                ErrorCode.PARAMETER_VALIDATE_ERROR,\n                \"Required parameter 'pipelineId' is missing\");\n        }\n    }\n    \n    public String getPipelineId() {\n        return pipelineId;\n    }\n    \n    public void setPipelineId(String pipelineId) {\n        this.pipelineId = pipelineId;\n    }\n}\n","sourceCodeStart":23,"sourceCodeEnd":55,"githubUrl":"https://github.com/alibaba/nacos/blob/9b989acdf181d00898f2e8839257bb2b2a3cefe3/ai/src/main/java/com/alibaba/nacos/ai/form/pipeline/PipelineDetailForm.java#L23-L55","documentation":"Thrown by PipelineDetailForm.validate() when pipelineId is blank. This guards the pipeline execution detail query. Uses error code 20002 (PARAMETER_VALIDATE_ERROR) rather than the 10000 (PARAMETER_MISSING) used by most missing-field guards in this module — a minor inconsistency worth noting. HTTP 400.","triggerScenarios":"Calling GET /v3/admin/ai/pipelines/detail without the pipelineId query parameter.","commonSituations":"Client navigates to a detail page before a pipeline row is selected; a deep-link missing the id; id passed as a path segment instead of the query param.","solutions":["Add the pipelineId query parameter to the GET request.","If you only have resourceType/resourceName, use GET /v3/admin/ai/pipelines/list instead to find the id.","Ensure the id is the execution pipelineId, not the resource name."],"exampleFix":"// before\ncurl 'http://host/v3/admin/ai/pipelines/detail'\n// after\ncurl 'http://host/v3/admin/ai/pipelines/detail?pipelineId=pipe-123'","handlingStrategy":"validation","validationCode":"if (pipelineId == null || pipelineId.trim().isEmpty()) {\n    throw new IllegalArgumentException(\"pipelineId required\");\n}","typeGuard":"static boolean hasPipelineId(String id) {\n    return id != null && !id.trim().isEmpty();\n}","tryCatchPattern":"catch (NacosApiException e) {\n    if (e.getErrCode() == 20002 && e.getMessage().contains(\"pipelineId\")) { /* supply id */ }\n}","preventionTips":["Fetch the pipelineId from the list endpoint first.","Distinguish pipelineId (execution id) from resourceName."],"tags":["validation","ai","pipeline","parameter","http","api"],"backgroundTag":null,"analyzedSha":"9b989acdf181d00898f2e8839257bb2b2a3cefe3","analyzedAt":"2026-08-14T07:17:31.569Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}