REST API · OpenAPI 3.1 · MCPサーバー

開発者向けAPI

ファイル、リンク、テキストをコードと歌詞に変換し、スクリプトやアシスタントからソングブックを読み書きできます。

  • 無料プランあり
  • アプリと同じエンジン
  • 公式MCPサーバー
ベースURL https://jam-jam.org/api/v1 openapi.json llms.txt

APIでできること

各機能は、キーの作成時にチェックするスコープで有効になります。

変換

音声、PDF、画像、テキスト、リンクをソングブック、PDF、MIDI、MusicXMLなどに変換。

convert:writeconvert:read

非公開ソングブック

曲とプレイリストの一覧、閲覧、作成、編集、整理。

carnet:readcarnet:write

公開プロフィール

読み取り専用:プロフィール、公開された曲、フォロワー。音源は含みません。

social:read

ステム分離

変換(output=stems)でボーカルと伴奏を分離します。/stem-tool は2つまたは4つのトラックに分離します。API キーで使う場合は、どちらも Premium アカウントが必要です。

stems:write Premium の API キー

オーディオキュー

アプリと同じキューでコードと歌詞を解析します。

audio:writequeue:read

AI生成音楽の検出

ファイル、Spotifyリンク、音声への直接リンク、ISRCについて、AI生成の兆候を示します。

制限、クォータ、プライバシー

AIで生成された音楽が増えています。Jam Jamで生成の兆候を調べましょう。リンクを貼り付けるかファイルをアップロードすると、参考となる結果が得られます。

最大100 MB · 最大10分 · Spotify、音声への直接リンク、ISRCに対応。YouTubeは非対応です。 Spotifyリンクは試聴部分のみの解析となる場合があります。

各アカウントにつき、待機中または処理中のファイルは1つまで。Premiumアカウントを優先します。

ゲスト:1日2回・月5回。無料アカウント:1日5回・月50回。Premium:1日30回・月300回。サイト・アプリ・APIで上限を共有し、失敗した解析はカウントしません。UTC午前0時と毎月1日にリセットします。

音声は検出サービス提供者SH Labsに送信されます。同社は音声を保存せず、モデル学習にも使用しないと説明しています。サービス停止時は、予備処理が利用可能な場合にファイルをローカル解析します。一時ファイルは完了、失敗、キャンセル後に削除します。アカウントにはファイル名またはリンク、日付、状態、結果を90日間保存します。ゲストの結果は24時間です。ゲストの利用枠にはトークンと仮名化したネットワーク識別子を使い、IPアドレスを平文で保存しません。

この指標は確率でも証拠でもありません。低い値でも人間が作ったことを保証しません。

ツールを見る
audio:writequeue:read

対応フォーマット

正確な上限と、このサーバーが実際に提供している内容を含む完全な最新リストは、常にGET /formatsで確認できます。要約すると:

入力フォーマット

  • 音声・動画ファイル
  • PDF:コード、歌詞、楽譜、タブ譜、スキャンしたソングブック
  • 画像:コード、歌詞、楽譜、タブ譜
  • プレーンテキスト、ChordPro、OnSong
  • リンクとウェブ検索(page-link、web-search)
  • MusicXML、MIDI
  • JamSong、混在した.zip、ソングブック(ピボット)

出力フォーマット

  • ソングブック(JSONピボット、常に利用可能)
  • PDF:コード、歌詞、楽譜、タブ譜、コード表
  • PNG、HTML、プレーンテキスト、ChordPro
  • chords-lab、chords-csv、キーとBPM
  • MusicXML、MIDI(Premium)
  • 同期歌詞:.lrc、.srt
  • カラオケ動画(.mp4)、伴奏音源、JamSong

4つのステップで始める

変換は非同期です:送信し、進行を追い、結果を受け取ります。

  1. キーを作成

    設定 › APIキー。接頭辞はjj_live_、表示は一度だけ、1アカウント5個まで、いつでも失効可能。

    APIキーを管理
  2. 送信

    ファイル、URL、テキストのいずれかを、希望する出力フォーマットとともに送信。

    POST /jobs
  3. 追跡

    Retry-Afterを守ってポーリングするか、Server-Sent Eventsのストリームを開きます。

    GET /jobs/{id}GET /jobs/{id}/events
  4. 受け取り

    結果は24時間利用でき、その後は410 Goneになります。

    GET /jobs/{id}/result

サンプル

そのままコピーして使える完全な呼び出し例です。

このサーバーが対応するフォーマットを一覧表示curl

curl https://jam-jam.org/api/v1/formats

ファイルをPDFに変換curl

curl -X POST https://jam-jam.org/api/v1/jobs \
  -H "Authorization: Bearer jj_live_xxxxxxxxxxxxxxxx" \
  -F [email protected] \
  -F inputFormat=pdf-songbook \
  -F output=pdf-songbook

URLをソングブックに変換curl

curl -X POST https://jam-jam.org/api/v1/jobs \
  -H "Authorization: Bearer jj_live_xxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/tabs/amazing-grace", "output": "songbook"}'

進捗を確認する(SSEまたはポーリング)curl

# Server-Sent Events
curl -N -H "Authorization: Bearer jj_live_xxxxxxxxxxxxxxxx" \
  https://jam-jam.org/api/v1/jobs/jb_123/events

# Polling
curl -H "Authorization: Bearer jj_live_xxxxxxxxxxxxxxxx" \
  https://jam-jam.org/api/v1/jobs/jb_123

結果をダウンロードcurl

curl -H "Authorization: Bearer jj_live_xxxxxxxxxxxxxxxx" \
  -OJ https://jam-jam.org/api/v1/jobs/jb_123/result

Python (requests)python

import time
import requests

API = "https://jam-jam.org/api/v1"
HEADERS = {"Authorization": "Bearer jj_live_xxxxxxxxxxxxxxxx"}

# 1. Discover formats
formats = requests.get(f"{API}/formats").json()

# 2. Submit a conversion
resp = requests.post(
    f"{API}/jobs",
    headers=HEADERS,
    json={"url": "https://example.com/tabs/amazing-grace", "output": "songbook"},
)
resp.raise_for_status()
job = resp.json()

# 3. Poll until done (or use GET /jobs/{id}/events for SSE)
while job["phase"] not in ("done", "failed", "cancelled"):
    time.sleep(job.get("etaS", 2))
    job = requests.get(f"{API}/jobs/{job['id']}", headers=HEADERS).json()

# 4. Fetch the result
if job["phase"] == "done":
    songbook = requests.get(f"{API}/jobs/{job['id']}/result/songbook", headers=HEADERS).json()
    print(songbook["songs"][0]["title"])
else:
    print("failed:", job.get("problem"))

AI音楽検出で曲を解析するcurl

# Availability and remaining quota (no key needed)
curl https://jam-jam.org/api/v1/ai-music/availability

# Analyze a file
curl -X POST https://jam-jam.org/api/v1/ai-music/jobs \
  -H "Authorization: Bearer jj_live_xxxxxxxxxxxxxxxx" \
  -F "[email protected]"

# Analyze a Spotify link
curl -X POST https://jam-jam.org/api/v1/ai-music/jobs \
  -H "Authorization: Bearer jj_live_xxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://open.spotify.com/track/2JUDGXTQYGQZrVVUgq40Ke"}'

# History, current analysis, one analysis
curl -H "Authorization: Bearer jj_live_xxxxxxxxxxxxxxxx" \
  https://jam-jam.org/api/v1/ai-music/history
curl -H "Authorization: Bearer jj_live_xxxxxxxxxxxxxxxx" \
  https://jam-jam.org/api/v1/ai-music/jobs
curl -H "Authorization: Bearer jj_live_xxxxxxxxxxxxxxxx" \
  https://jam-jam.org/api/v1/ai-music/jobs/JOB_ID

# Cancel
curl -X DELETE -H "Authorization: Bearer jj_live_xxxxxxxxxxxxxxxx" \
  https://jam-jam.org/api/v1/ai-music/jobs/JOB_ID

コード例

curl、JavaScript、Python ですぐ実行できるサンプル。MIT ライセンスのオープンソースです。

jam-jam-api-examples

アシスタントとMCP

アシスタントは仕様を読み、自分で呼び出しを組み立てます。公式MCPサーバーは、すぐ使える42個のツールを提供します。

AIエージェント向け

まずGET /openapi.jsonを読んでください。推奨される呼び出し順序(フォーマットの検出、送信、追跡、取得)、認証、クォータが、モデルによる解析を想定したx-agent-guideブロックに記載されています。このサイトのllms.txtには、各変換機能が個別のエントリとして列挙されています。

MCPサーバー

キーはJAM_JAM_API_KEYから読み込まれ、そのスコープで許可されたツールだけが表示されます。誰もフォローせず、何にもいいねせず、自分から何も公開しません。

Claude DesktopClaude CodeCursor
詳しく

公式のModel Context Protocolサーバーは、APIをjj_で始まる42個のツールとしてアシスタントに公開します。ファイルとテキストの変換、非公開ソングブックの読み取りと整理、公開プロフィールの読み取り、ステム分離、音声解析とキュー、AI音楽の検出、マスタリングに対応しています。APIキーは環境変数JAM_JAM_API_KEYから読み込み、そのキーのスコープで許可されたツールだけを表示します。ポーリング、クォータエラー、ファイル結果の取得を代わりに処理するため、Claude Desktop、Claude Code、Cursorなどのアシスタントは、HTTPコードを一切書かずにファイルを変換したりソングブックを整理したりできます。フォロー、いいね、曲の公開を勝手に行うことはありません。

インストールshell
npx -y @jam-jam/convert-mcp

npmのパッケージページ: npmjs.com/package/@jam-jam/convert-mcp

設定(Claude Desktop、Claude Code、Cursor)json
{
  "mcpServers": {
    "jam-jam": {
      "command": "npx",
      "args": ["-y", "@jam-jam/convert-mcp"],
      "env": {
        "JAM_JAM_API_KEY": "jj_live_xxxxxxxxxxxxxxxx"
      }
    }
  }
}

ツールと必要なスコープ 42

変換

フォーマット、ファイル、テキスト、ジョブの状態。

  • jj_list_formatsスコープなし
  • jj_convert_fileconvert:write
  • jj_convert_textconvert:write
  • jj_get_jobconvert:read
クォータ スコープなし

キーでできることと残り。

  • jj_check_usage
非公開ソングブック、読み取り carnet:read

曲とプレイリスト。

  • jj_list_songs
  • jj_get_song
  • jj_list_playlists
  • jj_get_playlist
非公開ソングブック、書き込み carnet:write

曲とプレイリストの作成、更新、削除。

  • jj_create_song
  • jj_update_song
  • jj_delete_song
  • jj_create_playlist
  • jj_update_playlist
  • jj_delete_playlist
公開プロフィール、読み取り social:read

プロフィールカード、公開された曲とプレイリスト、フォロワーとフォロー中。

  • jj_get_profile
  • jj_list_profile_songs
  • jj_list_profile_playlists
  • jj_list_followers
  • jj_list_following
ステム分離

対応状況、ジョブ、ファイル。

  • jj_stems_capabilitiesconvert:read
  • jj_stems_separatestems:write
  • jj_stems_get_jobconvert:read
  • jj_stems_list_jobsconvert:read
  • jj_stems_get_fileconvert:read
  • jj_stems_cancel_jobstems:write
音声解析とキュー

ファイルの解析、ジョブの一覧、読み取り、キャンセル。

  • jj_audio_analyzeaudio:write
  • jj_queue_listqueue:read
  • jj_queue_get_jobqueue:read
  • jj_queue_cancel_jobaudio:write
AI音楽の検出

利用可否、解析、履歴、ジョブ。

  • jj_ai_music_availabilityqueue:read
  • jj_ai_music_analyzeaudio:write
  • jj_ai_music_currentqueue:read
  • jj_ai_music_get_jobqueue:read
  • jj_ai_music_historyqueue:read
  • jj_ai_music_cancel_jobaudio:write
マスタリング

対応状況、プリセット、レンダリング、ジョブの状態とキャンセル。

  • jj_mastering_capabilitiesスコープなし
  • jj_list_mastering_presetsmastering:read
  • jj_create_mastering_presetmastering:write
  • jj_master_audiomastering:write
  • jj_mastering_get_jobmastering:read
  • jj_mastering_cancel_jobmastering:write

エンドポイントリファレンス

提供中のすべてのルートを、ファミリーごとにスコープとクォータ付きで掲載。正式な基準は完全な仕様書です。

変換(ジョブ) 6

メソッド パス スコープ クォータ
POST /jobs変換を送信します: ファイル(multipart/form-data)、URL、またはプレーンテキスト/ChordPro(application/json)。output=stemsを指定する場合はstems:writeスコープとPremiumのAPIキーも必要で、独自のクォータがあります(UTC基準で1日200回)。 convert:write クォータ:変換
GET /jobs/{id}ジョブの状態(フェーズ、進捗率、ステップ)。Retry-Afterヘッダーを尊重しながらポーリングしてください。 convert:read クォータ:なし
DELETE /jobs/{id}ジョブをキャンセルしてファイルを削除します。まだキューにあった場合のみクォータが返還されます。 convert:write クォータ:なし
GET /jobs/{id}/eventsポーリングの代替となるServer-Sent Events: state、done、errorイベントと、接続維持用のpingイベントです。 convert:read クォータ:なし
GET /jobs/{id}/result主要な成果物(または?artifact=で指定した成果物)をダウンロードします。ジョブ作成から24時間の間利用できます。 convert:read クォータ:なし
GET /jobs/{id}/result/songbook曲の正規JSONピボット(コード、歌詞、構成)で、ジョブ完了後は常に取得できます。 convert:read クォータ:なし

フォーマット 1

メソッド パス スコープ クォータ
GET /formatsこのサーバーが実際に提供している入力/出力の組み合わせの一覧と、その上限(maxBytes、maxPages、maxDurationS)。 公開(キー不要) クォータ:なし

使用状況とクォータ 1

メソッド パス スコープ クォータ
GET /me/usageあなたのクォータ残高(変換、読み取り、書き込み、ステム)と、あなたの権限が実際に行使できるスコープを、1回の呼び出しで取得できます。 convert:read クォータ:なし

ソングブック、読み取り 4

メソッド パス スコープ クォータ
GET /me/songsあなたの非公開ソングブック内の曲を一覧表示します。不透明カーソルでページネーションされます。増分エクスポートにはupdatedSinceを使用してください。 carnet:read クォータ:読み取り
GET /me/songs/{songId}ソングブック内の曲1曲全体を、コード・歌詞・構成込みで取得します。 carnet:read クォータ:読み取り
GET /me/playlistsソングブック内のプレイリストを一覧表示します。フラットな構造で、曲は複数のプレイリストに属せます。ページネーションは曲と同じです。 carnet:read クォータ:読み取り
GET /me/playlists/{playlistId}1件のプレイリストとその曲を、順序どおりに要約形式で取得します。 carnet:read クォータ:読み取り

ソングブック、書き込み 8

メソッド パス スコープ クォータ
POST /me/songs曲をソングブックに追加します。変換が返すのと同じピボットペイロードです。重複を避けるためIdempotency-Keyを設定してください。 carnet:write クォータ:書き込み
PUT /me/songs/{songId}曲を完全に置き換えます(宣言的)。まだ存在しない場合は、そのidで新規作成されます。 carnet:write クォータ:書き込み
PATCH /me/songs/{songId}送信したフィールド(調、カポ、bpm、playlistIdsなど)のみを更新します。また、プロフィールへの曲の公開・非公開も切り替えます。 carnet:write クォータ:書き込み
DELETE /me/songs/{songId}曲をソングブックから削除します。ソフトデリートかつべき等で、すべてのプレイリストからも外れます。 carnet:write クォータ:書き込み
POST /me/playlistsプレイリストを作成します。songIdsは含まれる曲の順序付きリストで、送信した通りに保持されます。 carnet:write クォータ:書き込み
PUT /me/playlists/{playlistId}プレイリストを完全に置き換えます(宣言的)。songIdsは必須です。 carnet:write クォータ:書き込み
PATCH /me/playlists/{playlistId}プレイリストの名前変更、カバー絵文字の変更、または曲の並び順を完全に変更します。 carnet:write クォータ:書き込み
DELETE /me/playlists/{playlistId}プレイリスト自体を削除します。曲自体はソングブックと他の所属プレイリストに残ります。 carnet:write クォータ:書き込み

ソーシャル、読み取り専用 5

メソッド パス スコープ クォータ
GET /users/{handle}ハンドルによるアカウントの公開プロフィールヘッダーです。フォローしていない非公開アカウントの場合は、非公開カード(自己紹介や各種カウントなし)が返されます。 social:read クォータ:読み取り
GET /users/{handle}/songsアカウントがプロフィールに公開した曲です。audioPlayableは、お互いにフォローし合っている場合のみtrueになります。 social:read クォータ:読み取り
GET /users/{handle}/playlistsアカウントが公開したプレイリストです。songCountは、あなたが実際に見られるものだけをカウントします。 social:read クォータ:読み取り
GET /me/followersあなたをフォローしているアカウントです。status=accepted(既定)またはrequestedです。 social:read クォータ:読み取り
GET /me/followingあなたがフォローしているアカウントです。status=requestedでは、非公開アカウントへの保留中のリクエストが一覧表示されます。 social:read クォータ:読み取り

オーディオキューとステム 4

メソッド パス スコープ クォータ
POST /audioすでにソングブックにある曲について、コードと歌詞の自動解析、続いてアラインメントをキューに入れます。アプリと同じキューです。songIdはあなた自身の曲である必要があります。 audio:write クォータ:なし
GET /queueあなたのアカウントのオーディオ処理キューです: 処理中、待機中(rank付き)、そして過去7日間の完了分です。 queue:read クォータ:なし
GET /queue/{id}オーディオキューのジョブ1件で、あなた自身のものに限られます。未知のジョブや他人のジョブに対しても同じ、区別のつかない404が返されます。 queue:read クォータ:なし
DELETE /queue/{id}オーディオキューのジョブの1つをキャンセルします。解析がまだ完了していなかった場合のみ返還されます。 audio:write クォータ:なし

ステム分離 6

メソッド パス スコープ クォータ
GET /stem-tool/capabilities呼び出し元のステム分離の利用可否、制限、モデル、クォータを確認します。 convert:read クォータ:なし
GET /stem-tool/jobs任意のページカーソルを使って、呼び出し元の非公開の分離履歴を一覧表示します。 convert:read クォータ:なし
POST /stem-tool/jobs音声ファイルをアップロードし、2本または4本のステムに分離します。APIキーの利用にはPremiumが必要です。 stems:write クォータ:ステム
GET /stem-tool/jobs/{id}自分の分離ジョブの状態、進行状況、利用可能なファイルを取得します。 convert:read クォータ:なし
DELETE /stem-tool/jobs/{id}自分の分離ジョブをキャンセルします。 stems:write クォータ:なし
GET /stem-tool/jobs/{id}/files/{name}MP3のステムまたはZIPアーカイブをダウンロードするための短時間有効な署名付きURLを取得します。 convert:read クォータ:なし

API キーで呼び出す場合、これらのルートはすべて Premium アカウントが必要です。そうでない場合は 403(api-premium-required)が返ります。呼び出し元の上限は GET /stem-tool/capabilities で確認できます。

マスタリング 8

メソッド パス スコープ クォータ
GET /mastering/capabilities上限、設定の範囲、ラウドネス目標、内蔵プリセット、レンダリング権限。 公開(キー不要) クォータ:なし
GET /mastering/presetsマスタリングのプリセットを一覧表示します。 mastering:read クォータ:なし
POST /mastering/presetsマスタリングのプリセットを作成します(Idempotency-Key 必須)。 mastering:write クォータ:なし
DELETE /mastering/presets/{id}マスタリングのプリセットを削除します。 mastering:write クォータ:なし
POST /mastering/jobs音声をアップロードし、プリセットまたは設定でマスタリングを開始します。 mastering:write クォータ:マスタリング(無料は週3回、Premiumは無制限)
GET /mastering/jobs/{id}マスタリング処理の状態を取得します。 mastering:read クォータ:なし
DELETE /mastering/jobs/{id}マスタリング処理をキャンセルします。 mastering:write クォータ:なし
GET /mastering/jobs/{id}/resultマスタリング済みの WAV をダウンロードします。 mastering:read クォータ:なし

AI音楽検出 7 + 1 内部

メソッド パス スコープ クォータ
GET /ai-music/availabilityツールの利用可否、対応フォーマット、アカウントまたは訪問者の残りクォータ。 公開(キー不要) クォータ:なし
POST /ai-music/jobs音声ファイル、Spotifyリンク、音声への直接リンク、ISRCを送信します。未完了のジョブは1アカウントにつき1件まで。YouTubeには対応していません。 audio:write クォータ:AI検出
GET /ai-music/jobs進行中または最新の解析を取得します。 queue:read クォータ:なし
GET /ai-music/jobs/{id}解析の進行を追い、結果を読みます。 queue:read クォータ:なし
DELETE /ai-music/jobs/{id}解析をキャンセルし、一時ファイルを削除します。 audio:write クォータ:なし
GET /ai-music/history過去90日間の非公開履歴(1ページ30件)。アカウントが必要で、音声は保存されません。 queue:read クォータ:なし
DELETE /ai-music/history/{id}履歴からスキャンを削除します。成功した解析で消費したクォータは戻りません。 audio:write クォータ:なし
GET /ai-music/source/{token}/{filename}検出プロバイダー専用の一時アドレスで、有効期間は最長180秒です。クライアントから呼び出すことはありません。 内部 クォータ:なし

ヘルスと仕様 2

メソッド パス スコープ クォータ
GET /healthエンジンごと(OMR、オーディオ、ビデオなど)のサービス状態と準備状況。認証は不要です。 公開(キー不要) クォータ:なし
GET /openapi.jsonこの仕様を、機械可読なJSON形式で提供します。 公開(キー不要) クォータ:なし

この表と常に同期している、機械可読な完全な仕様:

https://jam-jam.org/api/v1/openapi.json OpenAPI仕様

クォータと制限

正確な残量はGET /me/usageと、各レスポンスのX-Quota-*ヘッダーで確認できます。

変換

無料アカウント
6 / 週
Premium
500 / 月
キーもセッションもなし
3 / 24時間

アプリのソングブック書き出しと同じカウンターです。

読み取りと書き込み

UTC基準の1日あたり無料アカウントPremium
読み取り(ソングブック、プロフィール)2,00020,000
書き込み(ソングブック)2005,000

X-Read-Quota-* · X-Write-Quota-*

変換によるステム分離

POST /jobs · output=stems

Premium の API キーが必要です。Premium でない場合は 403(premium-required)が返されます。

Premium
200 UTC基準の1日あたり

これらのルートを呼び出すことで、送信する音声の権利を保有していることを保証したものとみなされます。

詳しく
  • output=stems を指定した POST /jobs は、vocals、accompaniment、manifest.json を含む .zip を返します。
  • 必要なスコープ: stems:write と convert:write。
  • 変換とは別のカウンターで、UTC の暦日ごとに集計されます(直近24時間の移動枠ではありません)。
  • ステム分離ツール(/stem-tool/*)とは別物です。こちらを API キーで使う場合は Premium アカウントが必要で、上限も別に定められています(GET /stem-tool/capabilities)。

APIキーの取得

無料のJam Jamアカウントを作成し、アプリ(モバイルまたはWeb)で設定 > APIキーを開いてキーを作成します。キーはjj_live_で始まり、表示されるのは一度だけです。すぐにコピーしてください。1アカウントにつき最大5個まで作成でき、いつでも無効化できます。

エラー

すべてのルートのすべてのエラーは、application/problem+jsonオブジェクト(RFC 9457)であり、クライアントが分岐処理に使える安定したcodeフィールドを持ちます: quota-exhausted、rate-limited、unsupported-pair、not-foundなど。完全なカタログはOpenAPIスキーマ(components.schemas.Problem)にあります。

保存期間

アップロードされたファイルと生成された結果は、ジョブ作成から24時間後に削除されます。失敗したジョブを含め、それ以上保存されるものはありません。この期間を過ぎて結果を取得しようとすると410 Goneが返されます。

オープンソースクレジット

このAPIは実在するオープンソースエンジンの上に成り立っています。誠実に利用し、名前を明記してクレジットしています:

モデルとデータ

話者検出(Studio):声紋モデル WeSpeaker ResNet34-LM、WeNet プロジェクト(github.com/wenet-e2e/wespeaker)、VoxCeleb(VGG、オックスフォード大学)で学習、ライセンス CC BY 4.0(creativecommons.org/licenses/by/4.0/)。Jam Jam による改変:重みを半精度に変換。