Skip to main content
POST
Create an async transcription job

Authorizations

Authorization
string
header
required

Use Authorization: Bearer pyai_live_... (or pyai_test_...).

Headers

Idempotency-Key
string

Opt-in safe retry (JSON body path). Reusing the key with an identical body replays the original 202 response; reusing it with a different body returns 409.

Maximum string length: 255

Body

audio_url
string<uri>
required

HTTPS URL of the audio to transcribe. PyAI fetches the input transiently without writing it to durable input storage. Maximum response body: 512 MiB.

model
string
default:pyai-hear-telephony
channel
boolean
default:false

Dual-channel (stereo) separation. Channel 0 is labelled speaker_1, channel 1 speaker_2; labels are neutral and do not infer agent/customer roles. Do not combine with diarize.

diarize
boolean
default:false

Model-derived speaker separation for mono audio. Labels identify turns within this result, not stable people across separate jobs. Use channel instead for stereo recordings.

numerals
boolean

Tri-state inverse-text normalization for English final transcripts (never interim partials). true renders spoken numbers as digits (phones, currency, dates, ordinals). false keeps those spans in spoken form. Omitted keeps the live engine default: number formatting is ON for finals. Independent of smart_format.

smart_format
boolean
default:false

Opt-in English punctuation and sentence capitalization on final transcripts only. Interim partials are never formatted. May change only case and punctuation; any failure returns the unformatted final. Default false. Independent of numerals. Non-English requests are unchanged.

dictation
boolean
default:false

Opt-in spoken punctuation commands on English final transcripts only: period, comma, new paragraph, and question mark. Separate from smart_format and off by default. Interim partials are never rewritten.

drop_fillers
boolean
default:false

Opt-in stripping of filled pauses (um, uh, umm, uhh, er) on English final transcripts. Off by default. Do not enable on legal or compliance audio by default. Interim partials are never rewritten.

vocabulary
string[]

Optional per-job terms for known names, brands, products, and other distinctive phrases. PyAI trims entries, removes case-insensitive duplicates, and keeps the first spelling and order. Entries shorter than 4 characters, longer than 64 characters, sentence-shaped input, non-string entries, and conservative common words are ignored. At most the first 5 valid terms are used. Invalid entries do not reject the job. When stored vocabulary is enabled for batch, request terms come first and stored suggestions fill any remaining slots. The effective list applies only to this job and does not select transcription language.

Maximum array length: 5
Required string length: 4 - 64
output_formats
enum<string>[]
Available options:
json,
srt,
vtt
webhook_url
string<uri>

HTTPS URL for transcription.job.completed or transcription.job.failed. PyAI POSTs {type, created, data} and signs the exact body in X-PyAI-Signature: t=<unix_seconds>,v1=<hex>, where v1 is HMAC-SHA256 over <t>.<rawBody>.

trace
boolean
default:false

Trace compliance add-on: deterministic PII scan + redaction over the final transcript (SSN, card numbers, CVV-in-context, email, US phone — the pii_v0 entity set). The result carries the redacted transcript plus a trace summary (verdict, PII count). Patterns run on the formatted transcript, so pair with the default numerals (digits) for full effect. Requires the org's Trace entitlement on this surface (else 402); bills one Trace call. Not supported together with diarize/channel.

rule_pack
object

Optional Trace rule pack (only used when trace is true). entities (or redact) narrows the scan to a subset of: ssn, credit_card, cvv, email, us_phone; unknown names are ignored and an empty selection means the full set.

call_id
string

Optional stable call identifier for Recap; defaults to the transcription job id.

pack_id
string

Optional Recap pack id.

Pattern: ^[a-z0-9_]+$
call_direction
enum<string>

Optional Recap call direction.

Available options:
inbound,
outbound
customer_name
string

Optional Recap customer label.

language
enum<string>

Optional Recap summarization language. It does not affect transcription: async jobs transcribe all eight Hear languages (en/es/fr/de/hi/it/pt/nl) and the spoken language is auto-detected per call.

Available options:
en,
fr,
es,
de,
hi
crm_fields
object

Optional CRM metadata delivered durably with the Recap trigger.

Response

Job accepted

job_id
string
required
Example:

"job_aZ09..."

status
enum<string>
required
Available options:
queued,
running,
completed,
failed,
cancelled
created_at
integer
required

Unix ms.

updated_at
integer
required

Unix ms.

result
object

Present on completed jobs (inline). Large results are offloaded to result_url instead.

Example:
result_url
string<uri>

Signed GET URL for an offloaded large result.

error
string

Human-readable normalized failure message on failed jobs. This field is not a stable machine-readable failure code.