---
title: "Get an Omni call record"
method: GET
path: "/v1/omni/calls/{call_id}"
tags: ["Omni"]
---

# Get an Omni call record

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

## Request

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

Full record for one Omni session, addressed by the stable opaque PyAI `call_id` returned by the list: transcript (inline or via `transcript_url`), recording availability, and `summary` when generated. Recording bytes are retrieved from the dedicated recording sub-resource. Requires `omni:read`.

## Path parameters

- `call_id` string, required: Stable opaque PyAI-owned call identifier. Use it unchanged across every Omni call sub-resource.

## Response `200`

Omni call detail

- OmniCall
  - `object` string
  - `call_id` string: Stable opaque PyAI-owned call identifier. Use it unchanged across every Omni call sub-resource.
  - `session_label` string, nullable: The opaque tag passed on the connect URL, if any.
  - `external_id` string, nullable: Customer-supplied correlation id echoed from the call's `meta` (the engine carries `configure.meta` into the ingest). Use it to join a call to your own record; null when none was set.
  - `status` 'completed' | 'failed'
  - `duration_s` number, nullable
  - `language` 'en' | 'fr' | 'es' | 'de' | 'hi' | 'zh' | 'it' | 'pt' | 'ja' | 'ko': Language the session was served in. Call history also retains languages used in private qualification; record recognition does not enable those languages for public agent configuration. Older records render the default, `en`.
  - `voice_tier` 'standard' | 'natural': Voice tier served for the session. English `en1` sessions report `natural` while that tier is active; Standard voices report `standard`. Both are included in the Omni base rate with no voice-tier add-on. Inspect the configured acknowledgement and call record rather than inferring the served tier from the requested alias.
  - `has_recording` boolean
  - `has_summary` boolean
  - `started_at` integer, nullable: Unix ms when the session started.
  - `created_at` integer: Unix ms when the record was written.
  - `transcript` object, nullable: Inline transcript document; omitted in favor of transcript_url when offloaded.
  - `transcript_url` string: Signed URL to the transcript when it was offloaded instead of inlined.
  - `summary` object: Structured post-call summary, when generated.
  - `recording_result` object: Provider-neutral recording outcome. Internal source and storage details are never returned.
    - `status` 'success' | 'intentionally_disabled' | 'failed', required
    - `reason` 'recording_not_requested' | 'recording_not_finalized'
  - `error` 'call_failed': Normalized failure reason, present when status is failed.

## Other responses

- `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)
