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로 통합하는 이유
- 확장성: 시간당 수천 개의 트랙을 일괄 분석
- 자동화: 제출 워크플로, 카탈로그 감사, 스트리밍 업로드에 통합
- 커스터마이징: 자체 대시보드, 알림, 점수 임곗값 구축
- 규정 준수: EU AI Act 워터마킹 요건을 위한 감사 로그 생성
- 비용 효율성: 호출당 과금이 수동 검토자 고용보다 저렴
빠른 시작 — 60초
- aisongchecker.pro에서 무료로 가입(이메일만 필요)
- Pro(4,99€/월)로 업그레이드하여 API 접근 권한 잠금 해제
- 대시보드 → API로 이동하여
ASC_API_KEY복사 - 첫 호출 실행(아래 Python 샘플 참고)
인증
모든 API 요청은 Authorization 헤더에서 HTTP Basic Auth 또는 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개 트랙 제출 |
/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 | 서버 오류 | 백오프로 재시도. 99.9% SLA 보장. |
지수 백오프 패턴
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
비동기 일괄 작업을 위한 웹훅
10개 초과 트랙의 일괄 작업에서는 결과가 웹훅을 통해 전달됩니다(폴링보다 빠름). 일괄 요청에 webhook_url을 설정하세요. 웹훅 페이로드:
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 }
}
웹훅 시크릿과 HMAC-SHA256을 사용해 서버 측에서 X-ASC-Signature 헤더를 검증하세요(Stripe 웹훅과 동일한 방식).
사용 사례 — 실제 예시
1. 스트리밍 플랫폼 — 업로드 자동 표시
트랙 업로드 시 /analyze/file을 비동기로 호출합니다. ai_probability > 0.85이면 자동으로 "AI 생성" 라벨을 추가합니다(EU AI Act 요건에 따라). 투명성을 위해 메타데이터에 platform_attribution.top을 태그합니다.
2. A&R 제출 필터링
SubmitHub 스타일 플랫폼은 각 데모 업로드 시 API를 호출합니다. ai_probability > 0.7인 트랙은 사람의 검토 우선순위를 받습니다. 큐레이터의 시간을 크게 절약합니다.
3. 음악 감독 — 라이선싱 실사
영화/TV용으로 트랙을 라이선싱하기 전에 /analyze/file을 실행하고 서명된 인증서(HMAC-SHA256)를 요청하세요. 인증서를 인간 저작권 증명으로 라이선싱 계약서에 첨부합니다.
4. 레이블을 위한 카탈로그 감사
백 카탈로그(1만~100만 트랙)를 /analyze/batch로 전송하세요. 사람의 검토를 위한 의심 트랙 CSV 리포트를 받습니다. 가격: Business 등급에서 트랙당 약 $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에 대한 지수 백오프
- ☑️ 웹훅 서명 검증(HMAC-SHA256)
- ☑️ 오디오 해시로 결과 캐싱(중복 분석 방지)
- ☑️ 대량 사용 시
return_features=false설정(응답 크기 축소) - ☑️ 대시보드에서
X-RateLimit-Remaining모니터링 - ☑️ 멱등성: 자체
request_id를 전달하여 재시도 중복 제거