Skip to content
Menu
All API groups

Tenants

Stores, settings, flags, onboarding.

6 endpoints.

GET/v1/tenants

Stores I belong to

Needs a key or a dashboard session

Responses

POST/v1/tenants

Tenants Create

Needs a key or a dashboard session

Parameters

NameInTypeRequiredDescription
Idempotency-Keyheaderstring | nullnoUnique per logical write (8-255 chars). Retries with the same key are safe. · pattern ^[A-Za-z0-9_\-:.]{8,255}$

Request body application/json TenantCreate

NameTypeRequiredDescription
namestringyesmax length 200
slugstring | nullnopattern ^[a-z0-9][a-z0-9-]{2,62}$
default_localestringnodefault "en" · pattern ^[a-z]{2}$
localesstring[]noCatalog languages.
currencystringnodefault "USD" · pattern ^[A-Z]{3}$
vertical"general" | "electronics" | "fashion" | "beauty" | "grocery" | "home" | "toys" | "health" | "sports" | "books"noStore type: picks the word lists search uses. `general` = many kinds of products: the shared words of every store type, without words two types read differently. Set it with PATCH /v1/settings {"vertical": ...}.default "general"

Responses

GET/v1/settings

Store settings

Needs a key or a dashboard session

Responses

PATCH/v1/settings

Settings Update

Needs a key or a dashboard session

Request body application/json TenantSettings

NameTypeRequiredDescription
namestring | nullnomax length 200
default_localestring | nullnopattern ^[a-z]{2}$
localesstring[] | nullno
currencystring | nullnopattern ^[A-Z]{3}$
vertical"general" | "electronics" | "fashion" | "beauty" | "grocery" | "home" | "toys" | "health" | "sports" | "books" | nullnoStore type. Sending a different value than the current one makes it the owner's choice (vertical_source owner: the catalog guess never changes it). Re-sending the current value changes nothing.
vertical_source"default" | "auto" | "owner" | nullnoRead only (ignored in PATCH).
auto_detailVerticalGuess | nullnoRead only (ignored in PATCH).
timezonestring | nullnomax length 64
log_retention_daysinteger | nullnomin 7 · max 730
searchSearchSettings | nullno
translationTranslationSettings | nullno
weekly_reportboolean | nullno
extraobject | nullno

Responses

GET/v1/flags

Feature flags for this store

Needs a key or a dashboard session

Responses

GET/v1/onboarding

Onboarding checklist progress

Needs a key or a dashboard session

Responses

Data shapes on this page

TenantOut

NameTypeRequiredDescription
idstringyes
slugstringyes
namestringyes
status"pending_payment" | "trialing" | "active" | "past_due" | "suspended" | "canceled" | "deleted"yespending_payment = a store without a plan: before its free trial or first payment, or after its free trial ended unpaid (see billing_state)
plan_codestring | nullyesThe store's plan. null = no plan yet (billing_state trial_available, no_trial or trial_ended).
billing_state"trial_available" | "no_trial" | "trialing" | "trial_ended" | "paid" | "exempt"notrial_available: no plan; the 14-day free trial (no card) starts with the first search made with a public key. no_trial: no plan, and the owner already used the free trial on a store: choose a plan to go live. trialing: the free trial runs until trial_ends_at. trial_ended: the free trial ended unpaid; public keys answer 402 until a plan is chosen. paid: the store has a paid plan (see status). exempt: an internal store that billing never stops.default "paid"
default_localestringyes
localesstring[]yes
currencystringyes
vertical"general" | "electronics" | "fashion" | "beauty" | "grocery" | "home" | "toys" | "health" | "sports" | "books"noStore type: picks the word lists search uses. `general` = many kinds of products: the shared words of every store type, without words two types read differently. Set it with PATCH /v1/settings {"vertical": ...}.default "general"
vertical_source"default" | "auto" | "owner"noWhere `vertical` came from: default (not set), auto (SeekGist guessed it from the catalog; checked again on full syncs), owner (chosen in settings; never changed by the guess).default "default"
auto_detailVerticalGuess | nullnoThe last catalog check, when source is auto.
trial_ends_atstring (date-time) | nullno
syncSyncHealthno
created_atstring (date-time)yes

VerticalGuess

The catalog check behind an automatic store type (`vertical_source: auto`).

NameTypeRequiredDescription
vertical"general" | "electronics" | "fashion" | "beauty" | "grocery" | "home" | "toys" | "health" | "sports" | "books"yesWhat the check decided: a store type, or general (no clear winner).
leading"general" | "electronics" | "fashion" | "beauty" | "grocery" | "home" | "toys" | "health" | "sports" | "books" | nullnoThe most common store type among the products.
sharenumberyesShare (0..1) of the checked products with a type that have the leading type.
products_checkedintegeryes
products_decidedintegeryesChecked products whose category or name points to one store type.
checked_atstring (date-time) | nullno

SyncHealth

The store's automatic product sync: when the last one came, and whether it has stopped.

NameTypeRequiredDescription
last_sync_atstring (date-time) | nullnoThe last automatic product sync: POST /v1/products/batch with a secret key (store modules, SDKs, your own server), a store app webhook or a connector pull sync. Dashboard file imports do not count.
last_full_sync_atstring (date-time) | nullnoThe last full sync (POST /v1/products/batch with sync_complete: true).
stalebooleannotrue: the store has done a full sync, but no automatic sync came for more than 26 hours (its daily job has probably stopped). Never true for a store without a full sync.default false

TenantCreate

NameTypeRequiredDescription
namestringyesmax length 200
slugstring | nullnopattern ^[a-z0-9][a-z0-9-]{2,62}$
default_localestringnodefault "en" · pattern ^[a-z]{2}$
localesstring[]noCatalog languages.
currencystringnodefault "USD" · pattern ^[A-Z]{3}$
vertical"general" | "electronics" | "fashion" | "beauty" | "grocery" | "home" | "toys" | "health" | "sports" | "books"noStore type: picks the word lists search uses. `general` = many kinds of products: the shared words of every store type, without words two types read differently. Set it with PATCH /v1/settings {"vertical": ...}.default "general"

TenantSettings

NameTypeRequiredDescription
namestring | nullnomax length 200
default_localestring | nullnopattern ^[a-z]{2}$
localesstring[] | nullno
currencystring | nullnopattern ^[A-Z]{3}$
vertical"general" | "electronics" | "fashion" | "beauty" | "grocery" | "home" | "toys" | "health" | "sports" | "books" | nullnoStore type. Sending a different value than the current one makes it the owner's choice (vertical_source owner: the catalog guess never changes it). Re-sending the current value changes nothing.
vertical_source"default" | "auto" | "owner" | nullnoRead only (ignored in PATCH).
auto_detailVerticalGuess | nullnoRead only (ignored in PATCH).
timezonestring | nullnomax length 64
log_retention_daysinteger | nullnomin 7 · max 730
searchSearchSettings | nullno
translationTranslationSettings | nullno
weekly_reportboolean | nullno
extraobject | nullno

SearchSettings

The tenant's saved ranking setup. RankingConfig (contract/merch.py) has the same field names, all optional, and overrides these per request (playground) or per A/B variant.

NameTypeRequiredDescription
rule_parserbooleannodefault true
in_stock_firstbooleannodefault true
business_signalsmap<string, number>noOpt-in weights 0..1, e.g. {popularity: 0.2, margin: 0.1, clicks: 0.2}.
typo_tolerancebooleannodefault true
hybrid_searchbooleannodefault false
cheap_rerank_top_nintegernodefault 50 · min 10 · max 200
merch_rulesbooleannodefault true
disabled_rule_idsstring[]no
synonym_setsstring[]no
global_synonymsbooleannoUse the platform's global synonyms for my store type.default true
disabled_global_synonym_idsstring[]noGlobal synonyms I switched off.

TranslationSettings

Per-tenant translation setup (part of TenantSettings; PATCH /v1/settings). The feature flag `translation_watch` makes watch mode AVAILABLE; `watch` here turns it ON for this store.

NameTypeRequiredDescription
watchbooleannoTranslate new and changed products automatically.default false
target_localesstring[]no
fields"name" | "description" | "category" | "attribute_name" | "attribute_value"[]no
index_machine_translationsbooleannoSearch uses automatic translations that passed the automatic checks before review.default true

FlagOut

NameTypeRequiredDescription
keystringyes
enabledbooleanyes
source"default" | "rollout" | "override" | "plan"yes

OnboardingOut

NameTypeRequiredDescription
stepsOnboardingStep[]yes
started_atstring (date-time)yes
minutes_elapsednumberyes

OnboardingStep

NameTypeRequiredDescription
key"platform" | "connector" | "first_index" | "first_search" | "keys" | "team"yes
donebooleanyes
done_atstring (date-time) | nullno