Получить расшифровку
GET /transcriptions/{id} — одна расшифровка: плоский текст, сегменты структурой, спикеры, темы и AI-отчёты.
GET /transcriptions/{id}
Возвращает одну расшифровку целиком: саму расшифровку и плоской строкой text, и структурой
segments, плюс AI-отчёты (prompt_results). Query-параметров нет — всё приходит всегда.
id найдите через Список расшифровок.
Path-параметры
| Параметр | Тип | Описание |
|---|---|---|
id | UUID | Идентификатор расшифровки. |
Запрос
curl https://app.memoai.tech/api/v1/developer/transcriptions/3fa85f64-5717-4562-b3fc-2c963f66afa6 \
-H "Authorization: Bearer mk_live_your_key_here"import httpx
tid = "3fa85f64-5717-4562-b3fc-2c963f66afa6"
resp = httpx.get(
f"https://app.memoai.tech/api/v1/developer/transcriptions/{tid}",
headers={"Authorization": "Bearer mk_live_your_key_here"},
)
resp.raise_for_status()
t = resp.json()const tid = "3fa85f64-5717-4562-b3fc-2c963f66afa6";
const res = await fetch(
`https://app.memoai.tech/api/v1/developer/transcriptions/${tid}`,
{ headers: { Authorization: "Bearer mk_live_your_key_here" } },
);
const t = await res.json();Открой discovery call с Acme и покажи, что решили.
Ассистент вызывает memo_get_transcription по UUID.
Ответ
200 OK. Расшифровка приходит сразу в двух видах в одном ответе: text — плоская
строка, чтобы показать человеку, segments — та же речь структурой, чтобы загрузить
в CRM, базу или собственную модель. Просить отдельно ничего не нужно.
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"title": "Acme — discovery call",
"status": "completed",
"summary": "Прошлись по текущему процессу и болям...",
"language": "ru",
"duration_seconds": 1840.5,
"media_type": "audio",
"project": { "id": "8b1f3e22-1c4a-4f7e-9a2b-6d5e8c1a2b3c", "name": "Продажи" },
"author": { "id": "9c2d4e6f-1a2b-4c3d-8e9f-0a1b2c3d4e5f", "email": "ivanov@company.com", "name": "Иван Иванов" },
"speakers": [{ "id": "1", "name": "Алекс" }, { "id": "2", "name": "Джордан" }],
"topics": [{ "title": "Цены" }, { "title": "Онбординг" }],
"text": "[00:00] Алекс: Спасибо, что подключились...\n[00:42] Джордан: Конечно...",
"segments": [
{
"id": 1,
"start": 0.0,
"end": 4.82,
"speaker_id": "1",
"speaker_name": "Алекс",
"text": "Спасибо, что подключились..."
},
{
"id": 2,
"start": 42.1,
"end": 45.6,
"speaker_id": "2",
"speaker_name": "Джордан",
"text": "Конечно..."
}
],
"prompt_results": [
{
"id": "8d2f6a1e-0c4b-4f0e-9d3a-6b1c2e7f5a90",
"slug": "followup-email",
"name": "План следующих шагов",
"status": "completed",
"error_code": null,
"text": "- Отправить прайс до пятницы\n- Назначить технический follow-up",
"created_at": "2026-05-20T09:31:00Z",
"completed_at": "2026-05-20T09:31:40Z"
}
],
"created_at": "2026-05-20T09:14:00Z",
"updated_at": "2026-05-20T09:31:00Z"
}Сама расшифровка
| Поле | Тип | Описание |
|---|---|---|
text | string | null | Вся расшифровка одной строкой, с таймкодами и подписями спикеров. null, пока status не completed. |
segments[] | array | Та же речь, по записи на реплику. Пусто, пока status не completed. |
segments[].id | integer | Номер реплики, начиная с 1. Для одной расшифровки не меняется. |
segments[].start / .end | float | null | Секунды от начала записи. |
segments[].speaker_id | string | null | Идентификатор диаризации, совпадает с speakers[].id. Переживает переименования — группируйте по нему. null, если запись без диаризации. |
segments[].speaker_name | string | null | Имя, которое видно сейчас: ручное переименование поверх выданного AI. null, если спикера никто не называл — подпишите его сами по speaker_id, на своём языке. |
segments[].text | string | Что сказали — без таймкода и подписи спикера. |
Стройте интеграцию на segments. text — то же самое, но собранное для чтения человеком:
его формат мы не гарантируем, а подписи спикеров внутри строки меняются, стоит кому-то
переименовать спикера в приложении.
Остальные поля
Всё то же, что в элементе списка, плюс:
| Поле | Тип | Описание |
|---|---|---|
status | string | queued, processing, completed, failed или insufficient_balance — см. жизненный цикл статусов. |
error_code | string | null | Машиночитаемая причина при status: failed. |
required_minutes | float | null | Сколько минут нужно на этот файл. Заполняется только при status: insufficient_balance. |
available_minutes | float | null | Сколько минут осталось на воркспейсе. Заполняется только при status: insufficient_balance — разница с required_minutes и есть сумма к пополнению. |
speakers[] | array | Все найденные в записи участники, в виде { id, name }. |
external_id | string | null | Идентификатор, который вы прислали в X-External-Id при загрузке. null, если расшифровка попала к нам не через API. См. Свои идентификаторы. |
metadata | object | null | Объект, присланный в X-Metadata при загрузке, возвращается как есть. |
author | object | Участник workspace, которому принадлежит расшифровка, как { id, email, name }. Для API-загрузок — присланный X-Author или создатель ключа. id — UUID, его можно передавать как X-Author: user:<id>. См. Назначение автора. |
prompt_results[] | array | AI-отчеты по этой расшифровке — сделанные в приложении, через ai_metadata=true или заказанные через API. Отчеты из ?reports= появляются здесь сразу со своим status; сама расшифровка становится completed, как только готов текст, поэтому опрашивайте, пока нужные отчеты не станут терминальными. См. AI-отчеты. |
prompt_results[].id | UUID | Идентификатор отчета. |
prompt_results[].slug | string | null | Идентификатор шаблона отчета. null у старых отчетов без шаблона. |
prompt_results[].name | string | null | Название отчета, например План следующих шагов, Саммари. |
prompt_results[].status | string | queued → processing → completed / failed. |
prompt_results[].error_code | string | null | Только у failed. |
prompt_results[].text | string | null | Содержимое отчета, прозой. Есть только у completed. |
prompt_results[].created_at | datetime | Когда отчет запрошен. |
prompt_results[].completed_at | datetime | null | Когда отчет сгенерирован. |
Нужно то же самое файлом? Экспорт расшифровки
с format=json возвращает ровно это тело.
Ошибки
| Статус | Когда |
|---|---|
401 | Нет/неверный ключ или ключ передан в URL. |
403 | План без доступа к API. |
403 | transcription_locked — расшифровка является закрытым превью. На тарифе с доступом к API возникать не должна; если возникла, запись через API не читается. |
404 | Нет расшифровки с таким id в этом workspace. |
429 | Превышен rate limit. |
404 также возвращается, если расшифровка существует, но принадлежит другому workspace — наличие
ресурса между workspace не раскрывается. См. Ошибки.