Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

API リファレンス

VoiceBookLM バックエンド API の詳細仕様です。

Note

バージョン: 0.0.1-SNAPSHOT
開発環境: http://localhost:8080
本番環境: https://api.voicebooklm.example.com


認証 API (/api/auth)

POST /api/auth/google - Google OAuth ログイン

Google ID トークンを検証し、JWT トークンペアを発行します。新規ユーザーの場合はアカウントを作成します。

認証: 不要

リクエスト:

{
  "idToken": "string (必須) - Google ID トークン"
}

レスポンス:

ステータス説明
200 OKログイン成功
401 Unauthorized認証失敗
{
  "accessToken": "string - アクセストークン(1日有効)",
  "refreshToken": "string - リフレッシュトークン(180日間有効)"
}

POST /api/auth/refresh - トークンリフレッシュ

リフレッシュトークンを使用して新しいトークンペアを発行します(トークンローテーション)。

認証: 不要

リクエスト:

{
  "refreshToken": "string (必須) - リフレッシュトークン"
}

レスポンス:

ステータス説明
200 OKリフレッシュ成功
401 Unauthorizedリフレッシュトークンが無効または期限切れ
{
  "accessToken": "string - 新しいアクセストークン",
  "refreshToken": "string - 新しいリフレッシュトークン"
}

POST /api/auth/logout - ログアウト

リフレッシュトークンを無効化してログアウトします。

認証: 不要

リクエスト:

{
  "refreshToken": "string (必須) - リフレッシュトークン"
}

レスポンス:

ステータス説明
204 No Contentログアウト成功
400 Bad Requestリクエスト形式が不正

DELETE /api/auth/account - アカウント削除

ユーザーアカウントとすべての関連データを完全に削除します。

認証: 必須(JWT Bearer トークン)

レスポンス:

ステータス説明
204 No Content削除成功
401 Unauthorized認証失敗
404 Not Foundユーザーが見つからない

GET /api/auth/me - 現在のユーザー情報取得

認証済みユーザーの情報を取得します。

認証: 必須(JWT Bearer トークン)

レスポンス:

ステータス説明
200 OK取得成功
401 Unauthorized認証失敗
404 Not Foundユーザーが見つからない
{
  "id": "UUID - ユーザー ID",
  "email": "string - メールアドレス",
  "name": "string - ユーザー名"
}

音声メモ API (/api/voice)

POST /api/voice/memos - 音声ファイルからメモを生成

音声ファイルをアップロードし、文字起こし → AI整形 → 保存を行います。60秒以内のレスポンスを想定。

認証: 必須(JWT Bearer トークン)

Content-Type: multipart/form-data

リクエスト:

フィールド必須説明
fileFile音声ファイル
languageString×言語コード(例: ja-JP, en-US

レスポンス:

ステータス説明
201 Createdメモ生成成功
400 Bad Request入力不正(音声が空、Content-Type 不正など)
401 Unauthorized認証エラー(JWT 不正)
500 Internal Server Errorサーバエラー
{
  "memoId": "UUID - メモ ID",
  "title": "string - タイトル",
  "content": "string - 整形されたメモ内容",
  "tags": ["string"],
  "transcription": "string | null - 文字起こしテキスト",
  "transcriptionStatus": "COMPLETED | FAILED | PENDING",
  "formattingStatus": "COMPLETED | FAILED | PENDING",
  "processingTimeMillis": {
    "transcription": "number (ms)",
    "formatting": "number (ms)",
    "persistence": "number (ms)",
    "total": "number (ms)"
  },
  "fallback": {
    "transcription": "boolean",
    "formatting": "boolean"
  }
}

メモ API (/api/memos)

GET /api/memos - メモ一覧取得

認証ユーザーのメモを取得します。フォルダーによるフィルタリング、キーワード検索、ソート、件数制限が可能。

認証: 必須(JWT Bearer トークン)

クエリパラメータ:

パラメータ必須デフォルト説明
folderIdUUID×-フォルダーIDでフィルタリング
includeDescendantsboolean×falsetrue の場合、子孫フォルダーのメモも含める
uncategorizedOnlyboolean×falsetrue の場合、未分類メモのみ取得
keywordstring×-キーワード検索(タイトルまたはコンテントに含まれるメモを検索)
sortstring×updated_atソート項目(updated_at, created_at, title
orderstring×descソート順序(asc, desc
limitinteger×-取得件数制限

レスポンス:

ステータス説明
200 OK取得成功
401 Unauthorized認証エラー
{
  "memos": [
    {
      "memoId": "UUID",
      "title": "string | null",
      "tags": ["string"],
      "transcriptionStatus": "COMPLETED | FAILED | PENDING",
      "formattingStatus": "COMPLETED | FAILED | PENDING",
      "folder": {
        "id": "UUID",
        "name": "string",
        "path": "string"
      },
      "createdAt": "ISO 8601 datetime",
      "updatedAt": "ISO 8601 datetime"
    }
  ]
}

GET /api/memos/{id} - メモ詳細取得

指定されたIDのメモの詳細情報を取得します。セキュリティ上、権限のないメモも404として返します。

認証: 必須(JWT Bearer トークン)

パスパラメータ:

パラメータ必須説明
idUUIDメモ ID

レスポンス:

ステータス説明
200 OK取得成功
401 Unauthorized認証失敗
404 Not Foundメモが見つからない(存在しない、削除済み、または権限なし)
{
  "memoId": "UUID",
  "title": "string | null",
  "content": "string | null",
  "tags": ["string"],
  "transcriptionText": "string | null",
  "transcriptionStatus": "COMPLETED | FAILED | PENDING",
  "formattingStatus": "COMPLETED | FAILED | PENDING",
  "createdAt": "ISO 8601 datetime",
  "updatedAt": "ISO 8601 datetime"
}

PATCH /api/memos/{id} - メモ更新

メモの部分更新を行います。指定されたフィールドのみ更新されます。

認証: 必須(JWT Bearer トークン)

パスパラメータ:

パラメータ必須説明
idUUIDメモ ID

リクエスト:

{
  "title": "string (任意, 最大100文字)",
  "content": "string (任意)",
  "tags": ["string (任意)"]
}

レスポンス:

ステータス説明
200 OK更新成功
400 Bad Requestバリデーションエラー
401 Unauthorized認証失敗
404 Not Foundメモが見つからない(存在しない、削除済み、または権限なし)
422 Unprocessable Entityメモの整形が完了していない、またはフォルダーが存在しない
{
  "memoId": "UUID",
  "title": "string | null",
  "content": "string | null",
  "tags": ["string"],
  "transcriptionText": "string | null",
  "transcriptionStatus": "COMPLETED | FAILED | PENDING",
  "formattingStatus": "COMPLETED | FAILED | PENDING",
  "createdAt": "ISO 8601 datetime",
  "updatedAt": "ISO 8601 datetime"
}

DELETE /api/memos/{id} - メモ削除

指定されたメモを削除します。

認証: 必須(JWT Bearer トークン)

パスパラメータ:

パラメータ必須説明
idUUIDメモ ID

レスポンス:

ステータス説明
204 No Content削除成功
401 Unauthorized認証失敗
403 Forbiddenアクセス権限なし
404 Not Foundメモが見つからない

POST /api/memos/{id}/resummarize - 再要約

編集された文字起こしテキストから再度AI整形(要約)を行います。

認証: 必須(JWT Bearer トークン)

パスパラメータ:

パラメータ必須説明
idUUIDメモ ID

リクエスト:

{
  "editedTranscription": "string (必須) - 編集された文字起こしテキスト"
}

レスポンス:

ステータス説明
200 OK再要約成功
400 Bad Requestバリデーションエラー
401 Unauthorized認証失敗
404 Not Foundメモが見つからない(存在しない、削除済み、または権限なし)
422 Unprocessable Entity処理エラー(整形失敗など)
{
  "memoId": "UUID",
  "title": "string | null",
  "content": "string | null",
  "tags": ["string"],
  "transcriptionText": "string | null",
  "transcriptionStatus": "COMPLETED | FAILED | PENDING",
  "formattingStatus": "COMPLETED | FAILED | PENDING",
  "createdAt": "ISO 8601 datetime",
  "updatedAt": "ISO 8601 datetime"
}

フォルダー API (/api/folders)

GET /api/folders - フォルダー一覧取得

認証ユーザーのフォルダー一覧をパス情報付きで取得します。

認証: 必須(JWT Bearer トークン)

レスポンス:

ステータス説明
200 OK取得成功
401 Unauthorized認証エラー
{
  "folders": [
    {
      "id": "UUID",
      "name": "string",
      "parentId": "UUID | null",
      "path": "string"
    }
  ]
}

POST /api/folders - フォルダー作成

新しいフォルダーを作成します。親フォルダーを指定して階層構造を作成可能。

認証: 必須(JWT Bearer トークン)

リクエスト:

{
  "name": "string (必須, 最大50文字)",
  "parentId": "UUID (任意) - 親フォルダー ID"
}

レスポンス:

ステータス説明
201 Created作成成功
401 Unauthorized認証エラー
404 Not Found親フォルダーが見つからない
409 Conflict同名フォルダーが既に存在する
{
  "id": "UUID",
  "name": "string",
  "parentId": "UUID | null",
  "path": "string"
}

PATCH /api/folders/{id} - フォルダー更新

フォルダーのリネームまたは移動を行います。両方同時に指定可能。

認証: 必須(JWT Bearer トークン)

パスパラメータ:

パラメータ必須説明
idUUIDフォルダー ID

リクエスト:

{
  "name": "string (任意, 最大50文字)",
  "parentId": "UUID (任意) - 新しい親フォルダー ID",
  "moveToRoot": "boolean (必須) - ルートに移動する場合 true"
}

レスポンス:

ステータス説明
200 OK更新成功
401 Unauthorized認証エラー
404 Not Foundフォルダーが見つからない
409 Conflict同名フォルダーが既に存在する / 循環参照が発生する
{
  "id": "UUID",
  "name": "string",
  "parentId": "UUID | null",
  "path": "string"
}

DELETE /api/folders/{id} - フォルダー削除

フォルダーを削除します。子フォルダーまたはメモが存在する場合は削除できません。

認証: 必須(JWT Bearer トークン)

パスパラメータ:

パラメータ必須説明
idUUIDフォルダー ID

レスポンス:

ステータス説明
204 No Content削除成功
401 Unauthorized認証エラー
404 Not Foundフォルダーが見つからない
409 Conflict子フォルダーまたはメモが存在するため削除できない

タグ API (/api/tags)

GET /api/tags - タグ一覧取得

認証ユーザーが使用している全タグを取得します。ソート順と件数制限が指定可能。

認証: 必須(JWT Bearer トークン)

クエリパラメータ:

パラメータ必須デフォルト説明
sortstring×nameソート項目(name: 名前順, usage_count: 使用回数順)
orderstring×ascソート順序(asc, desc
limitinteger×-取得件数制限

使用例:

  • 人気タグを取得: GET /api/tags?sort=usage_count&order=desc&limit=10

レスポンス:

ステータス説明
200 OK取得成功
401 Unauthorized認証エラー
{
  "tags": ["開発", "コード", "ミーティング"]
}

開発用 API (/api/dev)

Caution

これらの API は 開発環境(dev)でのみ有効です。本番環境では使用できません。

POST /api/dev/token - 開発用トークン取得

指定したメールアドレスのユーザーのアクセストークンを取得します。OAuth不要で、Swagger UIからすぐにAPIテストができます。

認証: 不要

クエリパラメータ:

パラメータ必須説明
emailstringユーザーのメールアドレス

レスポンス:

ステータス説明
200 OKトークン取得成功
404 Not Foundユーザーが見つからない
{
  "accessToken": "string - アクセストークン(JWT)",
  "userId": "string - ユーザーID",
  "email": "string - メールアドレス",
  "message": "string - 使い方の説明"
}

POST /api/dev/seed - テストデータ作成

認証ユーザー用にテスト用のフォルダーとメモを作成します。データは seed-data.yml から読み込まれます。冪等性を持ち、既にフォルダーが存在する場合はスキップします。

認証: 必須(JWT Bearer トークン)

レスポンス:

ステータス説明
200 OK作成成功(またはスキップ)
401 Unauthorized認証エラー
{
  "foldersCreated": 3,
  "memosCreated": 10,
  "skipped": false,
  "message": "string - 結果メッセージ"
}

共通仕様

認証方式

JWT (JSON Web Token) を使用。

トークン種別有効期限
アクセストークン1日
リフレッシュトークン180日

認証が必要な API には Authorization ヘッダーを設定:

Authorization: Bearer <access_token>

エラーレスポンス

{
  "error": "string - エラーメッセージ",
  "code": "string - エラーコード"
}
コード説明
UNAUTHORIZED認証失敗
FORBIDDENアクセス権限なし
NOT_FOUNDリソースが見つからない
BAD_REQUESTリクエスト形式が不正
CONFLICTリソースの競合
UNPROCESSABLE_ENTITY処理不能なエンティティ
INTERNAL_SERVER_ERRORサーバー内部エラー

OpenAPI ドキュメント

  • Swagger UI: http://localhost:8080/swagger-ui.html
  • API 仕様 (JSON): http://localhost:8080/v3/api-docs