{"openapi":"3.0.4","info":{"title":"CluedIn REST API — Vocabularies","description":"Manage vocabularies and vocabulary keys.","version":"v1"},"tags":[{"name":"Vocabulary"},{"name":"VocabularyUsage"}],"paths":{"/api/vocabs/{vocabularyId}/keys":{"get":{"tags":["Vocabulary"],"summary":"List keys in a vocabulary","parameters":[{"name":"vocabularyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary identifier."},{"name":"page","in":"query","schema":{"type":"integer","format":"int32","default":0},"description":"0-based page number. Defaults to 0."},{"name":"take","in":"query","schema":{"type":"integer","format":"int32","default":20},"description":"Page size. Defaults to 20."},{"name":"filterDataType","in":"query","schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.VocabularyKeyDataType"},"description":"Filter by vocabulary key data type."},{"name":"filterProviderId","in":"query","schema":{"type":"string","format":"uuid"},"description":"Filter by integration provider id."},{"name":"filterClassification","in":"query","schema":{"type":"string"},"description":"Filter by data classification (for example PII)."},{"name":"filterTypes","in":"query","schema":{"type":"array","items":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Dynamic.VocabularyType"}},"description":"Filter by one or more vocabulary types."},{"name":"filterIsObsolete","in":"query","schema":{"type":"boolean","default":false},"description":"When set, filter by obsolete state."},{"name":"filterHasProvider","in":"query","schema":{"type":"boolean"},"description":"When set, restrict to keys with or without a provider."},{"name":"searchName","in":"query","schema":{"type":"string"},"description":"Free-text search over key name."},{"name":"orderBy","in":"query","schema":{"type":"string"},"description":"Field to order by."},{"name":"orderAsc","in":"query","schema":{"type":"boolean","default":true},"description":"Sort direction. Defaults to true (ascending)."},{"name":"filterHasNoSource","in":"query","schema":{"type":"boolean","default":false},"description":"When true, only keys without a source are returned."},{"name":"filterIsUsed","in":"query","schema":{"type":"boolean"},"description":"When set, restrict to keys that are (or are not) used."}],"responses":{"200":{"description":"OK"}},"description":"Returns a paged list of vocabulary keys for a single vocabulary along with the total count. Supports rich filtering by data type, provider, classification, key type, obsolete and source state, and free-text search."}},"/api/v1/vocabs/{vocabularyId}/keys":{"get":{"tags":["Vocabulary"],"summary":"List keys in a vocabulary","parameters":[{"name":"vocabularyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary identifier."},{"name":"page","in":"query","schema":{"type":"integer","format":"int32","default":0},"description":"0-based page number. Defaults to 0."},{"name":"take","in":"query","schema":{"type":"integer","format":"int32","default":20},"description":"Page size. Defaults to 20."},{"name":"filterDataType","in":"query","schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.VocabularyKeyDataType"},"description":"Filter by vocabulary key data type."},{"name":"filterProviderId","in":"query","schema":{"type":"string","format":"uuid"},"description":"Filter by integration provider id."},{"name":"filterClassification","in":"query","schema":{"type":"string"},"description":"Filter by data classification (for example PII)."},{"name":"filterTypes","in":"query","schema":{"type":"array","items":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Dynamic.VocabularyType"}},"description":"Filter by one or more vocabulary types."},{"name":"filterIsObsolete","in":"query","schema":{"type":"boolean","default":false},"description":"When set, filter by obsolete state."},{"name":"filterHasProvider","in":"query","schema":{"type":"boolean"},"description":"When set, restrict to keys with or without a provider."},{"name":"searchName","in":"query","schema":{"type":"string"},"description":"Free-text search over key name."},{"name":"orderBy","in":"query","schema":{"type":"string"},"description":"Field to order by."},{"name":"orderAsc","in":"query","schema":{"type":"boolean","default":true},"description":"Sort direction. Defaults to true (ascending)."},{"name":"filterHasNoSource","in":"query","schema":{"type":"boolean","default":false},"description":"When true, only keys without a source are returned."},{"name":"filterIsUsed","in":"query","schema":{"type":"boolean"},"description":"When set, restrict to keys that are (or are not) used."}],"responses":{"200":{"description":"OK"}},"description":"Returns a paged list of vocabulary keys for a single vocabulary along with the total count. Supports rich filtering by data type, provider, classification, key type, obsolete and source state, and free-text search."}},"/api/vocabs/keys":{"get":{"tags":["Vocabulary"],"summary":"List vocabulary keys across vocabularies","parameters":[{"name":"page","in":"query","schema":{"type":"integer","format":"int32","default":0},"description":"0-based page number. Defaults to 0."},{"name":"take","in":"query","schema":{"type":"integer","format":"int32","default":20},"description":"Page size. Defaults to 20."},{"name":"filterVocabulary","in":"query","schema":{"type":"string","format":"uuid"},"description":"Optional vocabulary id to scope the results to."},{"name":"filterDataType","in":"query","schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.VocabularyKeyDataType"},"description":"Filter by vocabulary key data type."},{"name":"filterProviderId","in":"query","schema":{"type":"string","format":"uuid"},"description":"Filter by integration provider id."},{"name":"filterClassification","in":"query","schema":{"type":"string"},"description":"Filter by data classification."},{"name":"searchName","in":"query","schema":{"type":"string"},"description":"Free-text search over key name."},{"name":"filterTypes","in":"query","schema":{"type":"array","items":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Dynamic.VocabularyType"}},"description":"Filter by one or more vocabulary types."},{"name":"filterIsObsolete","in":"query","schema":{"type":"boolean","default":false},"description":"When set, filter by obsolete state."},{"name":"filterHasProvider","in":"query","schema":{"type":"boolean"},"description":"When set, restrict to keys with or without a provider."},{"name":"orderBy","in":"query","schema":{"type":"string"},"description":"Field to order by."},{"name":"orderAsc","in":"query","schema":{"type":"boolean","default":true},"description":"Sort direction. Defaults to true (ascending)."},{"name":"filterHasNoSource","in":"query","schema":{"type":"boolean","default":false},"description":"When true, only keys without a source are returned."},{"name":"filterIsUsed","in":"query","schema":{"type":"boolean"},"description":"When set, restrict to keys that are (or are not) used."}],"responses":{"200":{"description":"OK"}},"description":"Returns a paged list of vocabulary keys across one or all vocabularies, with the total count. Use `filterVocabulary` to scope to a single vocabulary; omit it to search the entire catalog. The total count excludes the `filterVocabulary` constraint so the UI can show the global count."},"post":{"tags":["Vocabulary"],"summary":"Bulk create vocabulary keys","requestBody":{"content":{"application/json-patch+json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.AddVocabularyKeyModel"}}},"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.AddVocabularyKeyModel"}}},"text/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.AddVocabularyKeyModel"}}},"application/*+json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.AddVocabularyKeyModel"}}}}},"responses":{"200":{"description":"OK"}},"description":"Creates multiple vocabulary keys in a single call from a list of key models. Returns a per-item result so callers can see which entries succeeded or were rejected."}},"/api/v1/vocabs/keys":{"get":{"tags":["Vocabulary"],"summary":"List vocabulary keys across vocabularies","parameters":[{"name":"page","in":"query","schema":{"type":"integer","format":"int32","default":0},"description":"0-based page number. Defaults to 0."},{"name":"take","in":"query","schema":{"type":"integer","format":"int32","default":20},"description":"Page size. Defaults to 20."},{"name":"filterVocabulary","in":"query","schema":{"type":"string","format":"uuid"},"description":"Optional vocabulary id to scope the results to."},{"name":"filterDataType","in":"query","schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.VocabularyKeyDataType"},"description":"Filter by vocabulary key data type."},{"name":"filterProviderId","in":"query","schema":{"type":"string","format":"uuid"},"description":"Filter by integration provider id."},{"name":"filterClassification","in":"query","schema":{"type":"string"},"description":"Filter by data classification."},{"name":"searchName","in":"query","schema":{"type":"string"},"description":"Free-text search over key name."},{"name":"filterTypes","in":"query","schema":{"type":"array","items":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Dynamic.VocabularyType"}},"description":"Filter by one or more vocabulary types."},{"name":"filterIsObsolete","in":"query","schema":{"type":"boolean","default":false},"description":"When set, filter by obsolete state."},{"name":"filterHasProvider","in":"query","schema":{"type":"boolean"},"description":"When set, restrict to keys with or without a provider."},{"name":"orderBy","in":"query","schema":{"type":"string"},"description":"Field to order by."},{"name":"orderAsc","in":"query","schema":{"type":"boolean","default":true},"description":"Sort direction. Defaults to true (ascending)."},{"name":"filterHasNoSource","in":"query","schema":{"type":"boolean","default":false},"description":"When true, only keys without a source are returned."},{"name":"filterIsUsed","in":"query","schema":{"type":"boolean"},"description":"When set, restrict to keys that are (or are not) used."}],"responses":{"200":{"description":"OK"}},"description":"Returns a paged list of vocabulary keys across one or all vocabularies, with the total count. Use `filterVocabulary` to scope to a single vocabulary; omit it to search the entire catalog. The total count excludes the `filterVocabulary` constraint so the UI can show the global count."},"post":{"tags":["Vocabulary"],"summary":"Bulk create vocabulary keys","requestBody":{"content":{"application/json-patch+json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.AddVocabularyKeyModel"}}},"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.AddVocabularyKeyModel"}}},"text/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.AddVocabularyKeyModel"}}},"application/*+json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.AddVocabularyKeyModel"}}}}},"responses":{"200":{"description":"OK"}},"description":"Creates multiple vocabulary keys in a single call from a list of key models. Returns a per-item result so callers can see which entries succeeded or were rejected."}},"/api/vocabs/allkeys":{"get":{"tags":["Vocabulary"],"summary":"List vocabulary keys (extended filters)","parameters":[{"name":"page","in":"query","schema":{"type":"integer","format":"int32","default":0},"description":"0-based page number. Defaults to 0."},{"name":"take","in":"query","schema":{"type":"integer","format":"int32","default":20},"description":"Page size. Defaults to 20."},{"name":"filterVocabulary","in":"query","schema":{"type":"string","format":"uuid"},"description":"Optional vocabulary id to scope the results to."},{"name":"filterDataType","in":"query","schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.VocabularyKeyDataType"},"description":"Filter by vocabulary key data type."},{"name":"filterProviderId","in":"query","schema":{"type":"string","format":"uuid"},"description":"Filter by integration provider id."},{"name":"filterClassification","in":"query","schema":{"type":"string"},"description":"Filter by data classification."},{"name":"searchName","in":"query","schema":{"type":"string"},"description":"Free-text search over key name."},{"name":"filterTypes","in":"query","schema":{"type":"array","items":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Dynamic.VocabularyType"}},"description":"Filter by one or more vocabulary types."},{"name":"filterIsObsolete","in":"query","schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.ObsoleteKeyFilterEnum"},"description":"Obsolete filter: `All`, `OnlyObsolete`, or `IgnoreObsolete`. Defaults to `All`."},{"name":"filterHasProvider","in":"query","schema":{"type":"boolean"},"description":"When set, restrict to keys with or without a provider."},{"name":"orderBy","in":"query","schema":{"type":"string"},"description":"Field to order by."},{"name":"orderAsc","in":"query","schema":{"type":"boolean","default":true},"description":"Sort direction. Defaults to true (ascending)."},{"name":"filterHasNoSource","in":"query","schema":{"type":"boolean","default":false},"description":"When true, only keys without a source are returned."},{"name":"filterVisibility","in":"query","schema":{"type":"boolean"},"description":"When set, restrict to keys with that visibility."},{"name":"filterIsUsed","in":"query","schema":{"type":"boolean"},"description":"When set, restrict to keys that are (or are not) used."},{"name":"filterExcludeLookups","in":"query","schema":{"type":"boolean","default":false},"description":"When true, exclude vocabulary keys used only as lookups."}],"responses":{"200":{"description":"OK"}},"description":"Same shape as `GET /vocabs/keys` but exposes the newer obsolete-key filter (`All`, `OnlyObsolete`, `IgnoreObsolete`), a visibility flag, and an option to exclude lookup-only keys. Prefer this endpoint over `/keys` for new clients."}},"/api/v1/vocabs/allkeys":{"get":{"tags":["Vocabulary"],"summary":"List vocabulary keys (extended filters)","parameters":[{"name":"page","in":"query","schema":{"type":"integer","format":"int32","default":0},"description":"0-based page number. Defaults to 0."},{"name":"take","in":"query","schema":{"type":"integer","format":"int32","default":20},"description":"Page size. Defaults to 20."},{"name":"filterVocabulary","in":"query","schema":{"type":"string","format":"uuid"},"description":"Optional vocabulary id to scope the results to."},{"name":"filterDataType","in":"query","schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.VocabularyKeyDataType"},"description":"Filter by vocabulary key data type."},{"name":"filterProviderId","in":"query","schema":{"type":"string","format":"uuid"},"description":"Filter by integration provider id."},{"name":"filterClassification","in":"query","schema":{"type":"string"},"description":"Filter by data classification."},{"name":"searchName","in":"query","schema":{"type":"string"},"description":"Free-text search over key name."},{"name":"filterTypes","in":"query","schema":{"type":"array","items":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Dynamic.VocabularyType"}},"description":"Filter by one or more vocabulary types."},{"name":"filterIsObsolete","in":"query","schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.ObsoleteKeyFilterEnum"},"description":"Obsolete filter: `All`, `OnlyObsolete`, or `IgnoreObsolete`. Defaults to `All`."},{"name":"filterHasProvider","in":"query","schema":{"type":"boolean"},"description":"When set, restrict to keys with or without a provider."},{"name":"orderBy","in":"query","schema":{"type":"string"},"description":"Field to order by."},{"name":"orderAsc","in":"query","schema":{"type":"boolean","default":true},"description":"Sort direction. Defaults to true (ascending)."},{"name":"filterHasNoSource","in":"query","schema":{"type":"boolean","default":false},"description":"When true, only keys without a source are returned."},{"name":"filterVisibility","in":"query","schema":{"type":"boolean"},"description":"When set, restrict to keys with that visibility."},{"name":"filterIsUsed","in":"query","schema":{"type":"boolean"},"description":"When set, restrict to keys that are (or are not) used."},{"name":"filterExcludeLookups","in":"query","schema":{"type":"boolean","default":false},"description":"When true, exclude vocabulary keys used only as lookups."}],"responses":{"200":{"description":"OK"}},"description":"Same shape as `GET /vocabs/keys` but exposes the newer obsolete-key filter (`All`, `OnlyObsolete`, `IgnoreObsolete`), a visibility flag, and an option to exclude lookup-only keys. Prefer this endpoint over `/keys` for new clients."}},"/api/vocabs/resolveUsedKeysByCondition":{"post":{"tags":["Vocabulary"],"summary":"Resolve vocabulary keys used in a condition","requestBody":{"content":{"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.Vocabs.Models.ResolveUsedVocabularyKeysByConditionQuery"}},"application/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.Vocabs.Models.ResolveUsedVocabularyKeysByConditionQuery"}},"text/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.Vocabs.Models.ResolveUsedVocabularyKeysByConditionQuery"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.Vocabs.Models.ResolveUsedVocabularyKeysByConditionQuery"}}}},"responses":{"200":{"description":"OK"}},"description":"Given a rule/filter condition expression, returns the vocabulary keys actually referenced by that condition. Returns 400 if no condition is supplied. Useful to power dependency views and impact analysis for rules and streams."}},"/api/v1/vocabs/resolveUsedKeysByCondition":{"post":{"tags":["Vocabulary"],"summary":"Resolve vocabulary keys used in a condition","requestBody":{"content":{"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.Vocabs.Models.ResolveUsedVocabularyKeysByConditionQuery"}},"application/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.Vocabs.Models.ResolveUsedVocabularyKeysByConditionQuery"}},"text/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.Vocabs.Models.ResolveUsedVocabularyKeysByConditionQuery"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.Vocabs.Models.ResolveUsedVocabularyKeysByConditionQuery"}}}},"responses":{"200":{"description":"OK"}},"description":"Given a rule/filter condition expression, returns the vocabulary keys actually referenced by that condition. Returns 400 if no condition is supplied. Useful to power dependency views and impact analysis for rules and streams."}},"/api/vocabs/{vocabularyId}/allkeys":{"get":{"tags":["Vocabulary"],"summary":"List keys in a vocabulary (extended filters)","parameters":[{"name":"vocabularyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary identifier."},{"name":"page","in":"query","schema":{"type":"integer","format":"int32","default":0},"description":"0-based page number. Defaults to 0."},{"name":"take","in":"query","schema":{"type":"integer","format":"int32","default":20},"description":"Page size. Defaults to 20."},{"name":"filterDataType","in":"query","schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.VocabularyKeyDataType"},"description":"Filter by vocabulary key data type."},{"name":"filterProviderId","in":"query","schema":{"type":"string","format":"uuid"},"description":"Filter by integration provider id."},{"name":"filterClassification","in":"query","schema":{"type":"string"},"description":"Filter by data classification."},{"name":"filterTypes","in":"query","schema":{"type":"array","items":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Dynamic.VocabularyType"}},"description":"Filter by one or more vocabulary types."},{"name":"filterIsObsolete","in":"query","schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.ObsoleteKeyFilterEnum"},"description":"Obsolete filter: `All`, `OnlyObsolete`, or `IgnoreObsolete`. Defaults to `All`."},{"name":"filterHasProvider","in":"query","schema":{"type":"boolean"},"description":"When set, restrict to keys with or without a provider."},{"name":"searchName","in":"query","schema":{"type":"string"},"description":"Free-text search over key name."},{"name":"orderBy","in":"query","schema":{"type":"string"},"description":"Field to order by."},{"name":"orderAsc","in":"query","schema":{"type":"boolean","default":true},"description":"Sort direction. Defaults to true (ascending)."},{"name":"filterHasNoSource","in":"query","schema":{"type":"boolean","default":false},"description":"When true, only keys without a source are returned."},{"name":"filterVisibility","in":"query","schema":{"type":"boolean"},"description":"When set, restrict to keys with that visibility."},{"name":"filterIsUsed","in":"query","schema":{"type":"boolean"},"description":"When set, restrict to keys that are (or are not) used."},{"name":"filterExcludeLookups","in":"query","schema":{"type":"boolean","default":false},"description":"When true, exclude vocabulary keys used only as lookups."}],"responses":{"200":{"description":"OK"}},"description":"Returns paged keys for one vocabulary using the same extended filters as `GET /vocabs/allkeys`, including the tri-state obsolete filter, visibility, and lookup exclusion."}},"/api/v1/vocabs/{vocabularyId}/allkeys":{"get":{"tags":["Vocabulary"],"summary":"List keys in a vocabulary (extended filters)","parameters":[{"name":"vocabularyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary identifier."},{"name":"page","in":"query","schema":{"type":"integer","format":"int32","default":0},"description":"0-based page number. Defaults to 0."},{"name":"take","in":"query","schema":{"type":"integer","format":"int32","default":20},"description":"Page size. Defaults to 20."},{"name":"filterDataType","in":"query","schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.VocabularyKeyDataType"},"description":"Filter by vocabulary key data type."},{"name":"filterProviderId","in":"query","schema":{"type":"string","format":"uuid"},"description":"Filter by integration provider id."},{"name":"filterClassification","in":"query","schema":{"type":"string"},"description":"Filter by data classification."},{"name":"filterTypes","in":"query","schema":{"type":"array","items":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Dynamic.VocabularyType"}},"description":"Filter by one or more vocabulary types."},{"name":"filterIsObsolete","in":"query","schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.ObsoleteKeyFilterEnum"},"description":"Obsolete filter: `All`, `OnlyObsolete`, or `IgnoreObsolete`. Defaults to `All`."},{"name":"filterHasProvider","in":"query","schema":{"type":"boolean"},"description":"When set, restrict to keys with or without a provider."},{"name":"searchName","in":"query","schema":{"type":"string"},"description":"Free-text search over key name."},{"name":"orderBy","in":"query","schema":{"type":"string"},"description":"Field to order by."},{"name":"orderAsc","in":"query","schema":{"type":"boolean","default":true},"description":"Sort direction. Defaults to true (ascending)."},{"name":"filterHasNoSource","in":"query","schema":{"type":"boolean","default":false},"description":"When true, only keys without a source are returned."},{"name":"filterVisibility","in":"query","schema":{"type":"boolean"},"description":"When set, restrict to keys with that visibility."},{"name":"filterIsUsed","in":"query","schema":{"type":"boolean"},"description":"When set, restrict to keys that are (or are not) used."},{"name":"filterExcludeLookups","in":"query","schema":{"type":"boolean","default":false},"description":"When true, exclude vocabulary keys used only as lookups."}],"responses":{"200":{"description":"OK"}},"description":"Returns paged keys for one vocabulary using the same extended filters as `GET /vocabs/allkeys`, including the tri-state obsolete filter, visibility, and lookup exclusion."}},"/api/vocabs":{"get":{"tags":["Vocabulary"],"summary":"List vocabularies","parameters":[{"name":"page","in":"query","schema":{"type":"integer","format":"int32","default":0},"description":"0-based page number. Defaults to 0."},{"name":"take","in":"query","schema":{"type":"integer","format":"int32","default":20},"description":"Page size. Defaults to 20."},{"name":"filterGrouping","in":"query","schema":{"type":"string"},"description":"Filter by vocabulary grouping."},{"name":"filterIntegration","in":"query","schema":{"type":"string","format":"uuid"},"description":"Filter by integration provider id."},{"name":"filterIsActive","in":"query","schema":{"type":"boolean"},"description":"When set, only active or inactive vocabularies are returned."},{"name":"filterTypes","in":"query","schema":{"type":"array","items":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Dynamic.VocabularyType"}},"description":"Filter by one or more vocabulary types."},{"name":"searchName","in":"query","schema":{"type":"string"},"description":"Free-text search over vocabulary name."},{"name":"orderBy","in":"query","schema":{"type":"string"},"description":"Field to order by."},{"name":"orderAsc","in":"query","schema":{"type":"boolean","default":true},"description":"Sort direction. Defaults to true (ascending)."},{"name":"filterHasNoSource","in":"query","schema":{"type":"boolean","default":false},"description":"When true, only vocabularies without a source are returned."},{"name":"filterIsUsed","in":"query","schema":{"type":"boolean"},"description":"When set, restricts to vocabularies whose keys are (or are not) referenced."}],"responses":{"200":{"description":"OK"}},"description":"Returns a paged list of vocabularies along with the total count. Filter by grouping, integration provider, active state, vocabulary type, and search text; sort by any supported field."}},"/api/v1/vocabs":{"get":{"tags":["Vocabulary"],"summary":"List vocabularies","parameters":[{"name":"page","in":"query","schema":{"type":"integer","format":"int32","default":0},"description":"0-based page number. Defaults to 0."},{"name":"take","in":"query","schema":{"type":"integer","format":"int32","default":20},"description":"Page size. Defaults to 20."},{"name":"filterGrouping","in":"query","schema":{"type":"string"},"description":"Filter by vocabulary grouping."},{"name":"filterIntegration","in":"query","schema":{"type":"string","format":"uuid"},"description":"Filter by integration provider id."},{"name":"filterIsActive","in":"query","schema":{"type":"boolean"},"description":"When set, only active or inactive vocabularies are returned."},{"name":"filterTypes","in":"query","schema":{"type":"array","items":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Dynamic.VocabularyType"}},"description":"Filter by one or more vocabulary types."},{"name":"searchName","in":"query","schema":{"type":"string"},"description":"Free-text search over vocabulary name."},{"name":"orderBy","in":"query","schema":{"type":"string"},"description":"Field to order by."},{"name":"orderAsc","in":"query","schema":{"type":"boolean","default":true},"description":"Sort direction. Defaults to true (ascending)."},{"name":"filterHasNoSource","in":"query","schema":{"type":"boolean","default":false},"description":"When true, only vocabularies without a source are returned."},{"name":"filterIsUsed","in":"query","schema":{"type":"boolean"},"description":"When set, restricts to vocabularies whose keys are (or are not) referenced."}],"responses":{"200":{"description":"OK"}},"description":"Returns a paged list of vocabularies along with the total count. Filter by grouping, integration provider, active state, vocabulary type, and search text; sort by any supported field."}},"/api/vocabs/key/getbykeynames":{"post":{"tags":["Vocabulary"],"summary":"Get vocabulary keys by names (body)","requestBody":{"content":{"application/json-patch+json":{"schema":{"type":"array","items":{"type":"string"}}},"application/json":{"schema":{"type":"array","items":{"type":"string"}}},"text/json":{"schema":{"type":"array","items":{"type":"string"}}},"application/*+json":{"schema":{"type":"array","items":{"type":"string"}}}}},"responses":{"200":{"description":"OK"}},"description":"Returns vocabulary keys whose fully-qualified names match the supplied list. Posting the names in the body lifts the URL-length limit that the equivalent GET form is subject to."},"get":{"tags":["Vocabulary"],"summary":"Get vocabulary keys by names (query)","parameters":[{"name":"keyNames","in":"query","schema":{"type":"array","items":{"type":"string"}}}],"responses":{"200":{"description":"OK"}},"description":"Returns vocabulary keys whose fully-qualified names match the names passed as repeated `keyNames` query parameters. For longer lists, prefer the POST variant."}},"/api/v1/vocabs/key/getbykeynames":{"post":{"tags":["Vocabulary"],"summary":"Get vocabulary keys by names (body)","requestBody":{"content":{"application/json-patch+json":{"schema":{"type":"array","items":{"type":"string"}}},"application/json":{"schema":{"type":"array","items":{"type":"string"}}},"text/json":{"schema":{"type":"array","items":{"type":"string"}}},"application/*+json":{"schema":{"type":"array","items":{"type":"string"}}}}},"responses":{"200":{"description":"OK"}},"description":"Returns vocabulary keys whose fully-qualified names match the supplied list. Posting the names in the body lifts the URL-length limit that the equivalent GET form is subject to."},"get":{"tags":["Vocabulary"],"summary":"Get vocabulary keys by names (query)","parameters":[{"name":"keyNames","in":"query","schema":{"type":"array","items":{"type":"string"}}}],"responses":{"200":{"description":"OK"}},"description":"Returns vocabulary keys whose fully-qualified names match the names passed as repeated `keyNames` query parameters. For longer lists, prefer the POST variant."}},"/api/vocabs/key/getfilteredkeysbyname":{"post":{"tags":["Vocabulary"],"summary":"Find vocabulary keys by name with filters","requestBody":{"content":{"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.GetFilteredKeysByNameModel"}},"application/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.GetFilteredKeysByNameModel"}},"text/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.GetFilteredKeysByNameModel"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.GetFilteredKeysByNameModel"}}}},"responses":{"200":{"description":"OK"}},"description":"Returns vocabulary keys matching the supplied name search/filter model. Used by the UI for typeahead and selector controls."}},"/api/v1/vocabs/key/getfilteredkeysbyname":{"post":{"tags":["Vocabulary"],"summary":"Find vocabulary keys by name with filters","requestBody":{"content":{"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.GetFilteredKeysByNameModel"}},"application/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.GetFilteredKeysByNameModel"}},"text/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.GetFilteredKeysByNameModel"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.GetFilteredKeysByNameModel"}}}},"responses":{"200":{"description":"OK"}},"description":"Returns vocabulary keys matching the supplied name search/filter model. Used by the UI for typeahead and selector controls."}},"/api/vocabs/vocabulary/{vocabularyId}/key/{vocabularyKeyId}":{"get":{"tags":["Vocabulary"],"summary":"Get a vocabulary key (scoped)","parameters":[{"name":"vocabularyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary identifier."},{"name":"vocabularyKeyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary key identifier."}],"responses":{"200":{"description":"OK"}},"description":"Returns a single vocabulary key by id. The vocabulary id in the path scopes the lookup; the underlying repository call uses the key id."},"delete":{"tags":["Vocabulary"],"summary":"Delete a vocabulary key","parameters":[{"name":"vocabularyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary identifier."},{"name":"vocabularyKeyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary key identifier to delete."},{"name":"mapsToOtherKeyId","in":"query","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK"}},"description":"Deletes a vocabulary key. Returns 400 if the key is still in use and cannot be removed safely; use the remap variant if you want to redirect existing references to another key. The action goes through the RACI approval pipeline for vocabulary-key deletion."}},"/api/v1/vocabs/vocabulary/{vocabularyId}/key/{vocabularyKeyId}":{"get":{"tags":["Vocabulary"],"summary":"Get a vocabulary key (scoped)","parameters":[{"name":"vocabularyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary identifier."},{"name":"vocabularyKeyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary key identifier."}],"responses":{"200":{"description":"OK"}},"description":"Returns a single vocabulary key by id. The vocabulary id in the path scopes the lookup; the underlying repository call uses the key id."},"delete":{"tags":["Vocabulary"],"summary":"Delete a vocabulary key","parameters":[{"name":"vocabularyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary identifier."},{"name":"vocabularyKeyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary key identifier to delete."},{"name":"mapsToOtherKeyId","in":"query","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK"}},"description":"Deletes a vocabulary key. Returns 400 if the key is still in use and cannot be removed safely; use the remap variant if you want to redirect existing references to another key. The action goes through the RACI approval pipeline for vocabulary-key deletion."}},"/api/vocabs/key/{vocabularyKeyId}":{"get":{"tags":["Vocabulary"],"summary":"Get a vocabulary key by id","parameters":[{"name":"vocabularyKeyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary key identifier."}],"responses":{"200":{"description":"OK"}},"description":"Returns a single vocabulary key by id. Equivalent to the scoped variant but without the vocabulary id in the URL."}},"/api/v1/vocabs/key/{vocabularyKeyId}":{"get":{"tags":["Vocabulary"],"summary":"Get a vocabulary key by id","parameters":[{"name":"vocabularyKeyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary key identifier."}],"responses":{"200":{"description":"OK"}},"description":"Returns a single vocabulary key by id. Equivalent to the scoped variant but without the vocabulary id in the URL."}},"/api/vocabs/fullyqualifiedkey/{keyName}":{"get":{"tags":["Vocabulary"],"summary":"Get a vocabulary key by full name","parameters":[{"name":"keyName","in":"path","required":true,"schema":{"type":"string"},"description":"Fully-qualified vocabulary key name."}],"responses":{"200":{"description":"OK"}},"description":"Returns a single vocabulary key by its fully-qualified name (for example `user.email`)."}},"/api/v1/vocabs/fullyqualifiedkey/{keyName}":{"get":{"tags":["Vocabulary"],"summary":"Get a vocabulary key by full name","parameters":[{"name":"keyName","in":"path","required":true,"schema":{"type":"string"},"description":"Fully-qualified vocabulary key name."}],"responses":{"200":{"description":"OK"}},"description":"Returns a single vocabulary key by its fully-qualified name (for example `user.email`)."}},"/api/vocabs/vocabulary":{"post":{"tags":["Vocabulary"],"summary":"Create a vocabulary","requestBody":{"content":{"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.AddVocabularyModel"}},"application/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.AddVocabularyModel"}},"text/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.AddVocabularyModel"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.AddVocabularyModel"}}}},"responses":{"200":{"description":"OK"}},"description":"Creates a new vocabulary from the supplied model. Returns 201 Created with the new vocabulary on success, 409 Conflict if a vocabulary with the same name already exists, or 400 with validation details if the model is invalid. The action goes through the RACI approval pipeline for vocabulary creation."},"put":{"tags":["Vocabulary"],"summary":"Update a vocabulary","requestBody":{"content":{"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.UpdateVocabularyModel"}},"application/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.UpdateVocabularyModel"}},"text/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.UpdateVocabularyModel"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.UpdateVocabularyModel"}}}},"responses":{"200":{"description":"OK"}},"description":"Updates an existing vocabulary from the supplied model. Returns 409 Conflict if the change would collide with another vocabulary name, or 400 with validation details if the model is invalid. The action goes through the RACI approval pipeline for vocabulary updates."},"get":{"tags":["Vocabulary"],"summary":"List all vocabularies (flat)","responses":{"200":{"description":"OK"}},"description":"Returns a flat (unpaged) list of vocabularies visible to the current organization. Use the paged `GET /vocabs` endpoint when filters or paging are needed."}},"/api/v1/vocabs/vocabulary":{"post":{"tags":["Vocabulary"],"summary":"Create a vocabulary","requestBody":{"content":{"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.AddVocabularyModel"}},"application/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.AddVocabularyModel"}},"text/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.AddVocabularyModel"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.AddVocabularyModel"}}}},"responses":{"200":{"description":"OK"}},"description":"Creates a new vocabulary from the supplied model. Returns 201 Created with the new vocabulary on success, 409 Conflict if a vocabulary with the same name already exists, or 400 with validation details if the model is invalid. The action goes through the RACI approval pipeline for vocabulary creation."},"put":{"tags":["Vocabulary"],"summary":"Update a vocabulary","requestBody":{"content":{"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.UpdateVocabularyModel"}},"application/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.UpdateVocabularyModel"}},"text/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.UpdateVocabularyModel"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.UpdateVocabularyModel"}}}},"responses":{"200":{"description":"OK"}},"description":"Updates an existing vocabulary from the supplied model. Returns 409 Conflict if the change would collide with another vocabulary name, or 400 with validation details if the model is invalid. The action goes through the RACI approval pipeline for vocabulary updates."},"get":{"tags":["Vocabulary"],"summary":"List all vocabularies (flat)","responses":{"200":{"description":"OK"}},"description":"Returns a flat (unpaged) list of vocabularies visible to the current organization. Use the paged `GET /vocabs` endpoint when filters or paging are needed."}},"/api/vocabs/vocabulary/{vocabularyId}/activate":{"put":{"tags":["Vocabulary"],"summary":"Activate a vocabulary","parameters":[{"name":"vocabularyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary identifier."}],"responses":{"200":{"description":"OK"}},"description":"Marks a vocabulary as active so it shows up in selectors and other parts of the system that filter by active state."}},"/api/v1/vocabs/vocabulary/{vocabularyId}/activate":{"put":{"tags":["Vocabulary"],"summary":"Activate a vocabulary","parameters":[{"name":"vocabularyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary identifier."}],"responses":{"200":{"description":"OK"}},"description":"Marks a vocabulary as active so it shows up in selectors and other parts of the system that filter by active state."}},"/api/vocabs/key/{vocabularyKeyId}/activate":{"put":{"tags":["Vocabulary"],"summary":"Activate a vocabulary key","parameters":[{"name":"vocabularyKeyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary key identifier."}],"responses":{"200":{"description":"OK"}},"description":"Marks a vocabulary key as active so it shows up in selectors and is available for new mappings, rules, and streams."}},"/api/v1/vocabs/key/{vocabularyKeyId}/activate":{"put":{"tags":["Vocabulary"],"summary":"Activate a vocabulary key","parameters":[{"name":"vocabularyKeyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary key identifier."}],"responses":{"200":{"description":"OK"}},"description":"Marks a vocabulary key as active so it shows up in selectors and is available for new mappings, rules, and streams."}},"/api/vocabs/key":{"post":{"tags":["Vocabulary"],"summary":"Create a vocabulary key","requestBody":{"content":{"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.AddVocabularyKeyModel"}},"application/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.AddVocabularyKeyModel"}},"text/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.AddVocabularyKeyModel"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.AddVocabularyKeyModel"}}}},"responses":{"200":{"description":"OK"}},"description":"Creates a new vocabulary key from the supplied model. Returns 201 Created on success, 409 Conflict if the key name already exists in the vocabulary, or 400 with validation details when the model fails validation. The action goes through the RACI approval pipeline for vocabulary-key creation."},"put":{"tags":["Vocabulary"],"summary":"Update a vocabulary key","requestBody":{"content":{"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.UpdateVocabularyKeyModel"}},"application/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.UpdateVocabularyKeyModel"}},"text/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.UpdateVocabularyKeyModel"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.UpdateVocabularyKeyModel"}}}},"responses":{"200":{"description":"OK"}},"description":"Updates an existing vocabulary key from the supplied model. Returns 423 Locked if a reindex is already running for this key, 400 if the change would create a circular mapping, or 400 with validation details when the model fails validation. The action goes through the RACI approval pipeline for vocabulary-key updates."}},"/api/v1/vocabs/key":{"post":{"tags":["Vocabulary"],"summary":"Create a vocabulary key","requestBody":{"content":{"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.AddVocabularyKeyModel"}},"application/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.AddVocabularyKeyModel"}},"text/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.AddVocabularyKeyModel"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.AddVocabularyKeyModel"}}}},"responses":{"200":{"description":"OK"}},"description":"Creates a new vocabulary key from the supplied model. Returns 201 Created on success, 409 Conflict if the key name already exists in the vocabulary, or 400 with validation details when the model fails validation. The action goes through the RACI approval pipeline for vocabulary-key creation."},"put":{"tags":["Vocabulary"],"summary":"Update a vocabulary key","requestBody":{"content":{"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.UpdateVocabularyKeyModel"}},"application/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.UpdateVocabularyKeyModel"}},"text/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.UpdateVocabularyKeyModel"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.UpdateVocabularyKeyModel"}}}},"responses":{"200":{"description":"OK"}},"description":"Updates an existing vocabulary key from the supplied model. Returns 423 Locked if a reindex is already running for this key, 400 if the change would create a circular mapping, or 400 with validation details when the model fails validation. The action goes through the RACI approval pipeline for vocabulary-key updates."}},"/api/vocabs/key/rename":{"put":{"tags":["Vocabulary"],"summary":"Rename a vocabulary key","requestBody":{"content":{"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.RenameVocabularyKeyModel"}},"application/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.RenameVocabularyKeyModel"}},"text/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.RenameVocabularyKeyModel"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.RenameVocabularyKeyModel"}}}},"responses":{"200":{"description":"OK"}},"description":"Renames a vocabulary key. Returns 400 if the new name collides with an existing key in the same vocabulary or fails validation. The action goes through the RACI approval pipeline for vocabulary-key rename."}},"/api/v1/vocabs/key/rename":{"put":{"tags":["Vocabulary"],"summary":"Rename a vocabulary key","requestBody":{"content":{"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.RenameVocabularyKeyModel"}},"application/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.RenameVocabularyKeyModel"}},"text/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.RenameVocabularyKeyModel"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.RenameVocabularyKeyModel"}}}},"responses":{"200":{"description":"OK"}},"description":"Renames a vocabulary key. Returns 400 if the new name collides with an existing key in the same vocabulary or fails validation. The action goes through the RACI approval pipeline for vocabulary-key rename."}},"/api/vocabs/refresh":{"get":{"tags":["Vocabulary"],"summary":"Refresh vocabularies from the database","responses":{"200":{"description":"OK"}},"description":"Re-initialises the vocabulary cache from the database and returns the full list of vocabularies. Use this when the in-memory state has drifted from persistent storage, for example after an out-of-band update."}},"/api/v1/vocabs/refresh":{"get":{"tags":["Vocabulary"],"summary":"Refresh vocabularies from the database","responses":{"200":{"description":"OK"}},"description":"Re-initialises the vocabulary cache from the database and returns the full list of vocabularies. Use this when the in-memory state has drifted from persistent storage, for example after an out-of-band update."}},"/api/vocabs/vocabulary/{vocabularyId}/groups":{"get":{"tags":["Vocabulary"],"summary":"List groups for a vocabulary","parameters":[{"name":"vocabularyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary identifier."}],"responses":{"200":{"description":"OK"}},"description":"Returns the grouping structure used to organise keys inside a vocabulary."}},"/api/v1/vocabs/vocabulary/{vocabularyId}/groups":{"get":{"tags":["Vocabulary"],"summary":"List groups for a vocabulary","parameters":[{"name":"vocabularyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary identifier."}],"responses":{"200":{"description":"OK"}},"description":"Returns the grouping structure used to organise keys inside a vocabulary."}},"/api/vocabs/vocabulary/{vocabularyId}":{"get":{"tags":["Vocabulary"],"summary":"Get a vocabulary","parameters":[{"name":"vocabularyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary identifier."}],"responses":{"200":{"description":"OK"}},"description":"Returns a single vocabulary by id."},"delete":{"tags":["Vocabulary"],"summary":"Delete a vocabulary","parameters":[{"name":"vocabularyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary identifier."}],"responses":{"200":{"description":"OK"}},"description":"Deletes a vocabulary. Returns 400 if any of its keys are still in use. The action goes through the RACI approval pipeline for vocabulary deletion."}},"/api/v1/vocabs/vocabulary/{vocabularyId}":{"get":{"tags":["Vocabulary"],"summary":"Get a vocabulary","parameters":[{"name":"vocabularyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary identifier."}],"responses":{"200":{"description":"OK"}},"description":"Returns a single vocabulary by id."},"delete":{"tags":["Vocabulary"],"summary":"Delete a vocabulary","parameters":[{"name":"vocabularyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary identifier."}],"responses":{"200":{"description":"OK"}},"description":"Deletes a vocabulary. Returns 400 if any of its keys are still in use. The action goes through the RACI approval pipeline for vocabulary deletion."}},"/api/vocabs/vocabularybyname/{name}":{"get":{"tags":["Vocabulary"],"summary":"Get a vocabulary by name","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"},"description":"Vocabulary name."}],"responses":{"200":{"description":"OK"}},"description":"Returns a single vocabulary whose name matches the supplied value."}},"/api/v1/vocabs/vocabularybyname/{name}":{"get":{"tags":["Vocabulary"],"summary":"Get a vocabulary by name","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"},"description":"Vocabulary name."}],"responses":{"200":{"description":"OK"}},"description":"Returns a single vocabulary whose name matches the supplied value."}},"/api/vocabs/vocabulary/{vocabularyId}/verifykeyname/{keyName}":{"get":{"tags":["Vocabulary"],"summary":"Verify a vocabulary key name","parameters":[{"name":"vocabularyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary identifier."},{"name":"keyName","in":"path","required":true,"schema":{"type":"string"},"description":"Vocabulary key name to validate."}],"responses":{"200":{"description":"OK"}},"description":"Validates whether the supplied key name is available and well-formed inside the given vocabulary. Used by the UI to check key names before submitting a create or rename request."}},"/api/v1/vocabs/vocabulary/{vocabularyId}/verifykeyname/{keyName}":{"get":{"tags":["Vocabulary"],"summary":"Verify a vocabulary key name","parameters":[{"name":"vocabularyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary identifier."},{"name":"keyName","in":"path","required":true,"schema":{"type":"string"},"description":"Vocabulary key name to validate."}],"responses":{"200":{"description":"OK"}},"description":"Validates whether the supplied key name is available and well-formed inside the given vocabulary. Used by the UI to check key names before submitting a create or rename request."}},"/api/vocabs/keys/exist":{"post":{"tags":["Vocabulary"],"summary":"Check whether vocabulary keys exist","requestBody":{"content":{"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.Vocabs.VocabularyController+KeysExistModel"}},"application/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.Vocabs.VocabularyController+KeysExistModel"}},"text/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.Vocabs.VocabularyController+KeysExistModel"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.Vocabs.VocabularyController+KeysExistModel"}}}},"responses":{"200":{"description":"OK"}},"description":"Given a list of fully-qualified key names in the body, returns which of them already exist in the catalog. Useful for bulk-import flows that need to detect collisions before creating keys."}},"/api/v1/vocabs/keys/exist":{"post":{"tags":["Vocabulary"],"summary":"Check whether vocabulary keys exist","requestBody":{"content":{"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.Vocabs.VocabularyController+KeysExistModel"}},"application/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.Vocabs.VocabularyController+KeysExistModel"}},"text/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.Vocabs.VocabularyController+KeysExistModel"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Server.WebApi.Controllers.Vocabs.VocabularyController+KeysExistModel"}}}},"responses":{"200":{"description":"OK"}},"description":"Given a list of fully-qualified key names in the body, returns which of them already exist in the catalog. Useful for bulk-import flows that need to detect collisions before creating keys."}},"/api/vocabs/vocabulary/prefixexists/{keyPrefix}":{"get":{"tags":["Vocabulary"],"summary":"Check whether a vocabulary prefix is taken","parameters":[{"name":"keyPrefix","in":"path","required":true,"schema":{"type":"string"},"description":"Vocabulary key prefix to test."}],"responses":{"200":{"description":"OK"}},"description":"Returns true if any vocabulary in the organisation already uses the supplied key prefix (case-insensitive comparison)."}},"/api/v1/vocabs/vocabulary/prefixexists/{keyPrefix}":{"get":{"tags":["Vocabulary"],"summary":"Check whether a vocabulary prefix is taken","parameters":[{"name":"keyPrefix","in":"path","required":true,"schema":{"type":"string"},"description":"Vocabulary key prefix to test."}],"responses":{"200":{"description":"OK"}},"description":"Returns true if any vocabulary in the organisation already uses the supplied key prefix (case-insensitive comparison)."}},"/api/vocabs/dataclassifications":{"get":{"tags":["Vocabulary"],"summary":"List data classifications","responses":{"200":{"description":"OK"}},"description":"Returns the list of data-classification values (for example `PII`, `Sensitive`) that vocabulary keys can be tagged with."}},"/api/v1/vocabs/dataclassifications":{"get":{"tags":["Vocabulary"],"summary":"List data classifications","responses":{"200":{"description":"OK"}},"description":"Returns the list of data-classification values (for example `PII`, `Sensitive`) that vocabulary keys can be tagged with."}},"/api/vocabs/sources":{"get":{"tags":["Vocabulary"],"summary":"List vocabulary sources","parameters":[{"name":"ids","in":"query","schema":{"type":"array","items":{"type":"string","format":"uuid"}},"description":"Optional list of source ids to include."}],"responses":{"200":{"description":"OK"}},"description":"Returns the providers/sources that vocabularies and keys can be associated with. An optional `ids` query parameter narrows the list to specific source ids."}},"/api/v1/vocabs/sources":{"get":{"tags":["Vocabulary"],"summary":"List vocabulary sources","parameters":[{"name":"ids","in":"query","schema":{"type":"array","items":{"type":"string","format":"uuid"}},"description":"Optional list of source ids to include."}],"responses":{"200":{"description":"OK"}},"description":"Returns the providers/sources that vocabularies and keys can be associated with. An optional `ids` query parameter narrows the list to specific source ids."}},"/api/vocabs/datatypes":{"get":{"tags":["Vocabulary"],"summary":"List vocabulary key data types","responses":{"200":{"description":"OK"}},"description":"Returns the supported data types that a vocabulary key can take, used to populate selectors when creating or editing keys."}},"/api/v1/vocabs/datatypes":{"get":{"tags":["Vocabulary"],"summary":"List vocabulary key data types","responses":{"200":{"description":"OK"}},"description":"Returns the supported data types that a vocabulary key can take, used to populate selectors when creating or editing keys."}},"/api/vocabs/vocabulary/{vocabularyId}/key/{vocabularyKeyId}/mapstokey/{mapsToOtherKeyId}":{"delete":{"tags":["Vocabulary"],"summary":"Delete a vocabulary key (with remap)","parameters":[{"name":"vocabularyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary identifier."},{"name":"vocabularyKeyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary key identifier to delete."},{"name":"mapsToOtherKeyId","in":"query","schema":{"type":"string","format":"uuid"},"description":"Identifier of the key that existing references should be remapped to."}],"responses":{"200":{"description":"OK"}},"description":"Deletes a vocabulary key and remaps its existing references to another key, so dependent rules, streams and mappings continue to work. Returns 400 if the key cannot be deleted because it is still in use beyond what the remap can handle. The action goes through the RACI approval pipeline for vocabulary-key deletion."}},"/api/v1/vocabs/vocabulary/{vocabularyId}/key/{vocabularyKeyId}/mapstokey/{mapsToOtherKeyId}":{"delete":{"tags":["Vocabulary"],"summary":"Delete a vocabulary key (with remap)","parameters":[{"name":"vocabularyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary identifier."},{"name":"vocabularyKeyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary key identifier to delete."},{"name":"mapsToOtherKeyId","in":"query","schema":{"type":"string","format":"uuid"},"description":"Identifier of the key that existing references should be remapped to."}],"responses":{"200":{"description":"OK"}},"description":"Deletes a vocabulary key and remaps its existing references to another key, so dependent rules, streams and mappings continue to work. Returns 400 if the key cannot be deleted because it is still in use beyond what the remap can handle. The action goes through the RACI approval pipeline for vocabulary-key deletion."}},"/api/vocabs/vocabulary/{vocabularyId}/isowner/{userId}":{"get":{"tags":["Vocabulary"],"summary":"Check whether a user owns a vocabulary","parameters":[{"name":"vocabularyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary identifier."},{"name":"userId","in":"path","required":true,"schema":{"type":"string"},"description":"User identifier."}],"responses":{"200":{"description":"OK"}},"description":"Returns whether the supplied user id is registered as an owner of the vocabulary."}},"/api/v1/vocabs/vocabulary/{vocabularyId}/isowner/{userId}":{"get":{"tags":["Vocabulary"],"summary":"Check whether a user owns a vocabulary","parameters":[{"name":"vocabularyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary identifier."},{"name":"userId","in":"path","required":true,"schema":{"type":"string"},"description":"User identifier."}],"responses":{"200":{"description":"OK"}},"description":"Returns whether the supplied user id is registered as an owner of the vocabulary."}},"/api/vocabs/vocabulary/{vocabularyId}/owners":{"get":{"tags":["Vocabulary"],"summary":"List vocabulary owners","parameters":[{"name":"vocabularyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary identifier."}],"responses":{"200":{"description":"OK"}},"description":"Returns the users registered as owners of the vocabulary."},"post":{"tags":["Vocabulary"],"summary":"Add vocabulary owners","parameters":[{"name":"vocabularyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary identifier."},{"name":"userId","in":"query","schema":{"type":"array","items":{"type":"string"}},"description":"One or more user ids to grant ownership to."}],"responses":{"200":{"description":"OK"}},"description":"Adds the supplied user ids as owners of the vocabulary. Pass user ids as repeated `userId` query parameters."},"delete":{"tags":["Vocabulary"],"summary":"Remove vocabulary owners","parameters":[{"name":"vocabularyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary identifier."},{"name":"userId","in":"query","schema":{"type":"array","items":{"type":"string"}},"description":"One or more user ids to remove from ownership."}],"responses":{"200":{"description":"OK"}},"description":"Removes the supplied user ids from the vocabulary's owner list. Pass user ids as repeated `userId` query parameters."}},"/api/v1/vocabs/vocabulary/{vocabularyId}/owners":{"get":{"tags":["Vocabulary"],"summary":"List vocabulary owners","parameters":[{"name":"vocabularyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary identifier."}],"responses":{"200":{"description":"OK"}},"description":"Returns the users registered as owners of the vocabulary."},"post":{"tags":["Vocabulary"],"summary":"Add vocabulary owners","parameters":[{"name":"vocabularyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary identifier."},{"name":"userId","in":"query","schema":{"type":"array","items":{"type":"string"}},"description":"One or more user ids to grant ownership to."}],"responses":{"200":{"description":"OK"}},"description":"Adds the supplied user ids as owners of the vocabulary. Pass user ids as repeated `userId` query parameters."},"delete":{"tags":["Vocabulary"],"summary":"Remove vocabulary owners","parameters":[{"name":"vocabularyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary identifier."},{"name":"userId","in":"query","schema":{"type":"array","items":{"type":"string"}},"description":"One or more user ids to remove from ownership."}],"responses":{"200":{"description":"OK"}},"description":"Removes the supplied user ids from the vocabulary's owner list. Pass user ids as repeated `userId` query parameters."}},"/api/vocabs/reprocesskey/{keyName}":{"post":{"tags":["Vocabulary"],"summary":"Reprocess a vocabulary key","parameters":[{"name":"keyName","in":"path","required":true,"schema":{"type":"string"},"description":"Fully-qualified vocabulary key name to reprocess."}],"responses":{"200":{"description":"OK"}},"description":"Requests a reindex/reprocess of a specific vocabulary key by publishing a vocabulary-key reindex event. Returns 202 Accepted when the request is queued; returns 200 silently if the key cannot be resolved by name (so callers can fire-and-forget)."}},"/api/v1/vocabs/reprocesskey/{keyName}":{"post":{"tags":["Vocabulary"],"summary":"Reprocess a vocabulary key","parameters":[{"name":"keyName","in":"path","required":true,"schema":{"type":"string"},"description":"Fully-qualified vocabulary key name to reprocess."}],"responses":{"200":{"description":"OK"}},"description":"Requests a reindex/reprocess of a specific vocabulary key by publishing a vocabulary-key reindex event. Returns 202 Accepted when the request is queued; returns 200 silently if the key cannot be resolved by name (so callers can fire-and-forget)."}},"/api/vocabs/upgradeprogress":{"get":{"tags":["Vocabulary"],"summary":"Get strong-typed reindex progress","responses":{"200":{"description":"OK"}},"description":"Returns the current progress of the strong-typed vocabulary-key reindex across the organisation."}},"/api/v1/vocabs/upgradeprogress":{"get":{"tags":["Vocabulary"],"summary":"Get strong-typed reindex progress","responses":{"200":{"description":"OK"}},"description":"Returns the current progress of the strong-typed vocabulary-key reindex across the organisation."}},"/api/vocabs/typedkeythreshold":{"get":{"tags":["Vocabulary"],"summary":"Check typed-key field threshold","responses":{"200":{"description":"OK"}},"description":"Returns whether the organisation is at risk of hitting the Elasticsearch field-mapping explosion threshold given the current set of typed vocabulary keys. Use it to surface a warning before adding more typed keys."}},"/api/v1/vocabs/typedkeythreshold":{"get":{"tags":["Vocabulary"],"summary":"Check typed-key field threshold","responses":{"200":{"description":"OK"}},"description":"Returns whether the organisation is at risk of hitting the Elasticsearch field-mapping explosion threshold given the current set of typed vocabulary keys. Use it to surface a warning before adding more typed keys."}},"/api/vocabs/reindexrunning/{vocabularyKey}":{"get":{"tags":["Vocabulary"],"summary":"Check whether a key reindex is running","parameters":[{"name":"vocabularyKey","in":"path","required":true,"schema":{"type":"string"},"description":"Fully-qualified vocabulary key name."}],"responses":{"200":{"description":"OK"}},"description":"Returns whether a reindex is currently running for the supplied vocabulary key. Returns false when the key cannot be resolved."}},"/api/v1/vocabs/reindexrunning/{vocabularyKey}":{"get":{"tags":["Vocabulary"],"summary":"Check whether a key reindex is running","parameters":[{"name":"vocabularyKey","in":"path","required":true,"schema":{"type":"string"},"description":"Fully-qualified vocabulary key name."}],"responses":{"200":{"description":"OK"}},"description":"Returns whether a reindex is currently running for the supplied vocabulary key. Returns false when the key cannot be resolved."}},"/api/vocabs/vocabulary/checkprefix":{"get":{"tags":["Vocabulary"],"summary":"Check whether a vocabulary prefix is unique","parameters":[{"name":"prefix","in":"query","schema":{"type":"string"},"description":"Vocabulary key prefix to test."}],"responses":{"200":{"description":"OK"}},"description":"Returns whether the supplied vocabulary key prefix is unique within the organisation. If a collision is found, the matching vocabulary is included in the response so the UI can link to it."}},"/api/v1/vocabs/vocabulary/checkprefix":{"get":{"tags":["Vocabulary"],"summary":"Check whether a vocabulary prefix is unique","parameters":[{"name":"prefix","in":"query","schema":{"type":"string"},"description":"Vocabulary key prefix to test."}],"responses":{"200":{"description":"OK"}},"description":"Returns whether the supplied vocabulary key prefix is unique within the organisation. If a collision is found, the matching vocabulary is included in the response so the UI can link to it."}},"/api/vocabs/vocabularykeymapping/validate/{originalKeyId}/{mappedKeyId}":{"get":{"tags":["Vocabulary"],"summary":"Validate a vocabulary key mapping","parameters":[{"name":"originalKeyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Source vocabulary key identifier."},{"name":"mappedKeyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Target vocabulary key identifier."}],"responses":{"200":{"description":"OK"}},"description":"Validates that mapping `originalKeyId` to `mappedKeyId` is allowed (compatible data types, no cycle, etc.). Returns 404 if either key cannot be found."}},"/api/v1/vocabs/vocabularykeymapping/validate/{originalKeyId}/{mappedKeyId}":{"get":{"tags":["Vocabulary"],"summary":"Validate a vocabulary key mapping","parameters":[{"name":"originalKeyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Source vocabulary key identifier."},{"name":"mappedKeyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Target vocabulary key identifier."}],"responses":{"200":{"description":"OK"}},"description":"Validates that mapping `originalKeyId` to `mappedKeyId` is allowed (compatible data types, no cycle, etc.). Returns 404 if either key cannot be found."}},"/api/vocabs/vocabularykeysindexfieldmappings":{"post":{"tags":["Vocabulary"],"summary":"Get index field mappings for vocabulary keys","requestBody":{"content":{"application/json-patch+json":{"schema":{"type":"array","items":{"type":"string"}}},"application/json":{"schema":{"type":"array","items":{"type":"string"}}},"text/json":{"schema":{"type":"array","items":{"type":"string"}}},"application/*+json":{"schema":{"type":"array","items":{"type":"string"}}}}},"responses":{"200":{"description":"OK"}},"description":"Returns the Elasticsearch field names and data types used to index the supplied vocabulary keys. Posting the names in the body lifts the URL-length limit of the equivalent GET form."}},"/api/v1/vocabs/vocabularykeysindexfieldmappings":{"post":{"tags":["Vocabulary"],"summary":"Get index field mappings for vocabulary keys","requestBody":{"content":{"application/json-patch+json":{"schema":{"type":"array","items":{"type":"string"}}},"application/json":{"schema":{"type":"array","items":{"type":"string"}}},"text/json":{"schema":{"type":"array","items":{"type":"string"}}},"application/*+json":{"schema":{"type":"array","items":{"type":"string"}}}}},"responses":{"200":{"description":"OK"}},"description":"Returns the Elasticsearch field names and data types used to index the supplied vocabulary keys. Posting the names in the body lifts the URL-length limit of the equivalent GET form."}},"/api/vocabs/vocabularykeyindexfieldmapping":{"get":{"tags":["Vocabulary"],"summary":"Get index field mapping for a vocabulary key","parameters":[{"name":"vocabularyKey","in":"query","schema":{"type":"string"},"description":"Fully-qualified vocabulary key name."}],"responses":{"200":{"description":"OK"}},"description":"Returns the Elasticsearch field name and data type used to index a single vocabulary key."}},"/api/v1/vocabs/vocabularykeyindexfieldmapping":{"get":{"tags":["Vocabulary"],"summary":"Get index field mapping for a vocabulary key","parameters":[{"name":"vocabularyKey","in":"query","schema":{"type":"string"},"description":"Fully-qualified vocabulary key name."}],"responses":{"200":{"description":"OK"}},"description":"Returns the Elasticsearch field name and data type used to index a single vocabulary key."}},"/api/vocabs/keys/linage":{"post":{"tags":["Vocabulary"],"summary":"Get mapping lineage for vocabulary keys","requestBody":{"content":{"application/json-patch+json":{"schema":{"type":"array","items":{"type":"string"}}},"application/json":{"schema":{"type":"array","items":{"type":"string"}}},"text/json":{"schema":{"type":"array","items":{"type":"string"}}},"application/*+json":{"schema":{"type":"array","items":{"type":"string"}}}}},"responses":{"200":{"description":"OK"}},"description":"Returns mapping chains (lineage) for the supplied vocabulary keys. Keys without any chain are still included in the response with an empty `chains` list, so clients always receive an entry per input key. (Note: the path is `keys/linage` — `linage` is a legacy spelling kept for backwards compatibility.)"}},"/api/v1/vocabs/keys/linage":{"post":{"tags":["Vocabulary"],"summary":"Get mapping lineage for vocabulary keys","requestBody":{"content":{"application/json-patch+json":{"schema":{"type":"array","items":{"type":"string"}}},"application/json":{"schema":{"type":"array","items":{"type":"string"}}},"text/json":{"schema":{"type":"array","items":{"type":"string"}}},"application/*+json":{"schema":{"type":"array","items":{"type":"string"}}}}},"responses":{"200":{"description":"OK"}},"description":"Returns mapping chains (lineage) for the supplied vocabulary keys. Keys without any chain are still included in the response with an empty `chains` list, so clients always receive an entry per input key. (Note: the path is `keys/linage` — `linage` is a legacy spelling kept for backwards compatibility.)"}},"/api/vocabs/keyselectorkeys":{"get":{"tags":["Vocabulary"],"summary":"List keys for the key selector","parameters":[{"name":"filterGrouping","in":"query","schema":{"type":"string"},"description":"Filter by vocabulary grouping."},{"name":"filterIntegration","in":"query","schema":{"type":"string","format":"uuid"},"description":"Filter by integration provider id."},{"name":"filterIsActive","in":"query","schema":{"type":"boolean"},"description":"When set, only active or inactive keys are returned."},{"name":"filterIsObsolete","in":"query","schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.ObsoleteKeyFilterEnum"},"description":"Obsolete filter: `All`, `OnlyObsolete`, or `IgnoreObsolete`. Defaults to `All`."},{"name":"searchName","in":"query","schema":{"type":"string"},"description":"Free-text search over key name."},{"name":"filterHasNoSource","in":"query","schema":{"type":"boolean","default":false},"description":"When true, only keys without a source are returned."},{"name":"filterIsUsed","in":"query","schema":{"type":"boolean"},"description":"When set, restrict to keys that are (or are not) used."},{"name":"filterExcludeLookups","in":"query","schema":{"type":"boolean","default":false},"description":"When true, exclude vocabulary keys used only as lookups."}],"responses":{"200":{"description":"OK"}},"description":"Returns a compact set of vocabulary keys suitable for the UI key-selector control, with the same filter options as `/vocabs/allkeys`."}},"/api/v1/vocabs/keyselectorkeys":{"get":{"tags":["Vocabulary"],"summary":"List keys for the key selector","parameters":[{"name":"filterGrouping","in":"query","schema":{"type":"string"},"description":"Filter by vocabulary grouping."},{"name":"filterIntegration","in":"query","schema":{"type":"string","format":"uuid"},"description":"Filter by integration provider id."},{"name":"filterIsActive","in":"query","schema":{"type":"boolean"},"description":"When set, only active or inactive keys are returned."},{"name":"filterIsObsolete","in":"query","schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.ObsoleteKeyFilterEnum"},"description":"Obsolete filter: `All`, `OnlyObsolete`, or `IgnoreObsolete`. Defaults to `All`."},{"name":"searchName","in":"query","schema":{"type":"string"},"description":"Free-text search over key name."},{"name":"filterHasNoSource","in":"query","schema":{"type":"boolean","default":false},"description":"When true, only keys without a source are returned."},{"name":"filterIsUsed","in":"query","schema":{"type":"boolean"},"description":"When set, restrict to keys that are (or are not) used."},{"name":"filterExcludeLookups","in":"query","schema":{"type":"boolean","default":false},"description":"When true, exclude vocabulary keys used only as lookups."}],"responses":{"200":{"description":"OK"}},"description":"Returns a compact set of vocabulary keys suitable for the UI key-selector control, with the same filter options as `/vocabs/allkeys`."}},"/api/vocabusage/vocabulary/{vocabularyId}/key/{vocabularyKeyId}/lineage":{"get":{"tags":["VocabularyUsage"],"summary":"Get vocabulary key lineage","parameters":[{"name":"vocabularyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary identifier."},{"name":"vocabularyKeyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary key identifier."}],"responses":{"200":{"description":"OK"}},"description":"Returns the lineage of a single vocabulary key: the chain of upstream keys and mappings that contributed to its current values. Used by the UI to render the lineage view next to a key."}},"/api/v1/vocabusage/vocabulary/{vocabularyId}/key/{vocabularyKeyId}/lineage":{"get":{"tags":["VocabularyUsage"],"summary":"Get vocabulary key lineage","parameters":[{"name":"vocabularyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary identifier."},{"name":"vocabularyKeyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary key identifier."}],"responses":{"200":{"description":"OK"}},"description":"Returns the lineage of a single vocabulary key: the chain of upstream keys and mappings that contributed to its current values. Used by the UI to render the lineage view next to a key."}},"/api/vocabusage/vocabulary/{vocabularyId}/key/{vocabularyKeyId}/usage":{"get":{"tags":["VocabularyUsage"],"summary":"Get vocabulary key usage","parameters":[{"name":"vocabularyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary identifier."},{"name":"vocabularyKeyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary key identifier."},{"name":"resolveMappedKeys","in":"query","schema":{"type":"boolean","default":false},"description":"When true, follow vocabulary-key-to-key mappings and include usage of mapped keys. Defaults to false."}],"responses":{"200":{"description":"OK"}},"description":"Returns the places where a vocabulary key is referenced (rules, streams, mappings, glossary terms, etc.). When `resolveMappedKeys=true`, the response also includes usage of keys that map onto this one, giving a fuller blast radius for changes."}},"/api/v1/vocabusage/vocabulary/{vocabularyId}/key/{vocabularyKeyId}/usage":{"get":{"tags":["VocabularyUsage"],"summary":"Get vocabulary key usage","parameters":[{"name":"vocabularyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary identifier."},{"name":"vocabularyKeyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary key identifier."},{"name":"resolveMappedKeys","in":"query","schema":{"type":"boolean","default":false},"description":"When true, follow vocabulary-key-to-key mappings and include usage of mapped keys. Defaults to false."}],"responses":{"200":{"description":"OK"}},"description":"Returns the places where a vocabulary key is referenced (rules, streams, mappings, glossary terms, etc.). When `resolveMappedKeys=true`, the response also includes usage of keys that map onto this one, giving a fuller blast radius for changes."}},"/api/vocabusage/vocabulary/{vocabularyId}/usage":{"get":{"tags":["VocabularyUsage"],"summary":"Get vocabulary usage","parameters":[{"name":"vocabularyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary identifier."}],"responses":{"200":{"description":"OK"}},"description":"Returns aggregated usage information for an entire vocabulary — where its keys are referenced and consumed across the platform."}},"/api/v1/vocabusage/vocabulary/{vocabularyId}/usage":{"get":{"tags":["VocabularyUsage"],"summary":"Get vocabulary usage","parameters":[{"name":"vocabularyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary identifier."}],"responses":{"200":{"description":"OK"}},"description":"Returns aggregated usage information for an entire vocabulary — where its keys are referenced and consumed across the platform."}},"/api/vocabusage/vocabulary/{vocabularyId}/hasdata":{"get":{"tags":["VocabularyUsage"],"summary":"Check whether a vocabulary has data","parameters":[{"name":"vocabularyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary identifier."}],"responses":{"200":{"description":"OK"}},"description":"Returns whether any indexed data uses keys from this vocabulary. Useful as a quick pre-check before potentially destructive operations such as deleting a vocabulary."}},"/api/v1/vocabusage/vocabulary/{vocabularyId}/hasdata":{"get":{"tags":["VocabularyUsage"],"summary":"Check whether a vocabulary has data","parameters":[{"name":"vocabularyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary identifier."}],"responses":{"200":{"description":"OK"}},"description":"Returns whether any indexed data uses keys from this vocabulary. Useful as a quick pre-check before potentially destructive operations such as deleting a vocabulary."}},"/api/vocabusage/vocabulary/{vocabularyId}/key/{vocabularyKeyId}/hasdata":{"get":{"tags":["VocabularyUsage"],"summary":"Check whether a vocabulary key has data","parameters":[{"name":"vocabularyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary identifier."},{"name":"vocabularyKeyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary key identifier."}],"responses":{"200":{"description":"OK"}},"description":"Returns whether any indexed data uses this specific vocabulary key. Useful before destructive key operations such as deletion or rename."}},"/api/v1/vocabusage/vocabulary/{vocabularyId}/key/{vocabularyKeyId}/hasdata":{"get":{"tags":["VocabularyUsage"],"summary":"Check whether a vocabulary key has data","parameters":[{"name":"vocabularyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary identifier."},{"name":"vocabularyKeyId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Vocabulary key identifier."}],"responses":{"200":{"description":"OK"}},"description":"Returns whether any indexed data uses this specific vocabulary key. Useful before destructive key operations such as deletion or rename."}},"/api/vocabusage/vocabularyimpactedkeys/{key}":{"get":{"tags":["VocabularyUsage"],"summary":"List vocabulary keys impacted by a keychain","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"},"description":"Keychain expression to unravel."}],"responses":{"200":{"description":"OK"}},"description":"Given a keychain expression, returns every vocabulary key it resolves to. The keychain is unravelled with `VocabUtilities.UnravelVocabFromKeychainAsync` so callers can pre-compute the impact of changes to a composite expression."}},"/api/v1/vocabusage/vocabularyimpactedkeys/{key}":{"get":{"tags":["VocabularyUsage"],"summary":"List vocabulary keys impacted by a keychain","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"},"description":"Keychain expression to unravel."}],"responses":{"200":{"description":"OK"}},"description":"Given a keychain expression, returns every vocabulary key it resolves to. The keychain is unravelled with `VocabUtilities.UnravelVocabFromKeychainAsync` so callers can pre-compute the impact of changes to a composite expression."}},"/api/vocabusage/impactfromupdate":{"post":{"tags":["VocabularyUsage"],"summary":"Preview impact of a vocabulary key update","requestBody":{"content":{"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.UpdateVocabularyKeyImpactModel"}},"application/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.UpdateVocabularyKeyImpactModel"}},"text/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.UpdateVocabularyKeyImpactModel"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.UpdateVocabularyKeyImpactModel"}}}},"responses":{"200":{"description":"OK"}},"description":"Returns the services and downstream artifacts that would be affected by a proposed update to a vocabulary key — for example a mapping change or rename. Returns 400 when the proposed change would create a circular mapping (a key mapping to itself, directly or transitively)."}},"/api/v1/vocabusage/impactfromupdate":{"post":{"tags":["VocabularyUsage"],"summary":"Preview impact of a vocabulary key update","requestBody":{"content":{"application/json-patch+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.UpdateVocabularyKeyImpactModel"}},"application/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.UpdateVocabularyKeyImpactModel"}},"text/json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.UpdateVocabularyKeyImpactModel"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.Models.UpdateVocabularyKeyImpactModel"}}}},"responses":{"200":{"description":"OK"}},"description":"Returns the services and downstream artifacts that would be affected by a proposed update to a vocabulary key — for example a mapping change or rename. Returns 400 when the proposed change would create a circular mapping (a key mapping to itself, directly or transitively)."}}},"components":{"schemas":{"CluedIn.Core.Data.Vocabularies.VocabularyKeyDataType":{"enum":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27],"type":"integer","format":"int32"},"CluedIn.Core.Data.Vocabularies.Dynamic.VocabularyType":{"enum":[1,2,3],"type":"integer","format":"int32"},"CluedIn.Core.Data.Vocabularies.Models.AddVocabularyKeyModel":{"required":["displayName","groupName","name","vocabularyId"],"type":"object","properties":{"vocabularyId":{"type":"string","format":"uuid"},"displayName":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"dataType":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.VocabularyKeyDataType"},"storage":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.VocabularyKeyStorage"},"analyzer":{"type":"string","nullable":true},"isVisible":{"type":"boolean"},"groupName":{"minLength":1,"type":"string"},"dataAnnotationsIsPrimaryKey":{"type":"boolean","nullable":true},"dataAnnotationsIsEditable":{"type":"boolean","nullable":true},"dataAnnotationsIsNullable":{"type":"boolean","nullable":true},"dataAnnotationsIsRequired":{"type":"boolean","nullable":true},"dataAnnotationsMinimumLength":{"type":"integer","format":"int32","nullable":true},"dataAnnotationsMaximumLength":{"type":"integer","format":"int32","nullable":true},"dataClassificationCode":{"type":"string","nullable":true},"mapsToOtherKeyId":{"type":"string","format":"uuid","nullable":true},"compositeVocabularyId":{"type":"string","format":"uuid","nullable":true},"compositeVocabularyKeySeparator":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"isValueChangeInsignificant":{"type":"boolean"},"glossaryTermId":{"type":"string","format":"uuid","nullable":true},"additionalProperties":{"type":"object","additionalProperties":{"type":"string","nullable":true},"nullable":true}},"additionalProperties":false},"CluedIn.Core.Data.Vocabularies.ObsoleteKeyFilterEnum":{"enum":[0,1,2],"type":"integer","format":"int32"},"CluedIn.Server.WebApi.Controllers.Vocabs.Models.ResolveUsedVocabularyKeysByConditionQuery":{"type":"object","properties":{"condition":{"$ref":"#/components/schemas/CluedIn.Core.Rules.QueryBuilder.FilterRule"}},"additionalProperties":false},"CluedIn.Core.Data.Vocabularies.GetFilteredKeysByNameModel":{"type":"object","properties":{"keyNames":{"type":"array","items":{"type":"string"},"nullable":true},"filterIsObsolete":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.ObsoleteKeyFilterEnum"},"filterVisibility":{"type":"boolean","nullable":true},"filterIsUsed":{"type":"boolean","nullable":true}},"additionalProperties":false},"CluedIn.Core.Data.Vocabularies.Models.AddVocabularyModel":{"required":["grouping","keyPrefix","vocabularyName"],"type":"object","properties":{"vocabularyName":{"minLength":1,"type":"string"},"grouping":{"minLength":1,"type":"string"},"keyPrefix":{"minLength":1,"type":"string"},"providerId":{"type":"string","format":"uuid","nullable":true},"description":{"type":"string","nullable":true}},"additionalProperties":false},"CluedIn.Core.Data.Vocabularies.Models.UpdateVocabularyModel":{"required":["grouping","keyPrefix","vocabularyId","vocabularyName"],"type":"object","properties":{"vocabularyId":{"type":"string","format":"uuid"},"vocabularyName":{"minLength":1,"type":"string"},"grouping":{"minLength":1,"type":"string"},"keyPrefix":{"minLength":1,"type":"string"},"providerId":{"type":"string","format":"uuid","nullable":true},"description":{"type":"string","nullable":true}},"additionalProperties":false},"CluedIn.Core.Data.Vocabularies.Models.UpdateVocabularyKeyModel":{"required":["displayName","vocabularyId","vocabularyKeyId"],"type":"object","properties":{"vocabularyKeyId":{"type":"string","format":"uuid"},"vocabularyId":{"type":"string","format":"uuid"},"groupName":{"type":"string","nullable":true},"displayName":{"minLength":1,"type":"string"},"dataType":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.VocabularyKeyDataType"},"storage":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.VocabularyKeyStorage"},"analyzer":{"type":"string","nullable":true},"isVisible":{"type":"boolean"},"dataAnnotationsIsPrimaryKey":{"type":"boolean","nullable":true},"dataAnnotationsIsEditable":{"type":"boolean","nullable":true},"dataAnnotationsIsNullable":{"type":"boolean","nullable":true},"dataAnnotationsIsRequired":{"type":"boolean","nullable":true},"dataAnnotationsMinimumLength":{"type":"integer","format":"int32","nullable":true},"dataAnnotationsMaximumLength":{"type":"integer","format":"int32","nullable":true},"dataClassificationCode":{"type":"string","nullable":true},"mapsToOtherKeyId":{"type":"string","format":"uuid","nullable":true},"compositeVocabularyId":{"type":"string","format":"uuid","nullable":true},"compositeVocabularyKeySeparator":{"type":"string","nullable":true},"isValueChangeInsignificant":{"type":"boolean","nullable":true},"description":{"type":"string","nullable":true},"isObsolete":{"type":"boolean"},"isObsoleteSinceVersion":{"type":"string","nullable":true},"glossaryTermId":{"type":"string","format":"uuid","nullable":true},"additionalProperties":{"type":"object","additionalProperties":{"type":"string","nullable":true},"nullable":true}},"additionalProperties":false},"CluedIn.Core.Data.Vocabularies.Models.RenameVocabularyKeyModel":{"required":["newName","vocabularyId","vocabularyKeyId"],"type":"object","properties":{"vocabularyKeyId":{"type":"string","format":"uuid"},"vocabularyId":{"type":"string","format":"uuid"},"newName":{"minLength":1,"type":"string"}},"additionalProperties":false},"CluedIn.Server.WebApi.Controllers.Vocabs.VocabularyController+KeysExistModel":{"type":"object","properties":{"keys":{"type":"array","items":{"type":"string"},"nullable":true}},"additionalProperties":false},"CluedIn.Core.Data.Vocabularies.Models.UpdateVocabularyKeyImpactModel":{"required":["dataType","storage","vocabularyId","vocabularyKeyId"],"type":"object","properties":{"vocabularyKeyId":{"type":"string","format":"uuid"},"vocabularyId":{"type":"string","format":"uuid"},"dataType":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.VocabularyKeyDataType"},"storage":{"$ref":"#/components/schemas/CluedIn.Core.Data.Vocabularies.VocabularyKeyStorage"},"mapsToOtherKeyId":{"type":"string","format":"uuid","nullable":true}},"additionalProperties":false},"CluedIn.Core.Data.Vocabularies.VocabularyKeyStorage":{"enum":[0,1,2,3],"type":"integer","format":"int32"},"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}},"securitySchemes":{"Bearer":{"type":"http","description":"Please enter a valid token","scheme":"Bearer"}}}}