---
title: "List Sales Coach reviews changed since your last poll"
description: "Returns reviews in the key's workspace ordered by last change, oldest first. Poll with the\nreturned `next_cursor` until `has_more` is false, then store it and start from it next time.\nOnly reviews that were analysed at least once appear. Changes younger than two minutes are held\nback until they settle (see `as_of`), so a cursor never skips a change. Upsert by `id`, and read\nthe detail only for items whose `state` is `ready`. Requires a Sales Coach API key.\n"
---

> Documentation Index
> Fetch the complete documentation index at: https://developer.channelautomations.com/llms.txt
> Use this file to discover all available pages before exploring further.

Path: Channel Automation API › Sales Coach API

`GET /api/v1/sales-coach/reviews`

Returns reviews in the key's workspace ordered by last change, oldest first. Poll with the
returned `next_cursor` until `has_more` is false, then store it and start from it next time.
Only reviews that were analysed at least once appear. Changes younger than two minutes are held
back until they settle (see `as_of`), so a cursor never skips a change. Upsert by `id`, and read
the detail only for items whose `state` is `ready`. Requires a Sales Coach API key.

## Authentication

- `ApiKeyAuth`, apiKey, in header, header `X-API-Key`, format `API_KEY`

## Query parameters

- `cursor` (`get/api/v1/sales-coach/reviews.query.cursor`; string, optional) — Opaque value from a previous response's next_cursor. Takes precedence over updated_since.
- `updated_since` (`get/api/v1/sales-coach/reviews.query.updated_since`; string, optional) — First poll only. Returns reviews changed at or after this time. Omit to start from the beginning.
  - format `date-time`
- `phone` (`get/api/v1/sales-coach/reviews.query.phone`; string, optional) — Look up one customer's reviews by phone number, newest first (any format; normalised). A lookup, not the change feed - cannot be combined with cursor or updated_since, returns no deleted reviews, and next_cursor is null.
  - example `"+15551234567"`
- `limit` (`get/api/v1/sales-coach/reviews.query.limit`; integer, optional)
  - min 1; max 100; default `50`

## Code samples

### cURL

```bash
curl --request GET \
  --url https://api.channelautomation.com/api/v1/sales-coach/reviews \
  --header 'X-API-Key: <X-API-Key>'
```

### TypeScript

```typescript
const url = 'https://api.channelautomation.com/api/v1/sales-coach/reviews';
const options = {method: 'GET', headers: {'X-API-Key': '<X-API-Key>'}};

fetch(url, options)
  .then(res => res.json())
  .then(json => console.log(json))
  .catch(err => console.error(err));
```

### Python

```python
import requests

url = "https://api.channelautomation.com/api/v1/sales-coach/reviews"

headers = {"X-API-Key": "<X-API-Key>"}

response = requests.get(url, headers=headers)

print(response.text)
```

## Responses

### 200

A page of reviews

#### Example

```json
{
  "data": [
    {
      "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
      "state": "ready",
      "title": "string",
      "source": "recorded_visit",
      "recorded_at": "2019-08-24T14:15:22Z",
      "duration_seconds": 0,
      "completed_at": "2019-08-24T14:15:22Z",
      "updated_at": "2019-08-24T14:15:22Z",
      "contact": {
        "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
        "name": "string",
        "phone": "+15551234567"
      },
      "rep": {
        "type": "person",
        "name": "string"
      },
      "appointment_id": "21634f0d-2156-4d4b-a142-2e7c783a9212",
      "score": {
        "points": 0,
        "max": 0,
        "percent": 0
      },
      "process": {
        "followed": 0,
        "total": 0,
        "percent": 0
      },
      "analysis_version": 0,
      "consent": {
        "status": "confirmed",
        "method": "rep_confirmation",
        "provenance": "rep_confirmation"
      }
    }
  ],
  "next_cursor": "string",
  "has_more": true,
  "as_of": "2019-08-24T14:15:22Z"
}
```

- `data` (`get/api/v1/sales-coach/reviews.response.200.data`; array<one of>, optional)
  - one of: `SalesCoachReviewItem`, `SalesCoachReviewTombstone`
- `next_cursor` (`get/api/v1/sales-coach/reviews.response.200.next_cursor`; string, optional, nullable) — Store this and send it as `cursor` on the next poll. Null only on a first poll that found nothing and gave no updated_since.
- `has_more` (`get/api/v1/sales-coach/reviews.response.200.has_more`; boolean, optional) — True when another page is ready now. Keep fetching until false.
- `as_of` (`get/api/v1/sales-coach/reviews.response.200.as_of`; string, optional) — Changes after this time (two minutes before the request) are held for a later poll so none is skipped.
  - format `date-time`

### 400

Invalid cursor

### 401

Missing

### 403

The key is not a Sales Coach key

### 429

More than 120 requests a minute for this key. Honour Retry-After.


Source: https://developer.channelautomations.com/api/get-api-v1-sales-coach-reviews/index.md
