Skip to main content

Just want working code?

Stop reading and copy the Transcripts coding agent reference into your agent. It is self-contained, including the polling and correction contracts.

Arcmira serves premium transcripts: diarized, speaker-identified, entity-annotated, community-correctable, and it can generate one on demand for any public YouTube video up to 12 hours. Every segment is matched against the entity graph, so people, organizations, products, and topics are annotated inline with character-level spans.

Key capabilities

Pricing

Transcript access is priced in rows and 15-minute blocks, from the same row pool as the rest of the API:
  • 75 rows per 15-minute block of video, rounded up, minimum one block. A 62-minute podcast is 5 blocks = 375 rows; a 9-minute clip is 75 rows.
  • Same price whether a premium transcript already exists or Arcmira generates it fresh.
  • Unlocks are permanent and per-account. Re-reads are free. Unlock before the premium transcript exists and the later generation costs nothing extra.
  • If a transcription job fails permanently, rows are refunded automatically and the unlock is revoked (when that submission charged the rows; the status reads refunded).
  • Corrections are always free (0 rows).
Every transcript response includes the exact quote in meta.quote ({ "quarters": 5, "rows": 375 }) whenever the video duration is known.

Quickstart

1

Read (and see where you stand)

Switch on the access field; the table below tells you the next action for each state.
2

Unlock or generate

A premium transcript exists (locked): purchase in the same request with ?unlock=true; the quoted rows are debited and the full transcript comes back in one round trip. No premium transcript yet (premium_pending / not_transcribed): submit it.
Rows are debited up front and the permanent unlock is granted at submit time.
3

Poll politely

While in flight, GET /v1/transcriptions/{id} carries a Retry-After header plus etaSeconds and nextPollSeconds. Sleep on the header and re-poll; terminal statuses drop it. On complete, the transcript GET just works: you were unlocked at submission.

Choosing well

The access state machine. Every read tells you exactly where you stand; each state has one right next action: Buy vs generate. ?unlock=true purchases access to an existing premium transcript. POST /v1/transcriptions purchases generation (and short-circuits to complete if a premium transcript already exists, so it is always safe to call; you are never double-charged, and quote.rows in the response shows what was actually debited). Cost control. Duration drives price. Quote first (meta.quote on any read costs nothing), check /v1/meusage.rows_remaining, then unlock. 402 quota_exceeded responses include the quote.

Response shape

  • segments: transcript lines with start/end in seconds and a diarization speaker id.
  • speakers: the diarization map; entries gain an entity once identified as a person.
  • annotations: entity mentions as character spans inside segment text.
  • meta.revision: an opaque id for the served transcript plus its approved-correction state. Save it: corrections echo it back, and a changed revision means the transcript changed underneath you.
  • When unlocked, your own pending corrections ride back too (edits[], speakerIdentifications[], speakerEdits[], entityTags[]).

Corrections

Transcripts are community-correctable, free, and optimistic for you, pending review for everyone else: your pending corrections appear on your own transcript reads immediately; once a reviewer approves them they apply for all callers and bump meta.revision. Five kinds mirror the arcmira.com /watch editor; the sixth, segment_rewrite, is the API-first structural primitive.
Anchored kinds (line_edit, speaker_reassign, entity_tag, segment_rewrite) prove they were made against the transcript you actually saw: echo meta.revision, and send anchor.contentHash, a djb2 hash (base-36) of the covered segment text. A 409 means the transcript changed underneath you (re-anchor); a 412 with expectedSeq means your sequence counter is behind (rebase and resend). Full payload schemas for all six kinds, the hash function, and the queue-client error contract live in the coding agent reference. Withdraw anything you regret while it is still pending; each submission returns the row id for the matching DELETE.
Structural rewrites: segment_rewrite replaces any run of segments with new ones, merges, splits, or deletes them outright, and repairs the timestamps automatically. Full payload in the coding agent reference.

Community Review

Corrections are Community Review on the transcript surface: same pending-review model, same 0-row pricing, same attribution and reputation. For anything that is not a transcript-content fix (a wrong video, a stale channel, a search miss that led you here), use the matching type on POST /v1/feedback.

Next