> ## Documentation Index
> Fetch the complete documentation index at: https://docs.shilo.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Retrieve a Call Transcript — GET /calls/{identifier}

> Get a sanitized call transcript with AI-resolved speaker names. Returns 409 until analysis is complete. Not supported for Follow Up Boss accounts.

This endpoint returns the full transcript of a call with AI-resolved speaker labels applied. Shilo identifies each segment of the conversation and maps it to either the agent or the contact by name, giving you a clean, readable record of who said what. Because speaker resolution depends on the AI analysis pipeline completing successfully, the transcript is not available until `progress` on the analysis endpoint reaches `100`. Requesting the transcript before that point returns a `409 Conflict` response.

<Warning>
  This endpoint is **not available** for organizations connected to Follow Up Boss. Requests from Follow Up Boss-integrated accounts will receive a `403 Forbidden` response regardless of analysis status.
</Warning>

## Endpoint

```text theme={null}
GET https://api.shilo.ai/api/v1/calls/{identifier}/transcript
```

## Path Parameter

<ParamField path="identifier" type="string" required>
  Identifies the call whose transcript you want to retrieve. The same three formats accepted by `GET /calls/{identifier}` are supported here:

  | Format                           | Example                                              |
  | -------------------------------- | ---------------------------------------------------- |
  | `{uuid}`                         | `ee6f2136-b94a-4438-9335-3acf5b2a0d31`               |
  | `call_event_id:{uuid}`           | `call_event_id:ee6f2136-b94a-4438-9335-3acf5b2a0d31` |
  | `external_recording_id:{string}` | `external_recording_id:rec-20300924-001`             |
</ParamField>

## Response

A successful request returns HTTP `200` with a transcript object containing speaker-labeled segments. The exact structure of the transcript JSON varies by AI model configuration, but each segment includes the speaker's resolved name and the text they spoke.

<Note>
  Before requesting the transcript, poll `GET /calls/{identifier}/analysis` until the `progress` field equals `100`. Requesting the transcript while analysis is still running will return a `409 Conflict` error. Speaker resolution must be fully complete before transcripts are served.
</Note>

### Example Response

```json theme={null}
{
  "call_id": "ee6f2136-b94a-4438-9335-3acf5b2a0d31",
  "segments": [
    {
      "speaker": "Jordan Smith",
      "start_time": 0.0,
      "end_time": 5.4,
      "text": "Hi Alex, this is Jordan calling from Premier Realty. How are you doing today?"
    },
    {
      "speaker": "Alex Johnson",
      "start_time": 5.6,
      "end_time": 10.2,
      "text": "Hi Jordan, I'm doing well, thanks for calling."
    },
    {
      "speaker": "Jordan Smith",
      "start_time": 10.5,
      "end_time": 18.9,
      "text": "Great to hear it. I wanted to follow up on the properties you were looking at in the Eastside neighborhood. Did you get a chance to review the ones I sent over?"
    }
  ]
}
```

## Example Request

```bash theme={null}
curl --request GET \
  --url "https://api.shilo.ai/api/v1/calls/call_event_id:ee6f2136-b94a-4438-9335-3acf5b2a0d31/transcript" \
  --header "x-api-key: YOUR_API_KEY"
```

## Error Responses

**400 Bad Request** — The identifier format is invalid or cannot be parsed.

```json theme={null}
{
  "statusCode": 400,
  "message": "Invalid identifier format"
}
```

**403 Forbidden** — Your organization's CRM integration does not support transcript access. This error is returned for all Follow Up Boss-connected accounts.

```json theme={null}
{
  "statusCode": 403,
  "message": "Transcript access is not supported for this integration"
}
```

**404 Not Found** — No call matching the provided identifier exists in your organization.

```json theme={null}
{
  "statusCode": 404,
  "message": "Call not found"
}
```

**409 Conflict** — The transcript is not yet available because AI analysis and speaker resolution have not completed. Poll `GET /calls/{identifier}/analysis` until `progress` equals `100`, then retry this request.

```json theme={null}
{
  "statusCode": 409,
  "message": "Transcript is not ready. Analysis must complete before the transcript can be served."
}
```
