API Deteksi Musik AI โ Panduan Pengembang Lengkap 2026
Jika Anda membangun DSP, distributor, platform submission A&R, atau tool apa pun yang perlu menandai musik yang dihasilkan AI secara programatik, Anda membutuhkan API. Panduan ini memandu Anda melalui semuanya: autentikasi, endpoint, contoh kode dalam Python/Node/Java, batas tingkat, format respons, penanganan error, dan tips produksi.
Kami akan menggunakan REST API AI Song Checker untuk contoh kode โ gratis untuk memulai (tanpa kartu kredit), mendukung semua engine musik AI utama (Suno, Udio, Riffusion, ElevenLabs Music, MusicGen, Stable Audio), dan mengembalikan JSON kaya termasuk skor kepercayaan dan atribusi platform.
Mengapa integrasi lewat API alih-alih UI
- Skala: analisis batch ribuan track per jam
- Otomatisasi: integrasikan ke dalam alur kerja submission, audit katalog, unggahan streaming
- Kustomisasi: bangun dashboard, alerting, dan ambang skor Anda sendiri
- Kepatuhan: hasilkan log audit untuk persyaratan watermarking EU AI Act
- Hemat biaya: bayar per panggilan lebih murah daripada mempekerjakan reviewer manual
Mulai cepat โ 60 detik
- Daftar gratis di aisongchecker.pro (cukup email)
- Upgrade ke Pro (4,99โฌ/bulan) untuk membuka akses API
- Buka Dashboard โ API dan salin
ASC_API_KEYAnda - Buat panggilan pertama Anda (lihat contoh Python di bawah)
Autentikasi
Semua permintaan API menggunakan HTTP Basic Auth atau token Bearer dalam header Authorization. Bearer direkomendasikan:
Authorization: Bearer ASC_LIVE_xxxxxxxxxxxxxxxx
API key Anda memiliki akses penuh ke akun Anda โ simpan di sisi server, jangan pernah di JS klien atau bundle aplikasi mobile.
Ikhtisar endpoint
| Endpoint | Metode | Fungsinya |
|---|---|---|
/api/v1/analyze/file | POST | Unggah file audio, dapatkan hasil deteksi AI |
/api/v1/analyze/url | POST | Analisis URL YouTube/Spotify/SoundCloud |
/api/v1/analyze/batch | POST | Kirim hingga 100 track dalam satu panggilan |
/api/v1/result/{id} | GET | Ambil hasil job batch asinkron |
/api/v1/certificate/{id} | GET | Dapatkan sertifikat keaslian (PDF, bertanda tangan) |
/api/v1/usage | GET | Penggunaan kuota saat ini + status batas tingkat |
Analisis satu file โ 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}")
Contoh respons
{
"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"
}
Analisis 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}`);
}
Analisis batch โ 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": "..." }
Batas tingkat
| Tier | Permintaan/menit | Permintaan/hari | Ukuran batch |
|---|---|---|---|
| Free | 10 | 50 | 1 |
| Pro | 60 | 5.000 | 100 |
| Business | 300 | 50.000 | 500 |
| Enterprise | Kustom | Tanpa batas | Kustom |
Header batas tingkat pada setiap respons:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 47
X-RateLimit-Reset: 1716422400
Penanganan error
| Kode HTTP | Arti | Yang harus dilakukan |
|---|---|---|
| 400 | Permintaan buruk (format file tidak valid, URL tidak didukung) | Periksa input, coba lagi dengan data yang valid |
| 401 | API key tidak valid | Periksa key di dashboard, ganti jika bocor |
| 402 | Kuota terlampaui (tier gratis) | Upgrade paket atau tunggu hingga reset |
| 413 | File terlalu besar (maks 50 MB) | Kompres audio (tetap gunakan MP3 320 kbps) |
| 429 | Batas tingkat tercapai | Terapkan exponential backoff (lihat di bawah) |
| 500/503 | Error server | Coba lagi dengan backoff. Kami memiliki SLA 99,9%. |
Pola exponential backoff
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 untuk job batch asinkron
Untuk batch >10 track, hasil tiba melalui webhook (lebih cepat daripada polling). Konfigurasikan webhook_url dalam permintaan batch. Payload 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 }
}
Verifikasi header X-ASC-Signature di sisi server menggunakan HMAC-SHA256 dengan secret webhook Anda (skema yang sama dengan webhook Stripe).
Kasus penggunaan โ contoh nyata
1. Platform streaming โ tandai unggahan otomatis
Saat track diunggah, panggil /analyze/file secara asinkron. Jika ai_probability > 0.85, tambahkan label "AI-Generated" secara otomatis (sesuai persyaratan EU AI Act). Tandai platform_attribution.top dalam metadata untuk transparansi.
2. Penyaringan submission A&R
Platform bergaya SubmitHub memanggil API pada setiap unggahan demo. Track dengan ai_probability > 0.7 mendapat prioritas tinjauan manusia. Menghemat berjam-jam waktu kurator.
3. Music supervisor โ uji tuntas lisensi
Sebelum melisensikan track untuk film/TV, jalankan melalui /analyze/file + minta sertifikat bertanda tangan (HMAC-SHA256). Lampirkan sertifikat ke kontrak lisensi sebagai bukti kepengarangan manusia.
4. Audit katalog untuk label
Kirim katalog lama Anda (10K-1M track) melalui /analyze/batch. Dapatkan laporan CSV berisi track mencurigakan untuk tinjauan manusia. Harga: ~$0,01 per track di tier Business.
SDK yang tersedia
- Python:
pip install aisongcheckerยท GitHub - Node.js:
npm install @aisongchecker/sdkยท GitHub - Java: dependensi Maven, GitHub
- Go:
go get github.com/aisongchecker/go-sdk - Koleksi Postman: impor dari /api-docs
Checklist produksi
- โ๏ธ API key disimpan hanya di sisi server (variabel env atau secret manager)
- โ๏ธ Exponential backoff pada 429/5xx
- โ๏ธ Verifikasi tanda tangan webhook (HMAC-SHA256)
- โ๏ธ Cache hasil berdasarkan hash audio (hindari analisis duplikat)
- โ๏ธ Atur
return_features=falseuntuk penggunaan volume tinggi (respons lebih kecil) - โ๏ธ Pantau
X-RateLimit-Remainingdi dashboard - โ๏ธ Idempotensi: kirim
request_idAnda sendiri untuk deduplikasi retry