Skip to content
AACSearch

Publish configuration using optimistic revision control

Publish configuration using optimistic revision control. Runtime credentials are installation-scoped and cannot authenticate against the tenant API.

Full-key operation

Requires a full key; a search key or a browser key gets a 403. See Keys and credits.
PUT
/cms/installations/{installationId}/config

Publish configuration using optimistic revision control. Runtime credentials are installation-scoped and cannot authenticate against the tenant API.

Authorization

api_key_header
X-NOVA-API-KEY<token>

Every request carries an organization API key. A key has one of two scopes. A full key reaches every operation in this document and belongs on your server. A search key is the one to ship in a browser widget or a storefront page: it reaches only the operations marked x-nova-key-scope: search — searching, federated search, recommendations, event ingestion, and the visitor-facing AI operations (semantic and image search, voice transcription and voice search, assistant chat, and the visitor's own conversation). It cannot write documents or read or change configuration; any other operation answers 403. AI operations are paid in credits from the organization's wallet whichever key calls them (402 when the balance runs out), and a search key needs X-NOVA-SESSION-ID on them: the session is what a conversation belongs to, and what the per-session allowance (429) is counted against. A key of either scope may additionally carry restrictions set in the console: an allowlist of collections (403 elsewhere), a forced filter_by per collection that is ANDed into every search (document-level access control), an allowlist of fields (include_fields is limited to it and a request naming any other field in query_by, facet_by, sort_by, filter_by or highlight_fields answers 400), an IP/CIDR allowlist and an Origin/Referer allowlist (403), and a per-key rate limit (429 with Retry-After).

In: header

Path Parameters

installationId*string
Length1 <= length <= 120

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

curl -X PUT "https://example.com/cms/installations/string/config" \  -H "Content-Type: application/json" \  -d '{    "expected_revision": 0,    "config": {      "protocol_version": 1,      "stores": [        {          "local_id": "string",          "locale": "string",          "currency": "string",          "native_search": true,          "native_filters": true,          "native_recommendations": true,          "widgets_enabled": true,          "sources": [            {              "local_id": "string",              "connector_id": "string",              "collection": "string"            }          ]        }      ]    }  }'
{  "id": "string",  "name": "string",  "provider": "string",  "environment": "string",  "origin": "string",  "desired_revision": 0,  "applied_revision": 0,  "config": {    "protocol_version": 1,    "stores": [      {        "local_id": "string",        "locale": "string",        "currency": "string",        "native_search": true,        "native_filters": true,        "native_recommendations": true,        "widgets_enabled": true,        "sources": [          {            "local_id": "string",            "connector_id": "string",            "collection": "string",            "search_preset": "string",            "recommendation_model": "string"          }        ]      }    ]  },  "discovery": {    "module_version": "string",    "cms_version": "string",    "capabilities": [      "native_search"    ],    "stores": [      {        "source_schemas": {          "property1": {            "name": "companies",            "fields": [              {                "name": "num_employees",                "type": "int32",                "facet": false              },              {                "name": "company_name",                "type": "string",                "facet": false              },              {                "name": "country",                "type": "string",                "facet": true              }            ],            "default_sorting_field": "num_employees",            "token_separators": [],            "curation_sets": [              "curation_set_1"            ],            "synonym_sets": [              "synonym_set_1"            ],            "enable_nested_fields": true,            "symbols_to_index": [],            "voice_query_model": {              "model_name": "ts/whisper/base.en"            },            "metadata": {}          },          "property2": {            "name": "companies",            "fields": [              {                "name": "num_employees",                "type": "int32",                "facet": false              },              {                "name": "company_name",                "type": "string",                "facet": false              },              {                "name": "country",                "type": "string",                "facet": true              }            ],            "default_sorting_field": "num_employees",            "token_separators": [],            "curation_sets": [              "curation_set_1"            ],            "synonym_sets": [              "synonym_set_1"            ],            "enable_nested_fields": true,            "symbols_to_index": [],            "voice_query_model": {              "model_name": "ts/whisper/base.en"            },            "metadata": {}          }        },        "locale": "string",        "currency": "string",        "local_id": "string",        "name": "string",        "source_ids": [          "string"        ]      }    ]  },  "sync_health": {    "pending": 0,    "failed": 0,    "processing": 0,    "done_1h": 0,    "throughput_per_min": 0,    "eta_seconds": 0,    "catalog_size": "empty",    "auto_profile": "string",    "batch_size": 1,    "workers": 1,    "reindex_active": true,    "last_error": "string",    "reported_at": 0  },  "last_error": "string",  "last_seen_at": 0,  "revoked_at": 0,  "created_at": 0,  "updated_at": 0}