{"record":{"id":"07dfb4a6e30924ff","repo":"SigNoz/signoz","slug":"eventname-param-missing-in-query","errorCode":null,"errorMessage":"eventName param missing in query","messagePattern":"eventName param missing in query","errorType":"validation","errorClass":null,"httpStatus":400,"severity":"error","filePath":"pkg/query-service/app/parser.go","lineNumber":85,"sourceCode":"\t\treturn nil, errors.New(\"serviceName param missing in query\")\n\t}\n\n\treturn postData, nil\n}\n\nfunc parseRegisterEventRequest(r *http.Request) (*model.RegisterEventParams, error) {\n\tvar postData *model.RegisterEventParams\n\terr := json.NewDecoder(r.Body).Decode(&postData)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\t// Validate the event type\n\tif !postData.EventType.IsValid() {\n\t\treturn nil, errors.New(\"eventType param missing/incorrect in query\")\n\t}\n\n\tif postData.EventType == model.TrackEvent && postData.EventName == \"\" {\n\t\treturn nil, errors.New(\"eventName param missing in query\")\n\t}\n\n\treturn postData, nil\n}\n\nfunc parseMetricsTime(s string) (time.Time, error) {\n\tif t, err := strconv.ParseFloat(s, 64); err == nil {\n\t\ts, ns := math.Modf(t)\n\t\treturn time.Unix(int64(s), int64(ns*float64(time.Second))), nil\n\t\t// return time.Unix(0, t), nil\n\t}\n\tif t, err := time.Parse(time.RFC3339Nano, s); err == nil {\n\t\treturn t, nil\n\t}\n\treturn time.Time{}, fmt.Errorf(\"cannot parse %q to a valid timestamp\", s)\n}\n\nfunc parseMetricsDuration(s string) (time.Duration, error) {","sourceCodeStart":67,"sourceCodeEnd":103,"githubUrl":"https://github.com/SigNoz/signoz/blob/5069bf80b08f1f00d7e014eccc09902f9871004f/pkg/query-service/app/parser.go#L67-L103","documentation":"Returned by the query-service event registration parser when the request has eventType=track_event but no eventName. SigNoz treats named track events as requiring a non-empty eventName, so the request is rejected before it reaches storage.","triggerScenarios":"POST to the event registration endpoint with a JSON body (or query params) where eventType equals the TrackEvent value but the eventName field is empty, omitted, or whitespace.","commonSituations":"Client SDK sends only eventType for track calls; typo'd field name (event_name vs eventName) causing silent deserialization to empty string; migrating from tools like Mixpanel where name was optional.","solutions":["Add a non-empty eventName to the request body, e.g. {\"eventType\":\"track_event\",\"eventName\":\"user_signup\"}","Verify the exact JSON field casing expected by parseRegisterEventRequest (eventName, not event_name)","If the event genuinely has no name, use a valid non-track eventType instead"],"exampleFix":"// before\n{\n  \"eventType\": \"track_event\"\n}\n// after\n{\n  \"eventType\": \"track_event\",\n  \"eventName\": \"user_signup\"\n}","handlingStrategy":"validation","validationCode":"eventType := body.EventType\nif eventType == model.TrackEvent && strings.TrimSpace(body.EventName) == \"\" {\n    return errors.New(\"eventName required for track_event\")\n}\nresp, err := client.RegisterEvent(ctx, body)","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Validate required fields per eventType on the client before calling the API","Use shared request structs/DTOs so field names cannot drift","Add contract tests covering the track-event-without-name case"],"tags":["validation","events","api-request","sigpoz"],"backgroundTag":"missing-required-request-parameter","analyzedSha":"5069bf80b08f1f00d7e014eccc09902f9871004f","analyzedAt":"2026-08-28T06:22:12.824Z","schemaVersion":2},"datasetVersion":"2026-08-28T11:17:15.048Z"}