Connect a review app
Connect your review provider so a verified review automatically awards loyalty points. Charm supports ten paths, each with its own connection method.
- From your Shopify admin, open Charm and go to Settings → Integrations → Review apps.
- In the Review provider dropdown, pick your provider.
- Provide what that provider needs, then connect:
- Judge.me: paste your Judge.me private API token and click Connect Judge.me. Charm registers the webhooks for you. (Full step-by-step guide →)
- REVIEWS.io: paste your public store key and private API key, then click Connect REVIEWS.io. Charm creates the product-review webhook, or reuses the one it created on an earlier connection.
- WebwinkelKeur: enter your WebwinkelKeur webshop ID and WebwinkelKeur API code, then click Connect WebwinkelKeur. Charm subscribes to new shop reviews for you. (Full step-by-step guide →)
- Stamped, Okendo, Fera: click Generate setup, then paste the shown Payload URL and Secret into the provider’s webhook settings.
- Loox, Yotpo, Air Reviews, custom: click Generate setup, then send a POST to the Payload URL from a Shopify Flow workflow using that app’s review trigger (or any custom webhook). See Shopify Flow and custom webhooks.
Charm normalizes every provider into the same review event, so the points reward fires the same way regardless of source.
Per-provider guides
Section titled “Per-provider guides”Shopify Flow and custom webhooks
Section titled “Shopify Flow and custom webhooks”After Generate setup, the card’s Setup details show the Payload URL, the Secret and an Example JSON body for the provider you picked. In Shopify Flow, start a workflow from the review app’s review trigger, send a POST request to that Payload URL and use the example as the request body. The example writes each Flow variable as {{ variable | json }}, so quotes and line breaks in a review arrive intact. Keep those filters.
Each app earns only through its own connection: post to the Payload URL shown for that app, and keep the app connected in Charm.
Loox, Yotpo and Air Reviews triggers carry no review ID, so Charm tells reviews apart by fields that every delivery of a review repeats. Keep these fields in the request body:
| App | Charm tells reviews apart by |
|---|---|
| Loox (New review trigger) | The reviewer’s email, the product and the review date |
| Yotpo | The reviewer’s email and the review’s title, text and star rating |
| Air Reviews | The reviewer’s email and the product, so a customer earns once per product reviewed |
A Shopify Flow / custom webhook request sends its own fields as JSON: provider, shopId or shopDomain, reviewId, customerEmail or customerId, rating, and optionally hasPhoto and hasVideo. Set verified to true when the reviewer bought the product. The Payload URL already carries your secret. A custom HTTP request can send the Secret as a Bearer token (Authorization: Bearer followed by the secret) instead.
Keep review rewards from being farmed
Section titled “Keep review rewards from being farmed”The award is deduped per review, but nothing stopped a customer reviewing all seven items of one order and banking seven rewards. Two controls on the Post a product review rule (Program → Earning points) close that:
- Cap rewarded reviews per customer: set a maximum and a period, either monthly (resets at the start of each calendar month, so regular reviewers keep earning over time) or lifetime. Reviews beyond the cap still publish in your review app; they simply earn nothing and don’t advance review milestones. A review rewarded within the cap keeps its photo/video bonus.
- Only reward verified purchases: a review earns only when the review app confirms the reviewer actually bought the product. Reviews from people who never ordered earn nothing. An unrecognized verification status counts as unverified, so the gate can only ever withhold a bonus, never grant one unearned.
Cap rewarded reviews per customer is off by default. Only reward verified purchases is on for every review rule you add, and a review rule set up earlier keeps the setting it was saved with, as its editor shows. Neither control changes points you’ve already paid out.
Which review apps report a verified purchase
Section titled “Which review apps report a verified purchase”With Only reward verified purchases on, a review earns only when its app reports a purchase:
| Review app | A review counts as a verified purchase when |
|---|---|
| Judge.me | Judge.me’s verified status says so. Judge.me sends a status word (confirmed buyer, verified purchase, admin, and so on) that Charm maps to verified or unverified. |
| Stamped | Stamped marks the review as verified. |
| WebwinkelKeur | WebwinkelKeur marks the review as verified. |
| Okendo | The reviewer’s status is Verified Buyer. A Verified Reviewer has only confirmed an email address and doesn’t count. |
| Fera | Fera marks the review as verified. |
| REVIEWS.io | The review carries an order, as reviews from REVIEWS.io’s post-purchase invitations do. |
| Loox | The Flow request maps Loox’s Order ID field to orderId. Loox sets it on reviews written from a Loox review request. |
| Shopify Flow / custom webhook | The request sends verified: true. |
| Yotpo, Air Reviews | Never. Their Shopify Flow triggers don’t say whether the reviewer bought the product. |
Disconnect a review app
Section titled “Disconnect a review app”- Go to Settings → Integrations → Review apps and pick the app in the Review provider dropdown.
- (Judge.me and REVIEWS.io only, optional) Enter your Judge.me private API token or REVIEWS.io private API key in the field above Disconnect. Charm uses it once to remove its webhooks from that app and doesn’t store it.
- Click Disconnect.
From then on, reviews from that app earn nothing, even if the app keeps sending them. What stays behind in the review app depends on the connection:
- Judge.me and REVIEWS.io: without the token or key, Charm’s webhooks stay registered there. With it, Charm removes them, and for REVIEWS.io also any older copies of Charm’s webhook. If the removal fails, the app is still disconnected and the message says the webhooks stayed.
- WebwinkelKeur: WebwinkelKeur offers no way to delete the subscription, so it stays in your WebwinkelKeur account. See disconnect and reconnect WebwinkelKeur.
- Stamped, Okendo, Fera, Loox, Yotpo, Air Reviews and custom: remove the webhook in the review app, or turn off the Flow workflow, yourself.
When you connect Judge.me, REVIEWS.io or WebwinkelKeur again, Charm reuses a webhook it created earlier that is still registered there, instead of adding a second one.
Bonus points for a photo or video
Section titled “Bonus points for a photo or video”Extra points for a review that includes media are a switch (Give bonus points for a photo or video) plus an amount. A review with media counts as one review for both the cap and the milestone ladder, even when it also earns the bonus.
Review milestones
Section titled “Review milestones”Beyond the per-review points, the review rule can carry an optional milestone ladder: a bonus after the customer’s 3rd review, a free product after their 10th, or any other thresholds, each paying out once per customer. Configure it by editing the Post a product review rule under Program → Earning points and enabling Review milestones.
- Each milestone can grant bonus points, a free product, an amount or percentage off, or free shipping.
- A review with a photo or video counts as one review, even when it also earns the media bonus.
- Milestones work even with per-review points set to zero. The review is still recorded and counted.
- Counting starts when you add the ladder, so long-running review programs don’t trigger a retroactive payout.
Customers see the next milestone’s reward and their progress (“1 / 3 reviews”) on the review tile in the storefront widget and account hub.