AI音楽検出API — 開発者向け完全ガイド2026
DSP、ディストリビューター、A&Rサブミッションプラットフォーム、その他AI生成音楽をプログラム的にフラグ付けする必要があるツールを構築しているなら、APIが必要です。このガイドはすべてを解説します: 認証、エンドポイント、Python/Node/Javaのコードサンプル、レート制限、レスポンス形式、エラー処理、そして本番運用のヒント。
コード例にはAI Song Checker REST APIを使用します。無料で始められ(クレジットカード不要)、主要なAI音楽エンジン(Suno、Udio、Riffusion、ElevenLabs Music、MusicGen、Stable Audio)をすべてサポートし、信頼度スコアやプラットフォーム帰属を含む豊富なJSONを返します。
UIではなくAPIで統合する理由
- スケール: 1時間に数千トラックを一括分析
- 自動化: サブミッションのワークフロー、カタログ監査、ストリーミングアップロードに組み込み
- カスタマイズ: 独自のダッシュボード、アラート、スコアリング閾値を構築
- コンプライアンス: EU AI法のウォーターマーク要件に対応した監査ログを生成
- コスト効率: 従量課金は手動レビュアーの雇用より安価
クイックスタート — 60秒
- aisongchecker.proで無料登録(メールアドレスのみ)
- Proプラン(€4.99/月)にアップグレードしてAPIアクセスを有効化
- ダッシュボード → APIに移動し、
ASC_API_KEYをコピー - 最初のコールを実行(下記のPythonサンプルを参照)
認証
すべてのAPIリクエストは、AuthorizationヘッダーでHTTP Basic認証またはBearerトークンを使用します。Bearerを推奨します:
Authorization: Bearer ASC_LIVE_xxxxxxxxxxxxxxxx
APIキーはアカウントへのフルアクセス権を持ちます。必ずサーバーサイドで保管し、クライアントのJSやモバイルアプリのバンドルには絶対に含めないでください。
エンドポイント概要
| エンドポイント | メソッド | 機能 |
|---|---|---|
/api/v1/analyze/file | POST | 音声ファイルをアップロードしてAI検出結果を取得 |
/api/v1/analyze/url | POST | YouTube/Spotify/SoundCloudのURLを分析 |
/api/v1/analyze/batch | POST | 最大100トラックを1コールで送信 |
/api/v1/result/{id} | GET | 非同期バッチジョブの結果を取得 |
/api/v1/certificate/{id} | GET | 真正性証明書を取得(PDF、署名付き) |
/api/v1/usage | GET | 現在のクォータ使用量 + レート制限ステータス |
単一ファイルの分析 — Python
import requests
API_KEY = "ASC_LIVE_your_key_here"
URL = "https://api.aisongchecker.pro/v1/analyze/file"
with open("track.mp3", "rb") as f:
response = requests.post(
URL,
headers={"Authorization": f"Bearer {API_KEY}"},
files={"audio": f},
data={"return_features": "true", "return_certificate": "true"},
)
result = response.json()
print(f"AI probability: {result['ai_probability']:.1%}")
print(f"Verdict: {result['verdict']}") # "ai" | "human" | "uncertain"
print(f"Most likely platform: {result['platform_attribution']['top']}")
print(f"Confidence: {result['confidence']:.2f}")
レスポンス例
{
"id": "asc_anl_2k3jX9pQmR8t",
"ai_probability": 0.967,
"verdict": "ai",
"confidence": 0.94,
"platform_attribution": {
"top": "suno",
"scores": {
"suno": 0.91,
"udio": 0.04,
"riffusion": 0.02,
"elevenlabs_music": 0.01,
"musicgen": 0.01,
"stable_audio": 0.01
},
"version_hint": "v5"
},
"watermarks": {
"c2pa_detected": true,
"synthid_detected": false,
"c2pa_signer": "suno.ai"
},
"features": {
"spectral_flatness_mean": 0.0182,
"phase_coherence_entropy": 2.41,
"mfcc_distance_baseline": 8.93,
"frame_similarity": 0.78
},
"engine_version": "ASC-v8.3",
"analyzed_at": "2026-05-22T18:42:11Z",
"certificate_url": "https://aisongchecker.pro/cert/asc_anl_2k3jX9pQmR8t.pdf"
}
URLの分析 — Node.js
const fetch = require('node-fetch');
const result = await fetch('https://api.aisongchecker.pro/v1/analyze/url', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.ASC_API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
url: 'https://www.youtube.com/watch?v=dQw4w9WgXcQ',
return_features: false
})
}).then(r => r.json());
console.log(`AI: ${(result.ai_probability * 100).toFixed(1)}%`);
if (result.verdict === 'ai') {
console.log(`Platform: ${result.platform_attribution.top}`);
}
バッチ分析 — Java
import java.net.http.*;
import java.net.URI;
HttpClient client = HttpClient.newHttpClient();
String json = """
{
"tracks": [
{"id": "t1", "url": "https://soundcloud.com/artist/track-1"},
{"id": "t2", "url": "https://open.spotify.com/track/abc123"},
{"id": "t3", "url": "https://youtu.be/xyz789"}
],
"webhook_url": "https://your-app.com/asc-webhook"
}""";
HttpRequest req = HttpRequest.newBuilder()
.uri(URI.create("https://api.aisongchecker.pro/v1/analyze/batch"))
.header("Authorization", "Bearer " + System.getenv("ASC_API_KEY"))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(json))
.build();
HttpResponse<String> res = client.send(req, HttpResponse.BodyHandlers.ofString());
// Returns: {"job_id": "asc_job_xyz", "status": "queued", "estimated_completion": "..." }
レート制限
| プラン | リクエスト/分 | リクエスト/日 | バッチサイズ |
|---|---|---|---|
| Free | 10 | 50 | 1 |
| Pro | 60 | 5,000 | 100 |
| Business | 300 | 50,000 | 500 |
| Enterprise | カスタム | 無制限 | カスタム |
すべてのレスポンスに含まれるレート制限ヘッダー:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 47
X-RateLimit-Reset: 1716422400
エラー処理
| HTTPコード | 意味 | 対処法 |
|---|---|---|
| 400 | 不正なリクエスト(無効なファイル形式、非対応URL) | 入力を確認し、有効なデータで再試行 |
| 401 | 無効なAPIキー | ダッシュボードでキーを確認、漏洩時はローテーション |
| 402 | クォータ超過(無料枠) | プランをアップグレードするかリセットを待つ |
| 413 | ファイルが大きすぎる(最大50 MB) | 音声を圧縮(MP3 320 kbpsでも可) |
| 429 | レート制限に到達 | 指数バックオフを実装(下記参照) |
| 500/503 | サーバーエラー | バックオフして再試行。SLA 99.9%を保証。 |
指数バックオフのパターン
import time, requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
session = requests.Session()
retries = Retry(
total=5, backoff_factor=2,
status_forcelist=[429, 500, 502, 503, 504],
allowed_methods=["POST"]
)
session.mount("https://", HTTPAdapter(max_retries=retries))
# Then use session.post(...) — auto retries with 2s, 4s, 8s, 16s, 32s
非同期バッチジョブ用のWebhook
10トラックを超えるバッチでは、結果はWebhook経由で届きます(ポーリングより高速)。バッチリクエストでwebhook_urlを設定してください。Webhookのペイロード:
POST https://your-app.com/asc-webhook
Content-Type: application/json
X-ASC-Signature: t=1716422400,v1=abc123...
{
"event": "batch.completed",
"job_id": "asc_job_xyz",
"results": [
{ "id": "t1", "ai_probability": 0.97, "verdict": "ai", "platform": "suno" },
{ "id": "t2", "ai_probability": 0.04, "verdict": "human" },
{ "id": "t3", "ai_probability": 0.81, "verdict": "ai", "platform": "udio" }
],
"stats": { "processed": 3, "errors": 0, "duration_ms": 12450 }
}
Webhookシークレットを使ったHMAC-SHA256(Stripe Webhookと同じ方式)で、サーバーサイドでX-ASC-Signatureヘッダーを検証してください。
ユースケース — 実例
1. ストリーミングプラットフォーム — アップロードの自動フラグ付け
トラックのアップロード時に/analyze/fileを非同期でコールします。ai_probability > 0.85の場合、EU AI法の要件に従って「AI生成」ラベルを自動的に付与します。透明性のためにメタデータでplatform_attribution.topをタグ付けします。
2. A&Rサブミッションのフィルタリング
SubmitHub型のプラットフォームは、各デモのアップロードごとにAPIをコールします。ai_probability > 0.7のトラックは人手によるレビューを優先します。キュレーターの時間を大幅に節約できます。
3. 音楽スーパーバイザー — ライセンスのデューデリジェンス
映画/テレビ向けにトラックをライセンスする前に、/analyze/fileで分析し、署名付き証明書(HMAC-SHA256)をリクエストします。人間による著作を証明するものとして、証明書をライセンス契約書に添付します。
4. レーベル向けカタログ監査
バックカタログ(1万〜100万トラック)を/analyze/batchで送信します。人手によるレビュー用に、疑わしいトラックのCSVレポートを取得できます。価格: Businessプランで1トラックあたり約$0.01。
提供されているSDK
- Python:
pip install aisongchecker· GitHub - Node.js:
npm install @aisongchecker/sdk· GitHub - Java: Maven依存関係、GitHub
- Go:
go get github.com/aisongchecker/go-sdk - Postmanコレクション: /api-docsからインポート
本番運用チェックリスト
- ☑️ APIキーはサーバーサイドのみに保管(環境変数またはシークレットマネージャー)
- ☑️ 429/5xxで指数バックオフ
- ☑️ Webhook署名の検証(HMAC-SHA256)
- ☑️ 音声ハッシュで結果をキャッシュ(重複分析を回避)
- ☑️ 大量利用時は
return_features=falseを設定(レスポンスを軽量化) - ☑️ ダッシュボードで
X-RateLimit-Remainingを監視 - ☑️ 冪等性: 独自の
request_idを渡して再試行を重複排除