Updated Oct 2026
Judge.me API in Python: read Shopify reviews, filter, reply
Judge.me is the most-installed review app on Shopify, and its API is simple: a private token, a shop domain, one reviews endpoint with pagination and filters, and a create-only reply endpoint. The catch is what the reviews response leaves out (replies, video) and what the reply endpoint can’t do (edit, delete), which matters the moment you retry a request. This guide covers both with requests, then the same through Prisma. Finding the token is covered in where to find the Judge.me API token.
pip install requestsYou need the private API token (Judge.me admin → Settings → Integrations → View API tokens) and your myshopify.com domain.
1. List reviews, 100 at a time
import os, requests
BASE = "https://api.judge.me/api/v1"
P = {"api_token": os.environ["JUDGEME_API_TOKEN"], "shop_domain": "example-store.myshopify.com"}
def reviews(**filters):
page = 1
while True:
r = requests.get(f"{BASE}/reviews", params={**P, **filters, "per_page": 100, "page": page}, timeout=30)
r.raise_for_status()
batch = r.json()["reviews"]
if not batch:
break
yield from batch
page += 1
for rev in reviews(published="true"):
if rev["curated"] != "ok" or rev["hidden"]:
continue # spam, not-yet-curated or hidden: not visible on the store
print(rev["id"], rev["rating"], rev.get("title"), (rev.get("body") or "")[:80], rev.get("product_title"), rev["reviewer"]["name"])Each review has id, rating (1 to 5), title, body, product_title, product_handle, reviewer.name, curated (ok, spam, not-yet), hidden, created_at and updated_at. Filters: rating=1, published=true|false, product_id, reviewer_email. The response does not include replies or video URLs, so “has this been answered?” has to be tracked on your side. Judge.me also accepts the token as an X-Api-Token header instead of a query parameter, which keeps it out of logs.
Link to the product page for a review: https://<shop domain>/products/<product_handle>.
2. Reply to a review (create only)
def reply(review_id, text):
r = requests.post(f"{BASE}/replies", params=P, json={"review_id": int(review_id), "reply": {"content": text}}, timeout=30)
r.raise_for_status()
return r.json()
reply(rev["id"], "Thank you, Laura. The new sizing chart is live on the product page.")There is no endpoint to edit or delete a reply, and the reviews list won’t show it. So be careful with retries: if the request times out after Judge.me received it, sending it again publishes the reply twice, and the API gives you no way to remove the duplicate. Record the review id as “replied” before you retry, or check the store page. This is exactly the case that made us add a reply.unknown state in Prisma instead of retrying blindly (why).
3. The same job through Prisma
Prisma connects a Judge.me store with the token (checked against Judge.me before it’s stored, encrypted) or with Judge.me’s OAuth, syncs published reviews, skips spam and hidden ones, and tracks replies on its side so you can filter has_reply=false. One key covers Judge.me plus Yotpo, Loox, Okendo, Trustpilot, Google and 50+ other platforms.
H = {"Authorization": f"Bearer {os.environ['PRISMA_API_KEY']}"}
r = requests.get("https://api.prismareviews.com/v1/reviews", headers=H, params={"platform": "judge_me", "has_reply": "false", "limit": 100}, timeout=30)
for rev in r.json()["data"]:
print(rev["rating"], rev["author"], rev["title"], rev["text"], rev["url"])
requests.post(f"https://api.prismareviews.com/v1/reviews/{rev['id']}/reply", headers=H,
json={"text": "Thank you, Laura. The new sizing chart is live on the product page."}, timeout=30).raise_for_status()Replies to Judge.me reviews through Prisma are live today. If Judge.me never answers the publish request, Prisma stops and marks the reply unknown with a webhook, rather than risking a duplicate. Connection fields: Judge.me on Platforms. Test keys (pk_test_…) return sample Judge.me reviews so the code runs now.
FAQ
Which Judge.me token do I use for the API?
The private API token, from Judge.me admin → Settings → Integrations → View API tokens. It grants read and write access and must stay server-side. The public token is only for the widget API from browser code.
Does the Judge.me API return replies to reviews?
No. The reviews response doesn’t include replies (or video URLs). You can create a reply through the API, but you can’t read it back, edit it or delete it; see it in the Judge.me admin or on the store.
How many reviews per request does the Judge.me API return?
Up to 100 per page with per_page=100, paginated with page. Filter server-side with rating and published to avoid walking the whole catalogue.
Judge.me, Yotpo, Loox and Google, one key.
2 locations free. Test keys return sample reviews from every platform.