Plaud API: доступ к записям из терминала | Виталий Воробьев
VorobeoffAIВиталий Воробьев

Plaud API: доступ к записям из терминала

Как программно выгружать свои записи, транскрипты и AI-саммари из Plaud Note и NotePin: официальные CLI и MCP с OAuth-входом, «серый» маршрут через токен из localStorage, эндпоинты, jq-фильтры, Python-скрипты для массового экспорта и загрузки в Notion.

Два маршрута к собственным записям Plaud: официальный — через CLI и MCP с входом по OAuth, и «серый» — через Bearer-токен из браузера. Оба рабочих, один безопаснее, другой гибче.

Что это

Plaud Note и NotePin — устройства для записи встреч и голосовых заметок. Plaud Note — пластиковая пластинка с микрофоном, которая крепится магнитом к смартфону; NotePin — носимый значок на лацкане. После записи сервис Plaud присылает транскрипт и AI-саммари — короткое резюме с задачами и решениями. Аудиофайл лежит в облаке Plaud, доступ через мобильное приложение или веб-интерфейс web.plaud.ai.

До лета 2026 единственным способом программно читать свои записи было доставать Bearer-токен из localStorage браузера и дёргать HTTP-эндпоинты вручную. Теперь у Plaud есть официальные инструменты: CLI для скриптов и MCP-сервер для ИИ-ассистентов, оба с обычным входом через браузер по OAuth. Параллельно запущена бизнес-платформа Developer Platform — SDK и API для команд.

Это руководство описывает оба маршрута. Сначала официальный — он короче, безопаснее и закрывает большинство задач. Затем «серый» — для сценариев, которые официальные инструменты пока не закрывают: прямые HTTP-запросы к эндпоинтам, jq-фильтры, Python-скрипты для массовой выгрузки и загрузки в Notion.

Важно: домены, эндпоинты и структура ответов «серого» API могут меняться без предупреждения. Официальный маршрут — CLI и MCP — стабильнее, потому что его поддерживает Plaud.

Зачем нужно

  • Автоматический импорт в базу знаний — выгрузить все записи и саммари в Notion, Obsidian или другую систему одним скриптом, без ручного копирования.
  • Поиск по содержанию — найти встречу по фрагменту транскрипта или по дате, не листая приложение.
  • Свои пайплайны обработки — прогнать транскрипты через свою LLM, сравнить встречи между собой, собрать дашборд по активностям.
  • Доступ из ИИ-ассистента — попросить Claude или ChatGPT «покажи саммари вчерашней встречи» и получить ответ без переключения контекстов.
  • Резервная копия — скачать все аудиофайлы и саммари на свой диск, не зависеть от доступности облака Plaud.

Как устроено

Маршрутов два, и выбор зависит от задачи. Официальный маршрут — CLI и MCP от Plaud. Ставятся одной командой через npm, вход через браузер по OAuth: открывается страница Plaud, вы подтверждаете доступ, токен обновляется автоматически. CLI даёт команды терминала: список записей, поиск по датам, транскрипт, саммари, ссылка на MP3. MCP подключает те же возможности к ИИ-клиенту — Claude, ChatGPT, Cursor, Codex — и вы просите ассистента естественным языком.

«Серый» маршрут — токен из localStorage. Веб-приложение Plaud хранит Bearer-токен в localStorage браузера: полноценный, живёт примерно 10 месяцев. Рядом с токеном лежит региональный домен аккаунта — например api-euc1.plaud.ai для Европы или api.plaud.ai для США. Запросы идут прямо к HTTP-эндпоинтам Plaud, сервер видит тот же токен, что и браузер — для него это обычный запрос из веб-приложения.

Сравнение маршрутов

КритерийОфициальный (CLI/MCP)«Серый» (токен)
Вход
OAuth через браузер, автообновление
Ручное копирование из DevTools
Поддержка Plaud
Да, официальный пакет
Нет, может измениться без предупреждения
Гибкость
Команды и MCP-инструменты
Прямые HTTP-запросы к любым эндпоинтам
Требования
Node.js 20+
curl или Python,.env с токеном
Обновление токена
Автоматически
Вручную каждые ~10 месяцев
Для чего
Повседневные задачи, ИИ-ассистент
Массовая выгрузка, кастомные пайплайны

Коротко: MCP — чтобы разговаривать с ИИ-ассистентом о своих записях. CLI — чтобы скриптами выгружать данные в терминале. «Серый» API — когда нужно то, чего в официальных инструментах пока нет.

Когда использовать

СитуацияМаршрутПочему
Попросить ИИ «покажи саммари последней встречи»
Plaud MCP
MCP подключает записи к ИИ-клиенту, ответ естественным языком
Выгрузить все транскрипты в JSON по расписанию
Plaud CLI или «серый» API
Команды терминала или Python-скрипт с cron
Импорт исторических записей в Notion
«Серый» API
Zapier берёт только новые, скрипт грузит всё сразу
Скачать оригинальные MP3 на диск
Plaud CLI
plaud audio даёт ссылку на 24 часа
Построить дашборд по всем встречам
«Серый» API + Python
Прямой доступ к полям, гибкая агрегация
Быстро проверить, что токен работает
«Серый» API
Один curl к /file/simple/web

Официальные инструменты: CLI и MCP

Plaud MCP — для ИИ-ассистента

MCP (Model Context Protocol) — открытый протокол, через который ИИ-клиент получает доступ к внешним инструментам: файлам, базам данных, API. Plaud MCP подключает ваши записи к любому MCP-совместимому клиенту: Claude, ChatGPT, Cursor, Codex. Нужен Node.js версии 20 и выше. Установка одной командой:

npx -y @plaud-ai/mcp@latest install

Установщик найдёт ваши ИИ-клиенты, пропишет конфигурацию и откроет браузер для входа. После авторизации можно просить ассистента: «покажи последние записи», «сделай саммари вчерашней встречи», «набросай follow-up по итогам созвона».

Доступные инструменты MCP:

ИнструментЧто делает
login
Авторизация через браузер
logout
Отзыв доступа
get_current_user
Профиль аккаунта
list_files
Список записей с фильтрами по названию и датам
get_file
Метаданные конкретной записи
get_note
AI-саммари и action items
get_transcript
Транскрипт с таймкодами и спикерами

Plaud CLI — для скриптов

CLI подходит, когда данные нужно дёргать командами в терминале или по расписанию. Тот же Node.js 20+:

npm install -g @plaud-ai/cli
plaud login

Основные команды:

КомандаЧто делает
plaud files
Список последних записей (в таблице есть колонка ID)
plaud search “weekly” —from 2026-04-01 —to 2026-06-30
Поиск по названию с фильтром по датам
plaud transcript
Полный транскрипт с таймкодами
plaud summary -o file.md
AI-саммари и action items, можно сохранить в файл
plaud audio
Ссылка на оригинальный MP3, живёт 24 часа

Developer Platform — для бизнеса

Осенью 2025 Plaud анонсировал, а к 2026 запустил Developer Platform — SDK и API для компаний. В неё входят: MeetingBot для Zoom, Google Meet и Teams, привязка устройств, выдача транскриптов и саммари в JSON. Доступ по заявке. Embedded-API работают по регионам: US и Japan доступны, Europe и Singapore в статусе coming soon.

«Серый» маршрут: токен из localStorage

Способ 1: через браузер

Шаг 1. Откройте web.plaud.ai в Chrome и войдите в аккаунт.

Шаг 2. Откройте DevTools: на Mac — Cmd + Option + I, на Windows/Linux — F12.

Шаг 3. Перейдите во вкладку Application → Local Storage → https://web.plaud.ai.

Шаг 4. Скопируйте два ключа:

КлючЧто этоПример
tokenstr
Bearer-токен для авторизации
bearer eyJhbG…NiIs…
plaud_user_api_domain
Региональный API-домен аккаунта

Внимание: tokenstr уже содержит префикс bearer — копируйте строку целиком, включая это слово. Заголовок запроса: Authorization: bearer <токен>.

Шаг 5. Сохраните в файл.env:

PLAUD_TOKEN=bearer eyJhbG...VCJ9...
PLAUD_API_DOMAIN=https://api-euc1.plaud.ai

Способ 2: сторонние open-source инструменты

Есть неофициальные проекты, которые автоматизируют получение токена и работу с API. Например, TypeScript-набор sergivalverde/plaud-toolkit — core-библиотека, CLI и MCP-сервер. На момент проверки он в статусе alpha, поэтому команды и структура меняются: сверяйтесь с README репозитория.

Совет: Если задача — просто читать свои записи и транскрипты, официальные @plaud-ai/cli и @plaud-ai/mcp надёжнее: OAuth-вход, автообновление токенов, поддержка Plaud. Сторонние инструменты имеют смысл, когда нужно то, чего в официальных пока нет.

Региональные домены

РегионДомен
Европа (EU)
США

Проверка токена

curl -H "Authorization: $PLAUD_TOKEN" \
  $PLAUD_API_DOMAIN/file/simple/web

Успешный ответ — JSON-массив с записями. Если 401 Unauthorized — токен скопирован неверно или истёк.

Доступные эндпоинты

Что получаемEndpointМетод
Список всех записей (id, название, дата, длительность)
/file/simple/web
GET
Транскрипт + AI-саммари конкретной записи
/file/detail/{file_id}
GET
Аудиофайл (MP3)
/file/download/{file_id}
GET
Теги и папки аккаунта
/filetag/
GET

Работа со списком записей

Все записи одним запросом

curl -H "Authorization: $PLAUD_TOKEN" \
  $PLAUD_API_DOMAIN/file/simple/web

Один элемент массива выглядит так:

{
  "id": "a3f1c2d4e5b6789012345678abcdef01",
  "name": "Встреча с клиентом",
  "duration": 3720,
  "create_time": "2026-02-15T10:30:00Z",
  "status": "done"
}

Фильтры через jq

# Достать только id
curl ... | jq -r '.[].id'

# id, название и дата в TSV-формате
curl ... | jq -r '.[] | [.id, .name, .create_time] | @tsv'

# Отсортировать новые сверху
curl ... | jq '[.[] | {id, name, create_time}] | sort_by(.create_time) | reverse'

Транскрипт и AI-саммари

Карточка одной записи

curl -H "Authorization: $PLAUD_TOKEN" \
  $PLAUD_API_DOMAIN/file/detail/{file_id}

Ключевые поля:

ПолеСодержание
.data.trans_result.segments
Массив сегментов: {start, end, speaker, text}
.data.ai_content
AI-саммари
.data.name
Название записи
.data.duration
Длительность в секундах

Как достать данные

# Только текст без таймкодов
curl ... | jq -r '.data.trans_result.segments[].text' | tr '\n' ' '

# С таймкодами и именами спикеров
curl ... | jq -r '.data.trans_result.segments[] | "[\(.start)] \(.speaker): \(.text)"'

# Забрать AI-саммари
curl ... | jq '.data.ai_content'

# Название, дата и саммари одним объектом
curl ... | jq '{name: .data.name, date: .data.create_time, summary: .data.ai_content}'

Пример вывода с таймкодами:

[00:00:05] Speaker 1: Добрый день, начинаем встречу.
[00:00:12] Speaker 2: Спасибо, я готов.

Скачивание аудио

Скачать MP3

# Сохранить аудио в файл
curl -H "Authorization: $PLAUD_TOKEN" \
  $PLAUD_API_DOMAIN/file/download/{file_id} \
  -o "recording.mp3"

# Сохранить с именем из карточки записи
NAME=$(curl -s -H "Authorization: $PLAUD_TOKEN" \
  $PLAUD_API_DOMAIN/file/detail/{file_id} \
  | jq -r '.data.name')

curl -H "Authorization: $PLAUD_TOKEN" \
  $PLAUD_API_DOMAIN/file/download/{file_id} \
  -o "${NAME}.mp3"

Python: массовая выгрузка

Подключение и базовый клиент

import os
import requests
from dotenv import load_dotenv

load_dotenv()

TOKEN = os.getenv("PLAUD_TOKEN")
DOMAIN = os.getenv("PLAUD_API_DOMAIN")
HEADERS = {"Authorization": TOKEN}

def get(endpoint):
    """Обёртка над requests.get с авторизацией."""
    resp = requests.get(f"{DOMAIN}{endpoint}", headers=HEADERS)
    resp.raise_for_status()
    return resp.json()

Список записей

files = get("/file/simple/web")
for f in files:
    print(f"{f['id']} | {f['name']} | {f['create_time']}")

Транскрипт и саммари одной записи

def get_detail(file_id):
    """Достаёт название, дату, длительность, транскрипт и AI-саммари."""
    data = get(f"/file/detail/{file_id}")["data"]
    segments = data.get("trans_result", {}).get("segments", [])
    transcript = " ".join(s["text"] for s in segments)
    return {
        "name": data["name"],
        "date": data["create_time"],
        "duration": data["duration"],
        "transcript": transcript,
        "summary": data.get("ai_content", "")
    }

Выгрузить всё в JSON-файл

import json
from time import sleep

files = get("/file/simple/web")
all_data = []

for i, f in enumerate(files):
    print(f"[{i+1}/{len(files)}] {f['name']}")
    try:
        detail = get_detail(f["id"])
        all_data.append(detail)
        sleep(0.5)  # пауза, чтобы не словить 429
    except Exception as e:
        print(f"  Ошибка: {e}")

with open("plaud_export.json", "w", encoding="utf-8") as out:
    json.dump(all_data, out, ensure_ascii=False, indent=2)

print(f"Экспортировано {len(all_data)} записей.")

Массовая загрузка в Notion

Зачем: Zapier при первом подключении не вытягивает исторические записи — только новые. Этот скрипт загружает все существующие записи в базу Notion за один прогон.

Настройка.env

PLAUD_TOKEN=bearer eyJ...
PLAUD_API_DOMAIN=https://api-euc1.plaud.ai
NOTION_TOKEN=secret_...
NOTION_DATABASE_ID=ваш-id-базы-данных

Скрипт импорта в Notion

# ... (часть 1/2)
import os
import requests
from time import sleep
from dotenv import load_dotenv

load_dotenv()

# --- Plaud ---
PLAUD_TOKEN = os.getenv("PLAUD_TOKEN")
PLAUD_DOMAIN = os.getenv("PLAUD_API_DOMAIN")
PLAUD_HEADERS = {"Authorization": PLAUD_TOKEN}

# --- Notion ---
NOTION_TOKEN = os.getenv("NOTION_TOKEN")
NOTION_DB_ID = os.getenv("NOTION_DATABASE_ID")
NOTION_HEADERS = {
    "Authorization": f"Bearer {NOTION_TOKEN}",
    "Content-Type": "application/json",
    "Notion-Version": "2022-06-28"
}

def plaud_get(endpoint):
    """GET-запрос к Plaud API с авторизацией из .env."""
    r = requests.get(f"{PLAUD_DOMAIN}{endpoint}", headers=PLAUD_HEADERS)
    r.raise_for_status()
    return r.json()

def get_detail(file_id):
    """Собирает карточку записи: название, дата, транскрипт, саммари."""
    data = plaud_get(f"/file/detail/{file_id}")["data"]
    segments = data.get("trans_result", {}).get("segments", [])
    lines = [
        f"[{s.get('start', '')}] {s.get('speaker', '')}: {s['text']}"
        for s in segments
    ]
    return {
        "name": data.get("name") or "Без названия",
        "date": data.get("create_time", ""),
        "transcript": "\n".join(lines),
        "summary": data.get("ai_content", "")
    }

def create_notion_page(record):
    """Создаёт страницу в Notion-базе из карточки записи."""
    summary = (record["summary"] or "")[:2000]
    body = {
        "parent": {"database_id": NOTION_DB_ID},
        "properties": {
            "Name": {"title": [{"text": {"content": record["name"]}}]},
            "Date": {"date": {"start": record["date"]}},
            "Summary": {"rich_text": [{"text": {"content": summary}}]}
        },
        "children": [{
            "object": "block",
            "type": "paragraph",
            "paragraph": {
                "rich_text": [{
                    "type": "text",
                    "text": {"content": (record["transcript"] or "")[:2000]}
                }]
            }
        }]
    }
# ... (часть 2/2)
    r = requests.post("https://api.notion.com/v1/pages",
                      headers=NOTION_HEADERS, json=body)
    r.raise_for_status()
    return r.json()["url"]

# --- Перебор всех записей ---
files = plaud_get("/file/simple/web")
print(f"Записей в аккаунте: {len(files)}")

for i, f in enumerate(files):
    print(f"[{i+1}/{len(files)}] {f['name']}")
    try:
        record = get_detail(f["id"])
        url = create_notion_page(record)
        print(f"  -> {url}")
        sleep(0.5)
    except Exception as e:
        print(f"  Ошибка: {e}")

print("Импорт завершён.")

Как найти file_id

File ID — 32-символьная hex-строка. Получить её можно тремя способами.

  • Из адресной строки браузера — откройте нужную запись на web.plaud.ai, в URL будет путь /file/{file_id}.
  • Из ответа API — поле id в массиве /file/simple/web.
  • Через jq — curl … /file/simple/web | jq -r ’.[0].id’ достанет id первого элемента.

Ошибки и решения

ОшибкаПричинаРешение
401 Unauthorized
Токен истёк или скопирован без bearer
Повторно извлеките tokenstr, копируйте целиком
Пустой транскрипт
Запись ещё обрабатывается
Проверьте статус в приложении Plaud
Пустой ответ /file/detail/
Неверный file_id
Проверьте id через /file/simple/web
Ошибка подключения
Неверный региональный домен
Проверьте plaud_user_api_domain в localStorage
429 Too Many Requests
Слишком частые запросы
Добавьте sleep(0.5–1) в цикл

Что нового в экосистеме Plaud

Состояние на июль 2026:

  • Plaud MCP и CLI — официальные инструменты для доступа к личным записям через ИИ-клиенты и терминал.
  • Plaud Desktop — desktop-приложение вышло из беты в январе 2026, бесплатно для действующих пользователей. Записывает звонки Zoom, Google Meet и Teams локально, без бот-участника в звонке.
  • Plaud NotePin S — новая версия носимого устройства, показана на CES в январе 2026, розничная цена $179.
  • Plaud Team — командное пространство с единым биллингом для рабочих групп, запущено в июне 2026.
  • Developer Platform — платформа с API и SDK для корпоративных клиентов, доступ по запросу.

Риски и ограничения

«Серый» маршрут работает, но это не официальный API — Plaud может изменить его в любой момент. Конкретных случаев блокировки аккаунтов за использование tokenstr не зафиксировано: ни в сообществе PlaudNoteUsers, ни в GitHub Issues. Open-source сообщество использует метод с 2024 года. Несколько публичных проектов — plaud-toolkit, OpenPlaud, плагины для Obsidian, n8n, OpenClaw Skills — работают на этом методе.

Ограничения

ПунктПояснение

«Серый» API не задокументирован — Plaud не публикует официальное описание эндпоинтов, полей и статусов для метода через tokenstr.

Домены, пути и структура ответов могут измениться без предупреждения — любой скрипт, который работает сегодня, может сломаться после обновления сервиса. Для долгосрочной автоматизации надёжнее официальный CLI или MCP: их поддерживает Plaud.

Токен живёт ~10 месяцев — Bearer-токен из localStorage перестаёт работать примерно через 10 месяцев после выдачи.

После истечения нужно повторить шаги: открыть web.plaud.ai, достать tokenstr из DevTools, обновить.env. Официальный OAuth-маршрут обновляет токен автоматически — этого недостатка нет.

Региональные домены различаются — Аккаунты в Европе используют api-euc1.plaud.ai, в США — api.plaud.ai.

Если в.env указан неверный домен, запросы возвращают ошибки подключения, а не понятный 401. Домен хранится в localStorage рядом с токеном, в ключе plaud_user_api_domain — копировать оба значения вместе.

Rate limit 429 при частых запросах — Сервер Plaud ограничивает частоту запросов: при слишком интенсивном опросе возвращает 429 Too Many Requests.

Для массовой выгрузки вставляйте sleep(0.5–1) между запросами — это же правило действует для официального CLI при больших объёмах.

Developer Platform — не для личных аккаунтов — Бизнес-платформа Plaud с SDK, MeetingBot и привязкой устройств доступна по заявке и ориентирована на компании.

Embedded-API работают по регионам: US и Japan доступны, Europe и Singapore в статусе coming soon. Для личных записей используйте CLI и MCP, а не Developer Platform.

Антипаттерны

ПунктПояснение

Использовать «серый» API, когда хватает официального — Если задача — прочитать саммари или скачать транскрипт, официальные @plaud-ai/cli и @plaud-ai/mcp надёжнее: OAuth-вход, автообновление токенов, поддержка Plaud.

«Серый» маршрут имеет смысл только для сценариев, которых официальные инструменты не закрывают — например, массовый импорт исторических записей в Notion, потому что Zapier берёт только новые.

Копировать токен без префикса bearer — tokenstr в localStorage уже содержит слово bearer в начале.

Если скопировать только JWT-часть без префикса, сервер вернёт 401 Unauthorized на любой запрос. Копировать нужно целиком, включая bearer, и передавать в заголовке Authorization как есть.

Хранить токен в открытом виде в репозитории — Bearer-токен даёт полный доступ к вашему аккаунту Plaud — чтение, скачивание, метаданные.

Не коммитьте.env в Git, не вставляйте токен в код скрипта напрямую. Используйте переменные окружения или.env, добавленный в.gitignore.

Игнорировать sleep при массовой выгрузке — Без паузы между запросами сервер быстро возвращает 429, и выгрузка останавливается на сотне записей.

sleep(0.5) между запросами к /file/detail/ — минимальный разумный интервал. Если записей сотни, лучше разбить на батчи и запустить в несколько проходов.

Чеклист

Официальные CLI и MCP закрывают большинство задач и не требуют возни с DevTools. «Серый» маршрут остаётся справочником для прямого доступа — массовая выгрузка, кастомные пайплайны, импорт истории в Notion. Выбирайте по задаче, не по привычке.

ПунктПояснение

Проверен региональный домен — Перед запуском скрипта убедитесь, что PLAUD_API_DOMAIN в.env совпадает с plaud_user_api_domain из localStorage: api-euc1.plaud.ai для Европы, api.plaud.ai для США.

Неверный домен даёт ошибки подключения, которые легко спутать с истекшим токеном.

Токен скопирован целиком с префиксом bearer — Откройте Plaud Web

→ DevTools → Application → Local Storage. Скопируйте значение tokenstr полностью, начиная со слова bearer. Проверьте одним curl к /file/simple/web — успешный ответ это JSON-массив, 401 означает проблему с токеном.

В цикле есть sleep(0.5–1) — Массовая выгрузка через /file/detail/ для каждой записи требует паузы между запросами, иначе сервер возвращает 429 Too Many Requests.

Полсекунды — минимум, секунда — безопаснее для нескольких сотен записей подряд.

Выбран правильный маршрут под задачу — Для ИИ-ассистента — Plaud MCP, для терминальных команд и расписания — Plaud CLI, для массового импорта исторических записей в Notion — «серый» API с Python-скриптом.

Если официальные инструменты закрывают задачу, «серый» маршрут не нужен.

Токен в.env,.env в.gitignore — Bearer-токен — это ключ к вашему аккаунту.

Храните его в.env, добавьте.env в.gitignore, не вставляйте в код скрипта литералом. Для Notion-интеграции то же относится к NOTION_TOKEN.

Ссылки

Продолжить тему

Материалы, которые связаны с этим разбором

Подборка учитывает тему, редкие теги и смысл заголовка с описанием материала.

Открыть материалы по теме ↗

Обсудить задачу

Есть задача, которую хотите усилить с помощью ИИ?

Опишите процесс, что уже пробовали и какой результат хотите получить. Я помогу понять, где ИИ и автоматизация действительно дадут эффект, и предложу понятный следующий шаг.

Для первого сообщения достаточно пары абзацев — готовое техническое задание не требуется.