List transcriptions
Cursor-paginated list of transcriptions created by this API key's owner, newest first by default (order=desc); pass order=asc for oldest first. Pass cursor from the previous response's next_cursor to page through results — it continues in whichever direction order set. next_cursor is null on the final page. Use view=summary to get lightweight rows (~6 kB each) instead of the legacy bundled shape; use q, created_before, created_after to filter. Pass workspace_id to see a shared workspace's recordings instead of just your own — get workspace_id / project_id values from GET /v1/workspaces.
Request
- Base URL: https://api.quillhub.ai
- URL: https://api.quillhub.ai/v1/transcriptions
- Auth: HTTP bearer
Query parameters
Page size. 1–100, default 20. With the default view=full a page never holds more than 20 rows, whatever you ask for — each row bundles the whole transcript. Keep paging with next_cursor, or use view=summary for larger pages.
Opaque cursor returned as next_cursor by the previous page. Omit for the first page.
Return only transcriptions in this status.
full (default) keeps the legacy bundled rows. summary returns ~6 kB rows with title, summary, key_theses, highlights — what an agent needs to find a specific transcription.
desc (default) — newest first, matching legacy behavior. asc — oldest first (chronological). cursor pages in the same direction as order.
Case-insensitive substring search. Covers title, summary, key_theses and topics by default — narrow it with q_fields. Cap 200 chars.
Which fields q searches. all (default) also scans the summary, key theses and topics stored inside the structured result — thorough, but it reads every candidate recording in full and slows down as a workspace grows. title searches titles only and stays in single-digit milliseconds; prefer it when picking a known recording by name.
ISO 8601 timestamp; exclusive upper bound on created_at.
ISO 8601 timestamp; inclusive lower bound on created_at.
Restrict to this workspace. Includes teammates' recordings that are shared with the workspace (visibility='visible'); your own and — for owners/admins — all workspace recordings. 403 if you are not a member. Omit to see every transcription the caller authored across all workspaces (default behaviour). Get workspace_id / project_id values from GET /v1/workspaces.
Restrict to this project. Pass 0 for the Inbox (workspace recordings without a project). Requires workspace_id.
Pass true to list only the recordings the AI listened to and could not file under any project (ai_layer_status='awaiting_project') — the ones waiting on a human decision. Deliberately narrower than project_id=0: that returns every projectless recording, which also covers Telegram-bot recordings (never routed at all), recordings the AI deliberately skipped, and recordings whose analysis is still running. Requires workspace_id.
Pass true to list desktop-recorded meetings (source='desktop', excluding dictation) in the workspace without a project — EXCEPT the ones a human explicitly kept without one (POST /v1/ai/recordings/:id/keep-unassigned, ai_layer_status='kept') and the ones whose AI analysis hasn't finished yet (pending/extracting). Telegram-bot, web, and API recordings are never included — routing never runs for them, and they stay plain transcripts the user can file by hand. Same predicate as GET /v1/workspaces/:wsId/unassigned-count — see apps/api/src/lib/unassigned-filter.ts. Requires workspace_id.
Response
Cursor-paginated page of transcriptions.
Example response
{
"data": [
{
"id": "trs_01HZXK9P2Q7R8S4T5V6W7X8Y9Z",
"internal_id": 212241,
"kind": "dictation",
"title": "Q3 planning sync",
"status": "queued",
"stage": "transcribing",
"progress": 0.42,
"source": {
"type": "youtube",
"channel": "desktop"
},
"duration_seconds": 1843,
"language": "en",
"points_spent": 28,
"result": {
"segments": [
{
"start": 3.84,
"end": 7.12,
"text": "Welcome back to the channel.",
"speaker": "Speaker 1"
}
]
},
"error_code": "GOT_ARCHIVE",
"workspace_id": 42,
"project_id": 7,
"created_at": "2026-04-23T10:14:22Z"
}
],
"next_cursor": "trs_01HZXK9P2Q7R8S4T5V6W7X8Y9Z"
}Changes
No recorded changes to this operation across all 1 revision of this API.