{"record":{"id":"2c467c0779cb989e","repo":"langgenius/dify","slug":"dataset-name-duplicate-2c467c","errorCode":"dataset_name_duplicate","errorMessage":"The dataset name already exists. Please modify your dataset name.","messagePattern":"The dataset name already exists\\. Please modify your dataset name\\.","errorType":"error_code","errorClass":"DatasetNameDuplicateError","httpStatus":409,"severity":"error","filePath":"api/controllers/console/datasets/external.py","lineNumber":241,"sourceCode":"        current_tenant_id: str,\n        current_user: Account,\n    ):\n\n        ExternalDatasetService.validate_api_list(req_data.settings)\n\n        # The role of the current user in the ta table must be admin, owner, or editor, or dataset_operator\n        if not current_user.is_dataset_editor:\n            raise Forbidden()\n\n        try:\n            external_knowledge_api = ExternalDatasetService.create_external_knowledge_api(\n                tenant_id=current_tenant_id,\n                user_id=current_user.id,\n                args=req_data.model_dump(),\n                session=session,\n            )\n        except services.errors.dataset.DatasetNameDuplicateError:\n            raise DatasetNameDuplicateError()\n\n        return external_knowledge_api_response(external_knowledge_api, session=session).model_dump(mode=\"json\"), 201\n\n\n@console_ns.route(\"/datasets/external-knowledge-api/<uuid:external_knowledge_api_id>\")\nclass ExternalApiTemplateApi(Resource):\n    @console_ns.doc(\"get_external_api_template\")\n    @console_ns.doc(description=\"Get external knowledge API template details\")\n    @console_ns.doc(params={\"external_knowledge_api_id\": \"External knowledge API ID\"})\n    @console_ns.response(\n        200,\n        \"External API template retrieved successfully\",\n        console_ns.models[ExternalKnowledgeApiResponse.__name__],\n    )\n    @console_ns.response(404, \"Template not found\")\n    @setup_required\n    @login_required\n    @account_initialization_required","sourceCodeStart":223,"sourceCodeEnd":259,"githubUrl":"https://github.com/langgenius/dify/blob/ef8544b173fd6cd7a8e71df2cab576e52bebbfbc/api/controllers/console/datasets/external.py#L223-L259","documentation":"Raised when creating an external-knowledge API template whose name already exists in the tenant. The service throws services.errors.dataset.DatasetNameDuplicateError, which the controller re-raises as the HTTP DatasetNameDuplicateError with code dataset_name_duplicate. External knowledge API names must be unique within a tenant.","triggerScenarios":"POST /console/api/datasets/external-knowledge-api with a Body.name that matches an existing external knowledge API name in the current tenant.","commonSituations":"User retries a create after a network blip and the first call already succeeded; import/migration tooling creates templates with colliding names; UI does not refresh the list before re-submitting.","solutions":["Choose a unique name for the external knowledge API template.","Before retrying after an ambiguous failure, GET the list to check whether the name already exists; if so, reuse it.","In import scripts, deduplicate names with a suffix or look-up-first strategy."],"exampleFix":"// before\nPOST .../external-knowledge-api  body: {\"name\": \"my-api\"}  -> dataset_name_duplicate\n// after\nGET .../external-knowledge-api  -> find existing 'my-api' -> reuse, OR\nPOST .../external-knowledge-api  body: {\"name\": \"my-api-2\"}","handlingStrategy":"validation","validationCode":"async function createExternalApiUnique(name, settings) {\n  const existing = await fetch('/console/api/datasets/external-knowledge-api').then(r => r.json()).then(d => d.data || []);\n  const match = existing.find(t => t.name === name);\n  if (match) return match; // reuse\n  return fetch('/console/api/datasets/external-knowledge-api', {\n    method: 'POST', headers: {'Content-Type': 'application/json'},\n    body: JSON.stringify({name, settings}),\n  });\n}","typeGuard":"const isUniqueName = (name, existing) => typeof name === 'string' && name.length > 0 && !existing.some(t => t.name === name);","tryCatchPattern":"try { return await createExternalApi(name, settings); }\ncatch (e) {\n  if (e.code === 'dataset_name_duplicate') { return await reuseOrCreateWithSuffix(name, settings); }\n  throw e;\n}","preventionTips":["List existing external knowledge APIs before creating one.","On duplicate, reuse the existing template rather than retrying the same name.","Suffix or namespace generated names in automation to avoid collisions."],"tags":["datasets","external-knowledge","duplicate","validation","rest-api"],"backgroundTag":null,"analyzedSha":"ef8544b173fd6cd7a8e71df2cab576e52bebbfbc","analyzedAt":"2026-08-12T05:15:17.394Z","schemaVersion":2},"datasetVersion":"2026-08-12T13:17:24.610Z"}