Prisma Reviews / Guides / JetBrains Marketplace reviews API in Python
JetBrains Marketplace reviews API in Python: plugin comments and vendor replies
plugins.jetbrains.com shows plugin reviews from a JSON endpoint its own site calls, which makes them readable without a key: pages of 100, newest first, with the vendor’s replies one request away. Two things to handle: the text is HTML, and the date is epoch milliseconds in a string. This guide reads it with requests, as Prisma’s JetBrains connector does (checked live), and notes that the endpoint isn’t part of the documented Marketplace API, so it may change. The developer-platform picture is on B2B software reviews API.
pip install requestsCredentials: none. You need the plugin’s page, https://plugins.jetbrains.com/plugin/<id>-<name>; the number is the plugin id.
1. Comments newest first, with the vendor’s reply
import re, html, requests
from datetime import datetime, timedelta, timezone
JB = "https://plugins.jetbrains.com/api"
PLUGIN_ID = 7322 # from /plugin/<id>-<name>
def text(h):
"""JetBrains comments are HTML: keep paragraphs and line breaks, drop the rest."""
s = re.sub(r"<br\s*/?>", "\n", h or "", flags=re.I)
s = re.sub(r"</p>\s*", "\n", s, flags=re.I)
s = html.unescape(re.sub(r"<[^>]+>", "", s))
return "\n".join(l.strip() for l in s.split("\n") if l.strip())
def comments(since=None, size=100):
page = 1
while True:
r = requests.get(f"{JB}/plugins/{PLUGIN_ID}/comments", params={"size": size, "page": page}, headers={"Accept": "application/json"}, timeout=30)
r.raise_for_status()
rows = r.json()
for c in rows:
created = datetime.fromtimestamp(int(c["cdate"]) / 1000, timezone.utc)
if since and created < since:
return
reply = None
if c.get("repliesCount"):
rr = requests.get(f"{JB}/comments/{c['id']}/replies", headers={"Accept": "application/json"}, timeout=30)
rr.raise_for_status()
vendor = [x for x in rr.json() if x.get("vendor") and x.get("comment")]
if vendor:
reply = text(vendor[-1]["comment"])
yield c, created, reply
if len(rows) < size:
return
page += 1
since = datetime.now(timezone.utc) - timedelta(days=31)
for c, created, reply in comments(since):
print(c["id"], c.get("rating"), (c.get("author") or {}).get("name"), created.date(), text(c.get("comment"))[:80], f"https://plugins.jetbrains.com/plugin/{PLUGIN_ID}/reviews", "| replied" if reply else "")Fields per comment: id, rating (1 to 5, may be absent), comment (HTML), cdate (epoch milliseconds, as a string), author.name, repliesCount. Replies carry the same shape plus vendor: true for the plugin vendor’s answers. No date filter: stop at your last sync with a month of look-back, so late vendor replies on recent reviews are seen.
2. What the API won’t do
No reply endpoint: vendors answer on the plugin’s Reviews tab. And because the endpoint is the site’s internal JSON rather than the documented API reference, check your parser when JetBrains changes the site.
3. The same job through Prisma
Prisma connects a JetBrains plugin from its page (no login), reads comments and vendor replies with the look-back, converts the HTML to text, and returns them in the same JSON as Open VSX, Firefox add-ons, the App Store and 80+ other platforms, with a webhook per new review.
import os
H = {"Authorization": f"Bearer {os.environ['PRISMA_API_KEY']}"}
r = requests.get("https://api.prismareviews.com/v1/reviews", headers=H, params={"platform": "jetbrains", "limit": 100}, timeout=30)
for rev in r.json()["data"]:
print(rev["rating"], rev["author"], rev["text"], rev["url"])JetBrains Marketplace is read-only in Prisma and in beta. Connection fields: Platforms. A test key returns sample reviews so the code runs now.
FAQ
Is the JetBrains Marketplace reviews endpoint official?
Partly. GET https://plugins.jetbrains.com/api/plugins/{id}/comments is the public JSON the Marketplace site itself uses, but it isn’t in the documented Marketplace API reference, so field names could change without notice.
How do I get the vendor’s reply to a JetBrains review?
When a comment has repliesCount above 0, GET /api/comments/{id}/replies and keep the last entry with vendor: true. Replies are HTML, like the comments.
Can I reply to JetBrains Marketplace reviews by API?
No. Vendors answer on the plugin’s Reviews tab on plugins.jetbrains.com; there is no public write endpoint.
JetBrains, Open VSX, Firefox add-ons and app stores, one key.
2 locations free. Test keys return sample reviews from every platform.