#Settings
GET /settings
Get the organization's settings: its behavior toggles and its time zone. Its name, plan and limits are on GET /organization.
Requires the settings:read permission.
Request
curl \
"https://your-store.meisei.app/api/settings" \
-H "Authorization: Bearer sk_YOUR_SECRET_KEY"Request
import { client } from "@meisei/api/admin/client"
import { getSettings } from "@meisei/api/admin"
client.setConfig({
baseUrl: "https://your-store.meisei.app/api",
headers: { Authorization: "Bearer sk_YOUR_SECRET_KEY" },
})
const { data, error } = await getSettings()Request
require "meisei"
meisei = Meisei::Client.new(
secret_key: "sk_YOUR_SECRET_KEY",
base_url: "https://your-store.meisei.app/api",
)
result = meisei.settings.retrieveRequest
from meisei import Client
meisei = Client(
secret_key="sk_YOUR_SECRET_KEY",
base_url="https://your-store.meisei.app/api",
)
result = meisei.settings.retrieve()Response
{
"settings": {
"cascadeDeleteReviews": false,
"autoPublishReviews": false,
"requireVerifiedStorefrontReviews": false,
"showWishlistPrices": true,
"allowSharedWishlists": true,
"allowWishlistPurchaseMarking": true,
"allowWishlistItemImages": true,
"wishlistSharePageUrl": null,
"defaultWishlistName": "My wishlist",
"multipleWishlists": true,
"reviewRequests": {
"channel": "meisei"
},
"reviewNotifications": {
"perReview": false,
"perReviewMaxRating": 5,
"digest": false
},
"reviewScreening": {
"links": true,
"profanity": true,
"blocklist": [],
"ai": false
},
"reviewSentiment": {
"enabled": false
},
"reviewSummaries": {
"enabled": true
},
"reviewAnswers": {
"enabled": true
}
},
"timezone": "string"
}Response schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"settings": {
"type": "object",
"properties": {
"cascadeDeleteReviews": {
"default": false,
"description": "When true, deleting a product or customer also deletes their reviews. When false, the reviews are kept, unlinked and unpublished.",
"type": "boolean"
},
"autoPublishReviews": {
"default": false,
"description": "When true, a newly-submitted review of any star rating is published on arrival instead of waiting for a manual publish. A review is only held back when screening flags what it says or how it was submitted.",
"type": "boolean"
},
"requireVerifiedStorefrontReviews": {
"default": false,
"description": "When true, the reviews widget only accepts a review from a signed-in shopper with an order for the product that was not canceled. Anyone else is refused and the widget does not offer them the form. Review requests and imports are unaffected.",
"type": "boolean"
},
"showWishlistPrices": {
"default": true,
"description": "When true, the public shared wishlist page shows each item's stored price. When false, no prices are shown.",
"type": "boolean"
},
"allowSharedWishlists": {
"default": true,
"description": "When true, customers can share wishlists with a public link. When false, every share link stops working and sharing cannot be turned on, but each wishlist's own sharing choice is kept for when this is switched back on.",
"type": "boolean"
},
"allowWishlistPurchaseMarking": {
"default": true,
"description": "When true, anyone viewing a shared wishlist can mark an item as purchased so two gift buyers don't buy the same thing. The list's owner is never shown a purchase somebody else made.",
"type": "boolean"
},
"allowWishlistItemImages": {
"default": true,
"description": "When true, a signed-in customer can attach their own photo to a saved item, shown in place of the product image on their list, on the shared page and in the product page banner. When false, the picker is hidden, uploads are refused and existing photos stop being shown on the storefront, though they are kept and still visible in the dashboard.",
"type": "boolean"
},
"wishlistSharePageUrl": {
"default": null,
"description": "A page on your own site that share links open instead of the hosted page, as a full http or https address. The share token replaces `{token}` where the address contains it, and is otherwise appended as a `meiseiWishlist` query parameter; the page loads the list through the widget API. Null means share links open the hosted page.",
"anyOf": [
{
"type": "string",
"maxLength": 2048,
"format": "uri"
},
{
"type": "null"
}
]
},
"defaultWishlistName": {
"default": "My wishlist",
"description": "The name given to the wishlist that is created automatically the first time a customer saves a product with one click.",
"type": "string",
"minLength": 1
},
"multipleWishlists": {
"default": true,
"description": "When true, a customer can keep several wishlists and name them. When false, everything they save goes on one list and the storefront hides the controls for creating another.",
"type": "boolean"
},
"reviewRequests": {
"default": {
"channel": "meisei"
},
"description": "Who sends a review request: Meisei, or a Klaviyo flow.",
"type": "object",
"properties": {
"channel": {
"default": "meisei",
"type": "string",
"enum": ["meisei", "klaviyo"],
"description": "Who sends a review request when it comes due. `meisei` sends the review request email template; `klaviyo` leaves the sending to a Klaviyo flow, triggered by the eligibility event Meisei sends instead."
}
},
"required": ["channel"],
"additionalProperties": false
},
"reviewNotifications": {
"default": {
"perReview": false,
"perReviewMaxRating": 5,
"digest": false
},
"description": "Who hears about arriving reviews, and how.",
"type": "object",
"properties": {
"perReview": {
"default": false,
"description": "When true, every arriving review that meets `perReviewMaxRating` emails the organization's members.",
"type": "boolean"
},
"perReviewMaxRating": {
"default": 5,
"description": "The highest star rating that triggers a per-review alert. Set it to 5 to be told about every review, or lower to hear only about the poor ones.",
"type": "integer",
"minimum": 1,
"maximum": 5
},
"digest": {
"default": false,
"description": "When true, a daily summary of the last 24 hours of reviews is emailed to the organization's members. Days with no reviews send nothing.",
"type": "boolean"
}
},
"required": ["perReview", "perReviewMaxRating", "digest"],
"additionalProperties": false
},
"reviewScreening": {
"default": {
"links": true,
"profanity": true,
"blocklist": [],
"ai": false
},
"description": "What flags an arriving review for moderation.",
"type": "object",
"properties": {
"links": {
"default": true,
"description": "When true, a review containing a URL is flagged for moderation. Links in reviews are the strongest spam signal.",
"type": "boolean"
},
"profanity": {
"default": true,
"description": "When true, a review matching the built-in profanity wordlist is flagged for moderation. Flagged reviews are never rejected automatically.",
"type": "boolean"
},
"blocklist": {
"default": [],
"description": "Words and phrases of your own that flag a review for moderation, matched case-insensitively as whole words.",
"type": "array",
"items": {
"type": "string"
}
},
"ai": {
"default": false,
"description": "When true, arriving reviews are also read by a model, which flags anything a person should look at in the text, the photos and the videos, and longer reviews are checked by an AI-writing detector. When false, a review with photos or videos is never published automatically. It runs after the review is submitted, so a review waits for it rather than publishing and being taken down again. Nothing is ever rejected automatically. Requires the AI review screening feature on your plan.",
"type": "boolean"
}
},
"required": ["links", "profanity", "blocklist", "ai"],
"additionalProperties": false
},
"reviewSentiment": {
"default": {
"enabled": false
},
"description": "Whether arriving reviews are labeled positive, neutral or negative.",
"type": "object",
"properties": {
"enabled": {
"default": false,
"description": "When true, arriving reviews are read by a model and labeled positive, neutral or negative, so you can filter and chart your reviews by what the text says. Nothing is shown to shoppers and nothing is published or held back because of it. Requires the AI review sentiment feature on your plan.",
"type": "boolean"
}
},
"required": ["enabled"],
"additionalProperties": false
},
"reviewSummaries": {
"default": {
"enabled": true
},
"description": "Whether products get a generated summary of what their reviewers say.",
"type": "object",
"properties": {
"enabled": {
"default": true,
"description": "When true, products with enough published reviews get a generated summary of what reviewers say, shown above the reviews on your storefront. When false, no summary is generated and none is shown.",
"type": "boolean"
}
},
"required": ["enabled"],
"additionalProperties": false
},
"reviewAnswers": {
"default": {
"enabled": true
},
"description": "Whether shoppers can ask a question answered from a product's reviews and page.",
"type": "object",
"properties": {
"enabled": {
"default": true,
"description": "When true, shoppers can ask a question on a product page and get an answer generated from its published reviews and the product page, shown only to them and labeled as generated. When false, the instant answer box is hidden everywhere.",
"type": "boolean"
}
},
"required": ["enabled"],
"additionalProperties": false
}
},
"required": [
"cascadeDeleteReviews",
"autoPublishReviews",
"requireVerifiedStorefrontReviews",
"showWishlistPrices",
"allowSharedWishlists",
"allowWishlistPurchaseMarking",
"allowWishlistItemImages",
"wishlistSharePageUrl",
"defaultWishlistName",
"multipleWishlists",
"reviewRequests",
"reviewNotifications",
"reviewScreening",
"reviewSentiment",
"reviewSummaries",
"reviewAnswers"
],
"additionalProperties": false,
"description": "Organization-wide behavior toggles."
},
"timezone": {
"type": "string",
"description": "The organization's time zone, as an IANA name such as `America/New_York`. Everything decided on a clock (loyalty rule limits per day, week or month, expiry sweeps, the daily automation schedule) uses it."
}
},
"required": ["settings", "timezone"],
"additionalProperties": false,
"description": "The organization's settings."
}PATCH /settings
Update the organization's settings or its time zone. Only the fields you send are changed; the rest are left alone.
Requires the settings:write permission.
Body parameters
settingsobjectThe settings to change.
timezonestringThe organization's time zone, as an IANA name such as America/New_York. Everything decided on a clock (loyalty rule limits per day, week or month, expiry sweeps, the daily automation schedule) uses it.
Request
curl \
-X PATCH \
"https://your-store.meisei.app/api/settings" \
-H "Authorization: Bearer sk_YOUR_SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{
"settings": {
"cascadeDeleteReviews": true,
"autoPublishReviews": true,
"requireVerifiedStorefrontReviews": true,
"showWishlistPrices": true,
"allowSharedWishlists": true,
"allowWishlistPurchaseMarking": true,
"allowWishlistItemImages": true,
"wishlistSharePageUrl": "https://example.com",
"defaultWishlistName": "string",
"multipleWishlists": true,
"reviewRequests": {
"channel": "meisei"
},
"reviewNotifications": {
"perReview": true,
"perReviewMaxRating": 0,
"digest": true
},
"reviewScreening": {
"links": true,
"profanity": true,
"blocklist": [
"..."
],
"ai": true
},
"reviewSentiment": {
"enabled": true
},
"reviewSummaries": {
"enabled": true
},
"reviewAnswers": {
"enabled": true
}
},
"timezone": "string"
}'Request
import { client } from "@meisei/api/admin/client"
import { patchSettings } from "@meisei/api/admin"
client.setConfig({
baseUrl: "https://your-store.meisei.app/api",
headers: { Authorization: "Bearer sk_YOUR_SECRET_KEY" },
})
const { data, error } = await patchSettings({
body: {
settings: {
cascadeDeleteReviews: true,
autoPublishReviews: true,
requireVerifiedStorefrontReviews: true,
showWishlistPrices: true,
allowSharedWishlists: true,
allowWishlistPurchaseMarking: true,
allowWishlistItemImages: true,
wishlistSharePageUrl: "https://example.com",
defaultWishlistName: "string",
multipleWishlists: true,
reviewRequests: {
channel: "meisei",
},
reviewNotifications: {
perReview: true,
perReviewMaxRating: 0,
digest: true,
},
reviewScreening: {
links: true,
profanity: true,
blocklist: ["..."],
ai: true,
},
reviewSentiment: {
enabled: true,
},
reviewSummaries: {
enabled: true,
},
reviewAnswers: {
enabled: true,
},
},
timezone: "string",
},
})Request
require "meisei"
meisei = Meisei::Client.new(
secret_key: "sk_YOUR_SECRET_KEY",
base_url: "https://your-store.meisei.app/api",
)
result = meisei.settings.update(
settings: {
cascade_delete_reviews: true,
auto_publish_reviews: true,
require_verified_storefront_reviews: true,
show_wishlist_prices: true,
allow_shared_wishlists: true,
allow_wishlist_purchase_marking: true,
allow_wishlist_item_images: true,
wishlist_share_page_url: "https://example.com",
default_wishlist_name: "string",
multiple_wishlists: true,
review_requests: { channel: "meisei" },
review_notifications: { per_review: true, per_review_max_rating: 0, digest: true },
review_screening: { links: true, profanity: true, blocklist: ["..."], ai: true },
review_sentiment: { enabled: true },
review_summaries: { enabled: true },
review_answers: { enabled: true },
},
timezone: "string",
)Request
from meisei import Client
meisei = Client(
secret_key="sk_YOUR_SECRET_KEY",
base_url="https://your-store.meisei.app/api",
)
result = meisei.settings.update(
settings={
"cascade_delete_reviews": True,
"auto_publish_reviews": True,
"require_verified_storefront_reviews": True,
"show_wishlist_prices": True,
"allow_shared_wishlists": True,
"allow_wishlist_purchase_marking": True,
"allow_wishlist_item_images": True,
"wishlist_share_page_url": "https://example.com",
"default_wishlist_name": "string",
"multiple_wishlists": True,
"review_requests": {"channel": "meisei"},
"review_notifications": {"per_review": True, "per_review_max_rating": 0, "digest": True},
"review_screening": {"links": True, "profanity": True, "blocklist": ["..."], "ai": True},
"review_sentiment": {"enabled": True},
"review_summaries": {"enabled": True},
"review_answers": {"enabled": True},
},
timezone="string",
)Response
{
"settings": {
"cascadeDeleteReviews": false,
"autoPublishReviews": false,
"requireVerifiedStorefrontReviews": false,
"showWishlistPrices": true,
"allowSharedWishlists": true,
"allowWishlistPurchaseMarking": true,
"allowWishlistItemImages": true,
"wishlistSharePageUrl": null,
"defaultWishlistName": "My wishlist",
"multipleWishlists": true,
"reviewRequests": {
"channel": "meisei"
},
"reviewNotifications": {
"perReview": false,
"perReviewMaxRating": 5,
"digest": false
},
"reviewScreening": {
"links": true,
"profanity": true,
"blocklist": [],
"ai": false
},
"reviewSentiment": {
"enabled": false
},
"reviewSummaries": {
"enabled": true
},
"reviewAnswers": {
"enabled": true
}
},
"timezone": "string"
}Response schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"settings": {
"type": "object",
"properties": {
"cascadeDeleteReviews": {
"default": false,
"description": "When true, deleting a product or customer also deletes their reviews. When false, the reviews are kept, unlinked and unpublished.",
"type": "boolean"
},
"autoPublishReviews": {
"default": false,
"description": "When true, a newly-submitted review of any star rating is published on arrival instead of waiting for a manual publish. A review is only held back when screening flags what it says or how it was submitted.",
"type": "boolean"
},
"requireVerifiedStorefrontReviews": {
"default": false,
"description": "When true, the reviews widget only accepts a review from a signed-in shopper with an order for the product that was not canceled. Anyone else is refused and the widget does not offer them the form. Review requests and imports are unaffected.",
"type": "boolean"
},
"showWishlistPrices": {
"default": true,
"description": "When true, the public shared wishlist page shows each item's stored price. When false, no prices are shown.",
"type": "boolean"
},
"allowSharedWishlists": {
"default": true,
"description": "When true, customers can share wishlists with a public link. When false, every share link stops working and sharing cannot be turned on, but each wishlist's own sharing choice is kept for when this is switched back on.",
"type": "boolean"
},
"allowWishlistPurchaseMarking": {
"default": true,
"description": "When true, anyone viewing a shared wishlist can mark an item as purchased so two gift buyers don't buy the same thing. The list's owner is never shown a purchase somebody else made.",
"type": "boolean"
},
"allowWishlistItemImages": {
"default": true,
"description": "When true, a signed-in customer can attach their own photo to a saved item, shown in place of the product image on their list, on the shared page and in the product page banner. When false, the picker is hidden, uploads are refused and existing photos stop being shown on the storefront, though they are kept and still visible in the dashboard.",
"type": "boolean"
},
"wishlistSharePageUrl": {
"default": null,
"description": "A page on your own site that share links open instead of the hosted page, as a full http or https address. The share token replaces `{token}` where the address contains it, and is otherwise appended as a `meiseiWishlist` query parameter; the page loads the list through the widget API. Null means share links open the hosted page.",
"anyOf": [
{
"type": "string",
"maxLength": 2048,
"format": "uri"
},
{
"type": "null"
}
]
},
"defaultWishlistName": {
"default": "My wishlist",
"description": "The name given to the wishlist that is created automatically the first time a customer saves a product with one click.",
"type": "string",
"minLength": 1
},
"multipleWishlists": {
"default": true,
"description": "When true, a customer can keep several wishlists and name them. When false, everything they save goes on one list and the storefront hides the controls for creating another.",
"type": "boolean"
},
"reviewRequests": {
"default": {
"channel": "meisei"
},
"description": "Who sends a review request: Meisei, or a Klaviyo flow.",
"type": "object",
"properties": {
"channel": {
"default": "meisei",
"type": "string",
"enum": ["meisei", "klaviyo"],
"description": "Who sends a review request when it comes due. `meisei` sends the review request email template; `klaviyo` leaves the sending to a Klaviyo flow, triggered by the eligibility event Meisei sends instead."
}
},
"required": ["channel"],
"additionalProperties": false
},
"reviewNotifications": {
"default": {
"perReview": false,
"perReviewMaxRating": 5,
"digest": false
},
"description": "Who hears about arriving reviews, and how.",
"type": "object",
"properties": {
"perReview": {
"default": false,
"description": "When true, every arriving review that meets `perReviewMaxRating` emails the organization's members.",
"type": "boolean"
},
"perReviewMaxRating": {
"default": 5,
"description": "The highest star rating that triggers a per-review alert. Set it to 5 to be told about every review, or lower to hear only about the poor ones.",
"type": "integer",
"minimum": 1,
"maximum": 5
},
"digest": {
"default": false,
"description": "When true, a daily summary of the last 24 hours of reviews is emailed to the organization's members. Days with no reviews send nothing.",
"type": "boolean"
}
},
"required": ["perReview", "perReviewMaxRating", "digest"],
"additionalProperties": false
},
"reviewScreening": {
"default": {
"links": true,
"profanity": true,
"blocklist": [],
"ai": false
},
"description": "What flags an arriving review for moderation.",
"type": "object",
"properties": {
"links": {
"default": true,
"description": "When true, a review containing a URL is flagged for moderation. Links in reviews are the strongest spam signal.",
"type": "boolean"
},
"profanity": {
"default": true,
"description": "When true, a review matching the built-in profanity wordlist is flagged for moderation. Flagged reviews are never rejected automatically.",
"type": "boolean"
},
"blocklist": {
"default": [],
"description": "Words and phrases of your own that flag a review for moderation, matched case-insensitively as whole words.",
"type": "array",
"items": {
"type": "string"
}
},
"ai": {
"default": false,
"description": "When true, arriving reviews are also read by a model, which flags anything a person should look at in the text, the photos and the videos, and longer reviews are checked by an AI-writing detector. When false, a review with photos or videos is never published automatically. It runs after the review is submitted, so a review waits for it rather than publishing and being taken down again. Nothing is ever rejected automatically. Requires the AI review screening feature on your plan.",
"type": "boolean"
}
},
"required": ["links", "profanity", "blocklist", "ai"],
"additionalProperties": false
},
"reviewSentiment": {
"default": {
"enabled": false
},
"description": "Whether arriving reviews are labeled positive, neutral or negative.",
"type": "object",
"properties": {
"enabled": {
"default": false,
"description": "When true, arriving reviews are read by a model and labeled positive, neutral or negative, so you can filter and chart your reviews by what the text says. Nothing is shown to shoppers and nothing is published or held back because of it. Requires the AI review sentiment feature on your plan.",
"type": "boolean"
}
},
"required": ["enabled"],
"additionalProperties": false
},
"reviewSummaries": {
"default": {
"enabled": true
},
"description": "Whether products get a generated summary of what their reviewers say.",
"type": "object",
"properties": {
"enabled": {
"default": true,
"description": "When true, products with enough published reviews get a generated summary of what reviewers say, shown above the reviews on your storefront. When false, no summary is generated and none is shown.",
"type": "boolean"
}
},
"required": ["enabled"],
"additionalProperties": false
},
"reviewAnswers": {
"default": {
"enabled": true
},
"description": "Whether shoppers can ask a question answered from a product's reviews and page.",
"type": "object",
"properties": {
"enabled": {
"default": true,
"description": "When true, shoppers can ask a question on a product page and get an answer generated from its published reviews and the product page, shown only to them and labeled as generated. When false, the instant answer box is hidden everywhere.",
"type": "boolean"
}
},
"required": ["enabled"],
"additionalProperties": false
}
},
"required": [
"cascadeDeleteReviews",
"autoPublishReviews",
"requireVerifiedStorefrontReviews",
"showWishlistPrices",
"allowSharedWishlists",
"allowWishlistPurchaseMarking",
"allowWishlistItemImages",
"wishlistSharePageUrl",
"defaultWishlistName",
"multipleWishlists",
"reviewRequests",
"reviewNotifications",
"reviewScreening",
"reviewSentiment",
"reviewSummaries",
"reviewAnswers"
],
"additionalProperties": false,
"description": "Organization-wide behavior toggles."
},
"timezone": {
"type": "string",
"description": "The organization's time zone, as an IANA name such as `America/New_York`. Everything decided on a clock (loyalty rule limits per day, week or month, expiry sweeps, the daily automation schedule) uses it."
}
},
"required": ["settings", "timezone"],
"additionalProperties": false,
"description": "The updated settings."
}