Prisma Reviews / Guides / Fera reviews API in Python

Fera reviews API in Python: secret key, private API v3, store replies

Fera is a reviews app for Shopify, BigCommerce and Wix stores with a private REST API: one reviews endpoint that covers product and store reviews, pages of 100, and a store_reply field the merchant can write through a PUT. Like Junip, it has no date filter, so incremental syncs sort newest first and stop early. This guide does it with requests, following developers.fera.ai as Prisma’s Fera connector does (in beta, built from the docs). The store-platform picture is on e-commerce reviews API.

Shell
pip install requests

Credentials: the Secret Key from Fera (Integrations → API keys) and the store’s https address for links.

1. Page through approved reviews, newest first

Python
import os, requests
from datetime import datetime, timedelta, timezone

API = "https://api.fera.ai/v3/private"
H = {"SECRET-KEY": os.environ["FERA_SECRET_KEY"], "Content-Type": "application/json"}
STORE = "https://shop.example.com"

def reviews(since=None):
    page = 1
    while True:
        params = {"state": "approved", "subject": "both", "sort_by": "created_at:desc", "page": page, "page_size": 100}
        r = requests.get(f"{API}/reviews", headers=H, params=params, timeout=30)
        r.raise_for_status()
        body = r.json()
        rows = body.get("data", [])
        for rev in rows:
            if since and datetime.fromisoformat(rev["created_at"].replace("Z", "+00:00")) < since:
                return
            yield rev
        if not rows or page >= (body.get("meta") or {}).get("page_count", page):
            return
        page += 1

since = datetime.now(timezone.utc) - timedelta(days=90)
for rev in reviews(since):
    c = rev.get("customer") or {}
    reply = (rev.get("store_reply") or {}).get("body")
    print(rev["id"], rev.get("rating"), c.get("display_name") or c.get("generated_display_name"), rev["created_at"], rev.get("heading"), (rev.get("body") or "")[:80], (rev.get("product") or {}).get("url") or STORE, "| replied" if reply else "")

Fields: id, rating (1 to 5), heading, body, created_at, updated_at, customer.display_name (or generated_display_name when the shopper gave none), product.url on product reviews, and store_reply with body and created_at when the store answered. subject=both returns product and store reviews together; product or store narrows it. Most accounts are limited to 60 requests a minute.

2. Reply, and check it stuck

Python
rid = rev["id"]
r = requests.put(f"{API}/reviews/{rid}", headers=H, json={"store_reply": {"body": "Thank you, Dana. The replacement strap is on its way."}}, timeout=30)
r.raise_for_status()
saved = (r.json().get("store_reply") or {}).get("body")
assert saved and saved.strip() == "Thank you, Dana. The replacement strap is on its way."

Fera’s schema lists store_reply in the request body without describing it further, so treat the reply as published only when the review comes back with it. Writing a new body overwrites the previous reply.

3. The same job through Prisma

Prisma connects a Fera store with the Secret Key and address (checked before storing, encrypted), reads approved reviews with the 90-day look-back, keeps store_reply as the reply in the same shape as every other platform, publishes replies with the PUT and verifies them on the way back. One key covers Fera plus Judge.me, Loox, Junip, Google and 50+ more.

Python
H = {"Authorization": f"Bearer {os.environ['PRISMA_API_KEY']}"}
r = requests.get("https://api.prismareviews.com/v1/reviews", headers=H, params={"platform": "fera", "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, Dana. The replacement strap is on its way."}, timeout=30).raise_for_status()

Fera is in beta in Prisma, with replies live. Connection fields: Platforms. A test key returns sample reviews so the code runs now.

FAQ

How do I authenticate to the Fera API?

Copy the Secret Key from Fera (Integrations → API keys) and send it in a SECRET-KEY header on every request to https://api.fera.ai/v3/private. Keep it server-side: it gives full access to the store’s Fera data.

Can I reply to Fera reviews by API?

Yes. PUT /v3/private/reviews/{id} with a store_reply object containing body sets the store’s reply. The docs don’t say more about the field, so read the review back and check store_reply.body before treating the reply as published.

Does the Fera reviews endpoint filter by date?

No. Sort by created_at:desc and stop paging once you pass your last sync date, looking back about 90 days so new store replies on recent reviews are seen. Stay under 60 requests a minute.

Fera, Judge.me, Loox and Google, one key.

Get a free API key

2 locations free. Test keys return sample reviews from every platform.

Next step: read the reviews as JSON with the Fera reviews API, and compare plans on Prisma Reviews pricing.

Get your API key in a minute

Free Spark plan: 2 locations, no card. Test keys return sample data on all 84 platforms, so you can build before connecting a real one.