Docs / API reference

Reviews

A review is one customer review on one of your connected locations, normalized to the same JSON shape on every platform. Prisma imports reviews when a location is connected and then checks for new and edited ones on a schedule set by the platform and your plan (see Platforms). You read them with two endpoints, and you get a webhook when one is created or updated.

The review object

JSON
{
  "id": "rev_01KJ8Q2M4T7HX3VB9CWD6NRZ5E",
  "platform": "google",
  "location_id": "loc_01KJ8P9W2C4D6F8G0H2J4K6M8N",
  "rating": 4,
  "title": null,
  "text": "Great flat white, a bit slow at lunchtime.",
  "author": "Marta G.",
  "language": "en",
  "url": null,
  "created_at": "2026-10-19T12:41:07.000Z",
  "updated_at": "2026-10-19T12:41:07.000Z",
  "reply": {
    "text": "Thanks Marta! We have added a second barista at lunch.",
    "created_at": "2026-10-21T09:02:11.000Z",
    "status": "published",
    "error": null
  }
}
FieldTypeDescription
idstringPrisma review ID (rev_…). Stable while the location stays connected.
platformenumgoogle, app_store, google_play, judge_me, trustpilot, yelp, tripadvisor, booking, yotpo, reviews_io, g2
location_idstringThe location the review belongs to.
ratinginteger | null1 to 5 stars. null if the platform gave no rating.
titlestring | nullReview title, on platforms that have one (App Store, Trustpilot, Judge.me…).
textstring | nullReview body. null for rating-only reviews.
authorstring | nullDisplay name as shown by the platform.
languagestring | nullLanguage code when the platform provides one.
urlstring | nullPublic link to the review when the platform provides one. On read-only platforms (Yelp, Tripadvisor, Booking.com, Yotpo, REVIEWS.io, G2) it is always set: the link to answer the review on the platform, which for some platforms is the listing or product page.
created_attimestampWhen the review was written on the platform.
updated_attimestampWhen it was last edited on the platform.
replyobject | nullThe business reply, or null if there is none.

The reply object

FieldTypeDescription
textstringReply text.
statusenumpublished (live on the platform), queued (sent through Prisma, waiting to be published), failed (the platform refused it; see error).
created_attimestamp | nullWhen the reply was published. null while it is queued.
errorstring | nullWhy publishing failed, when status is failed.

A reply that appears on the platform, whoever wrote it, comes back as published. How to create, replace and delete replies is on Replies.

List reviews

GET /v1/reviews

Returns the reviews of your workspace (in the mode of your key), newest first.

Query paramTypeDescription
location_idstringOnly reviews of this location. Omit to list across all locations.
platformenumOnly reviews from this platform (one of the values above).
sinceISO 8601Only reviews written at or after this time, by created_at. Either a date (2026-10-01, meaning midnight UTC) or a full timestamp with time zone offset (2026-10-01T00:00:00Z, 2026-10-01T02:00:00+02:00).
has_replytrue | falsetrue: reviews with a reply in any status. false: reviews without one.
limitintegerPage size, 1 to 100. Default 50.
cursorstringThe next_cursor of the previous page.
api.prismareviews.com/v1
curl "https://api.prismareviews.com/v1/reviews?location_id=loc_01KJ8P9W2C4D6F8G0H2J4K6M8N&has_reply=false&limit=20" \
  -H "Authorization: Bearer $PRISMA_API_KEY"

Response 200

JSON
{
  "data": [
    {
      "id": "rev_01KJ8Q2M4T7HX3VB9CWD6NRZ5E",
      "platform": "google",
      "location_id": "loc_01KJ8P9W2C4D6F8G0H2J4K6M8N",
      "rating": 4,
      "title": null,
      "text": "Great flat white, a bit slow at lunchtime.",
      "author": "Marta G.",
      "language": "en",
      "url": null,
      "created_at": "2026-10-19T12:41:07.000Z",
      "updated_at": "2026-10-19T12:41:07.000Z",
      "reply": null
    }
  ],
  "next_cursor": "MjAyNi0xMC0xOVQxMjo0MTowNy4wMDBafHJldl8wMUtKOFEyTTRUN0hYM1ZCOUNXRDZOUlo1RQ"
}

Paging through every review

Repeat the call with cursor set to the last next_cursor, keeping the same filters, until next_cursor is null.

api.prismareviews.com/v1
let cursor = null;
do {
  const params = new URLSearchParams({ limit: "100" });
  if (cursor) params.set("cursor", cursor);
  const res = await fetch("https://api.prismareviews.com/v1/reviews?" + params, {
    headers: { Authorization: "Bearer " + process.env.PRISMA_API_KEY },
  });
  const page = await res.json();
  for (const review of page.data) console.log(review.id);
  cursor = page.next_cursor;
} while (cursor);

since filters by when the review was written, not when it was edited. To keep a local copy in sync with edits, listen for review.updated webhooks and fetch the review again.

Get a review

GET /v1/reviews/{id}

api.prismareviews.com/v1
curl https://api.prismareviews.com/v1/reviews/rev_01KJ8Q2M4T7HX3VB9CWD6NRZ5E \
  -H "Authorization: Bearer $PRISMA_API_KEY"

Returns 200 with one review object. If no review with that ID exists in your workspace and mode, you get 404 resource_not_found.

Good to know

  • History. On the first sync Prisma imports up to 90 days of history on Spark, 365 days on Beam and everything the platform returns on Spectrum and Aurora. Some platforms return less: the Google Play API only returns reviews from the last 7 days, so the history is what Prisma has stored since you connected.
  • Disconnected locations. When you delete a connection, its reviews stay readable until they are deleted 30 days later.
  • Errors. 422 invalid_request for an unknown platform, a since that is neither a date nor a timestamp with offset, a limit out of range or a bad cursor. The message names the parameter. All codes are on Errors.

Read your reviews from every platform in one call.

Get API key

2 locations free, then plans from €49 a month.

Updated Oct 26, 2026 · Markdown · llms.txt