> For the complete documentation index, see [llms.txt](https://docs.thewalletcrew.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.thewalletcrew.io/api-reference/advanced/bloomreach.md).

# Bloomreach

## Get the Bloomreach configuration

> Returns the non-secret Bloomreach configuration for this tenant and whether an API key secret is currently stored.\
> Returns 404 when Bloomreach is not configured.\
> The API key secret itself is never returned.

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"tags":[{"name":"Bloomreach"}],"servers":[{"url":"https://app.neostore.cloud","description":"Production Server"},{"url":"https://app-qa.neostore.cloud","description":"Staging Server"}],"security":[{"admin-bearer":["tenant.bloomreach.settings:read"]},{"apiKey":[]}],"components":{"securitySchemes":{"admin-bearer":{"type":"oauth2","flows":{"implicit":{"authorizationUrl":"https://auth.neostore.cloud/authorize?audience=https://app.neostore.cloud/api/","scopes":{}}}},"apiKey":{"type":"apiKey","name":"X-API-KEY","in":"header"}},"schemas":{"BloomreachConfigurationResponse":{"required":["apiKeyId","baseUrl","hasApiKeySecret","projectToken"],"type":"object","properties":{"projectToken":{"minLength":1,"type":"string","description":"Token of the Bloomreach project customers are read from and events are tracked into."},"baseUrl":{"type":"string","description":"Root of the Bloomreach API, as stored.","format":"uri"},"apiKeyId":{"minLength":1,"type":"string","description":"Identifier of the Bloomreach API key the integration uses."},"hasApiKeySecret":{"type":"boolean","description":"Whether an API key secret is stored. When true, a PUT may omit `apiKeySecret` to keep it."},"cache":{"description":"How long Bloomreach lookups are reused. Null when no cache is configured: nothing is cached.","$ref":"#/components/schemas/BloomreachCacheResponse"}},"additionalProperties":false,"description":"The tenant's Bloomreach connection, without the API key secret."},"BloomreachCacheResponse":{"type":"object","properties":{"customer":{"type":["null","string"],"description":"How long a customer read from Bloomreach is reused, as `d.hh:mm:ss`. Null, zero or negative: the\ncustomer cache is off.","format":"date-span"}},"additionalProperties":false,"description":"How long Bloomreach lookups are reused."},"ProblemDetails":{"type":"object","properties":{"type":{"type":["null","string"]},"title":{"type":["null","string"]},"status":{"type":["null","integer"],"format":"int32"},"detail":{"type":["null","string"]},"instance":{"type":["null","string"]}},"additionalProperties":{}},"HttpValidationProblemDetails":{"type":"object","allOf":[{"$ref":"#/components/schemas/ProblemDetails"}],"properties":{"errors":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}}},"additionalProperties":{}}}},"paths":{"/api/{tenantId}/admin/extensions/bloomreach":{"get":{"tags":["Bloomreach"],"summary":"Get the Bloomreach configuration","description":"Returns the non-secret Bloomreach configuration for this tenant and whether an API key secret is currently stored.\nReturns 404 when Bloomreach is not configured.\nThe API key secret itself is never returned.","parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Configuration returned.","content":{"text/plain":{"schema":{"description":"The tenant's Bloomreach connection, without the API key secret.","$ref":"#/components/schemas/BloomreachConfigurationResponse"}},"application/json":{"schema":{"description":"The tenant's Bloomreach connection, without the API key secret.","$ref":"#/components/schemas/BloomreachConfigurationResponse"}},"text/json":{"schema":{"description":"The tenant's Bloomreach connection, without the API key secret.","$ref":"#/components/schemas/BloomreachConfigurationResponse"}}}},"401":{"description":"The caller is not authenticated.","content":{"application/problem+json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}}}},"403":{"description":"The caller lacks the <c>tenant.bloomreach.settings:read</c> scope.","content":{"application/problem+json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}}}},"404":{"description":"Bloomreach is not configured for this tenant.","content":{"text/plain":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}},"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}},"text/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}}}},"409":{"description":"The saved configuration is invalid; fix it in the configuration editor.","content":{"text/plain":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}},"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}},"text/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}}}},"429":{"description":"Over 1200 requests per minute to this endpoint for the tenant (default limit); retry after <c>Retry-After</c>.","headers":{"Retry-After":{"description":"Seconds to wait before retrying. Sent when the limiter knows it.","schema":{"type":"integer"}}},"content":{"application/problem+json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}}}}}}}}}
```

## Set Bloomreach configuration

> Checks the credentials against Bloomreach, then saves the configuration; nothing is saved when the check\
> fails.\
> Omit \`apiKeySecret\` to update settings without rotating the secret.\
> When \`cache\` is omitted, the stored cache settings are kept; send it without a duration to disable caching.

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"tags":[{"name":"Bloomreach"}],"servers":[{"url":"https://app.neostore.cloud","description":"Production Server"},{"url":"https://app-qa.neostore.cloud","description":"Staging Server"}],"security":[{"admin-bearer":["tenant.bloomreach.settings:write"]},{"apiKey":[]}],"components":{"securitySchemes":{"admin-bearer":{"type":"oauth2","flows":{"implicit":{"authorizationUrl":"https://auth.neostore.cloud/authorize?audience=https://app.neostore.cloud/api/","scopes":{}}}},"apiKey":{"type":"apiKey","name":"X-API-KEY","in":"header"}},"schemas":{"SetBloomreachRequest":{"required":["apiKeyId","baseUrl","projectToken"],"type":"object","properties":{"projectToken":{"minLength":1,"type":"string","description":"Token of the Bloomreach project customers are read from and events are tracked into."},"baseUrl":{"type":"string","description":"Root of the Bloomreach API. Must be an absolute http or https URL, otherwise 400. A path is kept, so a\nproxy prefix such as `https://proxy.example/bloomreach` works.","format":"uri"},"apiKeyId":{"minLength":1,"type":"string","description":"Identifier of the Bloomreach API key (project settings > Access Management > API) whose secret is\nNeo.Extensions.Bloomreach.Controllers.SetBloomreachRequest.ApiKeySecret."},"apiKeySecret":{"type":["null","string"],"description":"Secret of the API key. Never returned."},"cache":{"description":"How long Bloomreach lookups are reused. Omitted, the stored cache settings are kept; sent without a\nduration, caching is turned off.","$ref":"#/components/schemas/SetBloomreachCacheRequest"}},"additionalProperties":false,"description":"Connection to the tenant's Bloomreach project, and how long customers read from it are reused."},"SetBloomreachCacheRequest":{"type":"object","properties":{"customer":{"type":["null","string"],"description":"How long a customer read from Bloomreach is reused before Bloomreach is asked again, as\n`d.hh:mm:ss`. Null, zero or negative turns the customer cache off.","format":"date-span"}},"additionalProperties":false,"description":"How long Bloomreach lookups are reused."},"ProblemDetails":{"type":"object","properties":{"type":{"type":["null","string"]},"title":{"type":["null","string"]},"status":{"type":["null","integer"],"format":"int32"},"detail":{"type":["null","string"]},"instance":{"type":["null","string"]}},"additionalProperties":{}},"HttpValidationProblemDetails":{"type":"object","allOf":[{"$ref":"#/components/schemas/ProblemDetails"}],"properties":{"errors":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}}},"additionalProperties":{}}}},"paths":{"/api/{tenantId}/admin/extensions/bloomreach":{"put":{"tags":["Bloomreach"],"summary":"Set Bloomreach configuration","description":"Checks the credentials against Bloomreach, then saves the configuration; nothing is saved when the check\nfails.\nOmit `apiKeySecret` to update settings without rotating the secret.\nWhen `cache` is omitted, the stored cache settings are kept; send it without a duration to disable caching.","parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"description":"Connection to the tenant's Bloomreach project, and how long customers read from it are reused.","$ref":"#/components/schemas/SetBloomreachRequest"}},"text/json":{"schema":{"description":"Connection to the tenant's Bloomreach project, and how long customers read from it are reused.","$ref":"#/components/schemas/SetBloomreachRequest"}},"application/*+json":{"schema":{"description":"Connection to the tenant's Bloomreach project, and how long customers read from it are reused.","$ref":"#/components/schemas/SetBloomreachRequest"}}},"required":true},"responses":{"204":{"description":"Configuration saved."},"400":{"description":"Request body is invalid, `baseUrl` is not an absolute http or https URL, no secret is sent and none is stored, or Bloomreach refused the credentials (problem type \"Credentials rejected\").","content":{"text/plain":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}},"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}},"text/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}}}},"401":{"description":"The caller is not authenticated.","content":{"application/problem+json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}}}},"403":{"description":"The caller lacks the <c>tenant.bloomreach.settings:write</c> scope.","content":{"application/problem+json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}}}},"429":{"description":"Over 1200 requests per minute to this endpoint for the tenant (default limit); retry after <c>Retry-After</c>.","headers":{"Retry-After":{"description":"Seconds to wait before retrying. Sent when the limiter knows it.","schema":{"type":"integer"}}},"content":{"application/problem+json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}}}},"502":{"description":"Bloomreach failed the credential check, or could not be reached."}}}}}}
```

## Delete Bloomreach configuration

> Removes the Bloomreach configuration and its API key secret. The Bloomreach scripts are kept.\
> This operation is idempotent: it succeeds even when the configuration or the secret is already absent.

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"tags":[{"name":"Bloomreach"}],"servers":[{"url":"https://app.neostore.cloud","description":"Production Server"},{"url":"https://app-qa.neostore.cloud","description":"Staging Server"}],"security":[{"admin-bearer":["tenant.bloomreach.settings:write"]},{"apiKey":[]}],"components":{"securitySchemes":{"admin-bearer":{"type":"oauth2","flows":{"implicit":{"authorizationUrl":"https://auth.neostore.cloud/authorize?audience=https://app.neostore.cloud/api/","scopes":{}}}},"apiKey":{"type":"apiKey","name":"X-API-KEY","in":"header"}},"schemas":{"ProblemDetails":{"type":"object","properties":{"type":{"type":["null","string"]},"title":{"type":["null","string"]},"status":{"type":["null","integer"],"format":"int32"},"detail":{"type":["null","string"]},"instance":{"type":["null","string"]}},"additionalProperties":{}},"HttpValidationProblemDetails":{"type":"object","allOf":[{"$ref":"#/components/schemas/ProblemDetails"}],"properties":{"errors":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}}},"additionalProperties":{}}}},"paths":{"/api/{tenantId}/admin/extensions/bloomreach":{"delete":{"tags":["Bloomreach"],"summary":"Delete Bloomreach configuration","description":"Removes the Bloomreach configuration and its API key secret. The Bloomreach scripts are kept.\nThis operation is idempotent: it succeeds even when the configuration or the secret is already absent.","parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Configuration deleted."},"401":{"description":"The caller is not authenticated.","content":{"application/problem+json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}}}},"403":{"description":"The caller lacks the <c>tenant.bloomreach.settings:write</c> scope.","content":{"application/problem+json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}}}},"429":{"description":"Over 1200 requests per minute to this endpoint for the tenant (default limit); retry after <c>Retry-After</c>.","headers":{"Retry-After":{"description":"Seconds to wait before retrying. Sent when the limiter knows it.","schema":{"type":"integer"}}},"content":{"application/problem+json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}}}}}}}}}
```


---

# 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://docs.thewalletcrew.io/api-reference/advanced/bloomreach.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.
