# List an App Store product's reviews

Returns an App Store app's reviews, with rating, title, text, author and date. Use it to track what users say about an app.

Tool `app-store.reviews` on Apple App Store. Contract version 1, released 2026-10-27.

## Example call

Over REST, send the input in the body. Over MCP, pass the same input to `call_tool`.

cURL:

```bash
curl https://api.voxoria.ai/v1/tools/app-store.reviews/calls \
  -H "Authorization: Bearer $VOXORIA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"input":{"product_id":"570060128","sort":"newest"}}'
```

Python:

```python
import os

import httpx

response = httpx.post(
    "https://api.voxoria.ai/v1/tools/app-store.reviews/calls",
    headers={"Authorization": f"Bearer {os.environ['VOXORIA_API_KEY']}"},
    json={"input": {"product_id": "570060128", "sort": "newest"}},
    timeout=60,
)
print(response.json())
```

TypeScript:

```ts
const response = await fetch("https://api.voxoria.ai/v1/tools/app-store.reviews/calls", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.VOXORIA_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"input": {"product_id": "570060128", "sort": "newest"}}),
});
console.log(await response.json());
```

MCP (`tools/call` params):

```json
{
  "name": "call_tool",
  "arguments": {
    "tool": "app-store.reviews",
    "input": {
      "product_id": "570060128",
      "sort": "newest"
    }
  }
}
```

Both return [the full response](/docs/call-response.md): the call's ID, status and cost, with this tool's result in `output`.

## Input

| Input | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `product_id` | string | Yes |  | Apple's numeric ID of the app, such as "570060128". The product_id of an app-store.search.apps result. Matches `^[0-9]{1,20}$`. |
| `country` | string | No | `us` | Two-letter ISO 3166-1 country code of the App Store storefront. Reviews are per storefront. Case-insensitive. One of the 249 values of the `countries` list: ISO 3166-1 alpha-2 country codes, lowercase. |
| `sort` | string | No |  | Order of the reviews. One of `newest`, `most_helpful`. |
| `page` | integer | No | `1` | Page of reviews. A page past the last has no reviews. At least 1. |

## Output

A successful call returns these blocks in its `output`. A field not marked required can be `null`.

### reviews

A list of rows. Always present, possibly empty.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `review_id` | string | No | Apple's identifier of the review. |
| `rating` | number | Yes | Stars the reviewer gave, from 1 to 5. |
| `title` | string | No | The review's headline. |
| `text` | string | No | What the reviewer wrote. |
| `author_name` | string | No |  |
| `author_id` | string | No | Apple's identifier of the reviewer. |
| `published_at` | string | No | When the review was written, in ISO 8601. |
| `likes` | integer | No | Number of people who marked the review helpful. |
| `app_version` | string | No | Version of the app the review is of, such as "7.141.1". |

## Example output

The `output` of a real call, each list cut to 3 items.

```json
{
  "reviews": [
    {
      "review_id": "14715472669",
      "rating": 3,
      "title": "Super Duolingo",
      "text": "Too many adds it pushes for super Duolingo too much but over all great app love it",
      "author_name": "Wizard_of_Oz:Fan67",
      "author_id": "1289285298",
      "published_at": "2026-10-26",
      "likes": null,
      "app_version": null
    },
    {
      "review_id": "14715448894",
      "rating": 5,
      "title": "C’est Super!",
      "text": "I’ve been relearning French. I like how the lessons build on each other and mix in calls and conversations. I’d recommend it for anyone trying to learn or relearn a language.",
      "author_name": "Landeros. J",
      "author_id": "1435078661",
      "published_at": "2026-10-26",
      "likes": null,
      "app_version": null
    },
    {
      "review_id": "14715444657",
      "rating": 3,
      "title": "The battery thing",
      "text": "I loved dulling for years but now with the battery thing I can’t even get through one lesson even if I am getting them all right please change this because I loved this app but it’s just getting annoying at this point and it says ‘Nice try’ like bro I would have finished if you didn’t make me run out of energy but anyways I love this app but I’m not paying like 95 dollars for super but thanks for reading my opinion and I hope you have a nice day 💖💖💖💖",
      "author_name": "💖🪻🌸🌷🌹🌻🌼💐🪷",
      "author_id": "1672642398",
      "published_at": "2026-10-26",
      "likes": null,
      "app_version": null
    }
  ]
}
```
