{"record":{"id":"f49c04b09dc78dbd","repo":"languagetool-org/languagetool","slug":"you-specified-autodetect-but-automatic-language","errorCode":null,"errorMessage":"You specified 'autodetect' but automatic language detection is now activated with 'language=auto' in v2 of the API","messagePattern":"You specified 'autodetect' but automatic language detection is now activated with 'language=auto' in v2 of the API","errorType":"validation","errorClass":"BadRequestException","httpStatus":400,"severity":"error","filePath":"languagetool-server/src/main/java/org/languagetool/server/V2TextChecker.java","lineNumber":110,"sourceCode":"  }\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,\n                                         List<String> noopLangs, List<String> preferredLangs, boolean testMode) {\n    String langParam = parameters.get(\"language\");\n    boolean forcePreferredLanguages = \"true\".equals(parameters.get(\"forcePreferredLanguages\"));\n    DetectedLanguage detectedLang = detectLanguageOfString(text, null, preferredVariants, noopLangs, preferredLangs, forcePreferredLanguages);\n    Language givenLang;\n    if (getLanguageAutoDetect(parameters)) {\n      givenLang = detectedLang.getDetectedLanguage();\n    } else {\n      givenLang = parseLanguage(langParam);\n    }\n    return new DetectedLanguage(givenLang, detectedLang.getDetectedLanguage(), detectedLang.getDetectionConfidence(),\n      detectedLang.getDetectionSource());","sourceCodeStart":92,"sourceCodeEnd":128,"githubUrl":"https://github.com/languagetool-org/languagetool/blob/2e990059ce67d5e2a0f7f7ca5d31160c6709df4b/languagetool-server/src/main/java/org/languagetool/server/V2TextChecker.java#L92-L128","documentation":"In v2, automatic language detection is activated with language=auto; the v1 boolean 'autodetect' parameter was removed. V2TextChecker.checkParams() rejects 'autodetect' to force migration to the new mechanism.","triggerScenarios":"Calling /v2/check with autodetect=true (or any value) — HTTP 400 immediately, regardless of other parameters.","commonSituations":"v1-to-v2 migration; request builders shared between API versions; old client libraries predating v2.","solutions":["Remove autodetect and set language=auto instead","If a concrete language is known, set language to its code and drop autodetection","Update wrapper libraries/SDKs to v2 parameter names","Combine language=auto with preferredVariants to bias detection if needed"],"exampleFix":"// before\nparams.put(\"autodetect\", \"true\");\n// after\nparams.put(\"language\", \"auto\");","handlingStrategy":"validation","validationCode":"if ('autodetect' in params) { delete params.autodetect; params.language = 'auto'; }","typeGuard":null,"tryCatchPattern":"try { await check(params); } catch (e) { if (/language=auto/.test(e.message)) { /* replace autodetect with language=auto */ } throw e; }","preventionTips":["Use language=auto for detection in v2","Remove v1 boolean flags during migration","Update SDK/wrapper code before pointing at a v2 server"],"tags":["http","api","deprecation","languagetool"],"backgroundTag":"deprecated-api-usage","analyzedSha":"2e990059ce67d5e2a0f7f7ca5d31160c6709df4b","analyzedAt":"2026-09-06T09:20:17.015Z","contentChangedAt":"2026-09-06T09:20:17.015Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}