# Sayproof Docs > Sayproof is a customer review system for online stores in which every review is backed by proof of purchase. This documentation covers using the panel, integrating with your site, the APIs and regulatory compliance. ## Sayproof Docs > Sayproof's features, how to use the panel and how to integrate it with your site. Source: /en/ Sayproof is a customer review system for online stores in which every review is backed by proof of purchase. Only a customer who has bought the product can write a review. For every review, the order it is based on, the person who approved it and the version of the rules under which it was published are recorded. The brand publishes reviews on its own site, manages them in the panel and can present them together with their evidence during an audit. The documentation is organised for three groups of readers. The starting pages for each group are listed below. ### Panel users For teams that approve reviews, manage invitations and produce reports: - [What Sayproof is](/en/start/overview.md) and [the journey of a review](/en/start/how-it-works.md) - [Concepts](/en/start/concepts.md): channel, market, proof of purchase, publishing method - [Panel features](/en/features/reviews.md): the purpose and use of each screen ### Developers For teams that display reviews on the site and transfer orders to Sayproof: - [Setup options](/en/integrate/overview.md): choosing the right method for your site - [Setting up with the script](/en/integrate/script.md): the shortest approach, which works on any site - [Server-side rendering (SSR)](/en/integrate/server-rendering.md): including reviews in the page's first response - [Headless use](/en/integrate/headless.md): displaying the review list with your own design - [Sending orders](/en/integrate/orders.md): transferring order and delivery data with the server key - [Customising](/en/customize/overview.md) and [Reference](/en/reference/dom-attributes.md) ### Legal, compliance and security teams - [Regulatory compliance](/en/security/compliance.md): which rules Sayproof applies and how - [Keys and access](/en/security/keys.md): which values must be kept secret and what to do if one leaks - [Protecting personal data](/en/security/data-protection.md): personal data requests, retention periods, data location ### For AI tools The entire documentation is also available as Markdown. You can give one of the following files to the AI tool you use while writing code: - [`/llms.txt`](/llms.txt): a list of all pages with a link to the Markdown version of each - [`/en/llms-full.txt`](/en/llms-full.txt.md): the entire English documentation in a single file - The **Markdown** link next to each page title opens the Markdown version of that page only. :::note The addresses in this documentation are examples. Your own Sayproof addresses, site key and channel code are shown in the panel on the **Setup › Integration** screen. ::: --- ## What Sayproof is > A review system based on proof of purchase; its features, intended users and the functions it deliberately excludes. Source: /en/start/overview/ Sayproof enables online stores to collect, approve and publish customer reviews on their own sites. Its core principle is: **only a customer who has bought the product can write a review**, and every review is stored together with the record of the purchase it is based on. ### Features - **Collection.** After a product is delivered, the customer receives an invitation email. Customers can also write a review on the product page by entering their order number, or directly if they are signed in to your site. - **Verification.** The right to write a review is based on the order and delivery data transferred from your store system. A person whose purchase cannot be verified cannot open the review form. - **Moderation.** Every review goes through automatic checks for personal information, profanity, health claims, repetition and signs of fake reviews. The checks never reject a review on their own; a suspicious review is left for a moderator to approve. - **Publication.** Approved reviews are shown on your site with a "Verified buyer" mark. The look of the review section can be adapted to your design, and with headless use the review list can also be displayed entirely with your own components. - **Marketplace import.** Buyer reviews written for your store on marketplaces such as Trendyol or Hepsiburada can be shown on your product pages with their source, when you provide a file or a permitted link address. These reviews come with the marketplace's buyer marking, not with Sayproof's order verification; they carry a source label instead of the "Verified buyer" mark: [Marketplace reviews](/en/features/marketplace-reviews.md). - **Records.** Each review's history (who acted, when, with which reason and under which rules version) is stored in a form that cannot be changed or deleted. The period report for auditors or your legal team is produced from the panel. Every read that shows customers' personal data is also recorded, with who saw how many records and when, in a way that cannot be deleted. ### Intended users - Brands that want to demonstrate that their reviews can be trusted. - Brands that sell in Türkiye and are required to comply with the regulation on consumer reviews. Sayproof applies these rules directly in the product: in the Türkiye market, reviews without proof of purchase are not published, sorting only uses permitted criteria, and the author of a rejected review is told the reason. For details, see [Regulatory compliance](/en/security/compliance.md). - Brands that sell in more than one country. Each market has its own rules, and reviews from different markets are never mixed. ### Excluded functions The following functions are not part of the product, in order to comply with the regulation, and cannot be enabled through settings: - Publishing reviews without proof of purchase in the Türkiye market. - Rejecting reviews because of their rating. The rejection reasons include no "negative" or "low rating" reason. - Tying the publishing method to the rating. For example, there is no setting that automatically publishes only 4- and 5-star reviews. - Adding coupons, discounts or campaign content to the invitation email. - Sort options that the market rules do not permit. Under the Sayproof rule the default sort order is by date; in its own rule version your brand can choose the default from the sort options offered. - Wording in the rejection notice that steers the customer to change their review or rating. The notice only contains the rejection reason and a correction link. ### Getting started Your brand and the first administrator account are opened by the Sayproof team; you sign in to the panel at the address sent to you, with your account. All further steps are carried out in the panel: [Quick setup](/en/start/quickstart.md). --- ## The journey of a review > The steps and statuses a review goes through, from the order transfer to publication and afterwards. Source: /en/start/how-it-works/ ### Order transfer Your store system sends the order to Sayproof: the order number, the customer's email address, the products and the payment state. It then sends the shipping and delivery information for each order line. For details, see [Sending orders and deliveries](/en/integrate/orders.md). If your store runs on Akinon, Shopify or WooCommerce, Sayproof reads this information from the platform itself: [Akinon orders](/en/integrate/akinon.md), [Shopify orders](/en/integrate/shopify.md), [WooCommerce orders](/en/integrate/woocommerce.md). With this information, Sayproof knows which customer bought which product and whether the product has been delivered. The right to write a review is based on this information. ### Sending the invitation If an order line has been delivered and the payment is complete, an invitation email is sent to the customer once the waiting time (2 days by default) has passed. - Products from the same order that can be invited at that moment are combined into a single invitation; products delivered on another day may get a separate invitation. - Invitations are only sent during the sending hours (10:00–19:00 by default). - The number of invitations a customer can receive per day is limited (3 by default). - If not every item in the invitation has been reviewed, one reminder is sent (by default after 5 days). - No invitation is sent to a customer who does not want to receive emails. The reason for every stopped invitation is recorded. - If the line was cancelled or returned, a **shopping experience invitation** is sent instead of a product invitation: the customer can review their experience up to that point (the Turkish Advertising Board's *Guideline on Consumer Reviews*, Art. 5/4). For the settings, see [Invitations and emails](/en/features/invitations.md). ### Writing the review The customer can reach the review form in three ways: | Route | Verification | |---|---| | The link in the invitation email | The link is specific to the order; no further verification is required | | The "Verify my order to write a review" link on the product page | The order number and the email address used for the order | | A customer signed in to your site | Your server queries the signed-in customer's status; no order number is required. On the order detail page, the items of the order can be reviewed inside the page. | The overall rating is required in the form; the review text is optional. The customer can also write a name; if the **Hide my name on the site** box is ticked, the name shows on the site, in structured data and in the Google file as the first letter of every word followed by `***` (`A*** K***`). The full name is visible in the panel. Rating topics (such as size or fit) are asked depending on the product type, and the customer can add photos or videos. Photos and videos are prepared in the customer's browser before they are uploaded: a photo is reduced and its location data is removed before the file leaves the device, and a video is reduced and made silent ([Limits](/en/reference/limits.md#content-limits)). One review can be written for each order line; buying the same product again creates a new right to review. A customer who comes through a shopping experience invitation is not asked rating topics; these reviews also go through the same checks and the same approval, are included in the average and are shown on the site with a label of their own. The time allowed to write a review is set by the market rules. Under Sayproof's Türkiye and EU rules, it is 90 days from delivery; your brand can choose another period of 7–365 days in its own rule version. ### Automatic checks A submitted review goes through automatic checks: personal information (phone, email, ID number, IBAN, card number, address), profanity, health claims, repeated text, many reviews in a short time and signs of fake reviews. The automatic checks **do not reject** a review. The check result is "Clean", "Flagged", "Left for approval" or "Rejection suggested". For a review with a suggested rejection, the suggested reason is shown; the decision rests with the moderator. ### Approval Depending on the **publishing method** the brand has chosen, the review is either published automatically or added to the **Awaiting approval** list. A moderator's **Approve** button publishes a review from the list in a single step: | Method | Result | |---|---| | Manual | Every review waits for a moderator's approval. | | Automatic | A review that passes the checks cleanly is published; the others are left for approval. | | Hybrid | The same as Automatic, except that reviews with photos or videos are also left for approval. | The publishing method cannot be tied to the rating. For details, see [Reviews and approval](/en/features/reviews.md). ### Publication or rejection An **approved** review is shown on your site with the "Verified buyer" mark and is included in the average rating and the structured data (JSON-LD). The photos and videos of a review are at the public address only while the review is published. Reviews imported from a marketplace do not come from the customer's review form: they are taken from a file you upload or from a link address the marketplace permits, go through the same checks and are published with a source label instead of the "Verified buyer" mark ([Marketplace reviews](/en/features/marketplace-reviews.md)). The author of a **rejected** review is informed of the rejection reason by email. The email contains a correction link, valid for 30 days by default. The customer can correct the review and submit it again, and can keep or remove their earlier photos and videos (kept and new files together can be at most 6). The corrected review goes through the checks again; if it is left for approval, its waiting time starts again. ### After publication | Action | Description | |---|---| | Seller reply | The brand's reply to a published review. It is checked for personal information, abusive language and steering before it is saved, then goes through approval. | | Resolution note | A record, shown together with the review, stating that the customer's problem has been resolved. It goes through the same check as a seller reply. | | Report | A visitor can report a review, stating a reason. Reported reviews can be filtered in the panel. Reports are closed from the review details, and are closed automatically when the review is removed or hidden with any reason other than "Reported, decision pending". | | Return after the review | If the order line, or the order's payment, is refunded after the review, the "Returned after the review" mark is added to the proof of purchase and the automatic checks run again; the review's status does not change. Process experience reviews do not receive this mark. | | Hide for now | Temporarily removes the review from publication while it is under review; can be undone. | | Remove | Applied to a review found to be misleading, or one that must be removed by an official order; cannot be undone. | | Personal data deletion request | The customer's name, email address, photos and videos are deleted; their name and contact details in review, question and answer texts are replaced with marks and the contact details on their orders become pseudonyms; the rating, the rest of the text and the history are retained. | Every action is recorded in the review's history. This history cannot be changed or deleted. ### Review statuses The review statuses that can be seen in the panel: | Status | Meaning | |---|---| | Waiting for proof | The proof of purchase is being checked. | | Proof verified, being checked | Proof was found; the review is going through the automatic checks. This is a short in-between status. | | Awaiting approval | Waiting for a moderator's decision. | | Approved, going live | Approved; being published. This is a short in-between status. | | Published | Shown on the site. | | Rejected | Rejected with a reason; the customer can correct it. If the rejection was a mistake, a moderator takes the review back for approval with **Review again**. | | Correction asked | A moderator used the **Ask for a correction** button on the rejected review; a new correction link was emailed to the customer. | | Rejected, no proof | The market rules require proof and none was found. | | Hidden for now | Temporarily removed from publication. | | Removed | Permanently removed. | --- ## Concepts > The core concepts used in the panel and in this documentation. Source: /en/start/concepts/ Short explanations of these concepts are also available in the panel: clicking the ⓘ button next to headings, table columns, filters and summary tiles opens a short text that explains the concept in plain language. ### Brand and region In Sayproof each customer is set up as a **brand**. The data of different brands is kept apart. All brands sign in to the panel at the same address; the account that signs in decides which brand opens. A user belongs to exactly one brand and sees all of that brand's channels ([Panel address](/en/features/users.md#panel-address)). Each brand belongs to a **region**, and its data is stored on servers in that region (Türkiye or the European Union). A brand that wants to operate in both regions is set up separately in each region, each with its own panel address. For details, see [Protecting personal data](/en/security/data-protection.md). ### Channel and market A **channel** is a point of sale under a brand where reviews are collected and shown, for example your Turkish website, your mobile app, your site in another country, or a site on another domain where you sell under another name. The **market** determines which country's rules the channel is subject to. - Reviews from a brand's channels in the same market are shown together and counted in a single average. If two of your brand's sites are in the same market, the same product's reviews appear on both sites. - Reviews from different markets are never mixed; each market's average is calculated separately. - The identity customers see lives on the channel: the channel's **Name shown to customers**, sender email address and support page are entered in the **Edit the channel** form; that channel's invitation emails go out with these details ([Editing a channel](/en/integrate/channels-and-keys.md#editing-a-channel)). - By default a brand can have up to 3 open channels (**Channel allowance**); for more, another channel is requested from the panel ([Channel allowance](/en/integrate/channels-and-keys.md#channel-allowance)). - If your brand has more than one active channel, the panel's top bar has a **Channel** selector; its first option is **All channels**. The choice is kept in the page address: each browser tab stays on its own channel and the choice is kept as you move between screens. The **Overview**, **Statistics**, **Awaiting approval**, **All reviews**, **Questions**, **Invitations**, **Message log** and **Connection log** screens are filtered by the selected channel, together with their counters, and the **Awaiting approval** number in the menu counts the selected channel too, so you see each site's numbers separately. **Store appearance** and **Integration** open with the selected channel; **Audit report** starts a new report with the selected channel and lists only that channel's earlier reports; **Email templates** shows the templates used on that channel and opens a new template with it; **Market rules** shows that channel's market, the rules in force and its method statements. Other screens apply to the whole brand; while a channel is selected, they show a note saying why (for example on **Risky words**: "This screen is not filtered by the selected channel: the risky word lists apply the same way to reviews on all your channels."). ### Market rules Each market has its own review rules, which are kept as versions: | Rule | Türkiye | European Union | |---|---|---| | Proof of purchase requirement | Yes | No (reviews with proof are marked) | | Time allowed to write a review | 90 days from delivery | 90 days from delivery | | Sort options offered | Date, rating, with seller response | Date, rating, with seller response, most helpful | | Default sort order | Date | Date | Market rules start from the rules Sayproof prepares in line with the regulation. Your administrator can open a version that belongs to your brand for a market or a single channel; legal requirements (proof of purchase in Türkiye) cannot be turned off, and sort options are chosen from Sayproof's list. Each review is stored together with the rules version in force on the date it was written. Even if the rules change later, it is known under which rules the review was published. For details, see [Market rules and method statement](/en/features/market-rules.md). ### Proof of purchase The record showing which line of which order a review is based on. A review without proof does not show the "Verified buyer" mark; in the Türkiye market, a review without proof cannot be published. For a review imported from a marketplace, the proof is the marketplace's buyer marking; it is kept with the source's review number and link, and the review shows a source label instead of "Verified buyer" ([Marketplace reviews](/en/features/marketplace-reviews.md)). To write a review, the order must be paid, the line must be delivered and the time allowed to write must not have expired. One review can be written for each order line. If the line was cancelled or returned, the customer can review their experience up to that point through a shopping experience invitation; this review also carries proof tied to the order. ### Product code and product group A **product code** identifies a single item offered for sale (a variant), for example size 38 of a shoe. A **product group** brings together the variants of the same product. Reviews can be shown at variant or group level. The product code used on the page must be exactly the same as the code sent in the order transfer. ### Invitation The review invitation sent to the customer for a delivered product. The link in the invitation is only valid for the products of that order. The invitation is a **service email**: because it carries no promotional content, no separate marketing consent is required from the customer. For cancelled or returned lines, a **shopping experience invitation** is sent instead of a product invitation. ### Publishing method Determines whether reviews go through moderator approval: **Manual**, **Automatic** or **Hybrid**. It can be chosen separately per market and channel; it cannot be tied to the rating. ### Automatic checks The checks applied to every review: personal information, profanity, health claims, catalogue match, repeated text and bursts, fake review suspicion. The checks do not reject a review; where necessary they suggest a rejection reason or leave the review for approval. ### Rejection reason For every rejected review, a reason is chosen from a fixed list and communicated to the customer. The list contains no reason such as "negative" or "low rating". ### Method statement The page explaining how the reviews on your site are collected, verified and published, how the average is calculated and how sorting works. Sayproof generates a separate statement for each channel and language automatically from that channel's rules and publishing method; the review section links to this page. ### Rating topics Additional questions asked alongside the overall rating, for example "Size: small – true to size – large" or "Comfort: 1–5 stars". A separate topic list can be assigned to each product type. ### Seller reply and resolution note A **seller reply** is the brand's reply to a published review; on the site it is headed "Seller response". A **resolution note** is a record, shown together with the review, stating that the customer's problem has been resolved; on the site it is headed "Resolution". Both appear on the site together with the review. ### Roles and the Sayproof team A panel user's role can be **Moderator**, **Analyst** or **Administrator**. The **Sayproof team** is not a user of your brand. Sayproof prepares and updates the predefined word list; brands cannot edit the words on it, but they can switch them off for their own brand and add their own words. You manage your brand's own versions of the market rules and its rating topic lists; Sayproof provides starting rules in line with the regulation and preset lists. When support is needed, the team can open a time-limited support session with a written reason, which shows in the **Activity history**. For details, see [Users and roles](/en/features/users.md) and [Sayproof team support access](/en/features/users.md#sayproof-team-support-access). ### Keys The **site key** is included in the page's code and is not secret. The **server key** is secret and must only be kept on your server; your store's server uses it to send orders and to prepare reviews together with the page. For teams that want to sign their orders there is also an optional **signing password**, which is secret too. For details, see [Keys and access](/en/security/keys.md). --- ## Quick setup > The tasks required from opening your brand to publishing the first review. Source: /en/start/quickstart/ This page lists, in order, the tasks required from opening your brand to publishing the first review. The steps in the panel require the **Administrator** role. In the panel, screens with a lot of content are split into in-page tabs; in this documentation a tab is written together with its screen, as in **Settings › Publishing**. The selected tab is kept in the page address, so the same tab opens when you reload the page or share the address. To see what a term means, click the small ⓘ button next to headings, table columns, filters and summary tiles; a short explanation opens. The explanation closes with the Esc key or when you click elsewhere. ### Account - [ ] The Sayproof team opens your brand and the first administrator account. You receive the **panel address**; the **password link** is emailed to the first administrator's address, is valid for 3 days and can only be used once. For details, see [Panel address](/en/features/users.md#panel-address). - [ ] Set a password of at least 12 characters and sign in at the panel address; your account opens your brand. Bookmark the address. - [ ] Turn on two-step sign-in for your account (optional, recommended): [Two-step sign-in](/en/features/users.md#two-step-sign-in). - [ ] Add your team on the **Setup › Users** screen. Give each user only the role their work requires: Moderator for those who approve reviews, Analyst for those who produce reports. For details, see [Users and roles](/en/features/users.md). ### Channel - [ ] Create the channel with the **Setup › Channels › Set up a channel** wizard: name, market, language. Set up a separate channel for each site in another country or on another domain where you sell under another name. By default your brand can have up to 3 open channels; for more, use the **Request another channel** button ([Channel allowance](/en/integrate/channels-and-keys.md#channel-allowance)). - [ ] If the channel appears to customers under a name other than your brand's, fill in **Name shown to customers**, **Sender email address** and **Support page address** in the **Edit the channel** form; where a field is left empty, the brand name and the value in **Invitation sending** are used. - [ ] If your brand has a privacy notice on the processing of personal data, enter its address (`https`) in the **Privacy notice link** field of the **Edit the channel** form; the link is shown under the review forms and in the footer of the invitation email. - [ ] Verify the domain and enter the **page the invitation link opens**. - [ ] Create the site key and the server key. The server key is used both for order transfer and for SSR; it is only shown at the moment it is created, so store it somewhere safe straight away. For details, see [Channel, domain and keys](/en/integrate/channels-and-keys.md). ### Products - [ ] On the **Products › Product sources** tab, connect your product source (a product file address or a product service) and complete the field mapping. For details, see [Products](/en/features/products.md). A review written for a product that is not in the catalogue is left for approval by the automatic checks. When the product list is up to date, reviews are matched to the right product and product names are shown in the statistics. - [ ] On the **Rating topics** screen, assign a topic list to your product types (for example size and fit for shoes). For details, see [Rating topics](/en/features/rating-topics.md). ### Invitations and publishing - [ ] **Invitation sending**: waiting time, sending hours, daily limit, reminder and the system that sends the invitation. - [ ] **Email templates**: subject line and sections. If no email template has been saved, Sayproof's default invitation email is used. - [ ] On the **Settings › Publishing** tab, choose the publishing method: Manual, Automatic or Hybrid. The Manual method is recommended at the start; you can change it once you have assessed the incoming reviews. For details, see [Invitations and emails](/en/features/invitations.md) and [Settings](/en/features/settings.md). ### Method statement - [ ] Review the **Market rules › Method statement** tab. Sayproof publishes each channel's method statement on your behalf; no further action is needed. If you prefer, you can publish a channel's statement text on a page of that channel's site and link that page instead. For details, see [Market rules and method statement](/en/features/market-rules.md). ### Connecting the site - [ ] Make sure orders reach Sayproof. If your store runs on Akinon, Shopify or WooCommerce, set up the connection with **Read from your platform** on the **Integration › Order transfer** tab; otherwise, use **Sent by your store** to send a few test orders and check the incoming requests on the same tab. For details, see [Akinon orders](/en/integrate/akinon.md), [Shopify orders](/en/integrate/shopify.md), [WooCommerce orders](/en/integrate/woocommerce.md), [Sending orders and deliveries](/en/integrate/orders.md). - [ ] Add the review display to the product page. For details, see [Ways to set up](/en/integrate/overview.md). - [ ] Check the "Seen on your site?" section on the **Integration › Showing reviews** tab and the **Connection log** screen. ### End-to-end test - [ ] Send a test order in the delivered state. - [ ] On the product page, use the "Verify my order to write a review" link to enter the order number and email address, then write a review. - [ ] Confirm that the review appears in the **Awaiting approval** list, and approve it. - [ ] Check that the review is shown on the product page. With SSR this can take up to 60 seconds. - [ ] Once the waiting time has passed, an invitation is sent to the email address on the test order. Follow the invitation's status on the **Invitations** screen. If you run into problems, see [Troubleshooting](/en/integrate/troubleshooting.md). --- ## Reviews and approval > The Awaiting approval, All reviews and review details screens; approving, rejecting, hiding, removing, seller replies and resolution notes. Source: /en/features/reviews/ The **Reviews** group in the menu contains two screens: **Awaiting approval** (reviews waiting for a moderator's decision) and **All reviews** (all reviews regardless of status). Clicking a row in the list opens the **review details** in a side panel. If a channel is selected in the top bar, both screens, together with their counters, show only that channel's reviews; filtering by channel is done with this selector ([Channel and market](/en/start/concepts.md#channel-and-market)). The number next to **Awaiting approval** in the menu is also the selected channel's; with **All channels** selected it is the total for all channels. While a channel is selected, if reviews or seller replies are waiting for approval in other channels, a pill such as "Other channels +1" appears next to the **Waiting** number on the **Awaiting approval** screen; clicking it switches to **All channels**. On phones the pill shows only the number. Deciding on reviews requires the "Can decide on reviews" permission (the Moderator and Administrator roles). ### Awaiting approval Reviews waiting for a moderator's decision before publication are listed on this screen. Which reviews are added to the list is determined by the **publishing method**: | Method | Reviews added to the list | |---|---| | Manual | All reviews | | Automatic | Reviews that do not pass the automatic checks cleanly | | Hybrid | Reviews that do not pass cleanly, and reviews with photos or videos | The publishing method is chosen on the **Publishing** tab of the **Settings** screen; see [Settings](/en/features/settings.md). Each row shows the review's rating, product and market, and how long it has been waiting. For a review imported from a marketplace, the marketplace's name (for example **Trendyol**) appears as a badge next to the review text. The waiting time counts from the moment the review last entered the list; a review the customer corrected and sent again re-enters the list and starts waiting from the beginning. If the automatic checks suggested a rejection, the suggested reason is also shown in the row. The suggestion is not binding; the decision rests with the moderator. - **Counters:** Waiting, Flagged, With photos or video, Seller replies awaiting approval and Waiting longest. The Flagged and With photos or video counters filter the list. The Seller replies awaiting approval counter scrolls to the **Seller replies awaiting approval** list on the same screen; the list only shows while a reply is waiting, shows at most 50 replies (if there are more, the button below it opens all of them on the **All reviews** screen), and opening a row shows the seller reply with its approval buttons at the top of the review's side panel. Counters other than Waiting are not shown as boxes when at zero; they are listed on the **At zero** line below the boxes. Visitors can only report a published review; reported reviews are tracked on the **All reviews** screen with the "Only those reported by customers" filter. - **Filter bar:** search (title, review text, product name or code, order number, the author's name or email address; a review ID from the audit report file can also be pasted), rating and market. Product, photo/video, "Only those flagged by the automatic checks" and date in the **Filters** panel. The "Only those flagged by the automatic checks" filter looks only at the review's latest check result; if a corrected review passed cleanly, the earlier flag is not taken into account. - **Sorting:** "Waiting longest first" or "Newest first". - **Keyboard:** the ↑ and ↓ keys move between rows, the space bar selects the row for a bulk action and Enter opens the review details. The shortcuts do not work while you are typing in a search or filter field. #### Making a decision - **Approve:** The review is published in a single step and included in the average rating. - **Reject:** **Reject…** opens the list of reasons; pick one and confirm with **Reject**, or close it with **Cancel** without doing anything. The author is informed of the rejection reason by email; the email contains a link to correct the review and submit it again. - **Ask for a correction:** Shown in the details of a rejected review. The button first opens a confirmation step that says what will happen; once confirmed, the review's status becomes "Correction asked" and a new email with the same rejection reason goes to the customer. The new correction link in the email is valid for the correction link lifetime set on the **Settings › Automatic checks** tab; use it, for example, when the link in the first email has expired. - **Review again:** Shown in the details of a rejected review or one with a correction asked. If the rejection was a mistake, after a confirmation step the review goes back to **Awaiting approval** for a new decision; nothing is sent to the customer, and a rejection notice that already went out cannot be taken back. When the customer corrects the review and sends it again, it goes through the checks again and back to approval if needed. Rejection reasons are selected from a fixed list; free text cannot be entered, and the list contains no reason such as "negative": | Reason | When to use it | |---|---| | Not about the purchase | The review has nothing to do with the product, delivery, packaging, the seller, the return or the price, or any other part of the purchase. A review about delivery or the seller is not rejected for this reason. | | About another product or seller | The review concerns a different product or seller | | Contains personal information | The review contains details such as a phone number, address, email or ID number | | Contains swearing or insults | The review contains swearing or insults | | Contains a health claim | The review contains a health statement that breaches the regulation | | Repeated or unwanted content | Repeated text, advertising or meaningless content | | Not understandable | No meaningful content can be derived from the review | | Suspected to be fake | The review is suspected not to be based on a genuine experience | | Legal request | A decision by a competent authority or a legal request | :::caution Positive and negative reviews must be subject to the same checks and the same time limits. The **Statistics › Compliance** tab monitors whether reviews at one star level are rejected noticeably more often than those at another, and whether decisions are delayed. ::: #### Bulk actions Several reviews can be selected and approved or rejected in a single action. The box in the header selects every review on the page (25 reviews per page). A reason is required for bulk rejection, and the same reason is applied to all selected reviews. The selection is limited to the page displayed and the filter applied. The bulk action bar appears at the bottom of the screen once at least one review is selected and disappears when the selection is cleared. **Reject…** and **Approve** sit side by side on the bar: Approve approves the selected reviews at once; Reject… opens the list of reasons, and the rejection is confirmed with a button that shows the number selected (for example "Reject 3 reviews"). Reviews that are no longer awaiting approval because someone else decided on them after you selected them are skipped; when the action finishes, it says how many reviews were handled and how many were skipped (for example "18 reviews handled · 2 reviews skipped because they are no longer waiting"). If the action fails, the list is refreshed. When a review is opened, the decision buttons sit at the top of the detail panel, right below the summary; every action that needs a reason (**Reject**, **Hide for now**, **Remove**) opens the list of reasons first. ### All reviews This screen shows all reviews in a single list, regardless of their status. Product, delivery and seller reviews appear in the same list without being split into tabs. - **Filter bar:** search (title, review text, product name or code, order number, the author's name or email address; a review ID from the audit report file can also be pasted), status, rating, market and **Came from** (invitation email, the site, entered by hand, imported from a marketplace). Product, language, photo/video, proof of purchase, seller reply (Yes, No, Awaiting approval), "Only those reported by customers", "Only those flagged by the automatic checks", "Only those flagged by a check after publishing" and date in the **Filters** panel. - **Badges:** The review column shows the marketplace name of a review imported from a marketplace (for example "Trendyol"), the number of photos or videos ("2 photos or videos"), the number of open customer reports ("1 customer report") and, on reviews with an automatic check finding that is waiting for a decision, the **Caught by checks** badge: reviews awaiting approval whose latest automatic check flagged them, and published reviews caught by a check again that have not been kept with **Keep it live**. Once a decision is made (approval, rejection or **Keep it live**), the badge goes away. If a published review is caught by a check again, for example after a return made after the review, you can find it with status "Published" and the "Only those flagged by a check after publishing" filter in the **Filters** panel. The review's details then show a box explaining this and a **Keep it live** button: after reviewing it, if the review should stay live, confirm and it leaves this list and the **Overview** alert, and the decision is written to the review's history. If the review is caught by a later check, the alert comes back. - **Sorting:** "Newest first", "Oldest first", "Highest rating first", "Lowest rating first". - **Keyboard:** the ↑ and ↓ keys move between rows and Enter opens the review details. - **Saved views:** Frequently used filter combinations can be named and saved. Saved views are personal. - **Columns:** The columns shown in the table can be selected. - **Download:** Pick **CSV**, **Excel** or **JSON** from the menu; the list is downloaded in that format with the current filter applied. All three carry the same fields; in Excel the rating is a number, in JSON whether the purchase was verified is written as `true` or `false`. This requires the "Can download reports and files" permission (Analyst and Administrator); every download is recorded in the **Activity history**. ### Review details When a review is clicked, the following sections are shown in the side panel: | Section | Content | |---|---| | Review summary | Below the rating, title and text: **Written by** (the name the author entered, always in full; when the author asked for the name to be hidden, a **Name hidden on the site** badge appears next to it and, on hover, says that the site shows only the first letter of every word followed by `***`), **Email** (the author's email address; the **All reviews by this customer** link next to it opens the **All reviews** list searched by this address (only the reviews in the channel selected in the top bar, if one is selected); after a personal data erasure request, "Personal data erased (data request)" appears instead of the address), **Product**, **Market and channel**, **Where it came from** (where the customer reached the form: an invitation email or the site; **Imported from a marketplace** for a review imported from a marketplace) and **Rules applied** (for example "TR rules, version 3") | | What would you like to do | The actions available in the review's current status | | Seller reply | The live or pending reply, its actions and the box to write a new reply; details below ([Seller reply](#seller-reply)) | | Reports | Reports visitors have submitted about this review, and the **Close the reports** button that closes the open ones. A closed report also shows the note written when closing it, if there is one. | | Topic ratings | The additional ratings the customer gave | | Proof of purchase | The order and line the review is based on, and the verification method. This section is always shown; a review without proof shows the "No proof of purchase" warning. If the order line, or the order's payment, was refunded after the review, the "Returned after the review" mark is shown; it is not used on process experience reviews. | | Photos and videos | Each file and its state. Files still being processed, or quarantined by the security scan, are also shown together with the reason; a quarantined file has no preview. With the "Can decide on reviews" permission, the **Remove…** button under a file removes only that file: choose a reason (Contains personal information, Contains swearing or insults, The customer's own request, Court or official order) and confirm with **Remove photo** or **Remove video**. | | Automatic check result | The result of each check and the suggested reason | | Review history | Every action: the person who took it, the time, the reason and the rules version applied. The **Download** menu at the top of the card downloads the history as CSV, Excel or JSON ("Can download reports and files" permission); for details see [History of one review](/en/features/reports.md#history-of-one-review) | | Resolution note | See the section below | The action buttons are determined by the review's status; actions that cannot be taken in that status are not shown. The **Copy link** button at the bottom of the review summary copies a link that opens the panel with this review open. A colleague who receives the link opens the review without searching; they need access to the same brand. A review written by a customer whose order was cancelled or who returned the item is marked with the "Cancelled or returned: process experience" badge at the top of the details. These reviews go through the same approval process; see [Invitations and emails](/en/features/invitations.md#process-invitation-after-a-cancellation-or-return). On the details of a review imported from a marketplace, next to the rating and the status there is a badge such as **Purchase verified by Trendyol** instead of "Verified buyer". In the review summary, the **Source** row shows the marketplace's name, the review's date at the source and an **Open at the source** link; if the review was removed at the source, a **Removed at the source** badge appears. The **Proof of purchase** section shows **Review number at the marketplace** instead of the order, and the method is **Verified by the marketplace**. For details, see [Marketplace reviews](/en/features/marketplace-reviews.md). #### Actions on a published review | Action | When to use it | Can it be undone | |---|---|---| | **Hide for now** | To remove the review from publication temporarily while it is under review. Reasons: Under review · Waiting for legal review · Reported, decision pending | Yes, with **Show again** | | **Remove** | When the review is found to be misleading or must be removed. Reasons: Found to be misleading · Court or official order · The seller stopped trading · The customer's own request | No | A hidden or removed review is not shown on the site and is not included in the average. The review is not deleted; its record, history and reason are retained for audit purposes. A review's photos and videos are at the public address the site uses only while the review is published. The files of a review that is awaiting approval, rejected, hidden or removed do not open from that address; they stay visible in the panel in the review's details. When the review is published again with **Show again**, the files return. The photos and videos of a review removed with the reason "The customer's own request" or "Court or official order" are deleted permanently. A single photo or video can also be removed from a review without removing the review (the **Photos and videos** row above). The file is deleted permanently, including from the public address; the review's text, rating and status do not change. The removal is written to the review's history as "Photo or video removed", with its reason, and to the **Activity history**. #### Seller reply You can write a reply of up to 2,000 characters on behalf of your brand to a published review. - The reply is checked before it is saved. A reply containing personal information (an email address, phone number, ID number, IBAN, card number or address), abusive language, or a sentence steering the customer into changing the review or rating is not saved; the panel shows the reason. - The reply goes through approval first; once approved, it is published under the review. Replies awaiting approval are listed in the **Seller replies awaiting approval** list on the **Awaiting approval** screen and on the **All reviews** screen with the "Seller reply: Awaiting approval" filter. - A review can have only one reply that is awaiting approval, published or hidden. A new reply can be written once the earlier reply has been rejected or withdrawn. The site shows the newest published reply. - A reply can be rejected for the following reasons: Contains personal information · Misleading or unproven claim · Steering the customer to change the review · Not about the review · Legal request. - **Withdraw:** A reply that is awaiting approval, published or hidden can be withdrawn without a reason; for example, to fix a typo. The button first opens a confirmation step. A withdrawn reply no longer shows in the store and stays in the review's history as "Withdrawn"; a new reply can then be written to the review. The reply follows the review's status: - When the review is hidden for now or removed, its published reply is hidden too, with the reason "The review is no longer live". When the review comes back with **Show again**, that reply is published again automatically. A reply a moderator hid with another reason stays hidden. - While the review is hidden, a reply awaiting approval cannot be approved; it can be approved once the review is published again. In the meantime the reply can be withdrawn. - When the review is removed, a reply awaiting approval is withdrawn automatically. :::caution Do not ask the customer in your reply to change or delete their review or to raise their rating, and do not offer discounts or gifts. Article 8/5 of the Turkish Advertising Board's Guideline on Consumer Reviews treats such practices as manipulative. ::: #### Resolution note A record, shown together with the review, stating that the customer's problem has been resolved (up to 2,000 characters). A resolution note does not change the review's status; on the site it is shown next to the review under the heading "Resolution". The note goes through the same check as a seller reply: a note containing personal information, abusive language or steering is not saved. A note can only be added to a review that is published or hidden for now. More than one resolution note can be added to a review: once a note is added, the **Add a new note** field stays open on the card, for example to fix a typo. The site shows the latest note; earlier notes stay in the review's history. ### Reported reviews Visitors can report a review on the site for one of the following reasons: Not backed by a real purchase · Contains personal data · Contains abusive language · Not about the purchase · Unwanted content · Other. A reported review stays published; it can be tracked on the **All reviews** screen with the "Only those reported by customers" filter, and on the **Overview** screen through the number of reviews with open reports; a review reported by several visitors counts once. Reports from the same visitor about the same review count once while their report is open. After assessing the report, hide or remove the review if necessary. While you look into it, you can hide the review temporarily with the reason "Reported, decision pending". Reports are closed in these cases: - When **Close the reports** is pressed in the review details; for example, when the review is to stay published after the assessment. An optional note (up to 1,000 characters) can be written in the panel that opens; the note is only shown in the panel, next to the closed report, and nothing is sent to the customer. - When the review is removed, or hidden for now with any reason other than "Reported, decision pending"; the review's open reports are then closed automatically. The reports of a review hidden with "Reported, decision pending" stay open until a decision is made. Closed reports drop out of the open report count. The time between a report being opened and closed is tracked on the **Statistics › Compliance** tab as "Time to handle reports". --- ## Questions and answers > The questions and answers section on the product page; approval, rejection, brand answers and answers from customers who bought the item on the Questions screen. Source: /en/features/questions/ While questions and answers are on, the product page shows a **Questions and answers** section below the reviews. Visitors ask about the product; the brand and customers who bought the item answer. Questions and answers are managed on the **Questions** screen in the **Reviews** group of the menu. If a channel is selected in the top bar, the screen shows, together with its counters, only the questions asked on that channel. Seeing questions needs the "Can see reviews" permission; deciding on questions and answers and answering as the brand needs the "Can decide on reviews" permission. ### Turning it on and off Questions and answers are off by default. The card at the top of the **Questions** screen shows whether they are on or off: while off, turn them on with **Turn on questions and answers**; while on, turn them off with **Turn off questions and answers** and a confirmation. The change takes effect at once. Users with the **Administrator** role see these buttons. While they are off, the product page does not show the section and no new question is accepted; questions published earlier are not deleted and show again when the option is turned back on. The change is recorded in the **Activity history**. ### Asking a question Asking needs no purchase. The visitor opens the form with the **Ask a question** button and writes the question and, optionally, a name. Without a name, the question shows as "Anonymous". - **A visitor who is not signed in:** The email address is optional. Ticking "Email me when it is answered" opens the email field, which then has to be filled in. Without the tick, the question is saved without an email address and nobody is emailed when it is answered. - **A customer signed in on your site:** If your site's server has told Sayproof who the customer is ([Signed-in customers](/en/integrate/signed-in-customers.md#questions-and-answers)), the name and email fields are not shown; the form shows the line "You are asking as Ayşe K. We will email you when it is answered." The question is saved with the name your site sent and the email address of the session, and that address is told when an answer arrives. If your site sent no name, the question shows as "Anonymous". If the session details cannot be confirmed (for example after the page has been open for a long time), the form turns back into the form of a visitor who is not signed in, keeping the question already written. If the **Hide my name on the site** box in the form is ticked, the name shows on the page as the first letter of every word followed by `***` (`D*** Y***` instead of `Deniz Yılmaz`); the box is also in the form of a signed-in customer. The full name is visible only in the panel. The same box is in the answer form of a customer who bought the item. The email address is not shown on the page; it is only used to tell the asker when the question is answered. A question goes live after moderation. Questions are pooled by market: questions asked on the channels of the same market are shown together on the product page. ### Approval Every question and customer answer goes through automatic checks when it is sent: personal information, swearing, health claims and links (web addresses). Text that a check catches is not refused; the row is marked with the check's name and a moderator decides. | Publishing method | Questions and customer answers | |---|---| | Manual | All wait for approval | | Automatic | Those that pass the checks go live by themselves; the others wait for approval | | Hybrid | The same as Automatic | The publishing method is shared with reviews and is chosen in the **Publishing** tab of the **Settings** screen; see [Settings](/en/features/settings.md). The decision buttons in the side panel follow the current status of the question or answer: **Approve**, **Reject…**, **Review again**, **Hide for now…** and **Show again**. Reject and Hide for now ask for a reason; the list of reasons is fixed. A rejected question does not appear on the product page and no email goes to the asker. The answers of a hidden question do not appear on the product page either. ### Answers - **Brand answer:** While the question is live, it is written in the **Answer as the brand** field in the side panel and goes live at once with **Publish the answer**. On the product page it shows with the channel's brand name and the "Brand" label. The text cannot steer the customer to change a review or rating, and cannot contain a health claim, personal information or swearing; if it does, the answer is not published and the reason is shown. - **Verified buyer answer:** A customer who bought the item can answer with the **Answer** button under the questions on the product page, after arriving with the link in the review invitation or after verifying the order. The answer goes live after moderation with the "Verified buyer" label. A customer who bought another variant of the same product group (for example another size) can answer too. A cancelled or returned item and a process invitation do not give the right to answer. - **Email to the asker:** When an answer goes live and the question has an email address, the person who asked gets an email in the brand's name saying who answered, with a link to the product page; a brand answer is quoted in the email. The question and a customer's answer are never put in the email; the customer's answer is read on the product page. If the address is on the brand's do-not-email list, no email is sent. One address gets at most 5 answer emails in 24 hours; later ones are not sent and are recorded with the "Sending limit reached" result. The result shows under the answer and on the **Message log** screen with the "Answer notice" type. ### The Questions screen - **Status card:** At the top, whether questions and answers are on or off, with the button to turn them on or off; see [Turning it on and off](#turning-it-on-and-off). - **Counters:** Questions awaiting approval, Questions with an answer awaiting approval and Unanswered questions. Each counter filters the list with its own filter. - **Filter bar:** search (question text, the asker's name or email address, product code), status and market; and the **Unanswered** and **Has an answer awaiting approval** options. - **Sorting:** "Newest first" or "Oldest first". - **Side panel:** Opens when a row is clicked. Shows the question text, the asker (with a **Name hidden on the site** badge when the asker asked for the name to be hidden), the email address, the product, the channel and the dates; the answers with each answer's status, author (with the same badge when the author asked to hide the name) and email result; and the history of the question and its answers. --- ## Invitations and emails > The Invitation sending, Email templates, Invitations and Message log screens; rejection notices and customers who do not want emails. Source: /en/features/invitations/ The **Collecting reviews** group in the menu contains four screens: | Screen | Purpose | |---|---| | **Invitations** | All invitations created, their status and the reasons why some were stopped | | **Invitation sending** | When invitations and reminders are sent and by which route | | **Email templates** | The subject line and sections of the invitation email | | **Message log** | All messages sent to customers (by email or through your own system): invitations, reminders and rejection notices | ### Conditions for creating an invitation An invitation is created for an order line when all of the following conditions are met: 1. The line has been reported as **delivered**, and the information is not an estimate. 2. The order's **payment is complete** (paid or partially refunded). 3. The order contains the customer's **email address**. 4. The **waiting time** after delivery has passed. 5. The time allowed to write a review from delivery (90 days by default) has not expired. 6. No invitation has been sent for the line before and no review has been written for it. Lines reviewed on the site after verifying the order are not added to an invitation either. Products from the same order that can be invited at that moment are combined into a single invitation; products whose waiting time ends later (for example ones delivered on another day) are asked for in a separate invitation. The link in the invitation is only valid for the products in the invitation, and only while the time allowed to write is open. The link carries the token in the part of the address after the `#` sign: `https://www.yourbrand.com/write-a-review#review_token=…`. Browsers do not send this part to servers, and it does not reach the page address recorded by analytics tools on your page. The script also reads the `?review_token=…` form used in older invitations. No product invitation is created for returned or cancelled lines; a process invitation is created for them instead (see below). If, after the invitation has been created and before it is sent, the line is returned or cancelled, the order's payment is no longer complete or the time to write a review runs out, the invitation is not sent and the reason is recorded. While the order's channel is off, no new invitation is created, a pending invitation stops with the reason "Channel off" and no reminder goes to an invitation already sent; once the channel is turned back on, invitations are created for lines that have not been invited yet ([Turning a channel off and removing it](/en/integrate/channels-and-keys.md#turning-a-channel-off-and-removing-it)). ### Process invitation after a cancellation or return The Turkish Advertising Board's *Guideline on Consumer Reviews* (Art. 5/4) treats reviews limited to the experience up to the stage the purchase reached, when an order is cancelled, the contract is terminated or the right of withdrawal is used, as within the scope of a purchase. For this reason Sayproof creates a **shopping experience invitation** instead of a product invitation for cancelled or returned lines. - The invitation is created when the latest valid delivery information reported for the line is cancelled (`cancelled`) or returned (`returned`), and that information is within the time allowed to write a review (90 days by default). Estimated delivery information does not affect this decision. - The waiting time after delivery does not apply, and the order's payment does not need to be complete. The order must contain an email address, the customer must not have stopped receiving emails and an invitation landing page must be available; the sending hours, the daily limit and the reminder apply to this invitation too. - If a review has already been written for the line, or a process invitation has already been created for it, no new invitation is created. - The default email's subject line is "Tell us about your return or cancellation" and its button is "Review my experience". On the **Email templates** screen, a template of its own can be prepared for this invitation by choosing **Shopping experience invitation** as the invitation type. - When the link is opened, the form opens with the heading "Review your order experience". The customer gives the overall rating and can add text and a photo or video; rating topics are not asked. The submitted review goes through the same automatic checks and the same approval process as other reviews, and once published it is included in the average rating like any other review. On the site it appears in the same stream as other reviews, with the label "Cancelled or returned order: covers the experience up to that point"; in the panel, the review details carry the "Cancelled or returned: process experience" badge. The verification section of the method statement also explains how these reviews are collected. ### Invitation sending The top of the screen shows **What happens to an order**; it updates as you change the settings, even before you save. Below it the settings sit directly on the screen in four sections: **Sending route**, **When**, **Daily limit** and **Reminder**. When **Our store asks for reviews on its order page** is chosen, no invitation email goes out, so the last three sections are hidden. At the bottom are **Rules for every invitation** and **Why invitations were stopped** (only reasons seen on invitations whose status is still "Stopped"); click a reason to open the **Invitations** screen with the invitations stopped for that reason. When you change a setting, a save bar appears at the bottom of the screen; **Save changes** saves all changes together and **Cancel** undoes them all. If you try to leave the screen without saving, the panel warns you. "Invitation sending › Sending route" links on other screens open this screen at that section. A change applies as soon as it is saved. The sending hours, daily limit, reminder and sending route are read again on every send, so queued invitations also go out under the new settings. A change to the waiting time applies to invitations not yet created. | Setting | Default | Range | Description | |---|---|---|---| | Days to wait after delivery | 2 | 0–60 | The invitation is sent after this period so the customer can try the product. | | Sending hours | 10:00–19:00 | 0–23 | Invitations are only sent between these hours. The clock follows the installation's time zone (`Europe/Istanbul` in the Türkiye region); the time zone is shown above these fields. An invitation created outside these hours is sent in the next sending window. If the start and end hours are the same, invitations are sent at any hour of the day. | | Per person, per day at most | 3 | 1–100 | Prevents a customer from receiving many invitations in one day. The customer is identified by the customer ID on the order (`customer_key`), or by the order's email address if no ID is sent. An invitation held back by the limit does not count as failed; it is recorded as "Stopped". The next day a new invitation is created for the same products and the old row becomes "Block lifted". | | Reminder | On, 5 days | 1–60 | If not every item in the invitation has been reviewed, a reminder is sent **once**, this many days after the first invitation; the reminder only lists the items without a review. The reminder's subject line starts with "Reminder: ". **Who gets the reminder** can be **Everyone who got the invitation** (the default) or **Only people with marketing consent**; with the second, customers without marketing consent get no reminder, the **Message log** screen shows the "No consent" result and the first invitation is not affected. When your own system sends the invitations, reminders are passed to your system too. | | Sending route | Sayproof | | **Sayproof sends them by email**, **Our own system sends them** or **Our store asks for reviews on its order page**. For the second option, see [Sending invitations with your own system](/en/integrate/own-sending.md); for the third, [Without invitation emails](#without-invitation-emails). | | Sender email address | Sayproof's address | | To use your own address, your domain's ownership record and email settings (SPF, DKIM, DMARC) must be verified. Invitations of a channel with its own sender address go out from that address. | | Support page address | Empty | | The support link in the invitation email opens this page (`https`). Invitations of a channel with its own support page use that page. If no address is entered anywhere, no link is shown. | The domain of the sender email address must be verified on the **Sender domains** card on the **Channels › Domains** tab; see [Channel, domain and keys](/en/integrate/channels-and-keys.md#sender-domains). If one of your channels should appear to customers under another name, from another sender address or with another support page, enter **Name shown to customers**, **Sender email address** and **Support page address** for that channel in the **Edit the channel** form on the **Channels** screen. That channel's invitation emails go out with these details; rejection notices and the unsubscribe page also show the channel's name shown to customers. Where a field is left empty, the brand name and the value on this screen are used ([Editing a channel](/en/integrate/channels-and-keys.md#editing-a-channel)). The sending route, the notification address, the sender email address and the support page address can only be changed by a user signed in to the panel. A request that tries to change these fields with an API key receives `403 refused / panel_session_required`; this way a leaked key cannot redirect invitations to another address. ### Without invitation emails If you do not want invitations to come from Sayproof, choose **Our store asks for reviews on its order page** in the **Invitation sending › Sending route** step. With this route the customer writes the review on your store's order details page; because they are signed in, they are not asked for an order number or email address. With this option: - Sayproof does not create or send invitation emails. Invitations created earlier but not yet sent are stopped on the **Invitations** screen with the reason "The store asks for reviews on its order page"; invitations already sent get no reminder. - The waiting time, sending hours, daily limit, reminder, invitation email templates, sender address and support page are not used. - Sayproof keeps sending the [rejection notice](#rejection-notice) to the author of a rejected review. Two things are done on the store side: 1. Sayproof's order reviews section is added to the order details page: [Order detail page](/en/integrate/signed-in-customers.md#order-detail-page). 2. A **Write a review** link that takes the customer to that order's details page is added to the email your platform sends when an order is delivered. On Akinon, this email's template is `emails/orders/order-delivered.html` in Omnitron; in the template the order comes as `order` and the store domain as `site_domain`. In Akinon Next projects the order details page is usually at `/account/orders//`: ```jinja Write a review ``` Akinon's template documentation does not list the order object's `pk` field; check the link with a test email and write the address in the format of your own order details page. A customer who ordered without an account cannot open the order details page. That customer can write a review with the "Verify my order to write a review" link on the product page by entering the order number and email address. ### Invitations on WhatsApp :::note[Coming soon] Invitations by WhatsApp arrive with v2. ::: Invitations will also be able to go from your brand's WhatsApp Business account as an information message tied to a specific order: it will carry the brand name, the order number, the item names and the review link, with no coupon, discount or campaign. A link at the end of the message will let the customer stop review invitations on WhatsApp; their emails will not be affected. ### Email templates The invitation is a **service email**: it asks for feedback on a delivered product and does not promote any product or service. For this reason no separate marketing consent is required from the customer. The editor contains no coupon, discount, product recommendation or campaign sections, and such phrases are not saved in your own design either. The wizard has four steps: **Basics** (name, design, invitation type, language, channel, market) → **Subject line** → **Content** or **Design** → **Check and save**. There are two kinds of design: **With ready-made sections** or **My own design**. The preview on the right is built with the texts used when sending, a sample order and items from your catalogue, at desktop and phone width; the sender line shows the address the email will come from. If a channel is selected in the **Channel** field, the preview and the test email use that channel's name shown to customers, sender address, support page and privacy notice link. With **Which email** you preview the **First invitation** or the **Reminder**. The **Send me a test** button in the **Check and save** step sends the email in the preview to your panel account's email address; while **Reminder** is selected, the button becomes **Send the reminder to myself as a test**. Links in the test are examples; at most 5 tests can be sent per hour. If your account has no email address the button is disabled; an administrator can add the address on the **Users** screen ([Email and password link](/en/features/users.md#email-and-password-link)). If the sending route is **Our own system sends them**, a warning at the top of the screen says that this route only passes on the subject line and plain text and does not use the design; if it is **Our store asks for reviews on its order page**, the warning says that no invitation email is sent and the templates are not used. #### With ready-made sections The available sections: | Section | Content | |---|---| | Greeting | The salutation to the customer | | Products bought | The products covered by the invitation | | Order details | The order number and date | | Write a review button | The link that opens the review form | | Support link | Your support page (if set on the channel or in Invitation sending) | | Footer | Sender details | The rules: - The section texts are fixed and provided by Sayproof. The brand decides which sections are shown, in which order, and the subject line. The subject line is limited to 200 characters and contains no variables. - The **Write a review button** section is required; a template cannot be saved without it (`cta_required`). - The **Footer** section can be removed; the link to stop receiving emails is in every email regardless of the sections chosen. - If no support page address is set, the **Support link** section does not appear in the email; a warning below the preview says so. - If a privacy notice link is set on the order's channel, the **Privacy notice on the processing of personal data** link is in the email footer, above the link to stop receiving emails, regardless of the sections chosen ([Editing a channel](/en/integrate/channels-and-keys.md#editing-a-channel)). #### Your own design When **My own design** is chosen in the **Basics** step, the **Content** step is replaced by a **Design** step. Logo, colours, layout and text are entirely yours; only the required parts and content rules below are checked. The editor opens holding the HTML of Sayproof's default email; start by changing the logo, colours and texts, paste your own HTML or upload it as an `.html` file. Once the content has changed, **Go back to the default design** puts the default email back in the editor. Fields are written as `{{ name }}` and filled with each order's own details when sent: | Field | Content | |---|---| | `{{ brand }}` | The name shown to customers of the order's channel; your brand name if it is empty | | `{{ order_number }}` | Order number | | `{{ order_date }}` | Order date | | `{{ review_url }}` | The review link (required) | | `{{ unsubscribe_url }}` | The opt-out link (required) | | `{{ support_url }}` | Your support page; empty if set neither on the channel nor in Invitation sending | | `{{ privacy_url }}` | The privacy notice link of the order's channel; empty if it is not set on the channel | | `{{#reminder}}…{{/reminder}}` | A part shown only in the reminder email; `{{^reminder}}…{{/reminder}}` is shown only in the first invitation | | `{{#products}}…{{/products}}` | A part repeated for each item the invitation covers; inside it you can use `{{ name }}`, `{{ image_url }}` (if the catalogue has an image) and `{{ quantity }}` | If you wrap a field that can be empty in `{{#support_url}}…{{/support_url}}`, that part only appears when there is a value. The default design shows the privacy notice link in the footer inside `{{#privacy_url}}…{{/privacy_url}}`. ```html

Hello, your {{ brand }} order has arrived.

{{#products}}

{{ name }}

{{/products}}

Review my items

Stop sending me review invitations

``` The rules checked on saving; if any one is not met, the email is not saved and the reason is shown below the editor: | Rule | Detail | |---|---| | Required links | `{{ review_url }}` and `{{ unsubscribe_url }}` must each be the address of a link (``) as they are, and must appear in both the first invitation and the reminder, with or without a support link, a privacy notice link or item images; no query string or path can be added to the address. | | No promotion or incentives | The subject line and text cannot contain promotion or incentives for reviewing, such as coupons, discounts, campaigns, gifts, earning points or percentages. The invitation stays a service email. | | No steering | Phrases that steer the customer towards a particular rating or review (such as "5 stars") are not allowed. | | Links | Links can only go to your verified domains and their subdomains, and to `mailto:` and `tel:` addresses; web links must start with `https`. The rule applies to every element that carries an `href` (including `` and sections written for Outlook). | | Images | Images load from `https` addresses; this also applies to the `background` attribute and to `url()` addresses in styles. Tracking images 2 pixels or less in width or height cannot be used. Styles cannot load another file with `@import`. Item images from your catalogue are not part of this check. | | Security | Elements such as `script`, `iframe`, `form`, `button`, `link` and `svg`, attributes that run code such as `onclick`, and `javascript:` addresses cannot be used. | | Fields | An unknown field, an unclosed section or an unreadable `{{ }}` blocks saving. The content of `{{#…}}` and `{{^…}}` sections is checked against every rule even when the section is not shown at that moment. | | Size | The HTML can be 200 KB at most. | Text written inside an image cannot be checked; images must not contain promotion or incentives either. The plain text version is created from the HTML automatically and includes the link addresses. In the reminder email the subject line starts with "Reminder: ". If your own system sends the invitations, the `text` field of the notification request is created from this design; the HTML is not passed on. #### Which email is sent - An email template is prepared for one invitation type (**Product review invitation** or **Shopping experience invitation**), in Turkish or English. In the **Channel** field you choose **All channels** or a single channel. If a channel is chosen, the template is used only for that channel's orders; the market comes from the channel and the **Market** field cannot be changed. With **All channels**, the template can optionally be tied to a market. While a channel is selected in the top bar, the list shows only the templates that can be used on that channel (those made for the channel, for its market and for all markets) and a new template starts with that channel. - Only one template can be saved for the same invitation type, language, market and channel; a second one is not saved (`template_scope_taken`), and the existing template has to be edited or removed first. In a brand that already had several templates for the same scope before this rule, those templates can still be edited as long as their scope does not change. - When an invitation is sent, the template is chosen among the templates of the invitation's type in the order's language, in this order: the template for the order's channel, otherwise the template for the order's market, otherwise the template prepared for all markets. A template in another language is not used. - If no suitable template exists, Sayproof's default invitation email is used in the order's language: all sections, with the subject line "How was your order?" ("Siparişiniz nasıldı?" in Turkish). For the shopping experience invitation, the default subject line is "Tell us about your return or cancellation". - In the template list, the **In use** or **Not in use** label under the name shows whether a template is used when sending. If your brand has channels, the list also has a **Channel** column showing the template's channel. If there is more than one template for the same type, language, market and channel, the most recently created one goes out; the others are marked **Not in use** with the name of the template that goes out instead. - The **Remove** button on a row deletes the template after confirmation, and the action is recorded in the **Activity history**. The template is then chosen in the same order as above: if a channel-specific template was removed, the template for the order's market is used; if a market-specific template was removed, the template in the order's language for all markets, otherwise Sayproof's default invitation email. ### Invitations This screen lists all invitations created. The counters show the invitation statuses and the **Invitation to review** rate; the rate is the share of sent invitations where at least one product was reviewed (the same definition as the conversion in Statistics), and its label says how many sent invitations it is based on (e.g. "12 invitations sent, all time"). The rate is rounded to a whole number. Clicking a counter filters the list by that status, and statuses at zero are listed on the **At zero** line below the boxes. The **Only sent ones** box in the **Filters** panel limits the list to invitations whose email was sent; the choice shows below the filter bar as the **Sent** chip. If a channel is selected in the top bar, the list and the counters cover only that channel's orders ([Channel and market](/en/start/concepts.md#channel-and-market)). Each row shows the recipient's address ("Erased address" if the customer's personal data was erased with a data protection request) and the **Result** column: for a stopped invitation the reason, for a sent one the latest information from the email service (delivered, opened, bounced). An invitation waiting for another attempt shows "Will be tried again", and one that could not be sent shows the latest result from the email service (for example "Sender address refused"). If the customer reviewed every item in the invitation another way before the invitation email went out, the invitation becomes "Reviewed", the **Result** column shows "Closed before sending" and it is not counted in the rate. An invitation whose email was sent, or blocked, has a **Show in Message log** link in its **Order** cell; the link opens the **Message log** screen with that order's messages. | Status | Meaning | |---|---| | Queued | Waiting for the sending hours or its turn | | Sent | The email has been sent | | Reminded | The reminder has also been sent | | Reviewed | Every product in the invitation has been reviewed | | Failed | The attempts ran out or the email service did not accept the address; it can be tried again once the problem is fixed | | Stopped | Not sent because of a rule; the reason is recorded | | Block lifted | Stopped at first; once the block cleared, a new invitation was created for the same items and it is sent in that new row | The reason for every stopped invitation is recorded: | Reason | Description | |---|---| | Payment not completed | The order's payment has not been completed | | No email address on the order | The order has no address, or the customer's personal data has been deleted | | Customer's daily invitation limit reached | The next day a new invitation is created for the same products and this row becomes "Block lifted" | | Customer does not want emails | The address is on the list of people who do not want emails: the customer unsubscribed, the address bounced permanently or a complaint was made | | No marketing consent from the customer | The customer has not consented to an email that counts as a marketing message | | No invitation landing page set | The channel has no invitation page and the product has no page address in the catalogue | | Item cancelled · Item returned | After the invitation was created and before it was sent, the line was cancelled or returned | | The time to write a review has passed | The time allowed to write a review ended before the invitation could be sent | | The store asks for reviews on its order page | Sending route was changed to **Our store asks for reviews on its order page** | | Channel off | The order's channel was turned off | If the stop is not final (any reason other than the customer not wanting emails or having no marketing consent) and every item of the stopped invitation is included in a new invitation created later, the old row's status becomes **Block lifted**; the invitation is sent in the new row. If a send fails because of a temporary error, it is retried after half an hour, 1 hour, 2 hours and 4 hours; if the fifth attempt also fails, the invitation's status becomes "Failed". If the email service refuses the recipient address or the sender address, or the sender address's domain is not verified, the invitation becomes "Failed" at once; other connection errors are treated as temporary. If a reminder cannot be sent (the order no longer has an address, there is no landing page, the customer has stopped receiving emails, the line was returned or cancelled, the time to write has passed or the send attempts have run out), the invitation's status does not change and stays "Sent"; only the reminder is not sent. If there are invitations in the "Failed" state, users with the **Can change settings** permission see the **Try failed ones again** button above the list, together with their number. If a channel is selected in the top bar, the number on the button and the action cover only that channel's invitations; invitations in other channels are left as they are. First fix the problem (for example the sender domain's verification or your own system's notification address). After confirmation these invitations are queued again with their attempt count reset, and are sent within the sending hours and the daily limit. Invitations whose link has expired are not queued again and stay "Failed"; the result message says how many invitations were queued and how many links had expired. The action is recorded in the **Activity history**. Sayproof sends at most 500 invitation emails per hour on behalf of a brand; the invitations of all the brand's channels count towards this limit together. An invitation held back by this limit is also retried at the same intervals and is subject to the same limit of five attempts; if it still cannot be sent on the fifth attempt, it becomes "Failed". ### Message log All messages sent to customers (by email or through your own system) are listed together with their results. When a channel is selected in the panel's top bar, the list and the counters show only that channel's messages: invitations and reminders count under the order's channel, rejection notices under the review's channel and answer notices under the question's channel. If the customer's personal data was erased with a data protection request, the row and the details show "Erased address" instead of the recipient; the message's record and result stay. | Result | Meaning | |---|---| | Queued | About to be sent | | Sent | The email service accepted the message | | Delivered | The message was reported as delivered to the recipient | | Delayed, will be retried | The email service postponed delivery | | Bounced | The message was returned | | Customer complained | The recipient marked the message as spam | | Customer does not want emails · No consent · Sender address refused · Sending limit reached | The message was not sent; the reason it was not sent | | Failed | A technical error occurred | The "Delivered", "Delayed", "Opened" and bounce information comes from the email service's notifications. If these notifications are not connected, this information is not shown; see [Email delivery events](/en/integrate/email-events.md). The **Sending** column and filter show whether the message went by email (**Email**) or to your own system's notification address (**Notification address**). The search box searches the recipient's email address (part of the address is enough), the order number and the review number. Clicking a row shows which invitation or review the email was sent for, and the latest information received from the email service. ### Rejection notice When a moderator rejects a review, the author is informed of the rejection reason by email: - The notice is sent in the language in which the review was written; the subject line is "About your review". As the brand name, the notice shows the **Name shown to customers** of the review's channel, or your brand name if it is empty. - The notice contains a fixed text for the reason; if the review is linked to an order, a **Correct my review** link is added too. The link is valid for 30 days by default (the period can be changed on the **Automatic checks** tab of the **Settings** screen) and can only be used once. - As required by Article 8/5-c of the Turkish Advertising Board's Guideline on Consumer Reviews, the text only states the rejection reason; it does not steer the customer to change their rating or review. - The rejection notice is a service notice; it is also sent to customers who do not want to receive emails. - If a moderator uses the **Ask for a correction** button on a rejected review, another notice is sent with the same reason, the same text and a new **Correct my review** link; for example, when the first link has expired. - If a temporary error stops it, it is retried at the same intervals as invitations (after half an hour, 1 hour, 2 hours and 4 hours); it is given up after the fifth attempt. If the mail server refuses the recipient for good, it is not retried. How quickly rejection notices are sent is tracked on the **Statistics › Compliance** tab; the limit is set on the **Settings › Warning limits** tab. ### Customers who do not want emails Every invitation, even when the template has no **Footer** section, contains a link to stop receiving emails and the `List-Unsubscribe` header that email programs recognise. When the customer clicks the link, a confirmation page opens; if the customer confirms, they receive no further invitations or reminders from any channel of your brand. The confirmation page shows the name shown to customers of the channel the email came from, but the record applies to the brand, not the channel: the customer is taken off the invitations of all your channels. Addresses that bounce permanently, are marked as spam or have unsubscribed at the email service are also added to this list. - The list stores a digest derived from the address, not the address itself. - Rejection notices are not affected by this list. - An address added to this list stays on it permanently; no invitations or reminders are sent to it. ### How long order contact details are kept The email address, phone number and customer number on an order are used to send invitations and to let the customer write a review; once they are no longer needed they are turned into a pseudonym that cannot be reversed. This job runs every day: - For delivered, cancelled or returned lines, the period is the review writing period counted from the line's last delivery update (the period in the brand's market rules; 90 days by default). When the period of every line on the order has ended, the details are turned into pseudonyms. - Orders whose payment is not completed (pending, cancelled or refunded) and that have no delivery update never get an invitation; their details are turned into pseudonyms 30 days after the order date. - For paid orders that never get a delivery update, the period is the review writing period counted from the order date. - If the order has an invitation or correction link that has not expired, the job waits until the link expires. Reviews, the proof of purchase and the order number are kept; the review stays a "Verified buyer" review. An order whose details were turned into pseudonyms gets no invitation or reminder and cannot be reviewed from the order page; even if the order is sent again later, these details do not come back. On the **Message log** screen the recipient address of these orders' invitations is not shown. If the customer later makes a personal data deletion or access request, these orders are found as well. --- ## Products > Connecting a product source, mapping its fields and keeping the product list up to date. Source: /en/features/products/ Every review is associated with a product. The **Products** screen shows which source your products are transferred to Sayproof from and which products are registered. When the product list is up to date: - reviews are matched to the right product; - product names are shown on the **Statistics** screen; - the right **rating topics** are asked for each product type; - if the channel has no invitation page, the invitation link opens the product's own page. A review written for a product that is not in the catalogue is left for approval by the "Catalogue match" check. Below the counters at the top of the screen there are two tabs. The single sentence above each tab explains what the tab is for: - **Products:** all your products registered in Sayproof. The list's **Topic list** column shows the rating topics each product is asked about; the lists are set up on the **Rating topics** screen, opened with the **Go to Rating topics** button in the card heading. The **Reviews written** column counts every review written for the product, whatever its status. - **Product sources:** where your product list comes from and how often it is read. A new source is added on this tab; clicking a source in the list opens its details. The **Next step** column shows what the source needs next: **Add a mapping**, **Fix the connection**, **Watch the read**, **Confirm switching off** or **Ready**; a source that has been turned off shows **Closed**. Using this screen requires the "Can change settings" permission (Administrator); other roles do not see it in the menu. ### Product source Products are read from one or more **product sources**. There are two source types; the type cannot be changed once the source has been saved: | Type | When to use it | |---|---| | **Product file (XML, CSV, JSON)** | A product file your site publishes at a given address. A Google product file is of this type. | | **Product service (API)** | A service that returns products in pages. The connection details are usually provided by your software team. | Presets fill in the connection and mapping fields for you: the Google Merchant XML feed, the Google Merchant CSV feed and the Akinon Omnitron products API. #### Adding a new source The **Add a source** button on the **Product sources** tab opens a three-step wizard: 1. **Type and name:** the source type and its name. 2. **Connection:** a **Preset** if one applies (choosing it fills in the fields), the address (`https`, without a port number), the file format, where the records are located in the file or the column separator, the sign-in method and the reading frequency. - Sign-in methods: No sign-in · Access key · Username and password · Custom header · Parameter in the address · By signing in. - Paging for a product service: Single page · By page number · By start and count · By next-page cursor. If the service returns a modification date, only changed products can be requested. - Reading frequency options: Every 15 minutes · Every hour · Every 6 hours · Once a day. 3. **Test:** A few records are read and the result is shown with an explanation: working, no records arrived, unreachable, settings wrong or unreadable. No data is saved during the test. The **Save the source** button on the wizard's bottom bar saves the source with the details entered so far (the source name is required); the saved source appears in the list and its setup can be continued from the source's details. Values such as passwords and access keys are stored encrypted and are never shown on screen again. If the source address or the sign-in address is moved to another domain, the saved sign-in details are not carried over to the new address; they must be entered again. If, during paging, the service returns a next-page address on another domain, no sign-in details are added to that request. ### Mapping Once the source is connected, the **Mapping** tab is used to define which Sayproof fields the source fields are transferred to. The left side shows the fields found in the source (how many records contain them and example values) together with sample records; the right side shows the mapping rows. | Sayproof field | Description | |---|---| | **Variant code** | The field that identifies the product; it is required. It must match the `variant_key` value in the order transfer and the product code of the review container on the page. | | Product group | The code that brings together the variants of the same product | | Product name | A required field | | Product page | The fallback address for the invitation link | | Product image | The address of the product image | | Product type | Determines which rating topics are asked | | GTIN (barcode) | The product's barcode; matches the product in the Google product reviews file | | Manufacturer part number (MPN) | Matches the product in the Google product reviews file together with the brand | | Brand | The product's brand; used together with the MPN | | Catalog number | The product's number in the catalogue | | Custom fields | Additional fields defined by the brand | **GTIN (barcode)**, **Manufacturer part number (MPN)** and **Brand** are read as text; the Google Merchant presets map these fields automatically. For how they are used, see [Google product reviews](/en/integrate/google-reviews.md). A value type is selected for each row: Text, Whole number, Decimal number, Yes / no, Date and time, List. The **Try** button shows whether each sample record would be read and, if not, why. If the identifying field is moved to another source field, confirmation is requested before saving. In that case, products transferred with the old codes may be deactivated on the next full read. ### Reads and issues The **Reads** tab shows the progress of the current read, past reads and issues at record level: the identifying field is empty, a required field is missing, a value could not be read, or the same variant code appears in more than one record. Clicking the number in the **Problem rows** column of the tab's table lists that read's problem rows in a side panel, with the record number, the reason and the details. If a source fails to read a set number of times in a row (3 by default), brand administrators receive a single email. This number can be changed on the **Warning limits** tab of the **Settings** screen; a value of 0 turns the warning off. For product service reads: - If a read reaches the page limit (10,000 pages by default) and there are still pages to read, the read fails with the code `page_limit_reached: `; the next read continues from where it stopped. If the catalogue fills exactly the limit's number of pages and ends there, the read completes normally. - If the service returns the same next-page cursor a second time, the read is stopped with the code `cursor_repeated`. - If a read that requests only changed products is interrupted, the next read continues from where it stopped with the same date filter. - The sources of brands whose service is frozen or closed are not read. ### Product protection - Products that are not found in a full read are not deleted but **deactivated**; their reviews are retained. Only products from the source concerned are affected. A read that requests only changed products (even if it was interrupted and resumed) and a read that hit the page limit do not count as full reads; no products are deactivated after them. - If a single read would deactivate more than half of the active products (at least 10 products), or if no records arrive at all, deactivation is held and waits for your confirmation; the read's other results (new and updated products) are saved. This prevents a faulty file from emptying the catalogue. The source's details show the **Switching off was held** warning. If the source is right, the **Confirm switching off and run** button in the warning asks for your confirmation, then reads the source again with deactivation confirmed and opens the **Reads** tab. Until you confirm, deactivation is held on later reads too. - A source is turned off with the **Turn the source off** button next to the status label in its header (it asks for confirmation) and turned back on with **Turn the source on**; a source that is off also shows a **Turn the source on** button in the list. **Read now** is disabled while the source is off. Turning off or deleting a source (**Delete** tab) does not delete products. - With unsaved changes on the connection or mapping tab, switching to another tab, **Read now** or **Map again** asks for confirmation first, so unsaved changes are not lost silently. ### Uploading from a file For product file sources, a file you hold can be read once instead of the address. The file is read with the source's format settings. The **Try first (saves nothing)** option shows the result without writing any records. The trial appears as a separate row on the **Reads** tab, marked **Trial · not saved**; it does not change the **Last read** and **Next step** shown in the source list. A failed trial is not added to the count of failed reads in a row and sends no warning email. The **Upload from a file** card is not shown for a source that has been turned off. ### Product details On the **Products** tab of a source's details, clicking a product shows its mapped fields, custom fields, when it was last seen in the source and the raw record received from the source. --- ## Marketplace reviews > Showing the reviews written for your store on sites such as Trendyol or Hepsiburada on your product pages with their source named; taking them by file or web address, barcode matching, deletion sync and removal through a personal data request. Source: /en/features/marketplace-reviews/ Marketplace reviews let you show buyer reviews written for your store on Trendyol, Hepsiburada, Amazon, N11 or Çiçeksepeti on your product pages. Every review is published with its source named and a link to the review at the source. The screen is the **Marketplace reviews** tab of the **Integration** menu; users with the "Can manage settings" permission see the tab and the connections. Sayproof does not collect reviews from marketplaces on its own. Reviews are taken only from a file you download from the marketplace and upload, or from a web address the marketplace allows. ### What is taken and what is not | Rule | Explanation | |---|---| | Buyer reviews only | Reviews the marketplace marks as "bought" are taken. A row without the mark is skipped. | | Your own store only | The seller number on the row must equal the seller number you entered on the connection. Reviews from people who bought from other stores are not taken. | | Every rating | There is no rating filter; every rating from 1 to 5 is taken. Nothing is dropped for the length of the text either; a row with only a rating is taken. | | Matching by barcode | A review is taken when its barcode matches the `gtin` of a product in your product list exactly. Spaces, hyphens and leading zeros do not matter. A barcode that matches nothing, or more than one product, is not taken and shows in the report. | | Author name | Only the first letter of each word and `***` are stored and shown (for example `Z*** K***`). The full name is never stored anywhere. | | Photos | Up to six photos are taken. Photos are downloaded when the review is first taken; they pass the virus scan, re-encoding and location and metadata removal. A photo that cannot be fetched does not stop the review and is counted in the report. | | Review date | The date of the review at the source is shown as the review's date on the page. | ### Setting up The **Add a marketplace** button opens a wizard with two steps. 1. **Marketplace and store:** choose the marketplace, the channel the reviews are published in and your store's seller number. Reviews are published in that channel's market. The seller number cannot be changed afterwards; if it is wrong, set up a new connection. 2. **How reviews arrive:** **File upload** or **Web address**. For a web address you enter the `https` address and, if it needs one, an access password; the password is stored sealed and is never shown anywhere. Setting up, changing and removing a connection is written to the **Activity history** with who did it. You can **Pause** and **Resume** a connection. A paused connection reads no new reviews; reviews already published stay on the page. A connection cannot be removed while it has imported reviews that have not been removed (including those waiting for approval) or while it holds the record of a review removed by a personal data request; that record keeps the removed review from being imported again. ### File upload The file can be CSV, Excel (`.xlsx`) or JSON. Every upload must hold **all** of your store's reviews: a review missing from the file counts as removed at the source. The file can be up to 20 MB and 100,000 rows. The first row is the header; headers are read without regard to case or the difference between a space and a hyphen. | Column | Required | Meaning | |---|---|---| | `review_id` | Yes | The review number on the marketplace. The same number is not taken twice. Other name: `id`. | | `barcode` | Yes | The product's barcode. Other names: `gtin`, `ean`. | | `rating` | Yes | A whole number from 1 to 5. Other names: `stars`, `star`. | | `buyer` | Yes | The marketplace's buyer mark: `true`, `1`, `yes` or `evet` means a buyer. Other names: `verified_buyer`, `purchased`. | | `seller_id` | Yes | The seller number of the store the review was written for. Other name: `seller`. | | `title` | No | The review title (at most 200 characters). | | `comment` | No | The review text (at most 5,000 characters). Other names: `body`, `text`. | | `author` | No | The author's name; it is shortened as soon as it is read. Other names: `author_name`, `name`. | | `created_at` | No | The review date: `2026-03-04`, `04.03.2026`, ISO 8601 or a timestamp in seconds or milliseconds. A future date is ignored. Other name: `date`. | | `photos` | No | Photo addresses separated by `\|`, a comma, a semicolon or a space (a list also works in JSON). Only `https` addresses are taken. Other names: `images`, `photo_urls`. | | `url` | No | The address of the review at the source. The link on the review goes here; it becomes a link only if the address is on the marketplace's own domain (subdomains included, e.g. `trendyol.com`, `hepsiburada.com`, `amazon.com.tr`, `n11.com`, `ciceksepeti.com`); an address on any other domain is not linked and the label stays plain text. Other name: `review_url`. | A JSON file can be a list or a list under the `reviews`, `items` or `data` key: ```json { "reviews": [ { "review_id": "88120001", "barcode": "8690000000011", "rating": 4, "comment": "Fits well, quick delivery.", "author": "Zeynep Kaya", "created_at": "2026-03-04", "buyer": true, "seller_id": "55", "photos": ["https://cdn.example.com/p/1.jpg"], "url": "https://marketplace.example.com/review/88120001" } ] } ``` The **Try first** button reads the file but saves nothing; it shows how many reviews would be taken, how many would change or be removed and which barcodes do not match. **Upload and import** takes the reviews in the background. ### Web address For a connection that works by web address, the address must be `https` and return a CSV or JSON with the columns above (or the same JSON keys). The address cannot reach private network addresses and redirects are not followed. New reviews are read once an hour; once a day a full comparison with the source is made as well. **Read now** starts a full read at once. ### Matching report The report of every read shows on the source's card: how many reviews were read (rows not marked as a buyer or belonging to another store are not in this number and show among the skipped ones), how many reviews were taken new, changed and removed, which barcodes did not match (and why), how many rows were skipped and why (not marked as a buyer, another store, removed by a deletion request, unreadable row, repeated number). When you fix an unmatched barcode in your product list, those reviews are taken on the next read. ### How it looks on the page - Every review carries a source label: **Bought on Trendyol · Imported automatically from Trendyol**. The label links to the review at the source (it is plain text if there is no address or the address is not on the marketplace's own domain). - An imported review has no **Verified buyer** badge; the site where the purchase was verified is written in the label. The **Verified buyers** filter does not cover these reviews. - Imported reviews count in the average, the rating breakdown and the number of reviews. A line in the summary area such as **3 of 4 reviews imported from Trendyol** says so. - Imported reviews are left out of the page's structured data (`Review`, `AggregateRating`) and of the Google product reviews file; the structured data is calculated from your own reviews only. - One sentence is added to the method statement for every active marketplace; if you host the statement on your own page you have to confirm it again. ### Approval and checks An imported review goes through the same checks as the others: the personal data, insult and health claim checks run and a flagged review waits for approval. A review is held back only for a legal reason; its rating or being negative is not one. Whether a review goes live on its own is decided by the channel's approval mode: in manual mode every imported review waits in the approval queue. The repeated text check is not applied to imported reviews; the same short sentence written many times is normal on marketplaces. No notice goes to the customer about an imported review that is not published, because the customer's email address is not known; the reason is recorded in the review's detail. In the panel, the marketplace an imported review came from is shown everywhere: in the **Awaiting approval** and **All reviews** lists the marketplace's name appears as a badge next to the review text (for example **Trendyol**), and the badge next to the rating in the review details and the **Source** row carry the same name. To see only imported reviews, choose **Imported from a marketplace** in the **Came from** filter on the **All reviews** screen. ### Changes and deletions at the source - **A changed review:** A review whose rating or text changed at the source is updated and written to the **Activity history**. A live review is checked again; if the check finds something, the review is hidden with the reason **Under review** and waits for your decision. Photos are downloaded only when a review is first taken; a photo added or changed later is not taken. - **A removed review:** In a full comparison, a review that is no longer at the source is removed with the reason **Removed at the source**. A review that comes back at the source is taken again. - **Safeguard:** If the source fails, nothing is removed. If more than half of a product's imported reviews (at least 10), or more than half of the connection's reviews (at least 10), vanish in one read, or no review comes at all, or all of them vanish, the removal is held back; the read stays in the **Removals held back** state and new reviews are still taken. If you are sure the file or the address is right, tick the box and upload the file again for a file connection, or press **Confirm removals and read** for a web address. - A review you rejected or removed by hand does not come back even if it stays at the source. ### Personal data requests Because imported marketplace reviews carry no email address, they cannot be looked up under a person. On the **Personal data requests** screen the **Remove a marketplace review** button lets you search reviews by their text, author name or marketplace review number and remove the ones you pick. The picked review leaves the page, its photos are deleted, the personal details in its text are replaced with marks and the same review is not imported again. The record goes to the request list and the erasure log like other deletion requests. For details: [Personal data requests](/en/features/personal-data.md). ### Warnings - **On the Overview screen:** when removals are held back for a connection, or a connection could not be read several times in a row, the **Needs your attention** card shows a line that opens the **Integration › Marketplace reviews** tab. The line for held removals gives the number of reviews that were not removed; the line for failed reads gives the number of connections. A held removal stays on the line and on the connection's card until a full comparison succeeds, even if the hourly reads after it succeed. Failed reads clear as soon as one read succeeds. The number of failed reads that raises the line is the one in **Settings › Warning limits** (3 if it is set to 0). Paused connections and connections on a closed channel are not counted. - **By email:** brand administrators receive one email the first time removals are held back for a connection, and one when reads fail as many times in a row as the number in **Settings › Warning limits** (3 by default). A second email is not sent for the same connection unless the situation is resolved and then comes back; a value of 0 in that setting turns both emails off. The email names the marketplace and the channel, says what to do and is in the language of the channel. ### Related pages - [Management API](/en/reference/management-api.md): the connection, read and removal endpoints - [DOM attributes](/en/reference/dom-attributes.md): the label and the summary line --- ## Rating topics > Additional questions asked alongside the overall rating; topic lists, scales and assignment to product types. Source: /en/features/rating-topics/ Rating topics are additional questions asked alongside the overall rating, for example "Size" and "Comfort" for a shoe, or "Ease of assembly" for a piece of furniture. Topics are defined in **lists**, and a list is assigned to each product type. ### Scales | Scale | Question format | Example | |---|---|---| | **Stars (1–5)** | The customer gives between 1 and 5 stars | Quality, comfort | | **Stepped scale** | Between 2 and 7 named steps; the customer selects one | Size: Small – True to size – Large | Each topic has a Turkish and an English name; on a stepped scale, each step is also named in both languages. A topic can relate to the **product**, the **delivery** or the **service**, and can be marked as **required**. A customer who does not answer a required topic cannot submit the review. ### Where they are used - **In the review form:** The topics in the list assigned to the product type are asked. A topic's **About** field sets the grouping: product topics are asked under **Detailed scores**, and delivery and service topics under a separate **Delivery and service** heading. If the list has no product topic, all of them come under **Detailed scores**. The preview in the wizard and the **Preview** panel show the same grouping. - **On the site:** The default component shows the stepped-scale topics. In the summary, the "Detailed scores" list contains each topic's name, the step nearest to the average and how many ratings were given (for example "Size: True to size · 48 ratings"); in each review, the step the customer chose is shown. All topic ratings, star topics included, are returned as data in the review list response; in [headless use](/en/integrate/headless.md) you can show them with your own design. The attributes involved: [DOM attributes](/en/reference/dom-attributes.md). - **In the panel:** The ratings the customer gave are shown in the review details, and topic distributions on the **Statistics › Reviews** tab. ### Topic lists Lists are shown as cards on the screen: the list name, its version, its topics and the product types that use it. The **Preview** button opens the list in a side panel: when it was published, how many reviews used it, the products that use it, how its topics look in the review form (a star or step scale) and the details of each topic; earlier versions of the list are shown too, if there are any. On your own lists the **Change** button opens a new version of the list; on Sayproof's preset lists the **Copy and edit** button opens a copy with the same name that belongs to you. The **Create a new list**, **Change** or **Copy and edit** button opens a five-step wizard: **List and products** → **Topics** → **Scale and steps** → **Preview** → **Publish**. Every change creates a new version of the list; reviews written with the previous version keep their version. :::note Lists belong to your brand: a list you create or copy appears only in your panel and is used only on your review form. Sayproof's preset lists are shown with the **Sayproof preset** label; you can assign them to product types as they are or copy and edit them. If you have your own list with the same name, yours is used instead of the preset. ::: A general list is available at installation. You can retire one of your own lists that is no longer needed; Sayproof's preset lists cannot be retired (`409 refused / template_preset`), just don't assign them to product types. The list is not deleted: its old versions are kept and reviews written with it keep showing it. A retired list no longer appears among the cards or in the choices of the assignment table, and it cannot be assigned to any product type; it is kept in the **Retired lists** section below the cards and can be brought back into use from there. A list assigned to a product type and the general list cannot be retired. A retired list cannot get a new version (`409 refused / template_retired`); bring it back into use first. ### Assignment to product types The table at the bottom of the screen shows which list is used for each product type. This assignment is made by the brand (the "Can change settings" permission is required): - Product types are taken from the **Product type** field of your product source; see [Products](/en/features/products.md). - The first row applies to **all products**; every product type without its own assignment uses this list. The product count on this row includes products that arrive without a product type. - On the other rows, the first choice in the drop-down is **Use the default (…)**, with the name of the first row's list in brackets. This choice removes the product type's own assignment, and the type goes back to the first row's list. The action is recorded in the **Activity history** as "Product type back on the default heading list". - If no assignment has been made, the general list is used. The assignment determines the list that applies to a product at the moment a review is written; reviews written earlier are not affected. --- ## Market rules and method statement > Each market's review rules and their versions; the "How we collect reviews" page on your site. Source: /en/features/market-rules/ The **Rules and compliance › Market rules** screen shows each market's review rules and the status of your method statement. The screen shows only the markets where you have a channel; if you have no channel yet, all of Sayproof's markets are shown. When a channel is selected in the panel's top bar, the screen shows only that channel's market, the rules of that market and that channel, and that channel's method statements. ### Market rules Each market's rules cover four points. In the table below, **Regulation** refers to the Regulation on Commercial Advertising and Unfair Commercial Practices. | Rule | Legal basis (Türkiye) | |---|---| | Proof of purchase required | Regulation, Art. 28/B-1: reviews from channels where the purchase cannot be verified may not be published | | Time to write a review | The legislation sets no specific period; the Sayproof rule allows 90 days, and your brand can set 7–365 days in its own version | | Sort options offered | Regulation, Art. 28/B-4: reviews are published according to objective criteria such as date, rating or seller | | Default sort order | Regulation, Art. 28/B-4 requires an objective criterion; the Sayproof rule defaults to date, and your brand can choose one of the sort options offered in its own version | The defined markets: | Rule | Türkiye | European Union | |---|---|---| | Proof of purchase required | Yes: only reviews with proof are published | No: reviews without proof can also be published; reviews with proof are marked | | Time to write a review | 90 days from delivery | 90 days from delivery | | Sort options offered | Date · Rating · With seller response | Date · Rating · With seller response · Most helpful | | Default sort order | Date | Date | The screen has four tabs. The single sentence above each tab explains what the tab is for: - **Markets:** each market's rules version in force, the date it took effect and the **Sayproof rule** or **Your own rule** label; whether proof of purchase is required, the time to write a review and the sort options offered. If you opened a separate rule for a channel, it is shown under the market. A version that starts on a later date is shown with the **Scheduled** badge, its version number and its start date. - **Compare:** the markets' rules side by side. The **Basis (Turkey)** column shows each rule's basis in Turkish legislation. - **Method statement:** the status and text of the "How we collect reviews" page on each of your channels' sites; the details are in the Method statement section below. - **Version history:** each market's rules versions and, in the **Source** column, whose they are; the version in force is marked **In force** and a version starting on a later date **Scheduled**. Old versions are never deleted. #### Updating the rules Market rules start from the rules Sayproof prepares in line with the regulation; on the screen these carry the **Sayproof rule** label. A user with the **Can manage market rules** permission (Administrator) can open a new version for your brand with the **Change the rules** button on the **Markets** tab. That version carries the **Your own rule** label and affects only your brand. The wizard has five steps: **Scope** (all your channels in a market or a single channel) → **Rules** (proof of purchase requirement and time to write a review) → **Sorting** (sort options offered to customers and the default sort) → **Start** (right away or from a specific day) → **Summary**. The **Fill in with the Sayproof rule** button fills the fields with that market's Sayproof rule. Your own version stays within these limits: - If the Sayproof rule requires proof of purchase (Türkiye, Regulation Art. 28/B-1), the requirement cannot be turned off; the option is disabled in the wizard and the request gets `400 invalid / verification_locked`. In a market where proof is not required (European Union) you can make it required. - The time to write a review must be between 7 and 365 days. - The sort options offered are chosen from the sort options in that market's Sayproof rule (`sort_not_offered`); the default sort must be one of the options offered. - The start date cannot be in the past. A version opened for a single channel applies only to that channel; the market's rule stays in force on the other channels, and the **Markets** tab shows a "Separate rule on the channel" line under the market. The version in force on a channel is the one with the latest start date among the versions whose start date has arrived (Sayproof's and yours). When the law changes, Sayproof publishes the new version with a software update; on the day it starts it replaces the version you opened earlier, and you can open your own version again if you wish. A version starting on a later day is shown with the **Scheduled** badge until then, and the current rules stay in force until that day. Every new version is recorded in the **Activity history** with its previous and new values. When the rules change, the method statement text of those channels is updated too; if you publish the statement on your own page, you need to update your page and confirm again. #### Effect of versions on earlier reviews Each review is assessed under the rules version in force on the date it was written, and is stored together with that version. A new version only applies to reviews written after its start date. As a result, in an audit it can always be shown under which rules a review was published. The time to write a review, however, follows the version in force on the day the product was delivered. If a new version shortens the time, it does not shorten it for orders already delivered; if it extends the time, it does not extend it for them either. ### Method statement The method statement is the page that explains how the reviews on your site are collected. Article 6/3 of the Turkish Advertising Board's Guideline on Consumer Reviews requires this information to be made available to consumers clearly and understandably; Sayproof produces and publishes the statement on your behalf. The review section always contains the "How we collect reviews" link, and it cannot be removed. The statement is produced as a separate text for each channel and language; the text is built from the market rules and the publishing method that apply to that channel. The text shown in the panel, the fingerprint used when confirming and the public page on that channel's site are the same text. The statement has four sections: | Section | Content | |---|---| | How purchases are verified | How reviews are associated with purchases; whether reviews without proof are published; that a customer whose order was cancelled or who returned the item can review their experience up to that point in the same way, and that such reviews are marked separately | | Are all reviews published | That positive and negative reviews go through the same process; your publishing method; the rejection reasons; that a low rating is not a reason for rejection; that the author of a rejected review is sent the reason and a correction link | | How the average is calculated | That the average is the arithmetic mean of published reviews for each market; that channels in the same market are counted together and different markets separately | | How reviews are sorted | The sort options offered, the default sort order in force on the channel and that there is no paid placement | If you take reviews from a marketplace, one more section, **Reviews imported from other sites**, is added to the statement: it says that imported reviews are published with their source and a link, that they count in the average and in the number of reviews, that they carry no Verified buyer badge, and, in one sentence for every active marketplace, on what terms its reviews are taken. The text changes when a marketplace is added or no longer there; if you host the statement on your own page you have to confirm it again. For details: [Marketplace reviews](/en/features/marketplace-reviews.md). The statement text is not written by hand; when the market rules that apply to the channel, the publishing method that applies to the channel (coming from the general, market or channel setting) or the statement text provided by Sayproof change, the text is updated automatically. Two channels in the same market have different statements if their rules or publishing methods differ. The table on the **Method statement** tab has a row for each active channel and each language: **Channel**, **Market**, **Language**, **Opens** (the Sayproof page or your own page's address), **Status** and **Last confirmed**. The **Manage** button on the row (**Details** for users without the permission to change settings) or the channel's name opens a side panel: the status and the page that opens, the **Publish on your own page** section (the address and the link buttons) and the **Statement text** section (**Copy the text** and the full text). The link to your own page and its confirmation are kept separately for each channel and language. #### The Sayproof page By default, the link opens the page published by Sayproof. The page is opened with the channel's site key and shows that channel's statement; if the channel has no site key in use, the **Opens** line in the side panel says "no working site key on this channel". This page always shows the current text and requires no action from you. In this case the table's **Opens** column says **Sayproof page** and its **Status** column says "No confirmation needed". #### Your own page To publish the method statement on your own site (this requires the "Can change settings" permission): 1. Enter the page address in the **Your page address** field and press **Save the link**. The address must start with `https` and be on one of your verified domains. 2. Use **Copy the text** to take the statement text and publish it on your page. 3. Press **I updated my page**. This confirmation is recorded in the **Activity history** as your declaration that your page shows exactly the same text as the panel. Statuses: | Status | Meaning | |---|---| | Sayproof page | Your own page is not linked; the Sayproof page opens and no confirmation is needed (the table's **Status** column says "No confirmation needed") | | Up to date | Your own page is linked and your last confirmation matches the current text | | Needs update | Your page has never been confirmed, or the text has changed since your last confirmation | Every change to the statement's content (the rules, the publishing method or the text) makes a confirmed statement outdated, and the status becomes **Needs update**; the statement must be confirmed again. This is also shown on the **Overview** screen and on the **Statistics › Compliance** tab. During this period, the link continues to open your page; update your page with the new text and confirm again. To switch back to the Sayproof page, use the **Go back to the Sayproof page** button. No change is needed in your store's code; the link address is taken from the `core.method_statement.url` field of the review list response. --- ## Risky words and automatic checks > The automatic checks applied to reviews and the management of the word lists these checks use. Source: /en/features/risky-words/ Before publication, every review goes through six automatic checks. The checks **do not reject** a review; they leave a suspicious review for approval and suggest a rejection reason where appropriate. The decision always rests with the moderator. The text checks are applied together to the review's title, text, author name and photo or video descriptions. ### Checks | Check | What it detects | Result | |---|---|---| | **Personal information** | Email address, phone number, ID number (with its check digits), IBAN, card number (with its checksum), full address | Rejection suggested: "Contains personal information" | | **Profanity** | Words on the profanity list | Rejection suggested: "Contains swearing or insults" | | **Health claims** | Wording that presents the product as a medicine | Left for approval | | **Catalogue match** | Whether the reviewed product exists in the catalogue | Left for approval if it does not | | **Repeated text and bursts** | The same person submitting the same text again within 30 days; text identical to one another person submitted in the last 30 days; more reviews from the same person within an hour than the limit on the **Settings › Automatic checks** tab (reviews for different items of the same order are not counted) | Same person, same text: rejection suggested. Other cases: flagged | | **Fake review suspicion** | A disposable email address, a return shortly after the review, a review written from the brand's own domain, an address on the staff list | A risk score is calculated; a high score is left for approval, a low score is flagged | Possible results: **Clean**, **Flagged**, **Left for approval**, **Rejection suggested**. When more than one check returns a result, the most severe result applies. If the [publishing method](/en/features/settings.md) is Automatic or Hybrid, a review is only published automatically when all checks are clean. - The checks cannot be switched off; they form part of the reasonable and proportionate checks under Article 7/2 of the Turkish Advertising Board's Guideline on Consumer Reviews. - The personal information patterns and the catalogue match check are fixed. - Some limits can be changed: the maximum number of reviews accepted from the same person per hour (3 by default) and the return window after a review (14 days by default) on the **Settings › Automatic checks** tab; the profanity, health claim and address words are managed on this screen. The check results, the suggested reason and the matched words for each review are shown in the review details. The profanity and health claim lists are applied with the words of the language the review is written in; a review written in Turkish is not caught by the English profanity list. The address words and disposable email domain lists are applied in every language, whatever the review's language. ### Risky words The **Rules and compliance › Risky words** screen is used to manage the word lists the checks rely on. On wide screens the word lists are on the left and the **Live check** on the right; on narrow screens the live check is shown below the lists. There are four lists: | List | Wording it detects | Effect | |---|---|---| | Abusive language | Words containing swearing or insults | The review is not published automatically; a rejection is suggested | | Health claims | Wording that presents the product as a medicine, for example "this cream cured my rheumatism" | The review is left for approval | | Address words | Words showing that a full address has been given (street, district, building), when used together with a house number | Counts as personal information; a rejection is suggested | | Disposable email domains | Temporary email services | Raises the fake review suspicion | In each list, Sayproof's **Predefined list** and the words you added for your brand are used together. The predefined list is Sayproof's ready-made word list, prepared and kept up to date by Sayproof; it is checked for every brand. A word in the predefined list cannot be deleted because other brands use it too; if you switch it off, it is only skipped for your brand. The predefined words of the abusive language list are adapted from the Turkish and English lists of LDNOOBW ([List of Dirty, Naughty, Obscene, and Otherwise Bad Words](https://github.com/LDNOOBW/List-of-Dirty-Naughty-Obscene-and-Otherwise-Bad-Words), [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/)) and [censor-text/profanity-list](https://github.com/censor-text/profanity-list): and extended with words compiled by Sayproof: inflected forms were reduced to their stems, and words that match everyday Turkish words once letters are folded (such as "şık" or "sıkı") or that are ordinary in shopping reviews (such as "nude" as a lipstick shade) were left out. At the top of the **Word lists** card there are three buttons: **Add a word** (see [Adding a word](#adding-a-word)), **Add from a file** and **Download** (see [Bulk actions](#bulk-actions)). #### List tabs Each list opens on its own tab. The tab shows how many words in the list are checked (for example "120 words checked"); for lists whose words are kept per language, this number is for the selected language. If the text in the live check contains words from that list, a marker on the tab shows how many. Below the tabs, a short text explains what the selected list catches and that a review containing these words is not rejected but waits for approval. #### List area Above the area of the selected list there are these choices: - **Search:** looks in the word itself or in its note; it applies both to the words you added and to the predefined list. Predefined words that match the search are shown in the **Predefined words matching the search** table. - **Language:** shown for the lists whose words are kept per language (abusive language, health claims, address words) when there is more than one language. The disposable email domains list shows "This list does not depend on language." For the selected list (and language), the area has these parts: 1. **Summary tiles:** the **Predefined list** tile shows the number of words in the list and "Checked for every brand" or how many are switched off for your brand; **Open the table in a new tab** opens the whole list in a new tab as a numbered, searchable table (columns **Word**, **What to catch**, **Status**, **Reviews it caught**). The **Your words** tile shows how many words you added for your brand. 2. **Words you added:** shown only if you added words; they appear as clickable chips in a cloud. 3. **Predefined words that need attention:** shown only if a predefined word caught a review, is switched off for your brand or was caught in the live check's text. When you search, **Predefined words matching the search** replaces this table. The columns are **Word**, **What to catch**, **Status** (**On** or **Off for your brand**; the ⓘ in the column header explains both: a review containing an on word waits for approval, an off word isn't checked in your brand's reviews) and **Reviews it caught**; clicking a row opens the word's details panel, where the word can be switched off for your brand. Because the predefined list can contain swear words, it is not shown in full on the screen; the whole list is in the new-tab table and in the file from **Download**. 4. **Words that are never caught:** the exceptions; shown only if there are any (see [Words that are never caught](#words-that-are-never-caught)). The look of a chip in a cloud: | Look | Meaning | |---|---| | **You** tag | You added the word | | Number next to the word | How many reviews the word was found in | | Chip highlighted with an orange border | The word is caught in the text of the live check | Hovering over a chip shows how the word is caught. #### Word details Clicking a word in a cloud or a row in the predefined list's table opens the word's details in a side panel: its state (**On**, **Off for your brand** or **Exception**), its source (**Predefined list** or **Your own**), **What to catch** ("similar spellings too" follows the match type if similar spellings are caught as well) with an explanation, how many reviews it was found in and its note, if any. The count is of reviews, not check runs: a review that was corrected and checked again counts once. The **See the reviews** link lists the reviews the word caught, newest first; clicking a review in the list opens its detail panel. The actions in the panel depend on the word's source: - A word in the predefined list is switched off for your brand with **Switch off for my brand**; if it is off, **Switch back on** makes it checked again. - For a word you added, the **Edit** button opens a box that changes the **What to catch** choice (the same picker as in the add form; see [Match types](#match-types)) and the note; for an exception only the note can be changed. The change is saved with **Save**. The word itself cannot be changed in this box. - A word you added, or an exception, is deleted with **Delete**; you are asked to confirm first. The list of reviews the word caught is deleted with it; the reviews themselves are not affected. - Sayproof's exceptions in the predefined list apply to every brand; the details panel explains why the word is an exception and offers no action. - **Use in the live check** adds the word to the text of the live check, so you can see at once what it catches. #### Adding a word The **Add a word** button at the top of the **Word lists** card opens the add form in the selected list's area, below the search box and above the words; while the form is open, the button cannot be used. In the form, you first answer **What should happen?**: - **Check for this word:** Adds a new word to the list; a review that contains it waits for approval before it is published. How the word is caught is set with the **What to catch** picker; the list's default match type is preselected (see [Match types](#match-types)). The word is saved with the **Add the word** button. - **This word is fine for us:** Saves the word as an exception with the **Add as an exception** button. Matches on this word are disregarded for your brand, whichever rule catches it (whole word, start of word, anywhere in the text, pattern or similar spellings). Use this option if a similar-spellings or start-of-word rule catches an ordinary term in your industry by mistake. The word is added to **Words that are never caught**. If you do not want a word in the predefined list to be checked for your brand, switch it off in the predefined list with **Switch off for my brand** instead of adding it as an exception. You can also write an optional **Note**. If the word you type is already in the selected list, the form says why and the add button cannot be used: | Case | Warning in the form | |---|---| | The word is in your own list | "This word is already in your list." | | The word is in the predefined list and on | "This word is already in the predefined list and on; no need to add it." | | The word is in the predefined list but switched off for your brand | "This word is in the predefined list but switched off for your brand." with a **Switch back on** button next to it; the button switches the word back on for your brand. | | The word is among the words that are never caught | "This word is among the words that are never caught; it can't be added as a word to check." | #### Words that are never caught The words you added as exceptions and Sayproof's exceptions in the predefined list are shown below the predefined list in a separate cloud headed **Words that are never caught**; the ones you added carry the **You** tag. Matches on these words are disregarded for your brand, whichever rule catches them (whole word, start of word, anywhere in the text, pattern or similar spellings). To remove an exception you added, click the word and use the **Delete** button in the details panel. #### Live check Write or paste a sample review in the **Live check** box. Words caught by the lists are marked as you type: shortly after you stop typing, the text is checked and the result is shown as "This review would wait for your approval before going live." or "This review is not caught by the word lists." The caught words are marked in the text, and at the same time on the tab of the list concerned and on the word's chip in the cloud or its row in the predefined list's table. If there is more than one language, the language is chosen above the box. For each match, the wording caught in the text, the word on the list if it differs, the list, the match type and the source (**Predefined list** or **Your own**) are shown. The actions next to a match: - **Show in the list:** Opens the tab of the list concerned and highlights the word; if the word is in the predefined list, the table opens and the word's row is highlighted. - **Switch off for my brand:** Switches off a word in the predefined list for your brand. - **Delete:** Deletes a word you added; you are asked to confirm first. - **Don't catch “…”:** If the word was caught in the text with a different spelling (for example through similar spellings or a start-of-word rule), adds that spelling as an exception in one click. When a list changes, the check runs again by itself. The check uses the same word lists and matching rules as the check applied to reviews: the selected language decides the profanity and health claim lists, and the address and disposable email lists are tried in every language. Address words are shown on their own in the check; in reviews they count as an address when a door number is close by (at most three words apart). The check saves nothing. If the search stops early because the text is long or complex, you are told that the result may be incomplete. #### Match types How a word is caught is set with the **What to catch** picker. The same picker is used in the add form, in the **Edit** box of a word's details and in the **Add from a file** wizard (for rows in the file that do not say how to match). In the picker you first choose a method: **By word** or **By pattern (advanced)**. - **By word:** **Whole word**, **Start of word** and **Anywhere in the text** are shown as nested checkboxes, each with a short example below it (for example "Words that start with it too: “badly”, “badness”" for **Start of word**). **Whole word** is always ticked. When a wider option is ticked, the narrower ones are ticked too and marked **included**; unticking the wider option goes back to the previous one. A note below the checkboxes reminds you that a wider option covers the narrower ones, so you don't need to add the same word once per option. The **Also catch similar spellings** box is in the same group. - **By pattern (advanced):** **Wildcard pattern** is chosen as the **Pattern type**; only the Sayproof team defines the **Advanced rule** type. An explanation of how the chosen type works is shown below it. | Type | How it works | |---|---| | Whole word | Only the word itself matches: "bad" matches, "badly" does not. | | Start of word | Every form beginning with the word matches: "illness" also matches "illnesses". It covers the whole word too. | | Anywhere in the text | Every occurrence matches: "mail" also matches "gmail". It covers the whole word and the start of word too. Use with care. | | Wildcard pattern | The `*` sign stands for any sequence of letters: "ill*". Works within a single word and requires at least 3 letters. | | Advanced rule | A technical rule that only the Sayproof team can define. | The **Also catch similar spellings** box can be ticked together with **Whole word** and **Start of word**. When it is, spellings with one letter missing, added or changed are also caught in words of 6 letters or more: "scumbag" also catches "scumbg". For shorter words the choice has no effect. While **Anywhere in the text** is chosen, the box cannot be used and says "Not available while “Anywhere in the text” is chosen."; when **By pattern (advanced)** is chosen, the box is not shown. Similar spelling is not a separate match type; it cannot be chosen together with **Anywhere in the text**, **Wildcard pattern** or **Advanced rule** (`similar_not_allowed`). In the predefined list's table, in the word details and in the live check, "similar spellings too" follows the match type of these words. Matching is resistant to spelling variations; the text and the word are simplified in the same way. Turkish letters (`ı/i`, `ş/s`, `ğ/g`…) are matched, digits and symbols used in place of letters (`qu4l1ty`, `@`) are converted to letters, letters separated by dots or spaces (`q.u.a.l.i.t.y`) are joined, and stretched letters (`quaaality`) are reduced to one. Numbers made up only of digits ("5 stars", "10/10") are left unchanged. #### Bulk actions The bulk actions are at the top of the **Word lists** card, next to the **Add a word** button: - **Add from a file:** A CSV or Excel file is uploaded (up to 1 MB and 2,000 rows, one word per row). The wizard has four steps: **File** → **Preview** → **Conflicts** → **Confirm**. The preview shows, with row numbers and reasons, the rows to be added and the rows that already exist, conflict or are invalid. Only new rows are saved; conflicts are resolved by hand. In a file whose first row holds column names (with a `value`, `term` or `word` column), the `suppressed` column is read too: a row with `1`, `true`, `yes`, `evet`, `doğru` or `x` in this column is added as an exception, its match type becomes whole word and the preview's **What to catch** column shows **Exception**. The `match` column gives the row's match type (`word`, `prefix`, `contains`, `pattern`) and the `similar` column whether similar spellings are caught too (the same values as `suppressed`); `similar` can only be used with `word` and `prefix`. A row with `fuzzy` in the `match` column of an older file is read as whole word with similar spellings. Rows that do not say how to match are added with the match type chosen with the **What to catch** picker in the wizard's **File** step; in the preview, "similar spellings too" follows the match type of rows that will catch similar spellings. When compared with the predefined list, a row whose word is already in the predefined list with the same match type counts as **Already there** ("the word is already in the predefined list"). A row counts as a conflict if the word is in the predefined list with a different match type ("the word is in the predefined list with a different match"), or if it is an exception in the predefined list and comes in the file as a word to check ("the word is an exception in the predefined list; it can't be added as a checked word"). A row also counts as a conflict if a word that is checked in your list is marked as an exception in the file. - **Download:** Exports the selected list in the format picked from the menu (**CSV**, **Excel** or **JSON**). A CSV or Excel file can be imported again; because the file carries the `similar` and `suppressed` columns, the similar spellings choice and the exceptions come back as they were. Rows loaded into a list of another language show as **Invalid**, and words already in the predefined list show as **Already there**. Using this screen requires the "Can change settings" permission; other roles do not see it in the menu. Every addition, edit and removal is recorded in the **Activity history**. --- ## Overview, statistics and reports > The Overview, Statistics, Activity history and Audit report screens. Source: /en/features/reports/ ### Overview This screen opens when you sign in to the panel and gives a current summary of your review processes. While a channel is selected in the top bar, the alerts, the numbers and the publishing method cover only that channel. Because products do not belong to a channel, the product source alert and **Latest activity** show all channels; both say "(all channels)". | Section | Content | |---|---| | **Needs your attention** | Items requiring action; each has a button that names where it goes (for example **Go to reviews awaiting approval**, **Go to the method statement**): requests from your site turned away in the last 7 days, a regularly loading review section that hasn't loaded on your site for 48 hours, reviews waiting too long for approval, seller replies awaiting approval, questions awaiting approval, questions with an answer awaiting approval, published reviews caught by a re-check, records that could not be read from a product source, marketplace reviews whose removal was held back or marketplace connections that could not be read several times in a row, reviews whose reports are waiting to be closed, a method statement that needs updating, the average decision time and the average time to send rejection notices passing their warning limits in the last 7 days, a rejection gap warning. Seller replies awaiting approval open the **Awaiting approval** screen; questions awaiting approval open the **Questions** screen filtered to those awaiting approval, and questions with an answer awaiting approval open it with the **Questions with an answer awaiting approval** filter; reviews caught by a re-check open **All reviews** with the "Published" status and the "Only those flagged by a check after publishing" filter; a review marked with **Keep it live** in its details drops out of this number. The product source warning opens the **Products › Product sources** tab, the marketplace warnings open the **Integration › Marketplace reviews** tab, the method statement warning opens the **Market rules › Method statement** tab, and the time and rejection gap warnings open the **Statistics › Compliance** tab. The turned-away requests warning opens the **Connection log** with the turned-away requests; the loading warning opens the **Integration** screen and appears if the review section loaded at least 20 times in the 7 days before the last 48 hours, saying how many hours the review section hasn't loaded ([Seen on your site?](/en/features/setup-screens.md#seen-on-your-site)). | | Number cards | **Awaiting approval** (with the waiting time of the longest-waiting review below it), **Published reviews**, **New reviews in the last 7 days** (with how many of them were published and rejected below it) and **Invitations sent in the last 7 days** (with the invitations stopped in the last 7 days below it). Clicking a card opens the relevant list; the cards about the last 7 days open it filtered to this period. | | **Reviews and approval** | **Reported reviews**, **Average decision time (last 7 days)**, **Share of reviews replied to (all time)**, **Publishing method** and **Lowest-rated products**: the three products with the lowest average among those with at least 3 published reviews in the last 30 days (a product's colours and sizes are counted together). Clicking a product opens **All reviews** with that product's published reviews written in the same 30 days, lowest rating first. A single average across all products is not shown; product ratings are on the **Statistics › Product ratings** tab, and the **Go to product ratings** button under the card leads there. | | **Invitations** | The **Invitations sent** and **Invitations stopped** numbers of the last 7 days; below them **All invitations, by status** and **All stopped invitations, by reason**. These two parts are not limited to the last 7 days. The reasons count stopped invitations only; clicking a reason opens the **Invitations** list with the invitations stopped for that reason. | | **Your site** | If you have one channel, or a channel is selected in the top bar, the card is headed **Your site · **: the channel's **Seen on your site?** verdict and the **Requests from your site** and **Refused requests** numbers of the last 7 days; clicking a number opens the **Connection log** filtered to this period. While **All channels** is selected and you have more than one channel, the card is called **Your sites** and shows each channel on its own row: the number of requests in the last 7 days, the number of refused requests, the day it was last seen and the **Seen on your site?** verdict; the **Go to Integrations** button on the row opens that channel's **Integration** screen. | | **Latest activity** | The latest entries from the activity history (panel sign-ins excluded) | What the numbers mean: - **Awaiting approval** and **Waiting longest** use the same measure as the **Awaiting approval** screen: waiting counts from the moment the review last entered the list. A review "waiting too long" is one that has been awaiting approval for longer than the decision time limit set on the **Settings › Warning limits** tab (6 hours by default). - **Reported reviews** counts reviews with open reports; a review reported by several visitors counts once, and the number matches the number of reviews in the list it opens. - **Share of reviews replied to** shows, regardless of date, what share of all reviews that are published right now have a published seller reply. - **Publishing method** shows the general method. If a different method was chosen for some markets or channels, it adds "different in N markets or channels". - Published reviews caught by a re-check are published reviews whose latest automatic check flagged them; for example, when a return or refund made after the review ran the checks again. - **Invitations sent** counts invitations created in the last 7 days that have been sent; the card opens the **Invitations** list with the same start date and the "Only sent ones" filter. The slow rejection notices warning is shown when the average time to send rejection notices exceeds the rejection notice limit (24 hours by default). A card, button or row that leads to a screen your role cannot open is not clickable; the number stays as plain text and the button is not shown. For example, the **Go to reviews awaiting approval** button is not shown to the Analyst role. ### Statistics This screen presents your reviews and your approval process in figures. While a channel is selected in the top bar, the numbers on every tab cover only that channel, so you see each site's statistics separately. The **Period** choice at the top of the screen (7, 30 or 90 days) applies to every tab. The screen has seven tabs: **Summary**, **Compliance**, **Reviews**, **Topics**, **Product ratings**, **Invitations** and **Approval process**. If there is nothing to show for the chosen period, the **Topics** and **Product ratings** tabs are not shown. #### Summary The screen opens on this tab, which shows the key numbers for the chosen period as tiles. Clicking a tile opens the tab with its details: | Tile | Tab opened | |---|---| | Written, Published | Reviews | | Rejection gap between ratings | Compliance | | Average decision time | Approval process | | Invitation to review rate | Invitations | A value over its warning limit is shown in red. Any warnings are listed above the tiles; the **Open compliance details** button opens the **Compliance** tab. Below the tiles, the **Day by day** chart shows the reviews written, published and rejected in three side-by-side columns for each day of the period; the legend gives the period totals. A review counts on the day it was written; publishing and rejection count on the day they happened. Hovering over or tapping a day shows that day's three numbers; while the chart is selected, the arrow keys move between days. When the days do not fit the card's width (for example on a narrow screen or in the 90-day period), the chart groups them into weeks and is titled **Week by week**. #### Compliance Indicators that monitor whether positive and negative reviews go through the same process and the same time limits. A warning is shown for an indicator that exceeds its limit: | Indicator | Value monitored | Default limit | |---|---|---| | Rejection gap between ratings | The rejection rate at each star level and the gap between the highest and the lowest rate; the gap has no direction. If reviews at one star level are rejected noticeably more often, this can create the impression that those ratings are being suppressed. | 10% | | Average decision time | The average time reviews left for approval wait for a decision | 6 hours | | Time to send rejection notices | The average time between the rejection decision and the notice being sent to the customer | 24 hours | | Out-of-date method statements | The number of channel and language statements linked to your own page that no longer match the current text | 0 | An indicator with no value yet shows only its limit; no "Within the limit" or "Over the limit" badge is shown. The **Time to handle reports** tile shows how long a review that a customer reported waits on average from the report until it is resolved; there is no warning limit for this time. This tab also contains a table of rejection rates by star level. The limits are changed on the **Warning limits** tab of the **Settings** screen; the **Go to Settings › Warning limits** button next to the tab heading opens that tab directly. This button, and the **Go to market rules** button on the "Out-of-date method statements" indicator, are only shown to roles that can open the screen they lead to. #### Reviews Ratings of different products are not mixed into one average; ratings are shown as a distribution and per product. | Part | Content | |---|---| | Figures | Reviews written, published, rejected, not published yet (drafts, waiting for proof of purchase, awaiting approval, and approved but waiting to be published), and hidden or removed; the share of reviews with verified purchase, with photos or videos, and with text. Below them are the written, published and rejected counts of the previous period of the same length. | | **Rating distribution** | The number and share of reviews published in the period for each number of stars | | **Product ratings** | Each product is placed in a band by the average of its own published reviews (4.5 and above, 4.0–4.4, 3.0–3.9, below 3) and the number of products in each band is shown. The counting choice and minimum number of reviews on the **Product ratings** tab apply here too. | | **Where reviews were written** | The number of reviews written from an invitation email, on the site, from an in-store receipt or entered manually | | **Replies and engagement** | The share of published reviews with a seller reply, the number of reviews with a resolution note, the number of helpful votes and the number of shopping experience reviews | | Proof and market | How proof of purchase was obtained; the number of reviews by market and channel | Cards placed side by side are the same height. #### Topics | Section | Contents | |---|---| | **Rating topics** | One card with a row per topic: its name, the number of answers and a single bar showing how the answers are spread. Option topics (such as size) show the share of each option; star topics show the share of each star that was given, with 1 and 2 stars in red. No average is shown for topics. | | **Trending topics** | The words used most often in reviews and how they changed against the previous period of the same length. | #### Product ratings Product page views and reviews per 1,000 views; the most viewed, most reviewed, highest rated and lowest rated products (among products with at least the selected number of reviews). In the most viewed and most reviewed lists the **Reviews written** column counts every review written; in the rating lists the **Published reviews** column counts published reviews only. The rating is always calculated from published reviews. The **Fit and returns** card shows, for products with a fit-type rating topic (such as size or width), the number of answers to that topic in reviews published in the period, the share of the lowest and highest answers, and the product's return rate for orders placed in the period; the card's description gives the store's return rate. The return rate is calculated from delivered and returned order lines; if order data does not carry returns, it reads "unknown". A product is listed once the number of answers to the topic reaches the **Rating lists need at least** choice. How products are counted is chosen only on this tab, next to the period: **Count products as** (**Product group (colours and sizes together)** or **Each variant separately**) and **Rating lists need at least** (1, 3, 5, 10 or 20 reviews). By default, products are counted as product groups with at least 3 reviews. #### Invitations The funnel from invitation to review: invitations created, sent, delivered, opened and turned into reviews; invitations stopped and bounced; the distribution by channel. Delivery and open information is received from the email service; if it does not arrive, the value is shown as "unknown" rather than counted as zero. For details, see [Email delivery events](/en/integrate/email-events.md). #### Approval process The distribution of rejection reasons; the **Who made the decision** card with the number of reviews published automatically, approved by a person and rejected by a person (a person's approvals and rejections together use the same definition as the total in the decision time distribution); the distribution of decision times, decision times by star level, and removed and hidden reviews. Clicking the row of a removed or hidden review opens the review's detail panel. ### Activity history The screen has two tabs: **Panel actions** shows the changes made, **Personal data access** shows who saw customers' personal data. The **Panel actions** tab is an unchangeable record of every action taken in the panel: the person who took it, their role, the time and the change made (old and new value). Sign-ins and sign-outs, user and role changes, channel and key actions, settings, the publishing method, review decisions, bulk actions, exports, risky words, product sources, method statement confirmations and personal data requests are recorded here. The change is written out in full in its row, wrapped over several lines if needed; when a field was emptied, its old value is followed by "(removed)". Panel sign-ins and sign-outs are not listed by default; the **Also show panel sign-ins** box lists them too. Entries cannot be changed or deleted. Viewing this screen requires the "Can download reports and files" permission (Analyst and Administrator). Users who can see the screen can download the list as **CSV**, **Excel** or **JSON** from the **Download** menu. The file contains the rows that match the current filters and search; if there are more than 10,000 rows, no file is created and you are asked to narrow the list with the filters; its columns are **Date**, **Action**, **Done by**, **Role**, **About**, **Record number**, **What changed** and **Action code**. The records are read in Sayproof and written to the file; rows sent from the screen do not go into the file. Every download is recorded in the **Activity history** as "Activity history downloaded", with the format, the number of rows and the file's verification code. #### Personal data access The **Personal data access** tab records the reads that show customers' personal data such as email addresses, phone numbers or order numbers: who saw them, when, through which route and how many records. Reads by panel users, server keys, a Sayproof support session and the Sayproof team are all recorded; the **Done by** column shows next to the name the person's role and **Panel session**, **Server key**, **Sayproof support session** or **Sayproof team**. These reads are recorded: | What was viewed | When it is written | |---|---| | Review details viewed | When review details that show the customer's email address or order number are opened | | Reviews searched by email address | When a search containing `@` on the **All reviews** or **Awaiting approval** list finds at least one review | | Review history viewed | When the review's history is read with `GET /admin/v1/reviews//trace` without asking for a file format (downloading it as a file is written to the **Panel actions** tab) | | Invitation list viewed | When the **Invitations** list shows a row with a recipient address | | Message log viewed | When the **Message log** list shows a row with a recipient address | | Question list viewed, Question details viewed | When the asker's name or email address, or an answerer's name or order number, is shown | | Personal data request list viewed, Personal data request viewed | When the **Personal data requests** list is opened or a single request is read | | Records looked up for a personal data request | At the **Records found** step while recording a new request | | User list viewed | When the **Users** screen is opened, and when the Sayproof team opens your brand's details | | Addresses checked against the list of people who do not want emails | When `POST /admin/v1/opt-outs/check` is called with a server key | | Marketplace review list viewed | When imported reviews are listed with **Remove a marketplace review** on the **Personal data requests** screen; rows that show an author name are counted | **Records** is the number of records carrying personal data that the action showed: the rows on a list page with an email address or order number, or the one record opened. A read that shows no personal data (for example an empty list) leaves no entry. The search text and the email address are not written to the entry; the person in a personal data request appears under a pseudonym. Entries cannot be changed and are deleted automatically after 365 days. Viewing the tab also requires the "Can download reports and files" permission (Analyst and Administrator). ### Audit report The period report to be presented to auditors or your legal team. Creating a report requires the "Can download reports and files" permission. On this screen you create a new report and download earlier ones again. The history of a single review is not on this screen but in the review's own detail panel ([History of one review](#history-of-one-review)); the **Go to All reviews →** link in the screen description opens the review list. The **Create a report** wizard has three steps: **Period and scope** (last month, this quarter, this year or specific dates) → **Preview** → **Download**. In the **Scope** field you choose **All channels**, a single channel or all channels of a market; if a channel is selected in the top bar, the wizard opens with that channel. To give separate legal teams separate reports, generate each channel's report on its own. While a channel is selected, the list of earlier reports shows only that channel's reports. In the preview's **Removed reviews** and **Reviews hidden for now** lists, clicking a review ID opens the review's detail panel. The report contains the following information: - Totals: all reviews and those published, rejected, rejected for lack of proof, removed, hidden and awaiting approval. - The rejection rate by star level and your brand's warning limit. - The distribution of rejection reasons. - The methods by which proof of purchase was obtained. - Removed and hidden reviews: the person who acted, the time and the reason. - Publishing method changes. - The market rules versions applied during the period. - The average decision time. - The number of rejection notices sent. - The status of the method statements: for each active channel and language in the report's scope, the market, channel, language, the page that opens, the status and when it was confirmed. - AI review summaries: every summary version shown on product pages in the period (arrives with v2; currently this section stays empty). #### Formats and verification code | Format | Use | |---|---| | **JSON** | The original file to give an auditor who asks for it; it can be checked for changes. The report's **verification code** is the SHA-256 digest of this file. | | **CSV** | To move the data into other tools; the sections follow one another and the verification code is in the **Summary** section | | **Excel** | To read and share; each section is on its own sheet and the verification code is on the **Summary** sheet and in the file properties | The CSV and Excel files use readable labels. The file's title is "Sayproof audit report"; the sections are named "Summary", "Rejection rate by star", "Rejection reasons", "How purchases were verified", "Removed reviews", "Hidden reviews", "Publishing method changes", "Market rules versions", "Method statements" and "AI review summaries". The summary totals use names such as "Total reviews" and "Removed"; rejection reasons are shown by name instead of code, with the reason code kept in the last column; verification methods, publishing methods and method statement states are written by name as well. Times are shown in local time; market rules versions read like "TR rules, version 3". The verification code belongs to the JSON file only. An auditor can confirm that the document has not been altered by calculating the SHA-256 digest of the JSON file and comparing it with the verification code in the report. The **Check a file** button on the **Earlier reports** card does the same check for you: when you choose a downloaded original JSON file, the panel calculates its verification code in the browser and compares it with your stored reports; the file itself is not sent from your computer. If the file matches a report, the report's creation date and period are shown ("The file is unchanged: identical to the … report created on …."); if not, you are told that the file was changed afterwards or is a different file. Only the JSON file can be checked; Excel and CSV are for reading. In the CSV and Excel files, every row of the removed and hidden reviews has an **Open in the panel** column: the link opens the panel with that review's detail open, and it can be clicked in Excel. The JSON file does not carry this column; the verification code belongs to the report content alone. Every report created is stored in a form that cannot be changed or deleted. The **Earlier reports** list shows each report's **Period**, **Scope** (market and channel), **Created by** and **Created**; a report can be downloaded again in the required format from the **Download** menu on its row. Because a report reflects the status of the reviews at the time it was created, a report produced later for the same period may contain different figures; the document to present to an auditor is the stored copy. #### History of one review Everything that happened to a single review is shown in time order in the **Review history** card of the review's detail panel. When a complaint or an audit question comes in, find the review on the **All reviews** screen with what you have: the search box looks in the review text, the product name or code, the order number, and the customer's name or email address. Clicking the row opens the detail panel. When you come from outside the panel (the audit report file, a review history file or a link a colleague sent), the **Open in the panel** link opens the review directly; there is no need to copy the review ID. The **CSV**, **Excel** and **JSON** options in the **Download** menu at the top of the card download the history as a file; the button is shown to roles with the "Can download reports and files" permission. The first part of the file holds the review's details (including the **Open in the panel** link in CSV and Excel) and the second the history. Every download is recorded in the **Activity history** as "Review file downloaded". Each line of the history gives the date, the time and what happened, in the past tense (for example "Approved", "Published"). Where there is one, the line also shows the reason, who did it (with the user name for moderators and the seller) and the rules in force at the time; the rules version is only written on the line where it changes. The history also shows: | Record | Shown | |---|---| | Seller response | The response being submitted, approved, rejected, hidden, shown again or withdrawn; marked **Seller response**, with the response text on its first line. A response hidden or withdrawn automatically because its review was hidden or removed is recorded too. | | Customer report | The reason and the customer's note; reports being closed | | Resolution note | The note being added and its text | | Automatic check | The check result and the suggested rejection reason | | Rejection notice | Whether the notice was sent, is queued or could not be sent; its reason, delivery route and result. The email sent through **Ask for a correction** also appears as this record. | | Author's name and personal details in the text erased | The author's name, and the name and contact details in the review text, erased through a personal data request | The **Copy link** button under the review text in the detail panel copies a link that opens the panel with this review open. The link opens the panel address; only your brand's users can open it by signing in with their own accounts. A review ID from the audit report file pasted into the **All reviews** search box also finds that review. --- ## Personal data requests > Recording and carrying out customers' access, deletion, rectification and objection requests concerning their personal data. Source: /en/features/personal-data/ The **Rules and compliance › Personal data requests** screen is used to record and carry out customers' requests concerning their personal data (KVKK / GDPR). Access and deletion requests take effect as soon as they are recorded; rectification and objection requests are closed from the list after review. This screen is only open to the **Administrator** role (the "Can handle personal data requests" permission) and can only be used with a panel session; it cannot be accessed with server keys. ### New request The **Record a new request** button opens a four-step wizard: 1. **Person:** The email address of the customer making the request. A request made with a phone number also finds the reviews written from that number's orders. 2. **Request type:** | Type | Result | |---|---| | Access: a copy of their data | A copy of the customer's reviews, orders, invitations, sent emails, and photos and videos is prepared; it is downloaded and sent to the customer. | | Deletion: erasing their personal data | The customer's name is removed from their reviews, and their name and contact details are erased from the text of their reviews, questions and answers; the photos and videos they uploaded are deleted, and the contact details and order numbers on their orders are turned into pseudonyms. The rating, the rest of the text and the activity record are retained. | | Rectification | The request is recorded; it is completed from the list once the correction has been made. | | Objection | The request is recorded; after review it is completed from the list or refused with a written reason. | 3. **Records found:** The number of reviews, photos and videos linked to this address and the number of order records are shown. Below the numbers, the reviews linked to this address (the 50 newest) are listed with their rating, title or text, status and date; clicking a review opens its detail panel. Record the request even if no records are found; the record shows that the customer's application was answered. This lookup is recorded in the **Activity history** under a pseudonym for the person, not their address. 4. **Confirm:** The action to be taken and the records found are summarised. For a deletion request, the summary also has a **How it looks on the site** row: the reviews stay published and "Anonymous" appears instead of the author's name; the rating, the review text with the name and contact details taken out and the "Verified buyer" mark stay, and photos and videos are removed. Reviews that are not live yet cannot go live after the deletion. If the customer does not want the review shown either, open the review and use **Remove** with the reason "The customer's own request". For a deletion request, the box "I understand what will be deleted and confirm" must also be ticked. The result card shows, for access requests, a table of the reviews found. The **CSV**, **Excel** and **JSON** options in the **Download** menu download the data copy for an access request, and the request record for the other request types. Every download is recorded in the **Activity history**. For rectification and objection requests, if reviews were found, the result card also lists this person's reviews: open the review and act on it, then complete the request in the **Requests** list. A personal data request does not store the customer's email address, only a digest derived from it, and the data copy is not stored either. If the copy of a completed access request is needed again, open the **Download** menu on the request's row in the **Requests** list; in the **Download the copy again** part, type the email address from the request again and choose the format with the **CSV**, **Excel** or **JSON** button. If the address matches the stored digest, the copy is prepared again from the current records; if it does not, no copy is given. Every new download is recorded in the **Activity history**. In reviews imported from a marketplace the email address is not known, so these reviews cannot be found with the wizard above; with the **Remove a marketplace review** button on the screen you search by the review text, the author name or the marketplace review number and remove the ones you select: [Marketplace reviews](/en/features/marketplace-reviews.md#personal-data-requests). ### Effect of a deletion request | Data | Action taken | |---|---| | Author name, email address and customer ID on the review | Deleted; the review becomes anonymous. In the panel, the review detail shows "Personal data erased (data request)" instead of the email address. | | Review title, text and translations | Email addresses, phone, ID, IBAN and card numbers in the text, and the words that carry the person's name, are replaced with marks such as `[email]`, `[phone]` and `[name]`; review search no longer finds these words either. | | Reviews that are not live (waiting for approval, rejected or hidden) | They cannot go live after the deletion; the **Approve** and **Show again** buttons do not appear in the review detail. | | Photos and videos on the review | Deleted together with their resized copies | | Email address, phone number and customer number on orders | Converted into a pseudonym that cannot be reversed. Even if the order is transferred again later, these fields are not restored to their previous values. | | Order number | Turned into the same pseudonym on the order and in the review's proof of purchase; the **Order** row of the proof card in the review detail shows this value. If the platform sends the order again or a return arrives, it is applied to the same order and the person's details do not come back. | | Questions and buyer answers | The name and email address on the question and the name and order reference on the answer are deleted; the name and contact details in the texts are replaced with marks. | | Prepared data exports | Files ready for download are deleted and leave the list; an export being prepared is not completed. Request a new export if needed. | | Open invitations of these orders (waiting to be sent or already sent) | Stopped ("No email address on the order"); no reminder goes out | | Open invitation and correction links of these orders | They expire at once; a link in an email sent earlier can no longer be used to write or correct a review | | Review text, rating and history | **Retained.** Article 28/B-4 of the Regulation on Commercial Advertising and Unfair Commercial Practices requires published reviews to remain published for at least one year; once the personal data has been removed, the review is kept for audit purposes. | | Send records | The address digest on the records of invitations and notices sent to the person is deleted; the sending result and times remain. | | List of people who do not want emails | The digest of the address stays on the list; the person gets no invitation again. | Deletion cannot be undone and is recorded in the review's history as "Author's name and personal details in the text erased". Every completed deletion is also written to a log kept outside the database; if the system is restored from a backup, the deletions in this log are applied again. :::note If the customer also requests that the review be removed from the site altogether, you can remove it after the deletion with the **Remove** action and the reason "The customer's own request". For details, see [Reviews and approval](/en/features/reviews.md). ::: ### Access file The copy of an access request is downloaded as JSON, CSV or Excel. The file is prepared to be handed to the customer; the note written on the request and the user who handled it are not included. The JSON file holds the request's details (ID, type, status, dates) and two parts: - `export`: for each of the customer's reviews, the review ID, rating, title, text, author name, status, the date it was written, the market, the product, the aspect scores, the review topics and the brand's replies. - `export_details`: the customer's other records: | Part | Content | |---|---| | `subject` | The email address or phone number, the names used in the reviews and whether the address or number is on the list of people who do not want invitations | | `orders` | For each order, the order number, order time, market, payment state, customer ID, phone number and lines (line ID, product code, product name, quantity, delivery state) | | `invites` | The order each invitation belongs to, the invitation type, its status and the times it was created, sent and reminded | | `deliveries` | The delivery updates of the orders: order, line, state, source, confidence and time | | `emails` | The sending route, template, result and the times sent, delivered and opened of the invitation, rejection notice and answer notice messages sent to this person | | `mail_events` | The delivery, open and bounce records received from the email provider for these messages | | `questions` | The questions the person asked and the answers given to them | | `answers` | The answers the person gave as a buyer | | `consents` | The person's consent records: sending route, message type, when it was given and withdrawn, and its source | | `media` | The review, type, description and upload time of the photos and videos attached to reviews | In the CSV and Excel files the same information comes as one table per part: **Request**, **Person**, **Reviews**, **Orders** (each order line on its own row), **Invitations**, **Emails**, **Email events**, **Delivery updates**, **Review topics**, **Brand replies**, **Questions**, **Answers**, **Consents** and **Files**. In Excel each part is on its own sheet. The column names are the same as the field names in the JSON. The request record does not store the customer's address in plain form, but as a value derived with Sayproof's secret key that cannot be turned back into the address. ### Request list Requests are listed together with their status, and the counters filter the list by status. Access and erasure requests become **Completed** as soon as they are recorded; rectification and objection requests wait as **Received** and are closed from the relevant row as **Completed** or **Refused**. A note stating the reason is required when refusing. On the row of a rectification or objection request, the **Related reviews** button lists the reviews linked to an address once you type the email address from the request and press **Find**. The address is not stored and is only used to find the reviews; the lookup is recorded in the **Activity history** under a pseudonym for the person. The **Request record** part of the **Download** menu on every row downloads the request record again as **CSV**, **Excel** or **JSON**; this download is also recorded in the **Activity history**. The recording, completion and refusal of each request are recorded in the **Activity history**. The entry contains only the type of request, not the customer's address. For other topics relating to the protection of personal data, see [Protecting personal data](/en/security/data-protection.md). --- ## Users and roles > The users who can access the panel, the permissions of each role and sign-in security. Source: /en/features/users/ The **Setup › Users** screen shows the users who can access the panel and their permissions. Give each user only the permissions their work requires. This screen is only open to the **Administrator** role. ### Panel address All brands sign in to the panel at the same address, for example `https://panel.sayproof.example`. The Sayproof team sends you the address when it opens your brand; bookmark it. Your account, not the address, decides which brand opens: when you sign in, the brand your account belongs to opens with its channels. - A user belongs to exactly one brand and sees all of that brand's channels. If your brand has more than one active channel, the top bar has a **Channel** selector; for which screens are filtered by the selected channel, see [Channel and market](/en/start/concepts.md#channel-and-market). - A wrong password and an unknown username are refused with the same warning: "Could not sign in with these details." The sign-in screen does not show whether a username exists or which brand it belongs to. - Brands' data is kept apart: every request in the panel is bound to the signed-in user's brand, and the database returns only that brand's records. - One browser holds one signed-in account at a time; to sign in with another account, sign out first. - If your service is frozen or closed, a signed-in user sees a page that explains the state instead of the panel's screens; administrators can prepare and download the data export on that page: [Service status](/en/security/data-protection.md#service-status). - The password link emailed when a user is added, the link in the password reset email, the **Copy link** link in the review details and the **Open in the panel** links in downloaded files open the panel address; the person who opens the link signs in with their own account. ### Roles | Permission | Moderator | Analyst | Administrator | |---|:-:|:-:|:-:| | Can see reviews | ✓ | ✓ | ✓ | | Can decide on reviews | ✓ | | ✓ | | Can download reports and files | | ✓ | ✓ | | Can change settings | | | ✓ | | Can manage market rules | | | ✓ | | Can manage users and channels | | | ✓ | | Can handle personal data requests | | | ✓ | The screens and actions covered by each permission: | Permission | Screens and actions | |---|---| | Can see reviews | Overview, All reviews, Invitations, Message log, Connection log, Statistics, Market rules; status information on the Integration screen | | Can decide on reviews | Awaiting approval; approving, rejecting, hiding, removing, removing a single photo or video, bulk actions; seller replies, resolution notes and closing visitor reports | | Can download reports and files | Downloading the review list as CSV, Excel or JSON, Audit report, Activity history and its download, downloading the history in the review details as a file | | Can change settings | Settings, Invitation sending, Email templates, trying failed invitations again, Products, Rating topics (creating lists, copying a Sayproof preset list, new versions, retiring lists and assigning lists to product types), Risky words, the method statement link; the **Platform connections** on the Integration screen | | Can manage market rules | Opening a new market rules version for your brand (for a market or a single channel, within the legal limits): [Updating the rules](/en/features/market-rules.md#updating-the-rules) | | Can manage users and channels | Users, Channels, Store appearance, domains, sender domains, the page check, keys and signing passwords; the setup values, the **Test the connection** action and sharing the setup guide on the Integration screen | | Can handle personal data requests | Personal data requests | The menu only shows the screens the user can access. ### Adding a user 1. Enter the username, email address and role, then press **Add the user**. The email address is required. 2. The **password link** goes only to the person's email address; it is not shown on the screen, not even to the administrator who adds the user. If the account already existed, its old password stops working; the person sets a password again with this link. The link opens the panel address, is valid for 3 days and can only be used once. 3. The person opens the link, sets a password and signs in at the panel address. A user can belong to only one brand. A username that is used by another brand cannot be added to yours; the "this username is taken" warning is shown (`username_taken`). If the same person also works for another brand, they are added there with a separate username. A username that no longer belongs to any brand is added again if it is entered together with the email address registered on the account; in that case too the old password stops working and a new set-password link is sent to the email address on the account. When a user is removed from the brand and has no other membership left, their password stops working as well. If the link is lost or expires, an administrator can send the person a new one: [Email and password link](#email-and-password-link). ### Changing roles and removing users A user's role can be changed, or the user removed from the brand, from the list. Both actions require confirmation and are recorded in the **Activity history**. The role of the brand's **last administrator** cannot be changed and this user cannot be removed from the brand; another user must first be given the Administrator role. ### Email and password link The **Email** column of the list shows the user's email address. **Send me a test** emails and password links go to this address. An administrator cannot change a user's email address (`403 email_change_own_only`); only the user changes it, with **Change my email** in the user menu of the top bar, by filling in **Current password** and **New email address**. When the address changes, the old address gets an email without any link saying the address was changed, and the new address gets an email saying it is now the account's address. If a user has lost access to their mailbox, an administrator removes the user from the brand and adds them again with a new username and email address. The **Send a password link** button on the row sends a new password link to the person's email address after confirmation; the link is not shown on the screen. If the person has never set a password the link is valid for 3 days, otherwise for 1 hour, and it stops working once the person sets a new password. Their old password keeps working until they do. A link cannot be sent to a user without an email address (`400 invalid / email_required`); the user must first add their own address with **Change my email**. Email changes and sent links are recorded in the **Activity history**. Users can also change or reset their password themselves: [Resetting and changing a password](#resetting-and-changing-a-password). ### Resetting and changing a password The **I forgot my password** link on the sign-in screen opens the **Reset your password** form. Enter your username or the email address on your account in the **Username or email** field and press **Send the link**. If the account has an email address, a password link is emailed to it; the link opens the panel address, is valid for 1 hour and can be used once. The answer on the screen is the same whether or not such an account exists; the form does not reveal which usernames or addresses are registered. A user without an email address on their account signs in with their password and adds the address themselves with **Change my email**; an administrator cannot enter it. While signed in, you can change your password with **Change my password** in the menu that opens when you click your username in the top bar: fill in **Current password** and **New password** and press **Change password**. If the current password is wrong, the password does not change (`400 invalid / current_password`). You stay signed in after the change. When a password is set through a link or changed, a notice without any link is sent to the account's email address. With **Change my email** in the same menu you can change your email address: fill in **Current password** and **New email address** and press **Change email**. If the current password is wrong, the address does not change (`400 invalid / current_password`). The menu also sets the panel's language (**Language**) and its light or dark look (**Appearance**). To sign out, press the red sign-out button on the right of the top bar; hovering over it shows **Sign out**. Signing out is not in the user menu but on this separate button. ### Two-step sign-in You can turn on two-step sign-in for your own account. While it is on, signing in also asks for the 6-digit **Verification code** shown by the authenticator app on your phone after your password; someone who learns your password cannot sign in without this code. 1. Click your username in the top bar; in the **Two-step sign-in** part of the menu, press **Turn on two-step sign-in**. 2. The **Setup key** and the **Setup link** appear, each with a copy button. Enter the key by hand in the authenticator app, or paste the setup link into an app that can open it. 3. Enter the code the app shows and press **Verify the code and turn on**. To turn it off, press **Turn off two-step sign-in** in the same part, enter the current code from the app and press **Turn off**. The code changes every 30 seconds; the previous and the next code are also accepted, and the same code cannot be used twice. Turning two-step sign-in on and off is recorded in the **Activity history**. A password link does not turn two-step sign-in off; if you cannot reach your authenticator app, contact the Sayproof team. ### Sayproof team support access The Sayproof team is not a user of your brand and does not appear in your **Users** list. The team signs in to its own management screen with a password and two-step sign-in. When support is needed, a team member can open a support session of 1 hour from there by entering a written reason: - During the session the team member can do everything the **Administrator** role can. Keys, passwords and users created in the session stay valid after it ends; if they are not needed, you can remove them on the **Channels** and **Users** screens. - The start of the session, its reason and the actions the team takes during it are recorded in the **Activity history** with the team member's username and the **Sayproof support** role. When the team member opens screens that show customers' personal data, that is also written to the **Personal data access** tab as **Sayproof support session**. - If the team ends the session before the time is up, the end is recorded with the **Sayproof team** role. - If the team member ends the session by signing out of the panel, the end is recorded with the **Sayproof support** role. - The session closes by itself when the time is up, and its expiry is written to the **Activity history**. No email is sent to you about a support session. ### Sign-in security - Passwords must be at least 12 characters long. Common passwords (Turkish common passwords included), passwords made up only of digits, passwords too similar to the user's details, a common word, team or name combined with a year or a run of digits (such as `Galatasaray1905` or `Parola123456`) and passwords that contain Sayproof, your brand's name or your username are not accepted. The comparison ignores upper and lower case and Turkish letters (ş, ı, ğ…). - A session lasts 12 hours. - Failed sign-in attempts are limited: within 15 minutes, 50 attempts from the same IP address, 10 from the same IP address and username, and a total of 100 for the same username from all IP addresses. Successful sign-ins are not counted. - A failed sign-in does not state whether the username or the password was wrong. - Code attempts in two-step sign-in are limited too: within 15 minutes, 50 from the same IP address, 10 from the same IP address and user, and a total of 20 for the same user from all IP addresses. The code has to be entered within 10 minutes of the password step; after that, or if the account's password changes in the meantime, signing in starts again. - A password reset can be requested 10 times an hour from the same IP address. If more than 3 requests an hour come from the same IP address for the same username or email, the answer on the screen stays the same but no new email is sent; requests from other addresses are not affected. When changing a password or an email address, the current password can be tried 10 times in total within 15 minutes. - Every sign-in and sign-out, password set, password reset request, password change, email change and turning two-step sign-in on or off is recorded in the **Activity history**. --- ## Settings > Publishing method, the limits of the automatic checks, the correction link, warning limits and the data export. Source: /en/features/settings/ The **Setup › Settings** screen determines how reviews are published, the limits of the automatic checks and when warnings are shown. This screen requires the "Can change settings" permission (Administrator). The screen has four tabs: **Publishing**, **Automatic checks**, **Warning limits** and **Data export**. Changes on the screen are not saved one by one. When a choice or a value changes, the **You have unsaved settings changes** bar appears at the bottom of the screen. The bar is shared by the three tabs: unsaved changes are kept when you switch tabs, **Save changes** saves all the changes on the three tabs together, and **Cancel** discards the unsaved changes. If you try to leave the screen without saving, the panel warns you. Saved changes apply to new reviews and are recorded in the **Activity history**. Invitation settings are not on this screen but on the **Invitation sending** screen; see [Invitations and emails](/en/features/invitations.md). ### Publishing method The publishing method is chosen on the **Publishing** tab: | Method | Description | |---|---| | **Manual** | Every review is approved by a moderator. This is the safest method; it requires reviews awaiting approval to be monitored regularly. It is the default method. | | **Automatic** | Reviews that pass all checks cleanly are published automatically. Suspicious reviews wait for approval. | | **Hybrid** | Clean reviews containing only text are published automatically; reviews with photos or videos are approved by a moderator. | The method can be chosen for all stores, or for a specific market or channel: if **All** is left in the **Market** and **Channel** selectors at the top of the card, the choice covers all stores. If more than one setting is defined, the most narrowly scoped setting applies: first market and channel, then market, and finally the general setting. The **Method by market and channel** list at the bottom of the card shows every market and channel with the method that applies and where it comes from: **Own setting**, or for example **Uses the TR setting**. Clicking a row opens that scope for editing; when a scope without its own setting is selected, the setting that applies is shown above the method options. The **Remove** button on a row with its own setting deletes that setting after asking for confirmation; from then on the scope uses the setting above it. The general setting cannot be removed, only changed. Clicking a method does not save it; the choice is saved together with the other changes with the **Save changes** button. While a method choice is unsaved, the **Market** and **Channel** selectors, the other rows of the list and the **Remove** buttons are locked, and the card says to save or discard the choice first. This way a choice made for one scope is not lost when you move to another. The history of method changes opens with the **History of method changes** button at the bottom of the card: it opens the **Activity history** screen showing only method changes. :::note The publishing method cannot be tied to the star rating. Article 7/3 of the Turkish Advertising Board's Guideline on Consumer Reviews requires positive and negative reviews to be subject to the same checking process and the same time limits. ::: When the publishing method changes, the method statement text of every channel whose method changes is also updated. If you publish the statement of one of these channels on your own page, you need to update your page and confirm again; see [Market rules and method statement](/en/features/market-rules.md). The questions and answers section on the product page is not turned on or off here but from the card at the top of the **Questions** screen; see [Questions and answers](/en/features/questions.md#turning-it-on-and-off). ### Reviews from other markets The **Reviews from other markets** card on the **Publishing** tab appears when this feature is turned on in the Sayproof installation. When you tick **Also show purchase-verified reviews from your other markets on product pages** and save with **Save changes** at the bottom of the screen, a product's page also lists every published, purchase-verified review written for the same product in your other markets. These reviews are marked with the market they come from, sorted by this market's sorting rules and not included in the average or the rating distribution. While it is on, the method statement gains a **Reviews from other markets** section; if you publish the statement on your own page, you need to confirm it again. ### Automatic checks The **Automatic checks** tab lists the six automatic checks. The checks run on every review and cannot be switched off. The value of a check that has a limit is changed on its own row. The row of a check that works with a word list has a button for that list (for example **Go to the Abusive language list**), which opens the **Risky words** screen with that list. Checks without a list or a limit are **fixed by regulation**. The last row of the card is the **Correction link** sent to a customer whose review was rejected. | Row | Setting on the row | Default | Range | Description | |---|---|---|---|---| | **Repeated text and bursts** | Most reviews per person per hour | 3 | 1–1000 | If more than this many reviews arrive from the same person within an hour, the extra ones are left for moderator approval before publication. Reviews for different items of the same order are not counted. | | **Personal information** | Fixed by regulation · **Go to the Address words list** | — | — | Looks for an email address, phone number, ID number, IBAN, card number and full address; recognises a full address by the words in the **Address words** list. | | **Abusive language** | **Go to the Abusive language list** | — | — | The word list is managed on the **Risky words** screen. | | **Health claims** | **Go to the Health claims list** | — | — | The word list is managed on the **Risky words** screen. | | **Catalogue match** | Fixed by regulation | — | — | Checks whether the reviewed product exists in the catalogue. | | **Fake review suspicion** | Return window after a review (days) · **Go to the Disposable email domains list** | 14 | 1–365 | If the customer returns the item within this period after writing a review, the review is considered more likely to be fake. A review from a disposable email address is also considered suspicious. | | **Correction link** | Correction link lifetime (days) | 30 | 1–365 | How long the correction link sent to a customer whose review was rejected remains valid. | For details of the checks, see [Risky words and automatic checks](/en/features/risky-words.md). ### Warning limits When the limits on the **Warning limits** tab are exceeded, a warning is shown on the **Statistics** and **Overview** screens. The limits do not change how reviews are published. | Setting | Default | Range | Description | |---|---|---|---| | Decision time limit (hours) | 6 | 1–720 | The longest time you want a review to wait for approval. If the average decision time exceeds this value, a warning is shown. The **Overview** screen also counts the reviews that have been waiting for approval for longer than this; waiting is measured from the moment the review last entered the list. | | Rejection notice limit (hours) | 24 | 1–720 | The maximum number of hours within which the rejection reason must be sent to the author. The time is measured from the rejection decision until the notice is sent; if the average exceeds this value, a warning is shown. As Article 6/5 of the Turkish Advertising Board's Guideline on Consumer Reviews requires the notice to be sent without delay, a short period is recommended. | | Rejection gap limit between ratings (%) | 10 | 1–100 | If the largest gap between the rejection rates of the star levels exceeds this many percentage points, a warning is shown. The gap has no direction: the most and least rejected star levels are compared. | | Warn after this many failures in a row | 3 | 0–100 | If a product source or a marketplace connection fails to read this many times in a row, brand administrators receive one email; they also receive one when removals are held back for a marketplace. A value of 0 turns all of these warnings off. | ### Data export On the **Data export** tab an administrator prepares and downloads all of the brand's data as a single zip file. For what the file contains and how long it can be downloaded, see [Data export](/en/security/data-protection.md#data-export). --- ## Channels, Store appearance, Integration and Connection log > The channels, store appearance, integration and connection log screens in the Setup group; choosing the design of the review section and monitoring how your site and store system connect to Sayproof. Source: /en/features/setup-screens/ The **Setup** group in the menu contains six screens; this page covers the four that relate to your site's connection to Sayproof. **Users** and **Settings** have their own pages: [Users and roles](/en/features/users.md), [Settings](/en/features/settings.md). The setup steps are described in detail in the developer documentation; this page summarises the content of each screen. ### Channels The screen has four tabs. The single sentence above each tab explains what the tab is for. | Tab | Content | |---|---| | **Channels** | The points of sale where you collect and show reviews. Each channel card contains a setup checklist: domain verified, site key ready, invitation landing page set. The last step is optional; if no page is set, "optional" is shown next to it. If the domain or the site key is missing, the **Finish setup** button resumes the setup from where it was left. The card's **Edit** button changes the channel's name, language, invitation landing page and whether it is on; the same form takes the channel's **Name shown to customers**, **Sender email address** and **Support page address** used in emails ([Editing a channel](/en/integrate/channels-and-keys.md#editing-a-channel)). When the number of open channels reaches the **Channel allowance**, the **Set up a channel** button is replaced by **Request another channel** ([Channel allowance](/en/integrate/channels-and-keys.md#channel-allowance)). | | **Domains** | The **Domains** card lists the domains on which reviews can be shown, with their status; reviews only appear on pages of verified domains. A new domain is added here; for every domain waiting for verification, a "How to verify ``" section below the card shows the **Verification method** choice (**File on your site** or **DNS record**), the chosen method's values with copy buttons, and the **Verify** button ([Domain verification](/en/integrate/channels-and-keys.md#domain-verification)). A domain is deleted with **Remove** ([Removing a domain](/en/integrate/channels-and-keys.md#removing-a-domain)). The **Sender domains** card verifies your domain so that invitation emails can leave from your brand's address; a verified domain's **Go to Invitation sending › Sending route** button opens the **Invitation sending** screen ([Channel, domain and keys › Sender domains](/en/integrate/channels-and-keys.md#sender-domains)). | | **Keys** | The **Site keys** and **Server keys** cards, and the collapsed **Advanced: signing passwords** section at the bottom. As the sentence above the tab says, two keys are enough: the site key sits in your page and isn't secret; the server key is secret, and your store's server uses it to prepare pages and send orders. Server keys are created on this tab; the **Server keys** table has no permission column, and every server key created in the panel can send orders and prepare pages. A site key is created in the channel's setup wizard or with the **New site key** button on this tab; to replace a key, create the new one first, update the code on your site, then cancel the old one ([Replacing a key](/en/integrate/channels-and-keys.md#replacing-a-key)). Optional signing passwords are created on the **Signing passwords** card in the advanced section; the table's **Password ID** column is the value sent in the `X-Sayproof-Secret` header of signed order requests. Keys and passwords are also cancelled on this tab. | | **Page check** | Checks whether a product page that shows reviews in your own design contains the required elements in the page as it first loads ([Required elements › Page check](/en/customize/required-elements.md#page-check)). | This screen is only open to the **Administrator** role. For details, see [Channel, domain and keys](/en/integrate/channels-and-keys.md). ### Store appearance This screen chooses, per channel, how the default component looks, that is the review section on the product pages where you do not draw it with your own design. | Section | Content | |---|---| | **Channel** | The channel whose look is changed; the list shows the channel's name and market. If a channel is selected in the top bar, the screen opens with that channel; choosing here also changes the channel in the top bar. With unsaved changes, switching the channel or leaving the screen asks for confirmation first. | | **On your site now** | How reviews were shown on this channel's product pages in the last 7 days: on how many product pages the default component is used, on how many the look is chosen in your site's code (with the chosen layout and design), on how many reviews are shown with your site's own design, and what width the review area mostly has. If the channel was not seen on your site in the last 7 days, this is said too. | | **Design** | One of eight built-in designs; each option's card shows a short description of the design (see the table below). New channels use **Warm**. | | **Layout** | **Cards** (summary and rating bars on top, each review in its own card) or **Side panel** (on wide screens the summary on the left and the reviews on the right; on narrow screens stacked). New channels use **Cards**. | | **Preview** | The review section built with your choices. It is built from the reviews of the product with the most published reviews in the channel's market, in the channel's language; the product's name is shown above the preview. The **Phone** (375 px), **Tablet** (768 px) and **Wide screen** (1200 px) buttons, and **Width on your site** when your site has reported one, choose the width of the preview; a preview that does not fit your screen is shown scaled down. The sentence above the preview says how the component is arranged at that width. | The design options and the descriptions shown in the panel: | Design | Description | |---|---| | **Warm** | Cream summary panel, yellow stars, coloured initials; warm and soft. | | **Trust** | Green score box and accents; puts the verified buyer first. | | **Editorial** | Black and white, large score, quoted titles; photos come first. | | **Minimal** | White and light grey with a thinly framed summary; a calm look that fits any store. | | **Blush** | Blush pink tones, pink stars and round corners; for beauty and fashion. | | **Sport** | Black score box, orange stars, upper-case titles and sharp corners; for sports and outdoor. | | **Natural** | Earth and olive tones; for home, living and natural products. | | **Night** | Dark background with light text; for dark websites. The review section brings its own dark background. | For the colour and corner values of the designs and how your developer can change them, see [CSS variables › Built-in designs](/en/customize/theme.md#built-in-designs). On a wide screen the preview sits to the right of the choices and stays in view while you scroll. The choice on this screen only applies to pages that use the default component. What applies on your site is decided in this order: 1. If reviews are shown with your site's own design (headless use, or your site's code reading reviews without the script), the choice on this screen does not appear on the site. If every page on the channel works this way, the design and layout choices are turned off and a warning says so. 2. If the look is chosen in the page's code (`data-review-style`, `data-review-theme`, an option given to the script, or `style` and `theme` in the server-rendering request), the code applies on that page. 3. On the other pages, the choice saved on this screen applies. Style rules written by your developer take precedence over the chosen design; Sayproof cannot see them. The component changes its arrangement with the width of the review area, not the page: when the area is narrower than 880 px, the **Side panel** layout does not open a side panel and the summary stays above the reviews. When a choice changes, the preview is refreshed at once; the choice itself does not apply on your site until it is saved. While there is an unsaved choice, the **You have unsaved appearance changes** bar appears at the bottom of the screen: **Save changes** saves the choice and **Cancel** returns to the channel's saved look. If you choose another channel without saving, you are asked whether to discard the changes; **Discard changes and switch** switches, **Cancel** keeps you on the same channel. The saved change is recorded in the **Activity history** and shows on your site once the cache time of Sayproof's answers (at most 60 seconds) has passed. When the preview cannot be shown, the reason is given: if the channel has no site key in use, a site key must first be created on the **Channels** screen; if there are no published reviews in the channel's market, no preview is built. The preview uses only Sayproof's styles; the changes you make on your site with CSS variables or CSS rules do not show in the preview. The choice affects only the default component; in headless use, your own design determines the review section. If the `data-review-theme` or `data-review-style` attribute is used in your page's code, the channel's choice does not apply to that container ([Layout and CSS selectors](/en/customize/css-hooks.md#layout)). In every design, colours, typeface and corners can be matched to your theme with [CSS variables](/en/customize/theme.md). This screen is only open to the **Administrator** role. ### Integration Connecting Sayproof to your site takes two jobs, and both are needed: showing reviews on your product pages and sending orders to Sayproof. Without orders nobody can write a review and no invitations are sent. The screen has six tabs. The single sentence above each tab explains what the tab is for. If you have more than one channel, you first choose the **Channel** on the **Showing reviews** and **Order transfer** tabs (if a channel is selected in the top bar, the screen opens with that channel, and choosing here also changes the channel in the top bar); the values, the **Seen on your site?** section and the **Latest orders received** line are prepared for the chosen channel. The panel shows the values to use in the setup; your developer does the setup, and the code samples are in this documentation and in the setup guide sent from the **Share with a developer** tab. | Tab | Content | |---|---| | **Showing reviews** | The **Show reviews on the product page** card. The **Setup route** choice offers three routes: **Script (in the browser)**, **Next.js (on the server)** and **Django / Jinja (on the server)**; a one-sentence description appears under the chosen route (the script works on any site and reviews load after the page opens; with Next.js and Django, reviews arrive with the page and search engines also see the review text and rating; see [SSR](/en/integrate/server-rendering.md)). The **Values for the setup** list shows the **Site key** and the **Sayproof address** with copy buttons, plus the **Script address** on the script route, or the **Channel code** and a **Server key** row on the server routes; because the server key is secret and shown only when created, that row has no value but a **Go to keys** button. Below it, the **Step-by-step setup (docs)** button opens the documentation page of the chosen route ([Script](/en/integrate/script.md), [Next.js](/en/integrate/nextjs.md), [Django](/en/integrate/django.md)), and the **Share with your developer** button switches to the **Share with a developer** tab. The same values are shown in the **How to connect** step of the channel setup wizard ("The values to give your developer"); that step also carries the **Go to order transfer** and **Share with a developer** buttons for order transfer. The Below it is the **Seen on your site?** report for the chosen channel ([below](#seen-on-your-site)). | | **Order transfer** | The two ways are shown one under the other; each says under its own heading when it is used. **Read from your platform**: the **Platform connections** card; if there is a ready connection for your store platform (Akinon, Shopify, WooCommerce), Sayproof reads the orders itself. Each connection's card shows the last read, the orders that could not be read and the **How statuses are matched** table; a saved connection's address, read frequency and (for an Akinon connection) channel number on the platform are changed with **Edit the connection**. See [Akinon orders](/en/integrate/akinon.md), [Shopify orders](/en/integrate/shopify.md), [WooCommerce orders](/en/integrate/woocommerce.md). **Sent by your store**: the **Send orders and deliveries** card and the **Status values to send** table. The card holds the **Values for the setup** list (the **Orders** and **Deliveries** addresses and the **Channel code**, with copy buttons; a **Server key** row with a note that the order-sending system uses this key on every request, and a **Go to Channels › Keys** button), a short note, the **Step-by-step setup (docs)** and **Share with your developer** buttons, the **Latest orders received** line, the status counters and the **Test the connection** action ([Sending orders and deliveries](/en/integrate/orders.md)). The **Latest orders received** line shows how many orders arrived for the chosen channel in the last 7 days and in total, and when the last one arrived; the request figures and the **Recent requests** list in the **Order transfer status (all channels)** section cover all channels. | | **Email delivery events** | Only shown if your own system sends the invitations. The **Email delivery events** card: whether it is connected, the latest notice, the number of notices received in the last 7 days by type, and the addresses to enter in your email service. For emails Sayproof sends, this comes in automatically. For details, see [Email delivery events](/en/integrate/email-events.md). | | **Google product reviews** | Only the **Administrator** role sees it. One card for each open channel: **Create address** produces the **File address** to add in Google Merchant Center (with a copy button); **Renew address** closes the old address and produces a new one, **Close address** closes it, and both ask for confirmation. The card shows how many times Google has fetched the file and when it last did, the **Reviews in the file ( market)** number against the 50 review threshold, the **Reviewed products in the file** and **Products without a GTIN or an MPN with a brand** numbers, the number of reviews that can't go into the file with the reason, and the **Steps to add it in Merchant Center (documentation)** button plus, when needed, **Go to product sources**. The numbers cover all reviews of the channel's market. For details, see [Google product reviews](/en/integrate/google-reviews.md). | | **Share with a developer** | Links to a **setup guide** sent to the developer who sets things up, without opening a panel account for them. In the **Share a guide** wizard you choose the channel, the guide language (Turkish or English), the setup path (script, Next.js, Django / Jinja or all three), whether order transfer is explained too, how many days the link stays open (7, 30 or 90) and an optional note. The guide contains the channel's addresses, site key, channel code, verified domains, code samples and documentation links; the order example uses `Authorization: Bearer `. The server key is not in the guide; if needed, create it under **Channels › Keys** and send it to the developer separately. The developer opens the link and can print the guide, save it as PDF or download it as Markdown. The site key in the guide is the channel's newest key. The **Shared setup guides** list shows each link's status, end date and how many times it was opened; it lists every link whose status is **Open** and the newest 50 of the links that have expired or been closed. The **Copy link** and **Close link** buttons are here. A link that has expired or been closed no longer opens. | | **Marketplace reviews** | Only the **Administrator** role sees it. Used to show, with their source, the buyer reviews written for your store on marketplaces such as Trendyol or Hepsiburada on your product pages: you set up a marketplace connection, the reviews are read from a file or a link address, and each connection's card shows the report of its last read. For details, see [Marketplace reviews](/en/features/marketplace-reviews.md). | Only the **Administrator** role can see and share the setup values and addresses; other roles see the status cards and the **Status values to send** table on the **Showing reviews** and **Order transfer** tabs, and do not see the **Google product reviews**, **Share with a developer** and **Marketplace reviews** tabs. The **Share with a developer** tab is the easiest way to pass the values and addresses to your developer; you can also refer them to the [Setting up](/en/integrate/overview.md) section of this documentation. #### Seen on your site? A report that tells whether the setup actually works by looking at the requests that come from your site. The badge next to the heading gives the overall result: **Setup is working**, **Some things need attention**, **Not seen in the last 7 days** (seen before but not loaded in the last 7 days), **Not seen yet** or **Requests are being turned away** (the review section has never loaded and requests were turned away). Each row in the list below the badge is one check; the mark at the start of the row gives the result and the text gives the details: | Check | What it looks at | |---|---| | Loading | How many times the review section loaded on how many product pages in the last 7 days, and when it last loaded. If it hasn't loaded for 7 days, the row says the code may have been removed or the page changed. | | Turned-away requests | The number of requests turned away in the last 7 days and the reasons; each reason row shows the site the request came from, the reason and the number of requests. If the reason is an unverified domain, a **Go to domains** button appears, otherwise **See turned-away requests**. | | Product codes | Whether the product codes the site sent in the last 7 days are in your catalogue or reviews. Up to five unrecognised codes are shown as examples; this usually means the site sends another code, such as the model code instead of the variant code. The **Go to products** button opens the **Products** screen. | | Server rendering | Only shown if pages are prepared on the server: the number of requests from the server and whether the script also loads in the browser. If the script doesn't load, the review form can't open. | | Review form | How many times the review form was opened in the last 30 days and how many reviews were sent. If it was never opened, the row suggests opening the form on the page yourself to test it. | | Coverage | How many of the products with live reviews had the review section seen on their page in the last 30 days. This row is for information; if a channel is chosen, the reviews in that channel's market are counted. | | Errors | Only shown if requests ended with an error on Sayproof's side in the last 7 days; if it continues, you're asked to report it with the record number from the **Connection log**. | Two tables follow the checks: - **Product pages where the review section loaded in the last 7 days:** up to 10 products, with the **Product**, **Status** (**Reviews shown**, **No reviews yet** or **Product code not recognised**), **Loads (7 days)** and **Last load** columns. - **Sites the requests came from (last 30 days):** the **Site** (**Store server** for requests from the server), **Domain** (verified or **Not verified**), **Requests (30 days)**, **Turned away** and **Last request** columns. Verified domains with no requests in the last 30 days are listed too, with 0 requests. At the bottom are the number of product page views in the last 7 days and the **Go to the connection log** button. Roles other than Administrator see the same report for all channels, without the buttons that lead elsewhere. When the setup breaks, the **Needs your attention** card on the **Overview** screen warns you too: if requests from your site were turned away in the last 7 days, or if the review section, which loaded at least 20 times in the previous 7 days, hasn't loaded for 48 hours ([Reports](/en/features/reports.md)). ### Connection log A record of every request your site and store system make to Sayproof: review lists, review submissions, order and delivery transfers, email delivery events. If you are told that "reviews aren't showing" or "orders aren't arriving", check this screen first: it shows whether the request arrived, whether it was turned away and what the result was. - **Table:** the **Result**, **Request type**, **Site**, **Market**, **Product**, **Response**, **Time**, **Record no.** and **Date** columns. Successful requests show the result **Succeeded**. The **Response** column shows, depending on the request type, the number of reviews returned or orders or records accepted ("3 reviews", "1 order", "2 records"); other requests and refused or failed requests show "—". For requests made with a server key or a password that carry no site address (for example SSR and order transfer), the **Site** column reads **Store server**. Older rows recorded without a type show "Unknown (older record)" as the **Request type**. The **Date** column shows the date and time together. - **Counters:** **Requests**, **Typical response time**, **No reviews found**, **Refused** and **Errors**. The counters follow the filters other than the result (market, **Request type**, language, domain), the search, the dates and the channel selected in the top bar. With no dates chosen, the first counter names the kept period ("Requests (last 30 days)"); with dates chosen, it reads "Requests (chosen dates)". Clicking **No reviews found**, **Refused** or **Errors** filters the list to that result (**Refused** shows every refused request), and **Requests** clears that filter; the counters themselves do not change. - **Filters:** result, **Request type** (**Review list**, **Review list from your server**, **Customer's own reviews**, **Reviews on the order page**, **Review sent**, **Order transfer**, **Delivery transfer**, **Email delivery event**, etc.), market, language, domain and **Only refused requests**. To filter by channel, use the **Channel** selector in the top bar; when a channel is selected, the list shows only that channel's requests. The search looks in the product code, the record number and the site address. - **Sorting:** **Newest first**, **Oldest first** or **Slowest first**. - Clicking a row shows the request type, the response, the time taken, a text explaining the result of the request and the record number. Depending on the kind of key the request was made with, it shows **Site key used**, **Server key used** or **Signing password used** (with the password's name); for email delivery events, the **Email service** that sent the notice is shown instead. Entries are kept for 30 days. For the meaning of the results, see [Troubleshooting](/en/integrate/troubleshooting.md). --- ## AI package > Review checks, reply drafts, topics and sentiment, translations and review summaries; arriving with v2. Source: /en/features/ai/ The AI package is made of five features: review checks, reply drafts, topics and sentiment, translations and review summaries. AI suggests; your team decides: it never rejects a review and never sends a reply on its own. :::note[Coming soon] The AI package arrives with v2; the features on this page do not appear in the panel or on your product pages yet. ::: Every text sent to AI has email addresses, phone numbers, ID numbers, IBANs and card numbers hidden first; the model never sees them. There is no AI in the review form; translations and summaries never touch the review's original text or its rating. ### Features | Feature | What it does | |---|---| | **Review checks** | Finds reviews that look fake, incentivised, off-topic or abusive, says why and suggests a rejection reason. The review is held for approval before publication; someone on your team approves or rejects it. A negative opinion, a low rating or criticism of the store is never a finding on its own. | | **Reply drafts** | Writes the first version of the seller reply in your brand's tone; your team reads, edits and sends it. It never asks the customer to change the review and never offers a discount. | | **Topics and sentiment** | Finds whether each review mentions fit, quality, delivery, price or packaging positively or negatively. | | **Translations** | Translates reviews that go live into your open channels' languages. The rating and the original text don't change; visitors can still see the original review. | | **Review summaries** | Sums up the reviews of products with at least 10 reviews in a few sentences, covering negative reviews in proportion. | --- ## Setup options > The ways to connect Sayproof to your site, and choosing the option that suits your site. Source: /en/integrate/overview/ Connecting Sayproof to a site involves two independent tasks, and both are required: 1. **Display.** The product page shows reviews and opens the review form. This is done in the page's code. 2. **Order transfer.** Orders and deliveries reach Sayproof: on stores that run on Akinon, Shopify or WooCommerce, Sayproof reads them from the platform itself; on other stores, your store system sends them. The right to write a review and the invitation emails are based on this data; without order transfer, nobody can write a review. Whichever display option you choose, order transfer works the same way: [Akinon orders](/en/integrate/akinon.md), [Shopify orders](/en/integrate/shopify.md), [WooCommerce orders](/en/integrate/woocommerce.md) or [Sending orders and deliveries](/en/integrate/orders.md). If you also want to show reviews written for your store on marketplaces, this is a separate, optional feature that you connect in the panel without adding code to your site: [Marketplace reviews](/en/features/marketplace-reviews.md). ### Display options | Option | Where reviews are prepared | Reviews in the page's first response | Requirements | When it fits | |---|---|---|---|---| | [Script](/en/integrate/script.md) | The visitor's browser | No; they arrive once the script has loaded | A ` ``` | Attribute | Description | |---|---| | `src` | The script's address. The actual address is shown in the **Script address** row of the **Values for the setup** list on the **Show reviews on the product page** card on the **Integration › Showing reviews** tab in the panel when the **Script (in the browser)** route is chosen. | | `data-review-site-key` | Your channel's site key. | | `data-review-base` | The Sayproof API address. | | `data-review-locale` | `tr` or `en`. If omitted, the page's `` value is used, and failing that the channel's language. | The script is an ES module and is loaded over CORS; `type="module"` is therefore required. Adding it once per page is sufficient. ### Adding the container Add the following element where the reviews are to be shown: ```html
``` | Attribute | Description | |---|---| | `data-review-mount` | Marks the element as a review container. | | `data-review-product` | The product code. It must be **the same** as the `variant_key` (or `group_key` for group-level display) sent in the order transfer. | | `data-review-scope` | `variant` (default): only this variant's reviews. `group`: all reviews of the product group; in this case `data-review-product` is the group code. | | `data-review-product-name` | The product name. Optional. | | `data-review-layout` | `list` (default) or `grid`. | | `data-review-style` | `cards` or `sidebar`: the layout of the review section. If omitted, the layout chosen for the channel in the panel is used. See [Layout and CSS selectors](/en/customize/css-hooks.md). | | `data-review-theme` | `warm`, `trust`, `editorial`, `minimal`, `soft`, `bold`, `natural` or `night`: the built-in design of the review section. If omitted or not recognised, the design chosen for the channel in the panel is used. | | `data-review-gate` | If the review writing area is to be shown somewhere other than inside the container, the CSS selector of that place, for example `#write-review`. | A page can contain several containers; each container shows the reviews of its own product. ### Page changes The script watches the page for changes. If a container is added or removed later, or if the `data-review-product` value changes (for example when a variant is selected), the component updates itself. Single-page applications (SPAs) require no additional work. When manual control is needed, the script's public API is the `window.Sayproof` object: ```js window.addEventListener("sayproof:ready", () => { const container = document.querySelector("#reviews"); window.Sayproof.update(container, { product: "PRODUCT-CODE-2" }); }); ``` For all methods, see [JavaScript API](/en/reference/javascript-api.md). ### The review writing flow The default component does **not** show a general "Write a review" button to visitors who are not signed in; doing so would steer people who have not bought the product towards writing a review. Instead, a short note and the "Verify my order to write a review" link are shown: 1. The customer enters the order number and the email address used for the order. 2. Sayproof checks the order: whether the payment is complete, whether the product has been delivered, whether the time allowed to write has expired and whether this line has already been reviewed. 3. If the conditions are met, the review form opens. If not, a single general error message is shown; a missing order and an incorrect email address are not distinguished from each other. A customer arriving through the link in an invitation email does not need this verification: the script detects the `#review_token=…` part of the link (the `?review_token=…` parameter in older invitations), removes it from the address bar and opens the form automatically. In a shopping experience invitation sent for a cancelled or returned order, the form opens without rating topics. For signed-in customers, see [Signed-in customers](/en/integrate/signed-in-customers.md). When the customer adds a photo or video, the script prepares the file in the browser before uploading it. A photo is scaled so that its long side is at most 2,560 pixels and saved again as JPEG (as WebP or PNG when it has transparent areas); this also drops the location and device information the photo carries. A video is converted to H.264 with its short side at most 1,080 pixels, about 3 Mbps and at most 30 frames per second, without sound and without its location tags; a video that already fits these values is not re-encoded, only its sound and tags are removed. A video longer than the limit is not converted. While this happens the file shows "Preparing 42%" and then "Uploading 17%" next to a button that cancels it. If the browser cannot prepare a file, for example a HEIC photo in a browser that cannot read it or a browser that cannot encode video (a video conversion that makes no progress for 20 seconds, or takes more than 4 minutes in total, is also treated as not prepared and is stopped), the original is uploaded when it is within the size limit; otherwise the form says the file cannot be reduced in this browser and does not upload it. ### Content Security Policy (CSP) If your site uses a CSP: - The `script-src` directive must include the script's address, and the `connect-src` directive the Sayproof API address. - The `img-src` and `media-src` directives must include the address from which review photos and videos are served. - If you use server-side rendering, the `style-src` directive must allow the `sayproof.css` file served from the same address as the script. - If you use a nonce, add the `nonce` attribute to the script tag. The script adds its styles in `