Prisma Reviews / Guides / Thunderbird Add-ons reviews API in Python
Thunderbird Add-ons reviews API in Python: ATN ratings, no key
addons.thunderbird.net (ATN) runs the same add-on server as Firefox’s AMO, one API version behind, so a Thunderbird add-on’s ratings are a public JSON endpoint with the same fields. The difference is on the write side: ATN doesn’t document a reply endpoint, so this is a read-only source. This guide reads ratings with requests, as Prisma’s Thunderbird connector does (checked live). For the Firefox version with replies, see Mozilla Add-ons reviews API in Python.
pip install requestsCredentials: none. You need the add-on’s page, https://addons.thunderbird.net/thunderbird/addon/<slug>/.
1. Ratings, newest first
import requests
from datetime import datetime, timedelta, timezone
ATN = "https://addons.thunderbird.net/api/v4"
SLUG = "cardbook" # from /thunderbird/addon/<slug>/
def ratings(since=None):
url = f"{ATN}/ratings/rating/?addon={SLUG}&page_size=50"
while url:
r = requests.get(url, headers={"Accept": "application/json"}, timeout=30)
r.raise_for_status()
body = r.json()
for rt in body.get("results", []):
if since and datetime.fromisoformat(rt["created"].replace("Z", "+00:00")) < since:
return
yield rt
url = body.get("next")
since = datetime.now(timezone.utc) - timedelta(days=31)
for rt in ratings(since):
reply = (rt.get("reply") or {}).get("body")
print(rt["id"], rt.get("score"), (rt.get("user") or {}).get("name"), rt["created"][:10], (rt.get("body") or "")[:80], "| replied" if reply else "")Fields: id, score (1 to 5), body (null for star-only ratings), created, user.name and reply (body, created) when the developer answered on the site. Each user’s latest rating only; no date filter, so stop paging at your last sync with a month of look-back for new replies.
2. What the API won’t do
No documented reply endpoint on ATN. Developers answer on the website; the answer then shows up in reply on the next read.
3. The same job through Prisma
Prisma connects a Thunderbird add-on from its page (no login), reads ratings with the look-back, and returns them in the same JSON as Firefox add-ons, Open VSX, JetBrains Marketplace, the App Store and 80+ other platforms, with a webhook per new rating.
import os
H = {"Authorization": f"Bearer {os.environ['PRISMA_API_KEY']}"}
r = requests.get("https://api.prismareviews.com/v1/reviews", headers=H, params={"platform": "thunderbird", "limit": 100}, timeout=30)
for rev in r.json()["data"]:
print(rev["rating"], rev["author"], rev["text"], rev["url"])Thunderbird Add-ons is read-only in Prisma and in beta. Connection fields: Platforms. A test key returns sample reviews so the code runs now.
FAQ
Is there an API for Thunderbird add-on reviews?
Yes, the same add-on server Mozilla runs for Firefox, at addons.thunderbird.net/api/v4. GET /ratings/rating/?addon=<slug> returns the add-on’s ratings, public, no key, newest first, with a next link for paging.
Can a developer reply to Thunderbird add-on reviews by API?
Replying through ATN’s API isn’t documented, so treat it as read-only. Existing developer replies are returned in each rating’s reply field.
What’s the difference from the Firefox AMO API?
Same data shape, older API version (v4 instead of v5), different host, and no documented reply endpoint. Slugs come from the add-on page at addons.thunderbird.net/thunderbird/addon/<slug>/.
Thunderbird, Firefox, VS Code and JetBrains reviews, one key.
2 locations free. Test keys return sample reviews from every platform.