---
title: "Request a call transcript"
method: POST
path: "/calls/{id}/transcript"
tags: ["transcripts"]
---

# Request a call transcript

`POST /calls/{id}/transcript`

## Request

- Base URL: `https://api.voixcall.com/v1`
- URL: `https://api.voixcall.com/v1/calls/{id}/transcript`
- Auth: one of:
  - OAuth 2 (authorization code, authorization URL `https://api.voixcall.com/oauth/authorize`, token URL `https://api.voixcall.com/oauth/token`, scopes: `transcripts:read`, `calls:place`)
  - HTTP bearer

Asks for a transcript and summary of a recorded call that has none, through the same pipeline as the app's "Transcribe this call" button. It costs money: cost in the response is the transcription rate per started minute of recording, charged when the transcript completes (never on failure). Needs transcripts:read and calls:place, the account setting "Allow connected apps to read call summaries" (else 403 not_enabled) and an Idempotency-Key header. 402 insufficient_credits when the balance cannot cover it, 402 call_too_short for a recording too short to transcribe, 409 transcript_exists when the call already has one, 409 transcription_in_progress while another requested transcript is being made, 409 recording_unavailable when the call has no saved recording. Poll GET /v1/calls/{id}/transcript for the result.

## Path parameters

- `id` string, required: Call id (call_ prefix).

## Headers

- `Idempotency-Key` string, required: Required. A UUID v4 you generate; retrying with the same key and request replays the first response instead of requesting twice.

## Response `202`

Accepted

- TranscriptRequested
  - `action_items` string[], nullable, required: Follow-ups from the call, redacted like summary.
  - `call_id` string, required
  - `completed_at` string, date-time, nullable, required
  - `cost` Money, required
    - `amount` string, required: Decimal string with two decimals.
    - `currency` 'USD', required
  - `duration_seconds` integer, nullable, required: Length of the transcribed recording.
  - `id` string, required
  - `language` string, nullable, required: BCP 47 tag when detected.
  - `livemode` boolean, required
  - `object` 'transcript', required: Always "transcript".
  - `reference_numbers` ReferenceNumber[], nullable, required: Facts worth copying out of the call (case ids, dates, amounts), redacted like summary with label and value checked together. An entry whose value was a sensitive number stays in the list with the value [redacted], so you know one was mentioned; the full value is only in the VoixCall app.
    - `label` string, required
    - `value` string, required
  - `status` 'pending' | 'processing' | 'completed' | 'failed' | 'expired', required: pending and processing: being made. completed: summary available. failed: transcription failed (it can be requested again once it has stopped retrying). expired: removed by the transcript retention period; the summary and utterances are gone. New values may appear.
  - `summary` string, nullable, required: AI summary of the call, redacted: when it holds six or more digits in all, or a word such as code, OTP, PIN, password, card or account, every number in it reads [redacted]; keypad entries always do. null until completed, and once expired.

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `402`: Payment Required
- `403`: Forbidden
- `404`: Not Found
- `409`: Conflict
- `429`: Too Many Requests
- `500`: Internal Server Error
- `503`: Service Unavailable

---

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