Sites

GET /sites

List the organization's sites, alphabetically by default. Supports filtering and cursor pagination.

Requires the settings:read permission.

Query parameters

limitnumber

The number of records to return.

cursorstring

A pagination cursor. Fetch the next page by passing the nextCursor value from the previous response.

sortname | -name | slug | -slug | createdAt | -createdAt

The sort order. Prefix a field with - to sort descending. Defaults to name.

filterstring

A JSON-encoded filter document, for example {"createdAt":{"$gte":"2025-01-01T00:00:00Z"}}. Filterable fields: id, name, slug, baseUrl, createdAt. See Filtering for the syntax.

Request
curl \
  "https://your-store.meisei.app/api/sites" \
  -H "Authorization: Bearer sk_YOUR_SECRET_KEY"
Response
{
  "data": [
    {
      "id": "A4Ws1igz",
      "name": "string",
      "slug": "string",
      "baseUrl": "string",
      "brandSettings": {
        "primaryColor": "...",
        "pageColor": "...",
        "contentColor": "...",
        "textColor": "...",
        "mutedColor": "...",
        "logoUrl": "...",
        "iconUrl": "..."
      },
      "metadata": "...",
      "sendingDomainId": "string",
      "emailLocalPart": "string",
      "emailReplyTo": "user@example.com",
      "signInUrl": "string",
      "hostnames": ["..."],
      "createdAt": "2025-01-15T09:30:00Z",
      "updatedAt": "2025-01-15T09:30:00Z"
    }
  ],
  "nextCursor": "string"
}

POST /sites

Create a site. Fails if the organization is already at its plan's site limit, or if another site already uses the slug. Triggers the site.created webhook.

Requires the settings:write permission.

Body parameters

namestringrequired

The site's display name.

slugstringrequired

A short handle for the site, unique within the organization.

baseUrlstring (uri)required

The storefront's base URL, such as https://shop.example.com.

brandSettingsobject

Branding for the site's emails and customer-facing pages. Defaults to unset everywhere.

metadataobject

Key/value pairs for your own data. Keys you define with /metadata-definitions are typed and validated; any other key is free-form. Individual keys are filterable with a dot path, for example metadata.category.

Request
curl \
  -X POST \
  "https://your-store.meisei.app/api/sites" \
  -H "Authorization: Bearer sk_YOUR_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "string",
  "slug": "string",
  "baseUrl": "https://example.com",
  "brandSettings": {
    "logoKey": "string",
    "iconKey": "string",
    "primaryColor": "string",
    "pageColor": "string",
    "contentColor": "string",
    "textColor": "string",
    "mutedColor": "string"
  },
  "metadata": "..."
}'
Response
{
  "id": "A4Ws1igz",
  "name": "string",
  "slug": "string",
  "baseUrl": "string",
  "brandSettings": {
    "primaryColor": "string",
    "pageColor": "string",
    "contentColor": "string",
    "textColor": "string",
    "mutedColor": "string",
    "logoUrl": "https://example.com",
    "iconUrl": "https://example.com"
  },
  "metadata": "...",
  "sendingDomainId": "string",
  "emailLocalPart": "string",
  "emailReplyTo": "user@example.com",
  "signInUrl": "string",
  "hostnames": [
    {
      "id": "A4Ws1igz",
      "siteId": "A4Ws1igz",
      "domainId": "A4Ws1igz",
      "hostname": "string",
      "purpose": "reviews",
      "active": true,
      "records": ["..."],
      "dnsConfiguredAt": "2025-01-15T09:30:00Z",
      "certificateIssuedAt": "2025-01-15T09:30:00Z",
      "lastCheckedAt": "2025-01-15T09:30:00Z",
      "createdAt": "2025-01-15T09:30:00Z",
      "updatedAt": "2025-01-15T09:30:00Z"
    }
  ],
  "createdAt": "2025-01-15T09:30:00Z",
  "updatedAt": "2025-01-15T09:30:00Z"
}

GET /sites/{id}

Get a single site by ID.

Requires the settings:read permission.

Path parameters

idstringrequired

The ID of the site.

Request
curl \
  "https://your-store.meisei.app/api/sites/A4Ws1igz" \
  -H "Authorization: Bearer sk_YOUR_SECRET_KEY"
Response
{
  "id": "A4Ws1igz",
  "name": "string",
  "slug": "string",
  "baseUrl": "string",
  "brandSettings": {
    "primaryColor": "string",
    "pageColor": "string",
    "contentColor": "string",
    "textColor": "string",
    "mutedColor": "string",
    "logoUrl": "https://example.com",
    "iconUrl": "https://example.com"
  },
  "metadata": "...",
  "sendingDomainId": "string",
  "emailLocalPart": "string",
  "emailReplyTo": "user@example.com",
  "signInUrl": "string",
  "hostnames": [
    {
      "id": "A4Ws1igz",
      "siteId": "A4Ws1igz",
      "domainId": "A4Ws1igz",
      "hostname": "string",
      "purpose": "reviews",
      "active": true,
      "records": ["..."],
      "dnsConfiguredAt": "2025-01-15T09:30:00Z",
      "certificateIssuedAt": "2025-01-15T09:30:00Z",
      "lastCheckedAt": "2025-01-15T09:30:00Z",
      "createdAt": "2025-01-15T09:30:00Z",
      "updatedAt": "2025-01-15T09:30:00Z"
    }
  ],
  "createdAt": "2025-01-15T09:30:00Z",
  "updatedAt": "2025-01-15T09:30:00Z"
}

PUT /sites/{id}

Update a site's details or branding. Fails if the new slug is already in use by another site. Triggers the site.updated webhook.

Requires the settings:write permission.

Path parameters

idstringrequired

The ID of the site to update.

Body parameters

namestring

The site's display name.

slugstring

A short handle for the site, unique within the organization.

baseUrlstring (uri)

The storefront's base URL.

brandSettingsobject

Changes the branding keys given and leaves the others as they are.

metadataobject

Replaces the site's metadata wholesale. Omit to leave it alone.

sendingDomainIdstring | null

A verified domain to send this site's shopper emails from. It has to be set up for email first. Null sends them through Meisei instead.

emailLocalPartstring | null

The part of the From address before the @, such as hello. Letters, numbers, dots, dashes and underscores only. Only used once the sending domain is verified for email.

emailReplyTostring (email) | null

Where replies to this site's shopper emails go. Null replies to the From address.

signInUrlstring (uri) | null

The storefront's sign-in page, as a full http or https URL. The loyalty widget links a shopper who is not signed in to it. Null takes the link away.

Request
curl \
  -X PUT \
  "https://your-store.meisei.app/api/sites/A4Ws1igz" \
  -H "Authorization: Bearer sk_YOUR_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "string",
  "slug": "string",
  "baseUrl": "https://example.com",
  "brandSettings": {
    "logoKey": "string",
    "iconKey": "string",
    "primaryColor": "string",
    "pageColor": "string",
    "contentColor": "string",
    "textColor": "string",
    "mutedColor": "string"
  },
  "metadata": "...",
  "sendingDomainId": "string",
  "emailLocalPart": "string",
  "emailReplyTo": "user@example.com",
  "signInUrl": "https://example.com"
}'
Response
{
  "id": "A4Ws1igz",
  "name": "string",
  "slug": "string",
  "baseUrl": "string",
  "brandSettings": {
    "primaryColor": "string",
    "pageColor": "string",
    "contentColor": "string",
    "textColor": "string",
    "mutedColor": "string",
    "logoUrl": "https://example.com",
    "iconUrl": "https://example.com"
  },
  "metadata": "...",
  "sendingDomainId": "string",
  "emailLocalPart": "string",
  "emailReplyTo": "user@example.com",
  "signInUrl": "string",
  "hostnames": [
    {
      "id": "A4Ws1igz",
      "siteId": "A4Ws1igz",
      "domainId": "A4Ws1igz",
      "hostname": "string",
      "purpose": "reviews",
      "active": true,
      "records": ["..."],
      "dnsConfiguredAt": "2025-01-15T09:30:00Z",
      "certificateIssuedAt": "2025-01-15T09:30:00Z",
      "lastCheckedAt": "2025-01-15T09:30:00Z",
      "createdAt": "2025-01-15T09:30:00Z",
      "updatedAt": "2025-01-15T09:30:00Z"
    }
  ],
  "createdAt": "2025-01-15T09:30:00Z",
  "updatedAt": "2025-01-15T09:30:00Z"
}

DELETE /sites/{id}

Delete a site. It is marked for deletion straight away and its records are cleared out in the background, so the site keeps showing up briefly. You cannot delete an organization's last site. Triggers the site.deleted webhook.

Requires the settings:write permission.

Path parameters

idstringrequired

The ID of the site to delete.

Request
curl \
  -X DELETE \
  "https://your-store.meisei.app/api/sites/A4Ws1igz" \
  -H "Authorization: Bearer sk_YOUR_SECRET_KEY"
Response
{
  "id": "A4Ws1igz",
  "name": "string",
  "slug": "string",
  "baseUrl": "string",
  "brandSettings": {
    "primaryColor": "string",
    "pageColor": "string",
    "contentColor": "string",
    "textColor": "string",
    "mutedColor": "string",
    "logoUrl": "https://example.com",
    "iconUrl": "https://example.com"
  },
  "metadata": "...",
  "sendingDomainId": "string",
  "emailLocalPart": "string",
  "emailReplyTo": "user@example.com",
  "signInUrl": "string",
  "hostnames": [
    {
      "id": "A4Ws1igz",
      "siteId": "A4Ws1igz",
      "domainId": "A4Ws1igz",
      "hostname": "string",
      "purpose": "reviews",
      "active": true,
      "records": ["..."],
      "dnsConfiguredAt": "2025-01-15T09:30:00Z",
      "certificateIssuedAt": "2025-01-15T09:30:00Z",
      "lastCheckedAt": "2025-01-15T09:30:00Z",
      "createdAt": "2025-01-15T09:30:00Z",
      "updatedAt": "2025-01-15T09:30:00Z"
    }
  ],
  "createdAt": "2025-01-15T09:30:00Z",
  "updatedAt": "2025-01-15T09:30:00Z"
}

GET /sites/{siteId}/hostnames

List the custom hostnames a site serves its customer pages on, alphabetically.

Requires the settings:read permission.

Path parameters

siteIdstringrequired

The ID of the site.

Request
curl \
  "https://your-store.meisei.app/api/sites/A4Ws1igz/hostnames" \
  -H "Authorization: Bearer sk_YOUR_SECRET_KEY"
Response
{
  "data": [
    {
      "id": "A4Ws1igz",
      "siteId": "A4Ws1igz",
      "domainId": "A4Ws1igz",
      "hostname": "string",
      "purpose": "reviews",
      "active": true,
      "records": ["..."],
      "dnsConfiguredAt": "2025-01-15T09:30:00Z",
      "certificateIssuedAt": "2025-01-15T09:30:00Z",
      "lastCheckedAt": "2025-01-15T09:30:00Z",
      "createdAt": "2025-01-15T09:30:00Z",
      "updatedAt": "2025-01-15T09:30:00Z"
    }
  ]
}

POST /sites/{siteId}/hostnames

Add a hostname for a site's customer pages. It has to be one of your verified domains or a name under one. The response carries the DNS records to create; call POST /sites/:siteId/hostnames/:id/check once they are in place.

Requires the settings:write permission.

Costs 5 rate limit tokens instead of the usual one. See Rate limits.

Path parameters

siteIdstringrequired

The ID of the site.

Body parameters

hostnamestringrequired

The hostname to serve customer pages on, such as reviews.example.com. It has to be one of your verified domains or a name under one.

purposereviews | wishlists | null

Which links should point at this hostname. Leave it out to use the hostname for anything the site needs.

Request
curl \
  -X POST \
  "https://your-store.meisei.app/api/sites/A4Ws1igz/hostnames" \
  -H "Authorization: Bearer sk_YOUR_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "hostname": "string",
  "purpose": "reviews"
}'
Response
{
  "id": "A4Ws1igz",
  "siteId": "A4Ws1igz",
  "domainId": "A4Ws1igz",
  "hostname": "string",
  "purpose": "reviews",
  "active": true,
  "records": [
    {
      "type": "TXT",
      "name": "string",
      "value": "string",
      "purpose": "dkim",
      "verified": true
    }
  ],
  "dnsConfiguredAt": "2025-01-15T09:30:00Z",
  "certificateIssuedAt": "2025-01-15T09:30:00Z",
  "lastCheckedAt": "2025-01-15T09:30:00Z",
  "createdAt": "2025-01-15T09:30:00Z",
  "updatedAt": "2025-01-15T09:30:00Z"
}

PATCH /sites/{siteId}/hostnames/{id}

Change which links point at a hostname. Its certificate and records are kept, so a hostname that is already live stays live.

Requires the settings:write permission.

Path parameters

siteIdstringrequired

The ID of the site.

idstringrequired

The ID of the hostname.

Body parameters

purposereviews | wishlists | nullrequired

Which links should point at this hostname from now on. Null uses it for anything the site needs.

Request
curl \
  -X PATCH \
  "https://your-store.meisei.app/api/sites/A4Ws1igz/hostnames/A4Ws1igz" \
  -H "Authorization: Bearer sk_YOUR_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "purpose": "reviews"
}'
Response
{
  "id": "A4Ws1igz",
  "siteId": "A4Ws1igz",
  "domainId": "A4Ws1igz",
  "hostname": "string",
  "purpose": "reviews",
  "active": true,
  "records": [
    {
      "type": "TXT",
      "name": "string",
      "value": "string",
      "purpose": "dkim",
      "verified": true
    }
  ],
  "dnsConfiguredAt": "2025-01-15T09:30:00Z",
  "certificateIssuedAt": "2025-01-15T09:30:00Z",
  "lastCheckedAt": "2025-01-15T09:30:00Z",
  "createdAt": "2025-01-15T09:30:00Z",
  "updatedAt": "2025-01-15T09:30:00Z"
}

DELETE /sites/{siteId}/hostnames/{id}

Remove a hostname and its certificate. Links that were pointing at it go back to the Meisei-hosted pages.

Requires the settings:write permission.

Path parameters

siteIdstringrequired

The ID of the site.

idstringrequired

The ID of the hostname.

Request
curl \
  -X DELETE \
  "https://your-store.meisei.app/api/sites/A4Ws1igz/hostnames/A4Ws1igz" \
  -H "Authorization: Bearer sk_YOUR_SECRET_KEY"
Response
{
  "id": "A4Ws1igz",
  "siteId": "A4Ws1igz",
  "domainId": "A4Ws1igz",
  "hostname": "string",
  "purpose": "reviews",
  "active": true,
  "records": [
    {
      "type": "TXT",
      "name": "string",
      "value": "string",
      "purpose": "dkim",
      "verified": true
    }
  ],
  "dnsConfiguredAt": "2025-01-15T09:30:00Z",
  "certificateIssuedAt": "2025-01-15T09:30:00Z",
  "lastCheckedAt": "2025-01-15T09:30:00Z",
  "createdAt": "2025-01-15T09:30:00Z",
  "updatedAt": "2025-01-15T09:30:00Z"
}

POST /sites/{siteId}/hostnames/{id}/check

Check the hostname's DNS now and report what the certificate provider can see. Once a certificate has been issued, the site's links start using the hostname.

Requires the settings:write permission.

Costs 5 rate limit tokens instead of the usual one. See Rate limits.

Path parameters

siteIdstringrequired

The ID of the site.

idstringrequired

The ID of the hostname.

Request
curl \
  -X POST \
  "https://your-store.meisei.app/api/sites/A4Ws1igz/hostnames/A4Ws1igz/check" \
  -H "Authorization: Bearer sk_YOUR_SECRET_KEY"
Response
{
  "id": "A4Ws1igz",
  "siteId": "A4Ws1igz",
  "domainId": "A4Ws1igz",
  "hostname": "string",
  "purpose": "reviews",
  "active": true,
  "records": [
    {
      "type": "TXT",
      "name": "string",
      "value": "string",
      "purpose": "dkim",
      "verified": true
    }
  ],
  "dnsConfiguredAt": "2025-01-15T09:30:00Z",
  "certificateIssuedAt": "2025-01-15T09:30:00Z",
  "lastCheckedAt": "2025-01-15T09:30:00Z",
  "createdAt": "2025-01-15T09:30:00Z",
  "updatedAt": "2025-01-15T09:30:00Z"
}

GET /sites/{siteId}/brand-assets

List the images and files uploaded for a site's branding, along with how much of the storage allowance they use.

Requires the settings:read permission.

Path parameters

siteIdstringrequired

The ID of the site.

Request
curl \
  "https://your-store.meisei.app/api/sites/A4Ws1igz/brand-assets" \
  -H "Authorization: Bearer sk_YOUR_SECRET_KEY"
Response
{
  "data": [
    {
      "id": "A4Ws1igz",
      "name": "string",
      "url": "string",
      "sizeBytes": 0,
      "createdAt": "2025-01-15T09:30:00Z"
    }
  ],
  "totalSizeBytes": 0,
  "limitBytes": 0
}

POST /sites/{siteId}/brand-assets

Attach an already-uploaded file to a site as a brand asset. Upload the file first with POST /files/upload-url, then pass the key it returns.

Requires the settings:write permission.

Path parameters

siteIdstringrequired

The ID of the site.

Body parameters

keystringrequired

The storage key returned by POST /files/upload-url for the uploaded file.

Request
curl \
  -X POST \
  "https://your-store.meisei.app/api/sites/A4Ws1igz/brand-assets" \
  -H "Authorization: Bearer sk_YOUR_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "key": "string"
}'
Response
{
  "id": "A4Ws1igz",
  "name": "string",
  "url": "string",
  "sizeBytes": 0,
  "createdAt": "2025-01-15T09:30:00Z"
}

DELETE /sites/{siteId}/brand-assets/{fileId}

Delete a brand asset. Anything still pointing at its URL, such as an email template, will break.

Requires the settings:write permission.

Path parameters

siteIdstringrequired

The ID of the site the asset belongs to.

fileIdstringrequired

The ID of the brand asset to delete.

Request
curl \
  -X DELETE \
  "https://your-store.meisei.app/api/sites/A4Ws1igz/brand-assets/A4Ws1igz" \
  -H "Authorization: Bearer sk_YOUR_SECRET_KEY"
Response
{
  "id": "A4Ws1igz",
  "name": "string",
  "url": "string",
  "sizeBytes": 0,
  "createdAt": "2025-01-15T09:30:00Z"
}

GET /sites/{id}/widget-theme

Get how the storefront widgets look on one site: every property with the defaults filled in, the subset this site has actually changed, and the URL the widgets load the stylesheet from.

Requires the settings:read permission.

Path parameters

idstringrequired

The ID of the site.

Request
curl \
  "https://your-store.meisei.app/api/sites/A4Ws1igz/widget-theme" \
  -H "Authorization: Bearer sk_YOUR_SECRET_KEY"
Response
{
  "siteId": "A4Ws1igz",
  "theme": {
    "fontFamily": "string",
    "text": "string",
    "mutedText": "string",
    "surface": "string",
    "surfaceMuted": "string",
    "border": "string",
    "accent": "string",
    "accentText": "string",
    "star": "string",
    "danger": "string",
    "radius": "string",
    "customCss": "string"
  },
  "overrides": {
    "fontFamily": "string",
    "text": "string",
    "mutedText": "string",
    "surface": "string",
    "surfaceMuted": "string",
    "border": "string",
    "accent": "string",
    "accentText": "string",
    "star": "string",
    "danger": "string",
    "radius": "string",
    "customCss": "string"
  },
  "stylesheetUrl": "string",
  "notes": ["string"]
}

PATCH /sites/{id}/widget-theme

Change how the widgets look on one site. Only the properties you send are changed. Custom CSS is sanitized before it is stored: at-rules other than @media, @supports and @container are dropped, url() may only carry a data: URI, and every selector is scoped to the widget root so it cannot reach the rest of the page. Saving custom CSS also records a version you can restore.

Requires the settings:write permission.

Path parameters

idstringrequired

The ID of the site.

Body parameters

fontFamilystring

The font stack the widgets use, as a CSS font-family value. inherit takes the storefront's own face.

textstring

Body text color, as a CSS color. inherit takes the color of whatever the widget sits in.

mutedTextstring

Color for secondary text: dates, counts, help lines.

surfacestring

The widgets' own background, as a CSS color. transparent lets the storefront's page show through.

surfaceMutedstring

Quiet fill behind rating bars, thumbnails and the summary panel.

borderstring

Color of the hairlines between rows, cards and controls.

accentstring

Background of the filled buttons, the active tab and progress fills.

accentTextstring

Text and glyph color on top of the accent color.

starstring

Fill of a rated star and of the rating breakdown bars.

dangerstring

Color of error messages and of a negative review theme.

radiusstring

Corner radius of cards, panels and controls, as a CSS length such as 8px.

customCssstring

Extra CSS for these widgets. It is sanitized and scoped to the widget root before it is served, so it cannot restyle the rest of the page.

Request
curl \
  -X PATCH \
  "https://your-store.meisei.app/api/sites/A4Ws1igz/widget-theme" \
  -H "Authorization: Bearer sk_YOUR_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "fontFamily": "string",
  "text": "string",
  "mutedText": "string",
  "surface": "string",
  "surfaceMuted": "string",
  "border": "string",
  "accent": "string",
  "accentText": "string",
  "star": "string",
  "danger": "string",
  "radius": "string",
  "customCss": "string"
}'
Response
{
  "siteId": "A4Ws1igz",
  "theme": {
    "fontFamily": "string",
    "text": "string",
    "mutedText": "string",
    "surface": "string",
    "surfaceMuted": "string",
    "border": "string",
    "accent": "string",
    "accentText": "string",
    "star": "string",
    "danger": "string",
    "radius": "string",
    "customCss": "string"
  },
  "overrides": {
    "fontFamily": "string",
    "text": "string",
    "mutedText": "string",
    "surface": "string",
    "surfaceMuted": "string",
    "border": "string",
    "accent": "string",
    "accentText": "string",
    "star": "string",
    "danger": "string",
    "radius": "string",
    "customCss": "string"
  },
  "stylesheetUrl": "string",
  "notes": ["string"]
}

POST /sites/{id}/widget-theme/copy

Copy another site's widget appearance onto this one, custom CSS included. It is a copy, not a link: the two drift apart as soon as either is edited again.

Requires the settings:write permission.

Path parameters

idstringrequired

The ID of the site.

Body parameters

fromSiteIdstringrequired

The ID of the site to copy the appearance from.

Request
curl \
  -X POST \
  "https://your-store.meisei.app/api/sites/A4Ws1igz/widget-theme/copy" \
  -H "Authorization: Bearer sk_YOUR_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "fromSiteId": "string"
}'
Response
{
  "siteId": "A4Ws1igz",
  "theme": {
    "fontFamily": "string",
    "text": "string",
    "mutedText": "string",
    "surface": "string",
    "surfaceMuted": "string",
    "border": "string",
    "accent": "string",
    "accentText": "string",
    "star": "string",
    "danger": "string",
    "radius": "string",
    "customCss": "string"
  },
  "overrides": {
    "fontFamily": "string",
    "text": "string",
    "mutedText": "string",
    "surface": "string",
    "surfaceMuted": "string",
    "border": "string",
    "accent": "string",
    "accentText": "string",
    "star": "string",
    "danger": "string",
    "radius": "string",
    "customCss": "string"
  },
  "stylesheetUrl": "string",
  "notes": ["string"]
}

GET /sites/{id}/widget-theme/revisions

List the saved versions of this site's custom CSS, newest first. A version is recorded every time the CSS changes, whoever or whatever changed it.

Requires the settings:read permission.

Path parameters

idstringrequired

The ID of the site.

Request
curl \
  "https://your-store.meisei.app/api/sites/A4Ws1igz/widget-theme/revisions" \
  -H "Authorization: Bearer sk_YOUR_SECRET_KEY"
Response
{
  "data": [
    {
      "id": "A4Ws1igz",
      "customCss": "string",
      "source": "manual",
      "prompt": "string",
      "actorLabel": "string",
      "createdAt": "2025-01-15T09:30:00Z"
    }
  ]
}

POST /sites/{id}/widget-theme/revisions/{revisionId}/restore

Put a saved version of the custom CSS back. The restore is itself recorded as a version, so nothing is lost by undoing an undo.

Requires the settings:write permission.

Path parameters

idstringrequired

The ID of the site.

revisionIdstringrequired

The ID of the version to restore.

Request
curl \
  -X POST \
  "https://your-store.meisei.app/api/sites/A4Ws1igz/widget-theme/revisions/A4Ws1igz/restore" \
  -H "Authorization: Bearer sk_YOUR_SECRET_KEY"
Response
{
  "siteId": "A4Ws1igz",
  "theme": {
    "fontFamily": "string",
    "text": "string",
    "mutedText": "string",
    "surface": "string",
    "surfaceMuted": "string",
    "border": "string",
    "accent": "string",
    "accentText": "string",
    "star": "string",
    "danger": "string",
    "radius": "string",
    "customCss": "string"
  },
  "overrides": {
    "fontFamily": "string",
    "text": "string",
    "mutedText": "string",
    "surface": "string",
    "surfaceMuted": "string",
    "border": "string",
    "accent": "string",
    "accentText": "string",
    "star": "string",
    "danger": "string",
    "radius": "string",
    "customCss": "string"
  },
  "stylesheetUrl": "string",
  "notes": ["string"]
}

GET /sites/{id}/review-statement

Get the About our reviews statement shoppers can open from the product reviews widget on one site: what they read, the site's own wording if it has some, the link to the site's own page if it has one, and the statement generated from your current review settings.

Requires the settings:read permission.

Path parameters

idstringrequired

The ID of the site.

Request
curl \
  "https://your-store.meisei.app/api/sites/A4Ws1igz/review-statement" \
  -H "Authorization: Bearer sk_YOUR_SECRET_KEY"
Response
{
  "siteId": "A4Ws1igz",
  "text": "string",
  "customText": "string",
  "url": "string",
  "generatedText": "string"
}

PATCH /sites/{id}/review-statement

Replace the generated About our reviews statement on one site with your own wording, or point its link at a page of your own. Only the fields you send change; send null to go back to the generated statement or to take the link away.

Requires the settings:write permission.

Path parameters

idstringrequired

The ID of the site.

Body parameters

textstring | null

Your own wording for the statement, in plain text. A blank line starts a new paragraph. Null goes back to the generated statement. Omit to leave it alone.

urlstring (uri) | null

A page on your own site that explains how you handle reviews, as a full http or https URL. The About our reviews link opens it instead of showing the text. Null shows the text again. Omit to leave it alone.

Request
curl \
  -X PATCH \
  "https://your-store.meisei.app/api/sites/A4Ws1igz/review-statement" \
  -H "Authorization: Bearer sk_YOUR_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "text": "string",
  "url": "https://example.com"
}'
Response
{
  "siteId": "A4Ws1igz",
  "text": "string",
  "customText": "string",
  "url": "string",
  "generatedText": "string"
}