{"record":{"id":"b659ca8005cac5d2","repo":"crewAIInc/crewAI","slug":"unsupported-data-format-data-format-must-be-on","errorCode":null,"errorMessage":"Unsupported data format: {data_format}. Must be one of {', '.join(valid_data_formats)}.","messagePattern":"Unsupported data format: (.+?)\\. Must be one of (.+?)\\.","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"lib/crewai-tools/src/crewai_tools/tools/brightdata_tool/brightdata_unlocker.py","lineNumber":127,"sourceCode":"        format: str | None = None,\n        data_format: str | None = None,\n        **kwargs: Any,\n    ) -> Any:\n        url = url or self.url\n        format = format or self.format\n        data_format = data_format or self.data_format\n\n        if not url:\n            raise ValueError(\"url is required either in constructor or method call\")\n\n        payload = {\n            \"url\": url,\n            \"zone\": self.zone,\n            \"format\": format,\n        }\n        valid_data_formats = {\"html\", \"markdown\"}\n        if data_format not in valid_data_formats:\n            raise ValueError(\n                f\"Unsupported data format: {data_format}. Must be one of {', '.join(valid_data_formats)}.\"\n            )\n\n        if data_format == \"markdown\":\n            payload[\"data_format\"] = \"markdown\"\n\n        headers = {\n            \"Authorization\": f\"Bearer {self.api_key}\",\n            \"Content-Type\": \"application/json\",\n        }\n\n        validate_url(url)\n        try:\n            response = requests.post(\n                self.base_url, json=payload, headers=headers, timeout=30\n            )\n            response.raise_for_status()\n","sourceCodeStart":109,"sourceCodeEnd":145,"githubUrl":"https://github.com/crewAIInc/crewAI/blob/754d7323beb2fd042e33444a115ea2d5a47193f0/lib/crewai-tools/src/crewai_tools/tools/brightdata_tool/brightdata_unlocker.py#L109-L145","documentation":"Raised by BrightDataUnlockerTool._run when data_format (falling back to self.data_format) is not 'html' or 'markdown'. The value controls whether the payload requests raw HTML or a markdown rendering of the unlocked page; anything else — including None when no default was set at construction — is rejected before the request.","triggerScenarios":"Calling tool.run(url=..., data_format='json'); passing data_format=None when the tool was constructed without a data_format argument; uppercase 'Markdown'.","commonSituations":"Confusing data_format with the dataset tool's format ('csv'/'json'), relying on a constructor default that isn't always present, case-sensitive inputs from LLM agents.","solutions":["Use exactly 'html' or 'markdown' (lowercase).","Set the default in the constructor: BrightDataUnlockerTool(url=..., data_format='markdown').","Normalize agent-generated values to lowercase and whitelist before invoking."],"exampleFix":"# before\ntool.run(url='https://example.com', data_format='txt')  # ValueError\n\n# after\ntool.run(url='https://example.com', data_format='markdown')","handlingStrategy":"validation","validationCode":"VALID_DATA_FORMATS = {\"html\", \"markdown\"}\n\ndata_format = (data_format or 'markdown').lower()\nif data_format not in VALID_DATA_FORMATS:\n    raise ValueError(f\"data_format must be one of {sorted(VALID_DATA_FORMATS)}\")\nresult = tool.run(url=url, data_format=data_format)","typeGuard":"def is_valid_data_format(v: object) -> bool:\n    return isinstance(v, str) and v in {\"html\", \"markdown\"}","tryCatchPattern":"try:\n    result = tool.run(url=url, data_format=data_format)\nexcept ValueError as e:\n    if \"Unsupported data format\" in str(e):\n        result = tool.run(url=url, data_format='markdown')\n    else:\n        raise","preventionTips":["Normalize data_format to lowercase and whitelist to html/markdown before the call.","Set data_format='markdown' in the constructor as a safe default.","Do not confuse the unlocker's data_format with the dataset tool's format set (json/csv/...)."],"tags":["bright-data","validation","format","web-unlocker"],"backgroundTag":null,"analyzedSha":"754d7323beb2fd042e33444a115ea2d5a47193f0","analyzedAt":"2026-08-15T04:06:56.746Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}