---
title: "Get a recap record"
method: GET
path: "/v1/recap/calls/{call_id}"
tags: ["Recap"]
---

# Get a recap record

`GET /v1/recap/calls/{call_id}`

## Request

- Base URL: `https://api.pyai.com`
- URL: `https://api.pyai.com/v1/recap/calls/{call_id}`
- Auth: one of:
  - HTTP bearer
  - API key in header `x-api-key`

## Path parameters

- `call_id` string, required

## Response `200`

Recap detail

- RecapCall
  - `object` string
  - `call_id` string
  - `pack_id` string
  - `status` 'pending' | 'processing' | 'complete' | 'failed'
  - `call_duration_s` number, nullable
  - `created_at` integer
  - `completed_at` integer, nullable
  - `source` string, nullable: Call origin, for example external.
  - `headline` string, nullable: Best available summary headline for list and tracking views.
  - `customer_name` string, nullable
  - `call_direction` 'inbound' | 'outbound', nullable
  - `record` RecapRecord
    - `format` 'recap.record.v1', required
    - `tldr` string, nullable, required: One-line headline. Intentionally short.
    - `summary` string, nullable, required: Detailed notes for the call.
    - `action_items` RecapActionItem[], required
      - `owner` string, nullable
      - `task` string, required
      - `due` string, nullable
      - `evidence` string, nullable: Verbatim transcript evidence when retained.
      - `utterance_index` integer: Zero-based retained transcript turn supporting the action.
    - `decision_evidence` object[]: Decisions with verbatim supporting evidence.
    - `topics` object[]: Extracted topics with source evidence when available.
    - `key_decisions` union[]
      - union
        - string
        - object
    - `moments` object[]: Notable call moments. A timestamp alone is not verified source evidence.
    - `disposition` string, nullable, required
    - `next_steps` string, nullable, required
    - `talk_ratio` RecapTalkRatio, required
      - `agent` number, required
      - `customer` number, required
    - `signals` RecapSignal[], required
      - `kind` string, required: signal, risk, buying, objection, or competitor.
      - `text` string, required
      - `at_s` number, nullable
    - `fields` object, required: Pack-specific extracted fields. Stable v1 keys live at the root, not here.
    - `rep` object: Processor nested surface, passed through for older clients.
    - `manager` object: Processor nested surface, passed through for older clients.
    - `ops` object: Processor nested surface, passed through for older clients.
  - `transcript` RecapTranscript
    - `format` 'utterances.v1', required
    - `utterances` RecapUtterance[], required
      - `speaker_role` 'agent' | 'customer', required
      - `text` string, required
      - `offset_s` number, required
      - `duration_s` number, required
      - `role_source` 'keyword' | 'participant_name' | 'diarization' | 'channel' | 'inferred' | 'corrected': How Recap decided this speaker role: a role keyword, a participant name, Hear diarization (speaker 1 = agent, speaker 2 = customer), audio channel, conversation-role inference, or a customer correction.
      - `role_confidence` number: Confidence in the speaker role, from 0 to 1.
  - `processing` RecapProcessing
    - `stage` string
    - `elapsed_s` number
    - `utterance_count` integer
    - `coverage_gaps` integer
    - `polish_available` boolean
  - `error` string, nullable
  - `crm_write_status` string, nullable

## Other responses

- `402`: Billing gate: org out of prepaid credit, per-key budget hit, or plan quota exhausted (`code: credit_exhausted | key_budget_exceeded | insufficient_quota`). Do not retry; add credit or raise the limit. A brand-new key may see this on its first call until the account is funded.
- `404`: Resource not found (`code: not_found`)

---

[API](https://skmtc.dev/pyai/apis/pyai-api.md) · [All operations](https://skmtc.dev/pyai/apis/pyai-api/llms.txt) · [OpenAPI document](https://skmtc.dev/pyai/apis/pyai-api/revisions/271a1539185b?raw)
