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.

Shell
pip install requests

Credentials: 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

Python
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.

Python
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.

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 JetBrains Marketplace 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.