diff --git a/packages/@n8n/api-types/src/dto/packages/__tests__/import-package-request.dto.test.ts b/packages/@n8n/api-types/src/dto/packages/__tests__/import-package-request.dto.test.ts index 9f75fc8076f..6c4738142df 100644 --- a/packages/@n8n/api-types/src/dto/packages/__tests__/import-package-request.dto.test.ts +++ b/packages/@n8n/api-types/src/dto/packages/__tests__/import-package-request.dto.test.ts @@ -14,7 +14,7 @@ describe('ImportPackageRequestDto', () => { bindings: {}, workflowConflictPolicy: 'fail', workflowPublishingPolicy: 'preserve-published-state', - workflowIdPolicy: 'new', + workflowIdPolicy: 'source', missingNodeTypeMode: 'fail', folderConflictPolicy: 'merge', dataTableMatchingMode: 'by-id', @@ -39,7 +39,7 @@ describe('ImportPackageRequestDto', () => { bindings: {}, workflowConflictPolicy: 'fail', workflowPublishingPolicy: 'preserve-published-state', - workflowIdPolicy: 'new', + workflowIdPolicy: 'source', missingNodeTypeMode: 'fail', folderConflictPolicy: 'merge', dataTableMatchingMode: 'by-id', @@ -66,7 +66,7 @@ describe('ImportPackageRequestDto', () => { bindings: {}, workflowConflictPolicy: 'new-version', workflowPublishingPolicy: 'preserve-published-state', - workflowIdPolicy: 'new', + workflowIdPolicy: 'source', missingNodeTypeMode: 'fail', folderConflictPolicy: 'merge', dataTableMatchingMode: 'by-id', @@ -92,7 +92,7 @@ describe('ImportPackageRequestDto', () => { bindings: {}, workflowConflictPolicy: 'skip', workflowPublishingPolicy: 'preserve-published-state', - workflowIdPolicy: 'new', + workflowIdPolicy: 'source', missingNodeTypeMode: 'fail', folderConflictPolicy: 'merge', dataTableMatchingMode: 'by-id', @@ -258,11 +258,11 @@ describe('ImportPackageRequestDto', () => { }); describe('workflowIdPolicy', () => { - it('defaults to "new" when omitted', () => { + it('defaults to "source" when omitted', () => { const result = ImportPackageRequestDto.safeParse({ workflowConflictPolicy: 'fail' }); expect(result.success).toBe(true); if (result.success) { - expect(result.data.workflowIdPolicy).toBe('new'); + expect(result.data.workflowIdPolicy).toBe('source'); } }); diff --git a/packages/@n8n/api-types/src/dto/packages/import-package-request.dto.ts b/packages/@n8n/api-types/src/dto/packages/import-package-request.dto.ts index 9e2576888fd..f1626290a8c 100644 --- a/packages/@n8n/api-types/src/dto/packages/import-package-request.dto.ts +++ b/packages/@n8n/api-types/src/dto/packages/import-package-request.dto.ts @@ -77,7 +77,7 @@ export class ImportPackageRequestDto extends Z.class({ .enum(['preserve-published-state', 'match-source', 'publish-all', 'unpublish-all']) .optional() .default('preserve-published-state'), - workflowIdPolicy: z.enum(['new', 'source']).optional().default('new'), + workflowIdPolicy: z.enum(['new', 'source']).optional().default('source'), missingNodeTypeMode: z.enum(['fail', 'import-anyway']).optional().default('fail'), folderConflictPolicy: z.enum(['merge', 'fail']).optional().default('merge'), dataTableMatchingMode: z.enum(['by-id']).optional().default('by-id'), diff --git a/packages/cli/src/public-api/v1/handlers/n8n-packages/spec/paths/n8n-packages.import.yml b/packages/cli/src/public-api/v1/handlers/n8n-packages/spec/paths/n8n-packages.import.yml index 473dc16b854..3c92fadb9c5 100644 --- a/packages/cli/src/public-api/v1/handlers/n8n-packages/spec/paths/n8n-packages.import.yml +++ b/packages/cli/src/public-api/v1/handlers/n8n-packages/spec/paths/n8n-packages.import.yml @@ -101,16 +101,17 @@ post: enum: - new - source - default: new + default: source description: > - Controls the id each newly created workflow receives. `new` - (default) mints a fresh id and records the package id as - `sourceWorkflowId`, so the same package can be imported - repeatedly without id collisions. `source` reuses the package's - own workflow id on the target instance. Workflows matched to an - existing workflow in the target project (status `updated` or - `skipped`) always keep that workflow's current id, regardless - of policy. + Controls the id each newly created workflow receives. `source` + (default) reuses the package's own workflow id on the target + instance, which best fits promotion use cases where the same + workflow moves between environments. `new` mints a fresh id and + records the package id as `sourceWorkflowId`, so the same + package can be imported repeatedly without id collisions — best + suited to marketplace imports. Workflows matched to an existing + workflow in the target project (status `updated` or `skipped`) + always keep that workflow's current id, regardless of policy. missingNodeTypeMode: type: string enum: