Memo AIDocs
API Reference

Получить расшифровку

GET /transcriptions/{id} — одна расшифровка: плоский текст, сегменты структурой, спикеры, темы и AI-отчёты.

GET /transcriptions/{id}

Возвращает одну расшифровку целиком: саму расшифровку и плоской строкой text, и структурой segments, плюс AI-отчёты (prompt_results). Query-параметров нет — всё приходит всегда. id найдите через Список расшифровок.

Path-параметры

ПараметрТипОписание
idUUIDИдентификатор расшифровки.

Запрос

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"
}

Сама расшифровка

ПолеТипОписание
textstring | nullВся расшифровка одной строкой, с таймкодами и подписями спикеров. null, пока status не completed.
segments[]arrayТа же речь, по записи на реплику. Пусто, пока status не completed.
segments[].idintegerНомер реплики, начиная с 1. Для одной расшифровки не меняется.
segments[].start / .endfloat | nullСекунды от начала записи.
segments[].speaker_idstring | nullИдентификатор диаризации, совпадает с speakers[].id. Переживает переименования — группируйте по нему. null, если запись без диаризации.
segments[].speaker_namestring | nullИмя, которое видно сейчас: ручное переименование поверх выданного AI. null, если спикера никто не называл — подпишите его сами по speaker_id, на своём языке.
segments[].textstringЧто сказали — без таймкода и подписи спикера.

Стройте интеграцию на segments. text — то же самое, но собранное для чтения человеком: его формат мы не гарантируем, а подписи спикеров внутри строки меняются, стоит кому-то переименовать спикера в приложении.

Остальные поля

Всё то же, что в элементе списка, плюс:

ПолеТипОписание
statusstringqueued, processing, completed, failed или insufficient_balance — см. жизненный цикл статусов.
error_codestring | nullМашиночитаемая причина при status: failed.
required_minutesfloat | nullСколько минут нужно на этот файл. Заполняется только при status: insufficient_balance.
available_minutesfloat | nullСколько минут осталось на воркспейсе. Заполняется только при status: insufficient_balance — разница с required_minutes и есть сумма к пополнению.
speakers[]arrayВсе найденные в записи участники, в виде { id, name }.
external_idstring | nullИдентификатор, который вы прислали в X-External-Id при загрузке. null, если расшифровка попала к нам не через API. См. Свои идентификаторы.
metadataobject | nullОбъект, присланный в X-Metadata при загрузке, возвращается как есть.
authorobjectУчастник workspace, которому принадлежит расшифровка, как { id, email, name }. Для API-загрузок — присланный X-Author или создатель ключа. id — UUID, его можно передавать как X-Author: user:<id>. См. Назначение автора.
prompt_results[]arrayAI-отчеты по этой расшифровке — сделанные в приложении, через ai_metadata=true или заказанные через API. Отчеты из ?reports= появляются здесь сразу со своим status; сама расшифровка становится completed, как только готов текст, поэтому опрашивайте, пока нужные отчеты не станут терминальными. См. AI-отчеты.
prompt_results[].idUUIDИдентификатор отчета.
prompt_results[].slugstring | nullИдентификатор шаблона отчета. null у старых отчетов без шаблона.
prompt_results[].namestring | nullНазвание отчета, например План следующих шагов, Саммари.
prompt_results[].statusstringqueued → processing → completed / failed.
prompt_results[].error_codestring | nullТолько у failed.
prompt_results[].textstring | nullСодержимое отчета, прозой. Есть только у completed.
prompt_results[].created_atdatetimeКогда отчет запрошен.
prompt_results[].completed_atdatetime | nullКогда отчет сгенерирован.

Нужно то же самое файлом? Экспорт расшифровки с format=json возвращает ровно это тело.

Ошибки

СтатусКогда
401Нет/неверный ключ или ключ передан в URL.
403План без доступа к API.
403transcription_locked — расшифровка является закрытым превью. На тарифе с доступом к API возникать не должна; если возникла, запись через API не читается.
404Нет расшифровки с таким id в этом workspace.
429Превышен rate limit.

404 также возвращается, если расшифровка существует, но принадлежит другому workspace — наличие ресурса между workspace не раскрывается. См. Ошибки.

На этой странице