> For the complete documentation index, see [llms.txt](https://developer.emporix.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developer.emporix.io/api-references/readme/api-reference-19/configuration.md).

# Configuration

## Get all configurations

> Retrieves all configurations of index providers. The returned response contains search and write keys.

```json
{"openapi":"3.0.0","info":{"title":"Indexing Service","version":"v1"},"tags":[{"name":"Configuration"}],"servers":[{"url":"https://api.emporix.io"}],"security":[{"OAuth2":["indexing.search_view"]}],"components":{"securitySchemes":{"OAuth2":{"type":"oauth2","flows":{"clientCredentials":{"tokenUrl":"https://api.emporix.io/oauth/token","scopes":{"indexing.search_view":"Needed to read an index provider configuration","indexing.search_manage":"Needed to manage an index provider configuration"}}}}},"parameters":{"trait_tenant":{"name":"tenant","in":"path","required":true,"description":"The tenant that the caller is acting upon.\n\nPlease note that this value is always lowercase.\n","schema":{"pattern":"^[a-z][a-z0-9]+$","minLength":3,"maxLength":16,"type":"string"}}},"schemas":{"IndexConfiguration":{"title":"IndexConfiguration","allOf":[{"$ref":"#/components/schemas/IndexPublicConfiguration"},{"type":"object","properties":{"writeKey":{"type":"string","description":"API key used for write purposes. For `BATTERY_INCLUDED`, this key is validated before the configuration is created or updated."},"excludedMixinKeys":{"type":"array","items":{"type":"string"},"description":"Optional list of root product mixin keys to exclude from indexing. When set, the specified mixin keys are omitted from both the non-localized and localized portions of the indexed document. Applies only to the `BATTERY_INCLUDED` provider."},"includedMixinPaths":{"type":"array","items":{"type":"string"},"description":"Optional allowlist of product mixin paths to include in indexing for the `BATTERY_INCLUDED` provider. Patterns are matched against full dot-notation paths rooted at the mixin key, for example `class_EA673_toolsClassification.sk.OnlineIsService_P`.\n`*` matches within a single path segment, `**` matches across one or more path segments, and matching is case sensitive.\nIf a matched path points to an object, the entire subtree under that object is included. When this field is absent or an empty list, path filtering is inactive and existing `excludedMixinKeys` behavior applies.\n`includedMixinPaths` and `excludedMixinKeys` are mutually exclusive when `includedMixinPaths` is non-empty. Malformed glob patterns are rejected with a validation error on configuration writes."}},"required":["provider"]}]},"IndexPublicConfiguration":{"title":"IndexPublicConfiguration","type":"object","properties":{"searchKey":{"type":"string","description":"API Key used for search purposes."},"applicationId":{"type":"string","description":"Application id of an indexer provider."},"indexName":{"type":"string","description":"Identifier of an index."},"provider":{"type":"string","description":"Index provider name. Supported providers: `ALGOLIA` (https://www.algolia.com), `BATTERY_INCLUDED` (https://www.batteryincluded.io). Only one provider can be active per tenant at a time.","enum":["ALGOLIA","BATTERY_INCLUDED"]},"active":{"type":"boolean","description":"Indicates if the configuration is active or not."}}},"errorMessage":{"title":"error","description":"Schema for API specified errors.","type":"object","properties":{"code":{"description":"Original HTTP error code, should be consistent with the response HTTP code","type":"integer"},"status":{"description":"Classification of the error type","type":"string"},"message":{"description":"Descriptive error message for debugging","type":"string"},"details":{"type":"array","description":"Error details","items":{"type":"string"}}}}},"responses":{"Unauthorized_401":{"description":"Given request is unauthorized - the authorization token is invalid or has expired. Details will be provided in the response payload.","content":{"application/json":{"schema":{"type":"object","properties":{"fault":{"type":"object","properties":{"faultstring":{"type":"string"},"detail":{"type":"object","properties":{"errorcode":{"type":"string"}}}}}}}}}},"Forbidden_403":{"description":"Given authorization scopes are not sufficient and do not match scopes required by the endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorMessage"}}}}}},"paths":{"/indexing/{tenant}/configurations":{"get":{"summary":"Get all configurations","description":"Retrieves all configurations of index providers. The returned response contains search and write keys.","parameters":[{"$ref":"#/components/parameters/trait_tenant"}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/IndexConfiguration"}}}}},"401":{"$ref":"#/components/responses/Unauthorized_401"},"403":{"$ref":"#/components/responses/Forbidden_403"}},"operationId":"GET-indexing-list-configs","tags":["Configuration"]}}}}
```

## Create a new configuration

> Creates a new index configuration. Supported providers:\
> \* Algolia - <https://www.algolia.com\\>
> \* Battery Included - <https://www.batteryincluded.io\\>
> \
> Identifier of a newly created configuration is a provider name.\
> Only one provider can be active per tenant at a time.\
> \
> For \`BATTERY\_INCLUDED\`, the service validates \`indexName\` and \`writeKey\` before saving.\
> Invalid credentials return \`400\`. If credential validation is temporarily unavailable,\
> the request returns \`502\`. In both cases, the configuration is not stored.

```json
{"openapi":"3.0.0","info":{"title":"Indexing Service","version":"v1"},"tags":[{"name":"Configuration"}],"servers":[{"url":"https://api.emporix.io"}],"security":[{"OAuth2":["indexing.search_manage"]}],"components":{"securitySchemes":{"OAuth2":{"type":"oauth2","flows":{"clientCredentials":{"tokenUrl":"https://api.emporix.io/oauth/token","scopes":{"indexing.search_view":"Needed to read an index provider configuration","indexing.search_manage":"Needed to manage an index provider configuration"}}}}},"parameters":{"trait_tenant":{"name":"tenant","in":"path","required":true,"description":"The tenant that the caller is acting upon.\n\nPlease note that this value is always lowercase.\n","schema":{"pattern":"^[a-z][a-z0-9]+$","minLength":3,"maxLength":16,"type":"string"}}},"schemas":{"IndexConfiguration":{"title":"IndexConfiguration","allOf":[{"$ref":"#/components/schemas/IndexPublicConfiguration"},{"type":"object","properties":{"writeKey":{"type":"string","description":"API key used for write purposes. For `BATTERY_INCLUDED`, this key is validated before the configuration is created or updated."},"excludedMixinKeys":{"type":"array","items":{"type":"string"},"description":"Optional list of root product mixin keys to exclude from indexing. When set, the specified mixin keys are omitted from both the non-localized and localized portions of the indexed document. Applies only to the `BATTERY_INCLUDED` provider."},"includedMixinPaths":{"type":"array","items":{"type":"string"},"description":"Optional allowlist of product mixin paths to include in indexing for the `BATTERY_INCLUDED` provider. Patterns are matched against full dot-notation paths rooted at the mixin key, for example `class_EA673_toolsClassification.sk.OnlineIsService_P`.\n`*` matches within a single path segment, `**` matches across one or more path segments, and matching is case sensitive.\nIf a matched path points to an object, the entire subtree under that object is included. When this field is absent or an empty list, path filtering is inactive and existing `excludedMixinKeys` behavior applies.\n`includedMixinPaths` and `excludedMixinKeys` are mutually exclusive when `includedMixinPaths` is non-empty. Malformed glob patterns are rejected with a validation error on configuration writes."}},"required":["provider"]}]},"IndexPublicConfiguration":{"title":"IndexPublicConfiguration","type":"object","properties":{"searchKey":{"type":"string","description":"API Key used for search purposes."},"applicationId":{"type":"string","description":"Application id of an indexer provider."},"indexName":{"type":"string","description":"Identifier of an index."},"provider":{"type":"string","description":"Index provider name. Supported providers: `ALGOLIA` (https://www.algolia.com), `BATTERY_INCLUDED` (https://www.batteryincluded.io). Only one provider can be active per tenant at a time.","enum":["ALGOLIA","BATTERY_INCLUDED"]},"active":{"type":"boolean","description":"Indicates if the configuration is active or not."}}},"IndexCreationResponse":{"title":"IndexCreationResponse","type":"object","properties":{"id":{"type":"string","description":"Identifier of a newly created configuration."}}},"errorMessage":{"title":"error","description":"Schema for API specified errors.","type":"object","properties":{"code":{"description":"Original HTTP error code, should be consistent with the response HTTP code","type":"integer"},"status":{"description":"Classification of the error type","type":"string"},"message":{"description":"Descriptive error message for debugging","type":"string"},"details":{"type":"array","description":"Error details","items":{"type":"string"}}}}},"responses":{"BadRequest_400":{"description":"Request was syntactically incorrect. Details will be provided in the response payload.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorMessage"}}}},"Unauthorized_401":{"description":"Given request is unauthorized - the authorization token is invalid or has expired. Details will be provided in the response payload.","content":{"application/json":{"schema":{"type":"object","properties":{"fault":{"type":"object","properties":{"faultstring":{"type":"string"},"detail":{"type":"object","properties":{"errorcode":{"type":"string"}}}}}}}}}},"Forbidden_403":{"description":"Given authorization scopes are not sufficient and do not match scopes required by the endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorMessage"}}}},"BadGateway_502":{"description":"Upstream dependency was unavailable. Details will be provided in the response payload.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorMessage"}}}}}},"paths":{"/indexing/{tenant}/configurations":{"post":{"summary":"Create a new configuration","description":"Creates a new index configuration. Supported providers:\n* Algolia - https://www.algolia.com\n* Battery Included - https://www.batteryincluded.io\n\nIdentifier of a newly created configuration is a provider name.\nOnly one provider can be active per tenant at a time.\n\nFor `BATTERY_INCLUDED`, the service validates `indexName` and `writeKey` before saving.\nInvalid credentials return `400`. If credential validation is temporarily unavailable,\nthe request returns `502`. In both cases, the configuration is not stored.","parameters":[{"$ref":"#/components/parameters/trait_tenant"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndexConfiguration"}}},"description":""},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndexCreationResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest_400"},"401":{"$ref":"#/components/responses/Unauthorized_401"},"403":{"$ref":"#/components/responses/Forbidden_403"},"502":{"$ref":"#/components/responses/BadGateway_502"}},"operationId":"POST-indexing-create-config","tags":["Configuration"]}}}}
```

## Get configuration by provider name

> Retrieves a single configuration by a provider name. Supported providers:\
> \* Algolia - <https://www.algolia.com\\>
> \* Battery Included - <https://www.batteryincluded.io>

```json
{"openapi":"3.0.0","info":{"title":"Indexing Service","version":"v1"},"tags":[{"name":"Configuration"}],"servers":[{"url":"https://api.emporix.io"}],"security":[{"OAuth2":["indexing.search_view"]}],"components":{"securitySchemes":{"OAuth2":{"type":"oauth2","flows":{"clientCredentials":{"tokenUrl":"https://api.emporix.io/oauth/token","scopes":{"indexing.search_view":"Needed to read an index provider configuration","indexing.search_manage":"Needed to manage an index provider configuration"}}}}},"schemas":{"IndexConfiguration":{"title":"IndexConfiguration","allOf":[{"$ref":"#/components/schemas/IndexPublicConfiguration"},{"type":"object","properties":{"writeKey":{"type":"string","description":"API key used for write purposes. For `BATTERY_INCLUDED`, this key is validated before the configuration is created or updated."},"excludedMixinKeys":{"type":"array","items":{"type":"string"},"description":"Optional list of root product mixin keys to exclude from indexing. When set, the specified mixin keys are omitted from both the non-localized and localized portions of the indexed document. Applies only to the `BATTERY_INCLUDED` provider."},"includedMixinPaths":{"type":"array","items":{"type":"string"},"description":"Optional allowlist of product mixin paths to include in indexing for the `BATTERY_INCLUDED` provider. Patterns are matched against full dot-notation paths rooted at the mixin key, for example `class_EA673_toolsClassification.sk.OnlineIsService_P`.\n`*` matches within a single path segment, `**` matches across one or more path segments, and matching is case sensitive.\nIf a matched path points to an object, the entire subtree under that object is included. When this field is absent or an empty list, path filtering is inactive and existing `excludedMixinKeys` behavior applies.\n`includedMixinPaths` and `excludedMixinKeys` are mutually exclusive when `includedMixinPaths` is non-empty. Malformed glob patterns are rejected with a validation error on configuration writes."}},"required":["provider"]}]},"IndexPublicConfiguration":{"title":"IndexPublicConfiguration","type":"object","properties":{"searchKey":{"type":"string","description":"API Key used for search purposes."},"applicationId":{"type":"string","description":"Application id of an indexer provider."},"indexName":{"type":"string","description":"Identifier of an index."},"provider":{"type":"string","description":"Index provider name. Supported providers: `ALGOLIA` (https://www.algolia.com), `BATTERY_INCLUDED` (https://www.batteryincluded.io). Only one provider can be active per tenant at a time.","enum":["ALGOLIA","BATTERY_INCLUDED"]},"active":{"type":"boolean","description":"Indicates if the configuration is active or not."}}},"errorMessage":{"title":"error","description":"Schema for API specified errors.","type":"object","properties":{"code":{"description":"Original HTTP error code, should be consistent with the response HTTP code","type":"integer"},"status":{"description":"Classification of the error type","type":"string"},"message":{"description":"Descriptive error message for debugging","type":"string"},"details":{"type":"array","description":"Error details","items":{"type":"string"}}}}},"responses":{"Unauthorized_401":{"description":"Given request is unauthorized - the authorization token is invalid or has expired. Details will be provided in the response payload.","content":{"application/json":{"schema":{"type":"object","properties":{"fault":{"type":"object","properties":{"faultstring":{"type":"string"},"detail":{"type":"object","properties":{"errorcode":{"type":"string"}}}}}}}}}},"Forbidden_403":{"description":"Given authorization scopes are not sufficient and do not match scopes required by the endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorMessage"}}}},"NotFound_404":{"description":"Resource has not been found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorMessage"}}}}}},"paths":{"/indexing/{tenant}/configurations/{provider}":{"get":{"summary":"Get configuration by provider name","description":"Retrieves a single configuration by a provider name. Supported providers:\n* Algolia - https://www.algolia.com\n* Battery Included - https://www.batteryincluded.io","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndexConfiguration"}}}},"401":{"$ref":"#/components/responses/Unauthorized_401"},"403":{"$ref":"#/components/responses/Forbidden_403"},"404":{"$ref":"#/components/responses/NotFound_404"}},"tags":["Configuration"],"operationId":"GET-indexing-retrieve-config"}}}}
```

## Update configuration by provider name

> Updates an existing index configuration.\
> \
> For \`BATTERY\_INCLUDED\`, the service validates \`indexName\` and \`writeKey\` before saving.\
> Invalid credentials return \`400\`. If credential validation is temporarily unavailable,\
> the request returns \`502\`. In both cases, the configuration is left unchanged.

```json
{"openapi":"3.0.0","info":{"title":"Indexing Service","version":"v1"},"tags":[{"name":"Configuration"}],"servers":[{"url":"https://api.emporix.io"}],"security":[{"OAuth2":["indexing.search_manage"]}],"components":{"securitySchemes":{"OAuth2":{"type":"oauth2","flows":{"clientCredentials":{"tokenUrl":"https://api.emporix.io/oauth/token","scopes":{"indexing.search_view":"Needed to read an index provider configuration","indexing.search_manage":"Needed to manage an index provider configuration"}}}}},"schemas":{"IndexConfiguration":{"title":"IndexConfiguration","allOf":[{"$ref":"#/components/schemas/IndexPublicConfiguration"},{"type":"object","properties":{"writeKey":{"type":"string","description":"API key used for write purposes. For `BATTERY_INCLUDED`, this key is validated before the configuration is created or updated."},"excludedMixinKeys":{"type":"array","items":{"type":"string"},"description":"Optional list of root product mixin keys to exclude from indexing. When set, the specified mixin keys are omitted from both the non-localized and localized portions of the indexed document. Applies only to the `BATTERY_INCLUDED` provider."},"includedMixinPaths":{"type":"array","items":{"type":"string"},"description":"Optional allowlist of product mixin paths to include in indexing for the `BATTERY_INCLUDED` provider. Patterns are matched against full dot-notation paths rooted at the mixin key, for example `class_EA673_toolsClassification.sk.OnlineIsService_P`.\n`*` matches within a single path segment, `**` matches across one or more path segments, and matching is case sensitive.\nIf a matched path points to an object, the entire subtree under that object is included. When this field is absent or an empty list, path filtering is inactive and existing `excludedMixinKeys` behavior applies.\n`includedMixinPaths` and `excludedMixinKeys` are mutually exclusive when `includedMixinPaths` is non-empty. Malformed glob patterns are rejected with a validation error on configuration writes."}},"required":["provider"]}]},"IndexPublicConfiguration":{"title":"IndexPublicConfiguration","type":"object","properties":{"searchKey":{"type":"string","description":"API Key used for search purposes."},"applicationId":{"type":"string","description":"Application id of an indexer provider."},"indexName":{"type":"string","description":"Identifier of an index."},"provider":{"type":"string","description":"Index provider name. Supported providers: `ALGOLIA` (https://www.algolia.com), `BATTERY_INCLUDED` (https://www.batteryincluded.io). Only one provider can be active per tenant at a time.","enum":["ALGOLIA","BATTERY_INCLUDED"]},"active":{"type":"boolean","description":"Indicates if the configuration is active or not."}}},"errorMessage":{"title":"error","description":"Schema for API specified errors.","type":"object","properties":{"code":{"description":"Original HTTP error code, should be consistent with the response HTTP code","type":"integer"},"status":{"description":"Classification of the error type","type":"string"},"message":{"description":"Descriptive error message for debugging","type":"string"},"details":{"type":"array","description":"Error details","items":{"type":"string"}}}}},"responses":{"BadRequest_400":{"description":"Request was syntactically incorrect. Details will be provided in the response payload.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorMessage"}}}},"Forbidden_403":{"description":"Given authorization scopes are not sufficient and do not match scopes required by the endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorMessage"}}}},"NotFound_404":{"description":"Resource has not been found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorMessage"}}}},"BadGateway_502":{"description":"Upstream dependency was unavailable. Details will be provided in the response payload.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorMessage"}}}}}},"paths":{"/indexing/{tenant}/configurations/{provider}":{"put":{"summary":"Update configuration by provider name","description":"Updates an existing index configuration.\n\nFor `BATTERY_INCLUDED`, the service validates `indexName` and `writeKey` before saving.\nInvalid credentials return `400`. If credential validation is temporarily unavailable,\nthe request returns `502`. In both cases, the configuration is left unchanged.","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndexConfiguration"}}}},"responses":{"204":{"description":"Configuration updated"},"400":{"$ref":"#/components/responses/BadRequest_400"},"403":{"$ref":"#/components/responses/Forbidden_403"},"404":{"$ref":"#/components/responses/NotFound_404"},"502":{"$ref":"#/components/responses/BadGateway_502"}},"operationId":"PUT-indexing-update-config","tags":["Configuration"]}}}}
```

## Delete configuration

> Deletes the configuration based on the provider name.

```json
{"openapi":"3.0.0","info":{"title":"Indexing Service","version":"v1"},"tags":[{"name":"Configuration"}],"servers":[{"url":"https://api.emporix.io"}],"security":[{"OAuth2":["indexing.search_manage"]}],"components":{"securitySchemes":{"OAuth2":{"type":"oauth2","flows":{"clientCredentials":{"tokenUrl":"https://api.emporix.io/oauth/token","scopes":{"indexing.search_view":"Needed to read an index provider configuration","indexing.search_manage":"Needed to manage an index provider configuration"}}}}},"parameters":{"trait_tenant":{"name":"tenant","in":"path","required":true,"description":"The tenant that the caller is acting upon.\n\nPlease note that this value is always lowercase.\n","schema":{"pattern":"^[a-z][a-z0-9]+$","minLength":3,"maxLength":16,"type":"string"}}},"responses":{"Unauthorized_401":{"description":"Given request is unauthorized - the authorization token is invalid or has expired. Details will be provided in the response payload.","content":{"application/json":{"schema":{"type":"object","properties":{"fault":{"type":"object","properties":{"faultstring":{"type":"string"},"detail":{"type":"object","properties":{"errorcode":{"type":"string"}}}}}}}}}},"Forbidden_403":{"description":"Given authorization scopes are not sufficient and do not match scopes required by the endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorMessage"}}}},"NotFound_404":{"description":"Resource has not been found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorMessage"}}}}},"schemas":{"errorMessage":{"title":"error","description":"Schema for API specified errors.","type":"object","properties":{"code":{"description":"Original HTTP error code, should be consistent with the response HTTP code","type":"integer"},"status":{"description":"Classification of the error type","type":"string"},"message":{"description":"Descriptive error message for debugging","type":"string"},"details":{"type":"array","description":"Error details","items":{"type":"string"}}}}}},"paths":{"/indexing/{tenant}/configurations/{provider}":{"delete":{"summary":"Delete configuration","description":"Deletes the configuration based on the provider name.","parameters":[{"$ref":"#/components/parameters/trait_tenant"}],"responses":{"204":{"description":"Configuration deleted"},"401":{"$ref":"#/components/responses/Unauthorized_401"},"403":{"$ref":"#/components/responses/Forbidden_403"},"404":{"$ref":"#/components/responses/NotFound_404"}},"operationId":"DELETE-indexing-remove-config","tags":["Configuration"]}}}}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://developer.emporix.io/api-references/readme/api-reference-19/configuration.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
