---
title: "Get one Sales Coach review with its summary, scorecard, coaching and transcript"
description: "Returns a finished review. Call it only for list items whose state is `ready`. A 404 or 409 is\nnot a failure of your workflow: the change that caused it appears again in a later list poll.\nRequires 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/{id}`

Returns a finished review. Call it only for list items whose state is `ready`. A 404 or 409 is
not a failure of your workflow: the change that caused it appears again in a later list poll.
Requires a Sales Coach API key.

## Authentication

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

## Path parameters

- `id` (`get/api/v1/sales-coach/reviews/id.path.id`; string, required)
  - format `uuid`

## Query parameters

- `include` (`get/api/v1/sales-coach/reviews/id.query.include`; string, optional) — Comma-separated sections to return. Defaults to all four.
  - example `"summary,scorecard,coaching,transcript"`

## Code samples

### cURL

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

### TypeScript

```typescript
const url = 'https://api.channelautomation.com/api/v1/sales-coach/reviews/<id>';
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/<id>"

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

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

print(response.text)
```

## Responses

### 200

The review

#### 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"
    },
    "summary": {
      "summary": "string",
      "outcome": "string",
      "customer_sentiment": "string",
      "topics": [
        "string"
      ],
      "next_steps": [
        "string"
      ],
      "commitments": [
        "string"
      ],
      "customer_needs": [
        "string"
      ],
      "products_discussed": [
        "string"
      ],
      "budget": "string",
      "timeline": "string",
      "objections": [
        {
          "text": "string",
          "category": "string",
          "response": "string",
          "at_seconds": 0
        }
      ],
      "competitors": [
        {
          "name": "string",
          "context": "string",
          "sentiment": "string",
          "comparison": "string",
          "at_seconds": 0
        }
      ],
      "buying_intent": {
        "level": "string",
        "reasoning": "string"
      },
      "deal_probability_estimate": 0
    },
    "scorecard": {
      "scorecard_version": 0,
      "points": 0,
      "max": 0,
      "percent": 0,
      "sections": [
        {
          "key": "string",
          "label": "string",
          "score": 0,
          "max": 0,
          "reason": "string",
          "at_seconds": 0
        }
      ],
      "process": {
        "followed": 0,
        "total": 0,
        "percent": 0,
        "steps": [
          {
            "key": "string",
            "label": "string",
            "verdict": "done",
            "reason": "string",
            "at_seconds": 0
          }
        ]
      }
    },
    "coaching": [
      {
        "title": "string",
        "detail": "string",
        "at_seconds": 0
      }
    ],
    "transcript": [
      {
        "index": 0,
        "at_seconds": 0,
        "end_seconds": 0,
        "speaker": "agent",
        "text": "string"
      }
    ]
  }
}
```

- `data` (`get/api/v1/sales-coach/reviews/id.response.200.data`; object, optional)
  - `id` (`get/api/v1/sales-coach/reviews/id.response.200.data.id`; string, optional)
    - format `uuid`
  - `state` (`get/api/v1/sales-coach/reviews/id.response.200.data.state`; string, optional) — `ready`: finished; read the detail. `processing`: being re-analysed; keep your previous copy. `unavailable`: the last analysis failed; flag or withdraw your previous copy.
    - one of `"ready"`, `"processing"`, `"unavailable"`
  - `title` (`get/api/v1/sales-coach/reviews/id.response.200.data.title`; string, optional, nullable)
  - `source` (`get/api/v1/sales-coach/reviews/id.response.200.data.source`; string, optional)
    - one of `"recorded_visit"`, `"uploaded_file"`, `"phone_call"`
  - `recorded_at` (`get/api/v1/sales-coach/reviews/id.response.200.data.recorded_at`; string, optional)
    - format `date-time`
  - `duration_seconds` (`get/api/v1/sales-coach/reviews/id.response.200.data.duration_seconds`; integer, optional, nullable)
  - `completed_at` (`get/api/v1/sales-coach/reviews/id.response.200.data.completed_at`; string, optional) — When the review was first analysed
    - format `date-time`
  - `updated_at` (`get/api/v1/sales-coach/reviews/id.response.200.data.updated_at`; string, optional)
    - format `date-time`
  - `contact` (`get/api/v1/sales-coach/reviews/id.response.200.data.contact`; object, optional, nullable)
    - `id` (`get/api/v1/sales-coach/reviews/id.response.200.data.contact.id`; string, optional)
      - format `uuid`
    - `name` (`get/api/v1/sales-coach/reviews/id.response.200.data.contact.name`; string, optional, nullable)
    - `phone` (`get/api/v1/sales-coach/reviews/id.response.200.data.contact.phone`; string, optional, nullable)
      - example `"+15551234567"`
  - `rep` (`get/api/v1/sales-coach/reviews/id.response.200.data.rep`; object, optional, nullable)
    - `type` (`get/api/v1/sales-coach/reviews/id.response.200.data.rep.type`; string, optional)
      - one of `"person"`, `"ai_assistant"`
    - `name` (`get/api/v1/sales-coach/reviews/id.response.200.data.rep.name`; string, optional)
  - `appointment_id` (`get/api/v1/sales-coach/reviews/id.response.200.data.appointment_id`; string, optional, nullable)
    - format `uuid`
  - `score` (`get/api/v1/sales-coach/reviews/id.response.200.data.score`; object, optional, nullable)
    - `points` (`get/api/v1/sales-coach/reviews/id.response.200.data.score.points`; number, optional)
    - `max` (`get/api/v1/sales-coach/reviews/id.response.200.data.score.max`; number, optional)
    - `percent` (`get/api/v1/sales-coach/reviews/id.response.200.data.score.percent`; integer, optional, nullable)
  - `process` (`get/api/v1/sales-coach/reviews/id.response.200.data.process`; object, optional, nullable) — How closely the rep followed the published sales steps. A partly followed step counts half.
    - `followed` (`get/api/v1/sales-coach/reviews/id.response.200.data.process.followed`; number, optional)
    - `total` (`get/api/v1/sales-coach/reviews/id.response.200.data.process.total`; integer, optional)
    - `percent` (`get/api/v1/sales-coach/reviews/id.response.200.data.process.percent`; integer, optional, nullable)
  - `analysis_version` (`get/api/v1/sales-coach/reviews/id.response.200.data.analysis_version`; integer, optional, nullable) — Increases when the review is re-analysed. Re-read the detail when it changes.
  - `consent` (`get/api/v1/sales-coach/reviews/id.response.200.data.consent`; object, optional)
    - `status` (`get/api/v1/sales-coach/reviews/id.response.200.data.consent.status`; string, optional)
      - example `"confirmed"`
    - `method` (`get/api/v1/sales-coach/reviews/id.response.200.data.consent.method`; string, optional, nullable)
      - example `"rep_confirmation"`
    - `provenance` (`get/api/v1/sales-coach/reviews/id.response.200.data.consent.provenance`; string, optional) — `existing_platform_recording` for phone calls imported from call recordings
      - example `"rep_confirmation"`
  - `summary` (`get/api/v1/sales-coach/reviews/id.response.200.data.summary`; object, optional)
    - `summary` (`get/api/v1/sales-coach/reviews/id.response.200.data.summary.summary`; string, optional, nullable)
    - `outcome` (`get/api/v1/sales-coach/reviews/id.response.200.data.summary.outcome`; string, optional, nullable)
    - `customer_sentiment` (`get/api/v1/sales-coach/reviews/id.response.200.data.summary.customer_sentiment`; string, optional, nullable)
    - `topics` (`get/api/v1/sales-coach/reviews/id.response.200.data.summary.topics`; array<string>, optional)
    - `next_steps` (`get/api/v1/sales-coach/reviews/id.response.200.data.summary.next_steps`; array<string>, optional)
    - `commitments` (`get/api/v1/sales-coach/reviews/id.response.200.data.summary.commitments`; array<string>, optional)
    - `customer_needs` (`get/api/v1/sales-coach/reviews/id.response.200.data.summary.customer_needs`; array<string>, optional)
    - `products_discussed` (`get/api/v1/sales-coach/reviews/id.response.200.data.summary.products_discussed`; array<string>, optional)
    - `budget` (`get/api/v1/sales-coach/reviews/id.response.200.data.summary.budget`; string, optional, nullable)
    - `timeline` (`get/api/v1/sales-coach/reviews/id.response.200.data.summary.timeline`; string, optional, nullable)
    - `objections` (`get/api/v1/sales-coach/reviews/id.response.200.data.summary.objections`; array<object>, optional)
      - `text` (`get/api/v1/sales-coach/reviews/id.response.200.data.summary.objections.text`; string, optional)
      - `category` (`get/api/v1/sales-coach/reviews/id.response.200.data.summary.objections.category`; string, optional, nullable)
      - `response` (`get/api/v1/sales-coach/reviews/id.response.200.data.summary.objections.response`; string, optional, nullable)
      - `at_seconds` (`get/api/v1/sales-coach/reviews/id.response.200.data.summary.objections.at_seconds`; number, optional, nullable)
    - `competitors` (`get/api/v1/sales-coach/reviews/id.response.200.data.summary.competitors`; array<object>, optional)
      - `name` (`get/api/v1/sales-coach/reviews/id.response.200.data.summary.competitors.name`; string, optional)
      - `context` (`get/api/v1/sales-coach/reviews/id.response.200.data.summary.competitors.context`; string, optional, nullable)
      - `sentiment` (`get/api/v1/sales-coach/reviews/id.response.200.data.summary.competitors.sentiment`; string, optional, nullable)
      - `comparison` (`get/api/v1/sales-coach/reviews/id.response.200.data.summary.competitors.comparison`; string, optional, nullable)
      - `at_seconds` (`get/api/v1/sales-coach/reviews/id.response.200.data.summary.competitors.at_seconds`; number, optional, nullable)
    - `buying_intent` (`get/api/v1/sales-coach/reviews/id.response.200.data.summary.buying_intent`; object, optional, nullable)
      - `level` (`get/api/v1/sales-coach/reviews/id.response.200.data.summary.buying_intent.level`; string, optional)
      - `reasoning` (`get/api/v1/sales-coach/reviews/id.response.200.data.summary.buying_intent.reasoning`; string, optional, nullable)
    - `deal_probability_estimate` (`get/api/v1/sales-coach/reviews/id.response.200.data.summary.deal_probability_estimate`; number, optional, nullable) — An AI estimate from this conversation alone (0-100). Not a forecast.
  - `scorecard` (`get/api/v1/sales-coach/reviews/id.response.200.data.scorecard`; object, optional, nullable)
    - `scorecard_version` (`get/api/v1/sales-coach/reviews/id.response.200.data.scorecard.scorecard_version`; integer, optional, nullable)
    - `points` (`get/api/v1/sales-coach/reviews/id.response.200.data.scorecard.points`; number, optional)
    - `max` (`get/api/v1/sales-coach/reviews/id.response.200.data.scorecard.max`; number, optional)
    - `percent` (`get/api/v1/sales-coach/reviews/id.response.200.data.scorecard.percent`; integer, optional, nullable)
    - `sections` (`get/api/v1/sales-coach/reviews/id.response.200.data.scorecard.sections`; array<object>, optional)
      - `key` (`get/api/v1/sales-coach/reviews/id.response.200.data.scorecard.sections.key`; string, optional)
      - `label` (`get/api/v1/sales-coach/reviews/id.response.200.data.scorecard.sections.label`; string, optional)
      - `score` (`get/api/v1/sales-coach/reviews/id.response.200.data.scorecard.sections.score`; number, optional)
      - `max` (`get/api/v1/sales-coach/reviews/id.response.200.data.scorecard.sections.max`; number, optional)
      - `reason` (`get/api/v1/sales-coach/reviews/id.response.200.data.scorecard.sections.reason`; string, optional, nullable)
      - `at_seconds` (`get/api/v1/sales-coach/reviews/id.response.200.data.scorecard.sections.at_seconds`; number, optional, nullable)
    - `process` (`get/api/v1/sales-coach/reviews/id.response.200.data.scorecard.process`; object, optional, nullable) — How closely the rep followed the published sales steps. A partly followed step counts half.
      - `followed` (`get/api/v1/sales-coach/reviews/id.response.200.data.scorecard.process.followed`; number, optional)
      - `total` (`get/api/v1/sales-coach/reviews/id.response.200.data.scorecard.process.total`; integer, optional)
      - `percent` (`get/api/v1/sales-coach/reviews/id.response.200.data.scorecard.process.percent`; integer, optional, nullable)
      - `steps` (`get/api/v1/sales-coach/reviews/id.response.200.data.scorecard.process.steps`; array<object>, optional)
        - `key` (`get/api/v1/sales-coach/reviews/id.response.200.data.scorecard.process.steps.key`; string, optional)
        - `label` (`get/api/v1/sales-coach/reviews/id.response.200.data.scorecard.process.steps.label`; string, optional)
        - `verdict` (`get/api/v1/sales-coach/reviews/id.response.200.data.scorecard.process.steps.verdict`; string, optional)
          - one of `"done"`, `"partly"`, `"skipped"`
        - `reason` (`get/api/v1/sales-coach/reviews/id.response.200.data.scorecard.process.steps.reason`; string, optional, nullable)
        - `at_seconds` (`get/api/v1/sales-coach/reviews/id.response.200.data.scorecard.process.steps.at_seconds`; number, optional, nullable)
  - `coaching` (`get/api/v1/sales-coach/reviews/id.response.200.data.coaching`; array<object>, optional)
    - `title` (`get/api/v1/sales-coach/reviews/id.response.200.data.coaching.title`; string, optional, nullable)
    - `detail` (`get/api/v1/sales-coach/reviews/id.response.200.data.coaching.detail`; string, optional, nullable)
    - `at_seconds` (`get/api/v1/sales-coach/reviews/id.response.200.data.coaching.at_seconds`; number, optional, nullable)
  - `transcript` (`get/api/v1/sales-coach/reviews/id.response.200.data.transcript`; array<object>, optional) — Every segment, in order. Times are null for some imported phone calls.
    - `index` (`get/api/v1/sales-coach/reviews/id.response.200.data.transcript.index`; integer, optional)
    - `at_seconds` (`get/api/v1/sales-coach/reviews/id.response.200.data.transcript.at_seconds`; number, optional, nullable)
    - `end_seconds` (`get/api/v1/sales-coach/reviews/id.response.200.data.transcript.end_seconds`; number, optional, nullable)
    - `speaker` (`get/api/v1/sales-coach/reviews/id.response.200.data.transcript.speaker`; string, optional)
      - one of `"agent"`, `"customer"`, `"other"`, `"unknown"`
    - `text` (`get/api/v1/sales-coach/reviews/id.response.200.data.transcript.text`; string, optional)

### 400

include names an unknown section

### 401

Missing

### 403

The key cannot read Sales Coach reviews

### 404

Not found in this workspace

### 409

`not_ready`: the review exists but is not finished (for example it is being re-analysed).
`changed`: it changed while being read; retry after `retry_after_seconds`.

### 413

The transcript has more than 10

### 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-id/index.md
