{"record":{"id":"8bcba828b48c54de","repo":"languagetool-org/languagetool","slug":"missing-language-parameter-e-g-language-en-us","errorCode":null,"errorMessage":"Missing 'language' parameter, e.g. 'language=en-US' for American English or 'language=fr' for French","messagePattern":"Missing 'language' parameter, e\\.g\\. 'language=en-US' for American English or 'language=fr' for French","errorType":"validation","errorClass":"BadRequestException","httpStatus":400,"severity":"error","filePath":"languagetool-server/src/main/java/org/languagetool/server/V2TextChecker.java","lineNumber":98,"sourceCode":"    return enabledRules;\n  }\n\n  @NotNull\n  @Override\n  protected List<String> getDisabledRuleIds(Map<String, String> parameters) {\n    return getCommaSeparatedStrings(\"disabledRules\", parameters);\n  }\n\n  @Override\n  protected boolean getLanguageAutoDetect(Map<String, String> parameters) {\n    return \"auto\".equals(parameters.get(\"language\"));\n  }\n\n  @Override\n  protected void checkParams(Map<String, String> parameters) {\n    super.checkParams(parameters);\n    if (StringTools.isEmpty(parameters.get(\"language\"))) {\n      throw new BadRequestException(\"Missing 'language' parameter, e.g. 'language=en-US' for American English or 'language=fr' for French\");\n    }\n    if (parameters.get(\"enabled\") != null) {\n      throw new BadRequestException(\"You specified 'enabled' but the parameter is now called 'enabledRules' in v2 of the API\");\n    }\n    if (parameters.get(\"disabled\") != null) {\n      throw new BadRequestException(\"You specified 'disabled' but the parameter is now called 'disabledRules' in v2 of the API\");\n    }\n    if (parameters.get(\"preferredvariants\") != null) {\n      throw new BadRequestException(\"You specified 'preferredvariants' but the parameter is now called 'preferredVariants' (uppercase 'V') in v2 of the API\");\n    }\n    if (parameters.get(\"autodetect\") != null) {\n      throw new BadRequestException(\"You specified 'autodetect' but automatic language detection is now activated with 'language=auto' in v2 of the API\");\n    }\n  }\n  \n  @Override\n  @NotNull\n  protected DetectedLanguage getLanguage(String text, Map<String, String> parameters, List<String> preferredVariants,","sourceCodeStart":80,"sourceCodeEnd":116,"githubUrl":"https://github.com/languagetool-org/languagetool/blob/2e990059ce67d5e2a0f7f7ca5d31160c6709df4b/languagetool-server/src/main/java/org/languagetool/server/V2TextChecker.java#L80-L116","documentation":"V2 of the LanguageTool HTTP API requires the 'language' parameter; it is missing or empty. The message also shows example values ('en-US', 'fr'). V2TextChecker.checkParams() calls super and then validates language first, before any other parameter checks.","triggerScenarios":"POST/GET to /v2/check without a language parameter, or with language= (empty); SDK calls that omit language when not using auto-detection explicitly.","commonSituations":"Migrating clients from v1 where language was optional with autodetect; copied example code that dropped the parameter; form handlers dropping empty fields from the request body.","solutions":["Add language=en-US (or the desired code) to the request","Use language=auto for automatic language detection","Fetch valid codes from /v2/languages","Ensure empty-string values are not stripped or replaced by your HTTP client"],"exampleFix":"// before\nparams.put(\"text\", text);\n// after\nparams.put(\"text\", text);\nparams.put(\"language\", \"en-US\");","handlingStrategy":"validation","validationCode":"if (!params.language) throw new Error(\"'language' is required for /v2/check, e.g. language=en-US\");","typeGuard":"const hasLanguage = (p) => typeof p.language === 'string' && p.language.length > 0;","tryCatchPattern":"try { await check(params); } catch (e) { if (/Missing 'language' parameter/.test(e.message)) { params.language = 'auto'; return check(params); } throw e; }","preventionTips":["Always set language (or language=auto)","Don't strip empty-looking but meaningful defaults from request maps","Add a request-builder that enforces required v2 fields"],"tags":["http","api","missing-parameter","languagetool"],"backgroundTag":"missing-required-argument","analyzedSha":"2e990059ce67d5e2a0f7f7ca5d31160c6709df4b","analyzedAt":"2026-09-06T09:20:17.015Z","contentChangedAt":"2026-09-06T09:20:17.015Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}