Skip to content
Menu
All API groups

Team

Members, roles, invites.

8 endpoints.

GET/v1/team/members

Team Members List

Needs a key or a dashboard session

Responses

PATCH/v1/team/members/{membership_id}

Team Members Update

Needs a key or a dashboard session

Parameters

NameInTypeRequiredDescription
membership_idpathstringyes

Request body application/json MemberUpdate

NameTypeRequiredDescription
role"owner" | "admin" | "editor" | "viewer"yes

Responses

DELETE/v1/team/members/{membership_id}

Team Members Remove

Needs a key or a dashboard session

Parameters

NameInTypeRequiredDescription
membership_idpathstringyes

Responses

GET/v1/team/invites

Team Invites List

Needs a key or a dashboard session

Responses

POST/v1/team/invites

Team Invites Create

Needs a key or a dashboard session

Request body application/json InviteCreate

NameTypeRequiredDescription
emailstring (email)yes
role"admin" | "editor" | "viewer"yes

Responses

DELETE/v1/team/invites/{invite_id}

Team Invites Revoke

Needs a key or a dashboard session

Parameters

NameInTypeRequiredDescription
invite_idpathstringyes

Responses

POST/v1/team/invites/lookup

Invite page: the store and role of a valid invite token (no sign-in)

No key needed

Request body application/json TokenRequest

NameTypeRequiredDescription
tokenstringyesmin length 20 · max length 200

Responses

POST/v1/team/invites/accept

Team Invites Accept

Needs a key or a dashboard session

Request body application/json TokenRequest

NameTypeRequiredDescription
tokenstringyesmin length 20 · max length 200

Responses

Data shapes on this page

MemberOut

NameTypeRequiredDescription
idstringyes
user_idstringyes
emailstringyes
namestring | nullyes
role"owner" | "admin" | "editor" | "viewer"yes
created_atstring (date-time)yes

MemberUpdate

NameTypeRequiredDescription
role"owner" | "admin" | "editor" | "viewer"yes

Deleted

NameTypeRequiredDescription
deletedbooleannodefault true
idstringyes

InviteOut

NameTypeRequiredDescription
idstringyes
emailstringyes
role"owner" | "admin" | "editor" | "viewer"yes
expires_atstring (date-time)yes
created_atstring (date-time)yes

InviteCreate

NameTypeRequiredDescription
emailstring (email)yes
role"admin" | "editor" | "viewer"yes

TokenRequest

NameTypeRequiredDescription
tokenstringyesmin length 20 · max length 200

InviteLookup

What the invite page shows before sign-in (m17). Only for a valid, unused invite token.

NameTypeRequiredDescription
store_namestringyes
inviter_display_namestring | nullnoThe inviter's name; never their email. None when they set no name.
role"admin" | "editor" | "viewer"yes
expires_atstring (date-time)yes
email_maskedstringyesThe invited address, masked: "s***@example.com".

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