> ## Documentation Index
> Fetch the complete documentation index at: https://docs.aigenda.tech/llms.txt
> Use this file to discover all available pages before exploring further.

# Быстрый старт

> От токена до готового протокола за шесть запросов.

Пройдём весь путь на коротком файле `planerka.mp3`. Понадобятся `curl` и [`jq`](https://jqlang.org) для разбора JSON.

<Steps>
  <Step title="Получите токен">
    Передайте почту и пароль аккаунта AiGenda. В ответе придёт пара токенов, для запросов нужен `access`.

    ```bash theme={null}
    export AIGENDA_EMAIL="you@example.com"
    export AIGENDA_PASSWORD="ваш-пароль"

    TOKEN=$(curl -s -X POST https://api.aigenda.tech/api/token/ \
      -H "Content-Type: application/json" \
      -d "{\"username\": \"$AIGENDA_EMAIL\", \"password\": \"$AIGENDA_PASSWORD\"}" \
      | jq -r .access)
    ```

    Поле называется `username`, но в него кладётся почта. Подробнее: [Авторизация](/authentication).
  </Step>

  <Step title="Узнайте space_id">
    Записи живут в пространствах. Возьмите своё личное пространство, у него `is_main_space: true`.

    ```bash theme={null}
    SPACE_ID=$(curl -s "https://api.aigenda.tech/api/spaces/?limit=50&offset=0" \
      -H "Authorization: Bearer $TOKEN" \
      | jq -r '.results[] | select(.is_main_space) | .space.id')
    ```
  </Step>

  <Step title="Создайте запись">
    Сообщите название, точный размер файла в байтах и MIME-тип. Название обязательно заканчивается расширением файла.

    ```bash theme={null}
    FILE=planerka.mp3
    SIZE=$(wc -c < "$FILE" | tr -d ' ')

    CREATED=$(curl -s -X POST "https://api.aigenda.tech/api/spaces/$SPACE_ID/audio/" \
      -H "Authorization: Bearer $TOKEN" \
      -H "Content-Type: application/json" \
      -d "{\"title\": \"$FILE\", \"size\": $SIZE, \"content_type\": \"audio/mpeg\"}")

    AUDIO_ID=$(echo "$CREATED" | jq -r .id)
    UPLOAD_URL=$(echo "$CREATED" | jq -r '.url[0]')
    ```

    В `url` приходит массив ссылок для загрузки, по одной на часть файла. Файлу меньше 1 ГБ хватает одной.
  </Step>

  <Step title="Загрузите файл и завершите загрузку">
    Отправьте файл по ссылке методом `PUT` и сохраните заголовок `ETag` из ответа. Затем сообщите AiGenda, что загрузка закончена.

    ```bash theme={null}
    ETAG=$(curl -s -X PUT "$UPLOAD_URL" --upload-file "$FILE" -D - -o /dev/null \
      | grep -i '^etag:' | cut -d' ' -f2 | tr -d '\r')

    curl -s -X POST "https://api.aigenda.tech/api/spaces/$SPACE_ID/audio/$AUDIO_ID/complete_upload/" \
      -H "Authorization: Bearer $TOKEN" \
      -H "Content-Type: application/json" \
      -d "$(jq -n --arg etag "$ETAG" '{parts: [{PartNumber: 1, ETag: $etag}]}')"

    until curl -s "https://api.aigenda.tech/api/spaces/$SPACE_ID/audio/$AUDIO_ID/info/" \
      -H "Authorization: Bearer $TOKEN" | jq -e .is_uploaded > /dev/null; do sleep 2; done
    ```

    `ETag` приходит в двойных кавычках, их нужно передать как есть. Цикл в конце ждёт, пока AiGenda подтвердит файл (`is_uploaded: true`).
  </Step>

  <Step title="Запустите обработку">
    ```bash theme={null}
    curl -s -X POST https://api.aigenda.tech/api/audio/classify/ \
      -H "Authorization: Bearer $TOKEN" \
      -H "Content-Type: application/json" \
      -d "{\"audio_id\": $AUDIO_ID}"
    ```

    В этот момент с тарифа списываются минуты по длительности записи.
  </Step>

  <Step title="Заберите протокол">
    Опрашивайте результат раз в 15 секунд, пока не придёт `classified: true`.

    ```bash theme={null}
    while true; do
      RESULT=$(curl -s "https://api.aigenda.tech/api/spaces/$SPACE_ID/audio/$AUDIO_ID/result/" \
        -H "Authorization: Bearer $TOKEN")
      echo "$RESULT" | jq -e '.classified == true' > /dev/null 2>&1 && break
      sleep 15
    done

    echo "$RESULT" | jq -r .result.protocol > protocol.md
    ```

    Готово: протокол встречи лежит в `protocol.md`.
  </Step>
</Steps>

<Warning>
  Этот цикл не отличает упавшую обработку от идущей и будет ждать вечно. В рабочей интеграции обрабатывайте ошибки по правилам со страницы [Статусы и ожидание](/processing/status).
</Warning>

## Что дальше

<CardGroup cols={2}>
  <Card title="Загрузка больших файлов" icon="upload" href="/upload/file">
    Файлы больше 1 ГБ, код на Python и JavaScript.
  </Card>

  <Card title="Структура результата" icon="file-text" href="/processing/result">
    Протокол, реплики, спикеры.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.