# List product reviews

Returns one page of a product's reviews — title, rating, dates, the reviewer's role and company size, and the three answers G2 collects, both merged and split apart. Requires `slug`. Ten a page; walk with `has_more` and deduplicate on review `id`.

- Platform: G2
- Request: `GET https://api.toolzerhub.com/v1/g2/reviews`
- Auth: `x-api-key` header
- Cost: 1 credit per successful request. Failed requests are not billed.
- Page: https://docs.toolzerhub.com/reference/g2/get-g2-reviews

| Parameter | In | Required | Type | Description |
| --- | --- | --- | --- | --- |
| `slug` | query | yes | string | A G2 product slug, e.g. pipedrive, or the URL containing one. Every /v1/g2/category row publishes exactly this as slug, which is how the two endpoints compose — G2 slugs run to agentforce-sales-formerly-salesforce-sales-cloud and are not derivable from a product name. |
| `page` | query | no | integer | 1-based. Ten reviews a page, and pages do not overlap — measured, pages 1, 2 and 3 of one product shared no review ids at all. Walk with has_more/next_page rather than with a page count; G2 states none. Default: 1. |
| `order` | query | no | enum: g2_default, most_recent, most_helpful, highest_rated, lowest_rated | G2's own review ordering. g2_default is the relevance order the site serves with no parameter at all; most_recent is the one a walk usually wants, because relevance ordering is not a stable sequence to page through. Default: g2_default. |

## Example request

```bash
curl "https://api.toolzerhub.com/v1/g2/reviews?slug=<slug>" \
  -H "x-api-key: $TOOLZERHUB_API_KEY"
```

Success responses are wrapped as `{ "data": ... }`. Errors return `{ "error": { "code", "status", "message", "retryable", "details" } }`. See https://docs.toolzerhub.com/docs/responses-and-errors.
