Directory / plugin
Synth Review Integrity
v0.1.0 · by Synth AI
Audit WooCommerce product reviews: check order matches, track review changes and keep a record of checks and decisions.
About this plugin
Find WooCommerce reviews that need attention, and keep a clear record of how they were checked.
Synth Review Integrity brings review history, order-match results and documented decisions into one dashboard. Use it to investigate unfamiliar review batches, check verified-owner claims and hand cases to the right person.
Once connected, it records product reviews and their changes in the background. It never changes, publishes or deletes reviews, orders, coupons or ratings.
Findings highlight records to investigate. The plugin does not determine whether a review is fake.
How you use it
Your usual WordPress moderation remains in place. Findings become cases in the dashboard. Make corrections in WordPress; when the dashboard sees that the issue is fixed, the case closes as fixed at the source. Checks and decisions stay on record.
What it checks
- A batch of reviews whose source is unknown, such as an import — one case per batch.
- A “verified owner” mark without a matching purchase on this site.
- A review that Customer Reviews for WooCommerce links to an order without the reviewed product.
- Exact duplicates of a long review text within your shop.
- A review that changed after a check: earlier results become outdated and the review is checked again.
- Gaps in what the dashboard knows about your shop — reported once per period.
- A review already identified as an ad by Synth Antispam. Its verdict is reused without checking the text again; this check needs Synth Antispam on the same site.
Order matching happens on your site, through WooCommerce. The service receives the match result and a pseudonym of the order. Order numbers, order contents and customer details stay on your site.
The dashboard
- Stores & Coverage — see how complete and fresh each shop’s data is.
- Reviews — inspect a review’s versions and check results, then open it in your WordPress admin.
- Cases — assign, add notes, resolve with a reason, dismiss, reopen and recheck.
- Members — invite people by email as Owner, Operator or Viewer. Sign-in uses a one-time email link; there are no passwords.
- Export — download a ZIP of reviews, checks and history, with a manifest of checksums.
Privacy
- By default, only facts and keyed one-way digests leave the site. Reviewer names, email addresses, websites and IP addresses never do.
- Review text is sent only if the workspace owner enables content consent in the dashboard.
- Connecting a shop excludes its domain from Synth Antispam training copies, including Antispam checks on that site. Disconnecting does not reverse this.
- The plugin sends nothing while a visitor is submitting a review.
The “External services” section below lists what is sent, when, and how long it is kept.
Requirements
- WooCommerce. Without it, the plugin records and sends nothing.
- A workspace at reviews.synth.locker. Creating one takes an email address and costs nothing. What it includes — how many shops, continuous tracking of new reviews and rechecks — is shown in the dashboard.
- Synth Antispam is optional. It is recommended for the ad-review check and is not required for the other checks.
External services
This plugin needs the Synth Review Integrity service (wp-api.synth.locker, operated by LightApps OÜ, Estonia). Once an administrator activates the plugin, gets a site key and connects the shop to the Synth Review Integrity dashboard with a pairing code, the plugin records how WooCommerce product reviews are created, edited and moderated, reads WooCommerce orders locally on this site to check whether a reviewer bought the product and, when Customer Reviews for WooCommerce links a review to an order, whether that order contains the reviewed product, and sends only the resulting facts to the service. The text of a review is sent only if the shop owner has enabled content consent in the Synth Review Integrity dashboard, and only for review versions the plugin records after it was enabled (a new or changed review, or a scan the dashboard asks for); turning the consent off stops new transfers. Orders are read on this site only; what leaves it is the fact of a match and a pseudonym of the order — and, for a linked order, only whether it contains the product, never its number. Until the shop is connected, the plugin sends nothing except the two requests an administrator makes by pressing a button on its screen — Get a site key and Connect — and nothing is ever sent while a visitor is submitting a review: sending happens later, in the background.
Requests the plugin makes
Every request below carries the plugin version and WordPress’s own User-Agent header; all except POST /v1/register also carry the site key and, in a separate header, the site address. POST /v1/register carries instead the plugin’s name (X-Synth-Product: review-integrity), so the service can tell this plugin’s site keys from Synth Antispam’s — nothing about the site.
POST /v1/register— only when an administrator presses Get a site key on the plugin’s screen; asks the service for this plugin’s own site key with an empty body — no site key and no site address header. The key is tied to this site’s address by the first request made with it (connect).POST /v1/integrity/connect— only when an administrator presses Connect with a one-time pairing code from the dashboard; sends the code, a random identifier of this installation and the capability snapshot.POST /v1/integrity/events— in the background while the shop is connected; sends up to 50 review events at a time.POST /v1/integrity/status— in the background, at most once every 15 minutes; sends the capability snapshot and the state of the local queue, and receives scan jobs.POST /v1/integrity/scan/page— in the background, only while the dashboard has asked for a scan or a recheck; sends review snapshots page by page.POST /v1/integrity/erasure— in the background, only after the shop owner erases a person’s personal data with the WordPress privacy tools (Tools Erase Personal Data); sends the numbers of that person’s product reviews on this site, found here by the email address, and a random request id — never the email address itself.
Exactly what is sent, field by field. The complete list, matching the plugin’s request builders:
request.connect.pairing_code— the one-time pairing code.request.connect.store_instance_id— a random identifier of this installation.request.connect.capabilities— the capability snapshot (fields below).request.events.store_instance_id— the installation identifier.request.events.events— up to 50 review events (fields below).request.status.store_instance_id— the installation identifier.request.status.capabilities— the capability snapshot (fields below).request.status.outbox— the state of the local queue (fields below).request.status.active_job_id— the scan job in progress, if any.request.scan_page.store_instance_id— the installation identifier.request.scan_page.job_id— the scan job the page belongs to.request.scan_page.after_cursor— the last review number of the previous page.request.scan_page.next_cursor— the last review number of this page.request.scan_page.done— whether the job is finished.request.scan_page.events— up to 50 review snapshots (fields below).request.erasure.store_instance_id— the installation identifier.request.erasure.request_id— a random identifier of the erasure request, so it is never recorded twice.request.erasure.review_refs— the numbers on this site of up to 100 product reviews of the person; never the person’s email address.event.event_id— an identifier of the event, so it is never recorded twice.event.store_instance_id— the installation identifier.event.sequence— the order in which this installation recorded its events.event.kind— insert, edit, status, delete or observed.event.capture— whether the change was seen by a hook, the daily reconciliation or a scan.event.scan_job_id— the scan job, for a scan snapshot.event.source_system— alwayswoocommerce.event.review_ref— the review’s number on this site.event.product_ref— the reviewed product’s number on this site.event.submission_channel— product page, admin, REST API, import or unknown.event.channel_basis— what that channel was determined from.event.observed_at— when the plugin saw the change.event.source_created_at— the review’s creation date as stored.event.source_occurred_at— when the change happened, where WordPress stores it.event.source_updated_at— always empty for WooCommerce.event.status— approved, held, spam, trash, deleted or absent.event.prior_status— the status before a status change.event.rating— the star rating.event.content_digest— a keyed one-way digest of the review text; without content consent the text never leaves the site.event.version_digest— a keyed one-way digest of text, rating and status together.event.digest_scheme— how the text was normalised before digesting.event.normalized_length— the length of the review text.event.text— the review text, only while the shop owner has enabled content consent in the Synth Review Integrity dashboard and only for versions captured after it was enabled; at most 8 KB; never with a deletion or a status change.event.purchase.state— whether a matching order was found on this site.event.purchase.method— whether the match used the customer account or the order’s email address.event.purchase.product_match— the product itself or one of its variations.event.purchase.order_ref— a keyed pseudonym of the order, never the order number.event.purchase.order_status_class— completed, in progress, refunded, cancelled, failed or other.event.purchase.refunded— whether the order was refunded.event.purchase.orders_examined— how many of that customer’s orders were examined.event.purchase.orders_limit— the most orders examined per customer.event.provider_facts.verified— WooCommerce’s own “verified owner” mark, as stored.event.provider_facts.verified_source— where that mark was read from.event.provider_facts.ivole_order_kind— which order link Customer Reviews for WooCommerce stored, if any — never the order number.event.antispam_verdict.state— whether Synth Antispam already judged the review.event.antispam_verdict.is_spam— its verdict.event.antispam_verdict.category— its category.event.antispam_verdict.outcome— what was done with the review.event.order_link.state— whether the order Customer Reviews for WooCommerce links the review to was found on this site and contains the reviewed product; checked on this site, never the order number or its contents.event.order_link.kind— which order link of Customer Reviews for WooCommerce was checked, if any.event.order_link.product_match— the product itself or one of its variations.capabilities.captured_at— when the snapshot was taken.capabilities.wp_version— the WordPress version.capabilities.php_version— the PHP version.capabilities.wc_version— the WooCommerce version.capabilities.hpos— whether WooCommerce stores orders in its own tables.capabilities.action_scheduler_version— the Action Scheduler version.capabilities.wp_cron_disabled— whether WP-Cron is switched off.capabilities.digest_scheme— how review text is normalised on this host.capabilities.cusrev_version— the Customer Reviews for WooCommerce version, if active.capabilities.product_comments_non_review_type— how many comments on products are not reviews and are therefore not recorded.outbox.pending— how many events wait to be sent.outbox.oldest_pending_age_s— how long the oldest of them has waited.outbox.dropped_total— how many were deleted unsent after 7 days.outbox.last_reconciliation_at— when the last daily reconciliation for the current connection finished (empty right after connecting, until the first one does).outbox.paused_reason— why sending is paused, if it is.
What is never sent: reviewer name, reviewer email address, reviewer website, reviewer IP address, order number, order contents, amounts, addresses.
Sent only with the shop owner’s consent: review text — only while the shop owner has enabled content consent in the Synth Review Integrity dashboard, and only for versions captured after it was enabled.
Retention on this site: events wait in a local table and are deleted 7 days after they were recorded, sent or not; the number deleted unsent is reported (outbox.dropped_total) so the gap is visible. An erasure request is the exception: it is kept until it is sent — while the shop is disconnected it waits for the shop to be reconnected — and is then deleted like the rest. Uninstalling the plugin removes the table and the per-site secret behind every pseudonym and digest, after which earlier pseudonyms can no longer be linked to anything on this site.
Training: nothing this plugin sends is used to train models. Connecting the shop also excludes its domain from the copies the Synth Antispam service keeps for training: from then on, checks made for that domain — including those of Synth Antispam on this site — are not kept. Disconnecting the shop does not undo this. Copies taken before the shop was connected are deleted on request: write to [email protected] with the site address.
- Terms of Use: https://synth.locker/assets/legal/wordpress-terms-of-use.html
- Privacy Policy: https://synth.locker/assets/legal/wordpress-privacy-policy.html
Every address that appears in the source
A search of this plugin’s files finds these addresses and no others:
wp-api.synth.locker— the Synth Review Integrity service above; changeable only with theSYNTH_RI_API_BASEconstant inwp-config.phpor thesynth_ri_settingsfilter. The only address this plugin sends a request to.reviews.synth.locker— the Synth Review Integrity dashboard, where pairing codes are issued: a link on the plugin’s settings screen. Nothing is sent to it.wordpress.org— a link to Synth Antispam on the plugin’s settings screen, shown while Synth Antispam is not installed, and the support forum in the translation template. Nothing is sent to it.synth.locker,www.gnu.organdfsf.org— links (the plugin’s home page, the terms and the privacy policy above, the GPL licence). Nothing is sent to them.[email protected]— the email address for deletion requests.- Not addresses: the translation-template placeholder
[email protected];localhost,127.0.0.1and the.test,.localand.localhostendings, by which the plugin recognises a development address of the service and allows it without HTTPS; and[email protected], an example inside a code comment. None of them is contacted.