API Deteksi Musik AI โ€” Panduan Pengembang Lengkap 2026

22 Mei 2026 ยท Tim AI Song Checker

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

Mulai cepat โ€” 60 detik

  1. Daftar gratis di aisongchecker.pro (cukup email)
  2. Upgrade ke Pro (4,99โ‚ฌ/bulan) untuk membuka akses API
  3. Buka Dashboard โ†’ API dan salin ASC_API_KEY Anda
  4. 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

EndpointMetodeFungsinya
/api/v1/analyze/filePOSTUnggah file audio, dapatkan hasil deteksi AI
/api/v1/analyze/urlPOSTAnalisis URL YouTube/Spotify/SoundCloud
/api/v1/analyze/batchPOSTKirim hingga 100 track dalam satu panggilan
/api/v1/result/{id}GETAmbil hasil job batch asinkron
/api/v1/certificate/{id}GETDapatkan sertifikat keaslian (PDF, bertanda tangan)
/api/v1/usageGETPenggunaan 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

TierPermintaan/menitPermintaan/hariUkuran batch
Free10501
Pro605.000100
Business30050.000500
EnterpriseKustomTanpa batasKustom

Header batas tingkat pada setiap respons:

X-RateLimit-Limit: 60
X-RateLimit-Remaining: 47
X-RateLimit-Reset: 1716422400

Penanganan error

Kode HTTPArtiYang harus dilakukan
400Permintaan buruk (format file tidak valid, URL tidak didukung)Periksa input, coba lagi dengan data yang valid
401API key tidak validPeriksa key di dashboard, ganti jika bocor
402Kuota terlampaui (tier gratis)Upgrade paket atau tunggu hingga reset
413File terlalu besar (maks 50 MB)Kompres audio (tetap gunakan MP3 320 kbps)
429Batas tingkat tercapaiTerapkan exponential backoff (lihat di bawah)
500/503Error serverCoba 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

Checklist produksi

Related