{"openapi":"3.0.4","info":{"title":"CluedIn REST API — Deduplication","description":"Find, review, and resolve duplicate records: deduplication projects, automation, match results, and entity split.","version":"v1"},"tags":[{"name":"Automate"},{"name":"DuplicateEntities"},{"name":"Project"},{"name":"Results"},{"name":"SplitEntity"}],"paths":{"/api/deduplication/projects/{projectId}/automate/projectcanbeautomated":{"get":{"tags":["Automate"],"summary":"Check whether deduplication project can be automated","parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Deduplication project identifier."}],"responses":{"200":{"description":"OK"}},"description":"Returns whether the project meets the preconditions for automation. Returns 404 when the project cannot be found. Requires the Management.DeduplicationManagement RACI claim."}},"/api/deduplication/projects/{projectId}/automate/automate":{"post":{"tags":["Automate"],"summary":"Automate deduplication project","parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Deduplication project identifier."}],"responses":{"200":{"description":"OK"}},"description":"Triggers full automation of a deduplication project (generates and commits results). Returns 400 when the project has no rules or is in a state that does not allow automation, 404 when the project cannot be found. Requires the Management.DeduplicationManagement RACI claim."}},"/api/deduplication/projects/{projectId}/automate/cancel":{"post":{"tags":["Automate"],"summary":"Cancel deduplication automation","parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Deduplication project identifier."}],"responses":{"200":{"description":"OK"}},"description":"Cancels an in-progress automation. Returns 400 when the project is in a state that does not allow cancellation, 404 when the project cannot be found. Requires the Management.DeduplicationManagement RACI claim."}},"/api/deduplication/projects/{projectId}/automate/lastdeduplicationstarttime":{"get":{"tags":["Automate"],"summary":"Get last automation start time","parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Deduplication project identifier."}],"responses":{"200":{"description":"OK"}},"description":"Returns the start time of the most recent automation job for the project, as `{ LastJobStartTime }`. Returns 404 when the project cannot be found. Requires the Management.DeduplicationManagement RACI claim."}},"/api/duplicates/queries":{"get":{"tags":["DuplicateEntities"],"summary":"List duplicate entity queries","responses":{"200":{"description":"OK"}},"description":"Returns the duplicate-entity queries registered on the server (the strategies used to find potential duplicates), with their technical name and display name."}},"/api/v1/duplicates/queries":{"get":{"tags":["DuplicateEntities"],"summary":"List duplicate entity queries","responses":{"200":{"description":"OK"}},"description":"Returns the duplicate-entity queries registered on the server (the strategies used to find potential duplicates), with their technical name and display name."}},"/api/v1/duplicate/queries":{"get":{"tags":["DuplicateEntities"],"summary":"List duplicate entity queries (alt path)","responses":{"200":{"description":"OK"}},"description":"Alias for `GET /api/v1/duplicates/queries` exposed under the historical singular `/duplicate` path. Same response shape and semantics."}},"/api/duplicates/potential-duplicate-entity-groupings":{"get":{"tags":["DuplicateEntities"],"summary":"List potential duplicate entity groupings","parameters":[{"name":"queryNames","in":"query","schema":{"type":"string"},"description":"Optional list of query names. Supports comma, semicolon, or pipe as separators."},{"name":"entityType","in":"query","schema":{"type":"string"},"description":"Optional entity type to restrict the search to."}],"responses":{"200":{"description":"OK"}},"description":"Runs the registered duplicate-entity queries (optionally restricted to a comma/semicolon/pipe-separated list of query names) and returns the groupings of potential duplicates each query produced. Returns 404 if any requested query name is not registered."}},"/api/v1/duplicates/potential-duplicate-entity-groupings":{"get":{"tags":["DuplicateEntities"],"summary":"List potential duplicate entity groupings","parameters":[{"name":"queryNames","in":"query","schema":{"type":"string"},"description":"Optional list of query names. Supports comma, semicolon, or pipe as separators."},{"name":"entityType","in":"query","schema":{"type":"string"},"description":"Optional entity type to restrict the search to."}],"responses":{"200":{"description":"OK"}},"description":"Runs the registered duplicate-entity queries (optionally restricted to a comma/semicolon/pipe-separated list of query names) and returns the groupings of potential duplicates each query produced. Returns 404 if any requested query name is not registered."}},"/api/v1/duplicate/potential-duplicate-entity-groupings":{"get":{"tags":["DuplicateEntities"],"summary":"List potential duplicate entity groupings (alt path)","parameters":[{"name":"queryNames","in":"query","schema":{"type":"string"},"description":"Optional list of query names. Supports comma, semicolon, or pipe as separators."},{"name":"entityType","in":"query","schema":{"type":"string"},"description":"Optional entity type to restrict the search to."}],"responses":{"200":{"description":"OK"}},"description":"Alias for `GET /api/v1/duplicates/potential-duplicate-entity-groupings`. Same response shape and semantics."}},"/api/duplicates/potential-entity-duplicate-instances":{"get":{"tags":["DuplicateEntities"],"summary":"List potential duplicate entity instances","parameters":[{"name":"sourceQuery","in":"query","schema":{"type":"string"},"description":"Name of the duplicate-entity query."},{"name":"resultSetKey","in":"query","schema":{"type":"string"},"description":"Result set key inside the query result."},{"name":"itemGroupingKey","in":"query","schema":{"type":"string"},"description":"Grouping key inside the result set."},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Optional opaque paging cursor."},{"name":"page","in":"query","schema":{"type":"integer","format":"int32"},"description":"0-based page number (alternative to cursor)."},{"name":"pageSize","in":"query","schema":{"type":"integer","format":"int32"},"description":"Page size when using page-based paging. Defaults to 20."}],"responses":{"200":{"description":"OK"}},"description":"Returns paged entity instances inside a single grouping returned by a duplicate-entity query. Supports cursor- or page-based paging. Returns 404 if the query name is not registered."}},"/api/v1/duplicates/potential-entity-duplicate-instances":{"get":{"tags":["DuplicateEntities"],"summary":"List potential duplicate entity instances","parameters":[{"name":"sourceQuery","in":"query","schema":{"type":"string"},"description":"Name of the duplicate-entity query."},{"name":"resultSetKey","in":"query","schema":{"type":"string"},"description":"Result set key inside the query result."},{"name":"itemGroupingKey","in":"query","schema":{"type":"string"},"description":"Grouping key inside the result set."},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Optional opaque paging cursor."},{"name":"page","in":"query","schema":{"type":"integer","format":"int32"},"description":"0-based page number (alternative to cursor)."},{"name":"pageSize","in":"query","schema":{"type":"integer","format":"int32"},"description":"Page size when using page-based paging. Defaults to 20."}],"responses":{"200":{"description":"OK"}},"description":"Returns paged entity instances inside a single grouping returned by a duplicate-entity query. Supports cursor- or page-based paging. Returns 404 if the query name is not registered."}},"/api/v1/duplicate/potential-entity-duplicate-instances":{"get":{"tags":["DuplicateEntities"],"summary":"List potential duplicate entity instances (alt path)","parameters":[{"name":"sourceQuery","in":"query","schema":{"type":"string"},"description":"Name of the duplicate-entity query."},{"name":"resultSetKey","in":"query","schema":{"type":"string"},"description":"Result set key inside the query result."},{"name":"itemGroupingKey","in":"query","schema":{"type":"string"},"description":"Grouping key inside the result set."},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Optional opaque paging cursor."},{"name":"page","in":"query","schema":{"type":"integer","format":"int32"},"description":"0-based page number (alternative to cursor)."},{"name":"pageSize","in":"query","schema":{"type":"integer","format":"int32"},"description":"Page size when using page-based paging. Defaults to 20."}],"responses":{"200":{"description":"OK"}},"description":"Alias for `GET /api/v1/duplicates/potential-entity-duplicate-instances`. Same response shape and semantics."}},"/api/duplicates/potential-dynamic-duplicates":{"get":{"tags":["DuplicateEntities"],"summary":"Get potential dynamic duplicates","parameters":[{"name":"entityType","in":"query","schema":{"type":"string"},"description":"Entity type to search inside."},{"name":"vocabularyKeys","in":"query","schema":{"type":"array","items":{"type":"string"}},"description":"List of vocabulary keys to match on."},{"name":"ruleType","in":"query","schema":{"$ref":"#/components/schemas/CluedIn.Core.Duplicates.Enums.RuleType"},"description":"Rule type used to combine the key matches."}],"responses":{"200":{"description":"OK"}},"description":"Returns potential duplicates for an entity type using a dynamic vocabulary-key query — typically a set of keys and a rule type chosen by the caller. Used when the duplicate detection strategy is built on the fly rather than registered as a named query."}},"/api/v1/duplicates/potential-dynamic-duplicates":{"get":{"tags":["DuplicateEntities"],"summary":"Get potential dynamic duplicates","parameters":[{"name":"entityType","in":"query","schema":{"type":"string"},"description":"Entity type to search inside."},{"name":"vocabularyKeys","in":"query","schema":{"type":"array","items":{"type":"string"}},"description":"List of vocabulary keys to match on."},{"name":"ruleType","in":"query","schema":{"$ref":"#/components/schemas/CluedIn.Core.Duplicates.Enums.RuleType"},"description":"Rule type used to combine the key matches."}],"responses":{"200":{"description":"OK"}},"description":"Returns potential duplicates for an entity type using a dynamic vocabulary-key query — typically a set of keys and a rule type chosen by the caller. Used when the duplicate detection strategy is built on the fly rather than registered as a named query."}},"/api/v1/duplicate/potential-dynamic-duplicates":{"get":{"tags":["DuplicateEntities"],"summary":"Get potential dynamic duplicates (alt path)","parameters":[{"name":"entityType","in":"query","schema":{"type":"string"},"description":"Entity type to search inside."},{"name":"vocabularyKeys","in":"query","schema":{"type":"array","items":{"type":"string"}},"description":"List of vocabulary keys to match on."},{"name":"ruleType","in":"query","schema":{"$ref":"#/components/schemas/CluedIn.Core.Duplicates.Enums.RuleType"},"description":"Rule type used to combine the key matches."}],"responses":{"200":{"description":"OK"}},"description":"Alias for `GET /api/v1/duplicates/potential-dynamic-duplicates`. Same response shape and semantics."}},"/api/duplicates/potential-dynamic-duplicates-entities":{"post":{"tags":["DuplicateEntities"],"summary":"Get potential dynamic duplicate entities","requestBody":{"content":{"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Models.DuplicateDetection.PotentialDuplicateEntitiesModel"}},"application/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Models.DuplicateDetection.PotentialDuplicateEntitiesModel"}},"text/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Models.DuplicateDetection.PotentialDuplicateEntitiesModel"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Models.DuplicateDetection.PotentialDuplicateEntitiesModel"}}}},"responses":{"200":{"description":"OK"}},"description":"Returns the entity instances that match a dynamic key mapping for a given entity type. Pass the key mapping in the body. Returns 400 with validation details when the model is invalid."}},"/api/v1/duplicates/potential-dynamic-duplicates-entities":{"post":{"tags":["DuplicateEntities"],"summary":"Get potential dynamic duplicate entities","requestBody":{"content":{"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Models.DuplicateDetection.PotentialDuplicateEntitiesModel"}},"application/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Models.DuplicateDetection.PotentialDuplicateEntitiesModel"}},"text/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Models.DuplicateDetection.PotentialDuplicateEntitiesModel"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Models.DuplicateDetection.PotentialDuplicateEntitiesModel"}}}},"responses":{"200":{"description":"OK"}},"description":"Returns the entity instances that match a dynamic key mapping for a given entity type. Pass the key mapping in the body. Returns 400 with validation details when the model is invalid."}},"/api/v1/duplicate/potential-dynamic-duplicates-entities":{"post":{"tags":["DuplicateEntities"],"summary":"Get potential dynamic duplicate entities (alt path)","requestBody":{"content":{"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Models.DuplicateDetection.PotentialDuplicateEntitiesModel"}},"application/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Models.DuplicateDetection.PotentialDuplicateEntitiesModel"}},"text/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Models.DuplicateDetection.PotentialDuplicateEntitiesModel"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Models.DuplicateDetection.PotentialDuplicateEntitiesModel"}}}},"responses":{"200":{"description":"OK"}},"description":"Alias for `POST /api/v1/duplicates/potential-dynamic-duplicates-entities`. Same request and response shape."}},"/api/deduplication/projects":{"post":{"tags":["Project"],"summary":"Create deduplication project","requestBody":{"content":{"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.Deduplication.Models.CreateOrUpdateProjectModel"}},"application/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.Deduplication.Models.CreateOrUpdateProjectModel"}},"text/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.Deduplication.Models.CreateOrUpdateProjectModel"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.Deduplication.Models.CreateOrUpdateProjectModel"}}}},"responses":{"200":{"description":"OK"}},"description":"Creates a deduplication project from the supplied model. Returns 400 with validation details when the filter rules are invalid. Requires the Management.DeduplicationManagement RACI claim."},"get":{"tags":["Project"],"summary":"List deduplication projects","parameters":[{"name":"SearchTerm","in":"query","schema":{"type":"string"}},{"name":"OrderBy","in":"query","schema":{"$ref":"#/components/schemas/CluedIn.Deduplication.Project.Data.Queries.ProjectOrderBy"}},{"name":"OrderAscending","in":"query","schema":{"type":"boolean"}},{"name":"IncludeProjectStages","in":"query","schema":{"type":"array","items":{"$ref":"#/components/schemas/CluedIn.Deduplication.Project.Data.Models.ProjectStageKind"}}},{"name":"ExcludeProjectStages","in":"query","schema":{"type":"array","items":{"$ref":"#/components/schemas/CluedIn.Deduplication.Project.Data.Models.ProjectStageKind"}}},{"name":"Page","in":"query","schema":{"type":"integer","format":"int32"}},{"name":"Take","in":"query","schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK"}},"description":"Returns paged deduplication projects with optional filters."}},"/api/deduplication/projects/{projectId}":{"put":{"tags":["Project"],"summary":"Update deduplication project","parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Deduplication project identifier."}],"requestBody":{"content":{"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.Deduplication.Models.CreateOrUpdateProjectModel"}},"application/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.Deduplication.Models.CreateOrUpdateProjectModel"}},"text/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.Deduplication.Models.CreateOrUpdateProjectModel"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.Deduplication.Models.CreateOrUpdateProjectModel"}}}},"responses":{"200":{"description":"OK"}},"description":"Updates a deduplication project. Returns 400 when the project is in a state that does not allow updates, 404 when it cannot be found."},"get":{"tags":["Project"],"summary":"Get deduplication project","parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Deduplication project identifier."}],"responses":{"200":{"description":"OK"}},"description":"Returns a deduplication project by id. Returns 404 if it cannot be found."},"delete":{"tags":["Project"],"summary":"Delete deduplication project","parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Deduplication project identifier."}],"responses":{"200":{"description":"OK"}},"description":"Deletes a deduplication project. Returns 400 when the project is in a state that does not allow deletion."}},"/api/deduplication/projects/{projectId}/mergedentities":{"get":{"tags":["Project"],"summary":"List merged entities","parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Deduplication project identifier."},{"name":"cursor","in":"query","schema":{"type":"string"}},{"name":"search","in":"query","schema":{"type":"string","default":"*"}}],"responses":{"200":{"description":"OK"}},"description":"Returns the entities the project has merged."}},"/api/deduplication/projects/{projectId}/mergedentities/undomerge":{"post":{"tags":["Project"],"summary":"Undo merge","parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Deduplication project identifier."}],"responses":{"200":{"description":"OK"}},"description":"Undoes a previously committed merge from this project."}},"/api/deduplication/projects/{projectId}/mergedentities/undomerge/withoptions":{"post":{"tags":["Project"],"summary":"Undo merge (with options)","parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Deduplication project identifier."}],"requestBody":{"content":{"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Deduplication.Services.Models.UndoMergedEntitiesModel"}},"application/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Deduplication.Services.Models.UndoMergedEntitiesModel"}},"text/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Deduplication.Services.Models.UndoMergedEntitiesModel"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Deduplication.Services.Models.UndoMergedEntitiesModel"}}}},"responses":{"200":{"description":"OK"}},"description":"Undoes a merge with extra options controlling how downstream effects are reverted."}},"/api/deduplication/projects/{projectId}/results/{groupId}/approve":{"post":{"tags":["Results"],"summary":"Approve group","parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Deduplication project identifier."},{"name":"groupId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Result group identifier."}],"responses":{"200":{"description":"OK"}},"description":"Approves a single result group for merging."}},"/api/deduplication/projects/{projectId}/results/approve":{"post":{"tags":["Results"],"summary":"Approve selected groups","parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Deduplication project identifier."},{"name":"includeDeclined","in":"query","schema":{"type":"boolean","default":false}}],"requestBody":{"content":{"application/json-patch+json":{"schema":{"type":"array","items":{"type":"string","format":"uuid"}}},"application/json":{"schema":{"type":"array","items":{"type":"string","format":"uuid"}}},"text/json":{"schema":{"type":"array","items":{"type":"string","format":"uuid"}}},"application/*+json":{"schema":{"type":"array","items":{"type":"string","format":"uuid"}}}}},"responses":{"200":{"description":"OK"}},"description":"Approves a set of selected groups."}},"/api/deduplication/projects/{projectId}/results/approve/all":{"post":{"tags":["Results"],"summary":"Approve all groups","parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Deduplication project identifier."},{"name":"MinimumGroupSize","in":"query","schema":{"type":"integer","format":"int32"}},{"name":"MaximumGroupSize","in":"query","schema":{"type":"integer","format":"int32"}},{"name":"SearchName","in":"query","schema":{"type":"string"}},{"name":"GroupStates","in":"query","schema":{"type":"array","items":{"$ref":"#/components/schemas/CluedIn.Deduplication.Project.Data.Models.DuplicatesGroupState"}}},{"name":"includeDeclined","in":"query","schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"OK"}},"description":"Approves every group in the project."}},"/api/deduplication/projects/{projectId}/results/{groupId}/removeapproval":{"post":{"tags":["Results"],"summary":"Remove group approval","parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Deduplication project identifier."},{"name":"groupId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Result group identifier."}],"responses":{"200":{"description":"OK"}},"description":"Removes a previously approved status from a group."}},"/api/deduplication/projects/{projectId}/results/removeapproval":{"post":{"tags":["Results"],"summary":"Remove approval from selected groups","parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Deduplication project identifier."}],"requestBody":{"content":{"application/json-patch+json":{"schema":{"type":"array","items":{"type":"string","format":"uuid"}}},"application/json":{"schema":{"type":"array","items":{"type":"string","format":"uuid"}}},"text/json":{"schema":{"type":"array","items":{"type":"string","format":"uuid"}}},"application/*+json":{"schema":{"type":"array","items":{"type":"string","format":"uuid"}}}}},"responses":{"200":{"description":"OK"}},"description":"Removes approval from a set of selected groups."}},"/api/deduplication/projects/{projectId}/results/removeapproval/all":{"post":{"tags":["Results"],"summary":"Remove approval from all groups","parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Deduplication project identifier."}],"responses":{"200":{"description":"OK"}},"description":"Removes approval from every group in the project."}},"/api/deduplication/projects/{projectId}/results/merge":{"post":{"tags":["Results"],"summary":"Merge selected groups","parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Deduplication project identifier."}],"requestBody":{"content":{"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Deduplication.Services.Models.MergeGroupsModel"}},"application/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Deduplication.Services.Models.MergeGroupsModel"}},"text/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Deduplication.Services.Models.MergeGroupsModel"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Deduplication.Services.Models.MergeGroupsModel"}}}},"responses":{"200":{"description":"OK"}},"description":"Merges the supplied set of groups."}},"/api/deduplication/projects/{projectId}/results/merge/all":{"post":{"tags":["Results"],"summary":"Merge all approved groups","parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Deduplication project identifier."},{"name":"staleDataStrategy","in":"query","schema":{"$ref":"#/components/schemas/CluedIn.Deduplication.Project.Data.Models.StaleDataStrategy"}}],"responses":{"200":{"description":"OK"}},"description":"Commits the merges for every approved group in the project."}},"/api/deduplication/projects/{projectId}/results/{groupId}/preview":{"get":{"tags":["Results"],"summary":"Preview group merge","parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Deduplication project identifier."},{"name":"groupId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Result group identifier."}],"responses":{"200":{"description":"OK"}},"description":"Returns a preview of what the merged record would look like for a group."}},"/api/deduplication/projects/{projectId}/results":{"get":{"tags":["Results"],"summary":"List deduplication result groups","parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Deduplication project identifier."},{"name":"MinimumGroupSize","in":"query","schema":{"type":"integer","format":"int32"}},{"name":"MaximumGroupSize","in":"query","schema":{"type":"integer","format":"int32"}},{"name":"SearchName","in":"query","schema":{"type":"string"}},{"name":"GroupStates","in":"query","schema":{"type":"array","items":{"$ref":"#/components/schemas/CluedIn.Deduplication.Project.Data.Models.DuplicatesGroupState"}}},{"name":"page","in":"query","schema":{"type":"integer","format":"int32","default":0}},{"name":"take","in":"query","schema":{"type":"integer","format":"int32","default":10}}],"responses":{"200":{"description":"OK"}},"description":"Returns paged candidate-duplicate groups produced by the project."}},"/api/deduplication/projects/{projectId}/results/groupstatuses":{"get":{"tags":["Results"],"summary":"Get group statuses","parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Deduplication project identifier."}],"responses":{"200":{"description":"OK"}},"description":"Returns the per-group status (approved, rejected, merged, etc.) for project review."}},"/api/deduplication/projects/{projectId}/results/groupstatuses/countonly":{"get":{"tags":["Results"],"summary":"Get group status counts","parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Deduplication project identifier."}],"responses":{"200":{"description":"OK"}},"description":"Returns just the counts of groups in each status (lightweight version of `groupstatuses`)."}},"/api/deduplication/projects/{projectId}/results/histogram":{"get":{"tags":["Results"],"summary":"Get results histogram","parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Deduplication project identifier."},{"name":"MinimumGroupSize","in":"query","schema":{"type":"integer","format":"int32"}},{"name":"MaximumGroupSize","in":"query","schema":{"type":"integer","format":"int32"}},{"name":"SearchName","in":"query","schema":{"type":"string"}},{"name":"GroupStates","in":"query","schema":{"type":"array","items":{"$ref":"#/components/schemas/CluedIn.Deduplication.Project.Data.Models.DuplicatesGroupState"}}}],"responses":{"200":{"description":"OK"}},"description":"Returns a histogram of the project's result groups (typically group size distribution)."}},"/api/deduplication/projects/{projectId}/results/generate":{"post":{"tags":["Results"],"summary":"Generate deduplication results","parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Deduplication project identifier."}],"responses":{"200":{"description":"OK"}},"description":"Triggers result generation for the deduplication project (running rules to find candidate groups)."}},"/api/deduplication/projects/{projectId}/results/cancel":{"post":{"tags":["Results"],"summary":"Cancel results generation","parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Deduplication project identifier."}],"responses":{"200":{"description":"OK"}},"description":"Cancels an in-progress results generation."}},"/api/deduplication/projects/{projectId}/results/status":{"get":{"tags":["Results"],"summary":"Get results status","parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Deduplication project identifier."}],"responses":{"200":{"description":"OK"}},"description":"Returns the current status of the project's results pipeline (generating, committing, idle, etc.)."}},"/api/deduplication/projects/{projectId}/results/{groupId}":{"post":{"tags":["Results"],"summary":"Update deduplication group","parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Deduplication project identifier."},{"name":"groupId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Result group identifier."}],"requestBody":{"content":{"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.Deduplication.Models.CreateOrUpdateUserDecisionModel"}},"application/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.Deduplication.Models.CreateOrUpdateUserDecisionModel"}},"text/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.Deduplication.Models.CreateOrUpdateUserDecisionModel"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.Deduplication.Models.CreateOrUpdateUserDecisionModel"}}}},"responses":{"200":{"description":"OK"}},"description":"Updates a group's review state (for example marking members for inclusion/exclusion)."},"get":{"tags":["Results"],"summary":"Get deduplication group","parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Deduplication project identifier."},{"name":"groupId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Result group identifier."}],"responses":{"200":{"description":"OK"}},"description":"Returns a single candidate-duplicate group and its members."}},"/api/deduplication/projects/{projectId}/results/{groupId}/deleteuserdecision":{"post":{"tags":["Results"],"summary":"Delete user decision on group","parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Deduplication project identifier."},{"name":"groupId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Result group identifier."}],"requestBody":{"content":{"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.Deduplication.Models.DeleteUserDecisionModel"}},"application/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.Deduplication.Models.DeleteUserDecisionModel"}},"text/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.Deduplication.Models.DeleteUserDecisionModel"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.Deduplication.Models.DeleteUserDecisionModel"}}}},"responses":{"200":{"description":"OK"}},"description":"Clears any manual user decisions on the supplied group, reverting to default behavior."}},"/api/deduplication/projects/{projectId}/results/{groupId}/{entityId}":{"delete":{"tags":["Results"],"summary":"Remove entity from group","parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Deduplication project identifier."},{"name":"groupId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Result group identifier."},{"name":"entityId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Entity identifier."}],"responses":{"200":{"description":"OK"}},"description":"Removes an entity from a deduplication result group."}},"/api/deduplication/projects/{projectId}/results/groups/reject":{"post":{"tags":["Results"],"summary":"Reject groups","parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Deduplication project identifier."}],"requestBody":{"content":{"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.Deduplication.Models.RejectGroupsModel"}},"application/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.Deduplication.Models.RejectGroupsModel"}},"text/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.Deduplication.Models.RejectGroupsModel"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.Deduplication.Models.RejectGroupsModel"}}}},"responses":{"200":{"description":"OK"}},"description":"Rejects a set of selected groups."}},"/api/deduplication/projects/{projectId}/results/abort":{"post":{"tags":["Results"],"summary":"Abort results","parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Deduplication project identifier."}],"responses":{"200":{"description":"OK"}},"description":"Aborts the results-generation pipeline for the project."}},"/api/deduplication/projects/{projectId}/results/{groupId}/autoselect":{"post":{"tags":["Results"],"summary":"Auto-select group members","parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Deduplication project identifier."},{"name":"groupId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Result group identifier."},{"name":"enable","in":"query","schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"OK"}},"description":"Runs the auto-selection algorithm on a single group to pick the survivor and source records."}},"/api/deduplication/projects/{projectId}/results/committingstatus":{"get":{"tags":["Results"],"summary":"Get committing status","parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Deduplication project identifier."}],"responses":{"200":{"description":"OK"}},"description":"Returns the status of the current commit (merge) step."}},"/api/deduplication/projects/{projectId}/results/undo":{"post":{"tags":["Results"],"summary":"Undo merges","parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Deduplication project identifier."}],"requestBody":{"content":{"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.Deduplication.Models.UndoMergeGroupsModel"}},"application/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.Deduplication.Models.UndoMergeGroupsModel"}},"text/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.Deduplication.Models.UndoMergeGroupsModel"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.Deduplication.Models.UndoMergeGroupsModel"}}}},"responses":{"200":{"description":"OK"}},"description":"Undoes merges performed by the project."}},"/api/deduplication/projects/{projectId}/results/abortundo":{"post":{"tags":["Results"],"summary":"Abort undo","parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Deduplication project identifier."}],"responses":{"200":{"description":"OK"}},"description":"Aborts an in-progress undo operation."}},"/api/deduplication/projects/{projectId}/results/undostatus":{"get":{"tags":["Results"],"summary":"Get undo status","parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Deduplication project identifier."}],"responses":{"200":{"description":"OK"}},"description":"Returns the status of an in-progress undo."}},"/api/deduplication/projects/{projectId}/results/cancelmerge":{"post":{"tags":["Results"],"summary":"Cancel merge","parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Deduplication project identifier."}],"responses":{"200":{"description":"OK"}},"description":"Cancels an in-progress merge operation."}},"/api/splitentity/datapart/{entityId}/{dataPartId}":{"get":{"tags":["SplitEntity"],"summary":"Get data part node info","parameters":[{"name":"entityId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Entity identifier."},{"name":"dataPartId","in":"path","required":true,"schema":{"type":"integer","format":"int64"},"description":"Data part identifier."}],"responses":{"200":{"description":"OK"}},"description":"Returns topology-graph information for a specific data part on an entity. Used by the split-entity UI to render the source data attached to a node before split."}},"/api/splitentity/entitycode/{entityId}/{code}":{"get":{"tags":["SplitEntity"],"summary":"Get entity-code node info","parameters":[{"name":"entityId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Entity identifier."},{"name":"code","in":"path","required":true,"schema":{"type":"string"},"description":"Entity code, URL-encoded."}],"responses":{"200":{"description":"OK"}},"description":"Returns graph node information for an entity code on an entity. The code segment is URL-decoded before lookup. Returns 400 if the code is malformed."}},"/api/splitentity/deduplication/{entityId}/{mergeDataPartId}":{"get":{"tags":["SplitEntity"],"summary":"Get deduplication merge node info","parameters":[{"name":"entityId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Entity identifier."},{"name":"mergeDataPartId","in":"path","required":true,"schema":{"type":"integer","format":"int64"},"description":"Merge data part identifier."}],"responses":{"200":{"description":"OK"}},"description":"Returns graph node information for a merge that originated from a deduplication project for the given entity and merge data part."}},"/api/splitentity/manualmerge/{entityId}/{mergeDataPartId}":{"get":{"tags":["SplitEntity"],"summary":"Get manual merge node info","parameters":[{"name":"entityId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Entity identifier."},{"name":"mergeDataPartId","in":"path","required":true,"schema":{"type":"integer","format":"int64"},"description":"Merge data part identifier."}],"responses":{"200":{"description":"OK"}},"description":"Returns graph node information for a manual merge on the given entity and merge data part."}},"/api/splitentity/preview/{entityId}":{"post":{"tags":["SplitEntity"],"summary":"Preview entity split","parameters":[{"name":"entityId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Entity identifier."}],"requestBody":{"content":{"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.EntityTopology.Models.SplitEntityActionRequest"}},"application/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.EntityTopology.Models.SplitEntityActionRequest"}},"text/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.EntityTopology.Models.SplitEntityActionRequest"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.EntityTopology.Models.SplitEntityActionRequest"}}}},"responses":{"200":{"description":"OK"}},"description":"Returns a preview of the split that would result from applying the supplied split action to an entity, without performing the split. Returns 400 if the action descriptor is malformed and 404 if the entity does not exist."}},"/api/splitentity/execute/{entityId}":{"post":{"tags":["SplitEntity"],"summary":"Execute entity split","parameters":[{"name":"entityId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Entity identifier."}],"requestBody":{"content":{"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.EntityTopology.Models.SplitEntityActionRequest"}},"application/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.EntityTopology.Models.SplitEntityActionRequest"}},"text/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.EntityTopology.Models.SplitEntityActionRequest"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.EntityTopology.Models.SplitEntityActionRequest"}}}},"responses":{"200":{"description":"OK"}},"description":"Starts a distributed job that splits an entity according to the supplied action. Returns the job handle so callers can poll progress. Returns 400 for invalid actions and 404 if the entity does not exist."}}},"components":{"schemas":{"CluedIn.Core.Duplicates.Enums.RuleType":{"enum":[0,1],"type":"integer","format":"int32"},"CluedIn.Server.WebApi.Models.DuplicateDetection.PotentialDuplicateEntitiesModel":{"required":["keyMapping"],"type":"object","properties":{"entityType":{"type":"string","nullable":true},"keyMapping":{"type":"object","additionalProperties":{"type":"string","nullable":true}}},"additionalProperties":false},"CluedIn.Server.WebApi.Controllers.Deduplication.Models.CreateOrUpdateProjectModel":{"required":["deduplicationScopeFilter","deduplicationScopeFilterType","name"],"type":"object","properties":{"name":{"maxLength":250,"minLength":1,"type":"string"},"deduplicationScopeFilter":{"$ref":"#/components/schemas/CluedIn.Core.Rules.QueryBuilder.FilterRule"},"deduplicationScopeFilterType":{"$ref":"#/components/schemas/CluedIn.Deduplication.Project.Storage.DeduplicationScopeFilterType"},"shouldLimitQuerySize":{"type":"boolean"},"querySizeLimit":{"type":"integer","format":"int32","nullable":true},"filterByLastGenerationStartTime":{"type":"boolean"},"description":{"type":"string","nullable":true}},"additionalProperties":false},"CluedIn.Deduplication.Project.Data.Queries.ProjectOrderBy":{"enum":[0,1],"type":"integer","format":"int32"},"CluedIn.Deduplication.Project.Data.Models.ProjectStageKind":{"enum":[0,1,2,3,4,5,6,7,8,9,10,11,12],"type":"integer","format":"int32"},"CluedIn.Deduplication.Services.Models.UndoMergedEntitiesModel":{"type":"object","properties":{"unmergeStrategy":{"$ref":"#/components/schemas/CluedIn.Deduplication.Project.Data.Models.UnmergeStrategy"}},"additionalProperties":false},"CluedIn.Deduplication.Project.Data.Models.DuplicatesGroupState":{"enum":[0,1,2,3,4,5],"type":"integer","format":"int32"},"CluedIn.Deduplication.Services.Models.MergeGroupsModel":{"type":"object","properties":{"groupIds":{"type":"array","items":{"type":"string","format":"uuid"},"nullable":true},"staleDataStrategy":{"$ref":"#/components/schemas/CluedIn.Deduplication.Project.Data.Models.StaleDataStrategy"}},"additionalProperties":false},"CluedIn.Deduplication.Project.Data.Models.StaleDataStrategy":{"enum":[0,1,2],"type":"integer","format":"int32"},"CluedIn.Server.WebApi.Controllers.Deduplication.Models.CreateOrUpdateUserDecisionModel":{"required":["userDecisions"],"type":"object","properties":{"userDecisions":{"minItems":1,"type":"array","items":{"$ref":"#/components/schemas/CluedIn.Deduplication.Services.Models.UserDecisionModel"}}},"additionalProperties":false},"CluedIn.Server.WebApi.Controllers.Deduplication.Models.DeleteUserDecisionModel":{"required":["userDecisions"],"type":"object","properties":{"userDecisions":{"minItems":1,"type":"array","items":{"$ref":"#/components/schemas/CluedIn.Deduplication.Services.Models.UserDecisionModel"}}},"additionalProperties":false},"CluedIn.Server.WebApi.Controllers.Deduplication.Models.RejectGroupsModel":{"required":["groupIds"],"type":"object","properties":{"groupIds":{"minItems":1,"type":"array","items":{"type":"string","format":"uuid"}}},"additionalProperties":false},"CluedIn.Server.WebApi.Controllers.Deduplication.Models.UndoMergeGroupsModel":{"required":["groupIds"],"type":"object","properties":{"groupIds":{"minItems":1,"type":"array","items":{"type":"string","format":"uuid"}}},"additionalProperties":false},"CluedIn.Server.WebApi.Controllers.EntityTopology.Models.SplitEntityActionRequest":{"type":"object","properties":{"kind":{"$ref":"#/components/schemas/CluedIn.EntityTopology.EntityActions.Descriptors.NodeActionKind"},"code":{"type":"string","nullable":true},"dataPartIds":{"type":"array","items":{"type":"integer","format":"int64"},"nullable":true},"dataPartId":{"type":"integer","format":"int64"}},"additionalProperties":false},"CluedIn.Core.Rules.QueryBuilder.FilterRule":{"type":"object","properties":{"objectTypeId":{"type":"string","format":"uuid"},"condition":{"type":"string","nullable":true},"field":{"type":"string","nullable":true},"id":{"type":"string","format":"uuid"},"operator":{"type":"string","format":"uuid"},"rules":{"type":"array","items":{"$ref":"#/components/schemas/CluedIn.Core.Rules.QueryBuilder.FilterRule"},"nullable":true},"type":{"type":"string","nullable":true},"value":{"type":"array","items":{},"nullable":true}},"additionalProperties":false},"CluedIn.Deduplication.Project.Storage.DeduplicationScopeFilterType":{"enum":[0,1],"type":"integer","format":"int32"},"CluedIn.Deduplication.Project.Data.Models.UnmergeStrategy":{"type":"object","properties":{"kind":{"$ref":"#/components/schemas/CluedIn.Deduplication.Project.Data.Models.UnmergeStrategyKind"}},"additionalProperties":false},"CluedIn.Deduplication.Services.Models.UserDecisionModel":{"required":["entityId","fieldName","value"],"type":"object","properties":{"fieldName":{"minLength":1,"type":"string"},"entityId":{"type":"string","format":"uuid"},"value":{"minLength":1,"type":"string"}},"additionalProperties":false},"CluedIn.EntityTopology.EntityActions.Descriptors.NodeActionKind":{"enum":[0,1,2,3,4],"type":"integer","format":"int32"},"CluedIn.Deduplication.Project.Data.Models.UnmergeStrategyKind":{"enum":[1,2],"type":"integer","format":"int32"}},"securitySchemes":{"Bearer":{"type":"http","description":"Please enter a valid token","scheme":"Bearer"}}}}