AI-Muziek Detectie API — Volledige ontwikkelaarsgids 2026
Als je een DSP, distributeur, A&R-inzendplatform of een andere tool bouwt die programmatisch AI-gegenereerde muziek moet markeren, heb je een API nodig. Deze gids neemt alles met je door: authenticatie, endpoints, codevoorbeelden in Python/Node/Java, rate limits, responseformaten, error handling en productietips.
We gebruiken de AI Song Checker REST API voor de codevoorbeelden — gratis om mee te starten (geen creditcard), met ondersteuning voor alle grote AI-muziekengines (Suno, Udio, Riffusion, ElevenLabs Music, MusicGen, Stable Audio) en rijke JSON als resultaat, inclusief confidence-scores en platformattributie.
Waarom integreren via API in plaats van de UI
- Schaal: analyseer duizenden tracks per uur in batch
- Automatisering: integreer in inzendworkflows, catalogusaudits, streaming-uploads
- Maatwerk: bouw je eigen dashboard, alerting en scoredrempels
- Compliance: genereer auditlogs voor de watermerkvereisten van de EU AI Act
- Kostenefficiënt: betalen per call is goedkoper dan handmatige reviewers inhuren
Snelstart — 60 seconden
- Meld je gratis aan op aisongchecker.pro (alleen een e-mailadres)
- Upgrade naar Pro (€4,99/maand) om API-toegang te ontgrendelen
- Ga naar Dashboard → API en kopieer je
ASC_API_KEY - Doe je eerste call (zie het Python-voorbeeld hieronder)
Authenticatie
Alle API-verzoeken gebruiken HTTP Basic Auth of een Bearer-token in de Authorization-header. Bearer wordt aanbevolen:
Authorization: Bearer ASC_LIVE_xxxxxxxxxxxxxxxx
Je API-sleutel geeft volledige toegang tot je account — bewaar hem server-side, nooit in client-side JS of in mobiele app-bundles.
Endpoints in het kort
| Endpoint | Methode | Wat het doet |
|---|---|---|
/api/v1/analyze/file | POST | Upload een audiobestand, krijg het AI-detectieresultaat |
/api/v1/analyze/url | POST | Analyseer een YouTube-/Spotify-/SoundCloud-URL |
/api/v1/analyze/batch | POST | Dien tot 100 tracks in één call in |
/api/v1/result/{id} | GET | Haal het resultaat van een async batchjob op |
/api/v1/certificate/{id} | GET | Krijg een echtheidscertificaat (PDF, ondertekend) |
/api/v1/usage | GET | Huidig quotagebruik + rate-limitstatus |
Eén bestand analyseren — 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}")
Voorbeeldrespons
{
"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"
}
Een URL analyseren — 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}`);
}
Batchanalyse — 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": "..." }
Rate limits
| Tier | Verzoeken/min | Verzoeken/dag | Batchgrootte |
|---|---|---|---|
| Free | 10 | 50 | 1 |
| Pro | 60 | 5.000 | 100 |
| Business | 300 | 50.000 | 500 |
| Enterprise | Op maat | Onbeperkt | Op maat |
Rate-limitheaders in elke response:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 47
X-RateLimit-Reset: 1716422400
Error handling
| HTTP-code | Betekenis | Wat te doen |
|---|---|---|
| 400 | Ongeldig verzoek (ongeldig bestandsformaat, URL niet ondersteund) | Controleer de input, probeer opnieuw met geldige data |
| 401 | Ongeldige API-sleutel | Controleer de sleutel in het dashboard, roteer bij een lek |
| 402 | Quota overschreden (free tier) | Upgrade je plan of wacht tot de reset |
| 413 | Bestand te groot (max. 50 MB) | Comprimeer de audio (MP3 320 kbps aanleveren blijft prima) |
| 429 | Rate limit bereikt | Implementeer exponential backoff (zie hieronder) |
| 500/503 | Serverfout | Probeer opnieuw met backoff. Onze SLA is 99.9%. |
Exponential-backoffpatroon
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))
# Gebruik daarna session.post(...) — probeert automatisch opnieuw met 2s, 4s, 8s, 16s, 32s
Webhooks voor async batchjobs
Voor batches van >10 tracks komen de resultaten binnen via webhook (sneller dan pollen). Configureer webhook_url in het batchverzoek. Webhook-payload:
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 }
}
Verifieer de X-ASC-Signature-header server-side met HMAC-SHA256 en je webhook-secret (hetzelfde schema als Stripe-webhooks).
Use cases — echte voorbeelden
1. Streamingplatform — uploads automatisch markeren
Roep bij het uploaden van een track /analyze/file async aan. Als ai_probability > 0.85, voeg dan automatisch een label "AI-Generated" toe (conform de vereisten van de EU AI Act). Tag platform_attribution.top in de metadata voor transparantie.
2. A&R-inzendfiltering
SubmitHub-achtige platforms roepen de API aan bij elke demo-upload. Tracks met ai_probability > 0.7 krijgen prioriteit voor menselijke review. Dat scheelt curators uren werk.
3. Muzieksupervisor — due diligence bij licenties
Voordat je een track licentieert voor film of tv, haal je hem door /analyze/file en vraag je het ondertekende certificaat op (HMAC-SHA256). Voeg het certificaat als bewijs van menselijk auteurschap toe aan het licentiecontract.
4. Catalogusaudit voor labels
Stuur je back-catalogus (10K-1M tracks) via /analyze/batch. Je krijgt een CSV-rapport van verdachte tracks voor menselijke review. Prijs: ~$0.01 per track op Business-niveau.
Beschikbare SDK's
- Python:
pip install aisongchecker· GitHub - Node.js:
npm install @aisongchecker/sdk· GitHub - Java: Maven-dependency, GitHub
- Go:
go get github.com/aisongchecker/go-sdk - Postman-collectie: importeer via /api-docs
Productiechecklist
- ☑️ API-sleutel alleen server-side opgeslagen (env-var of secret manager)
- ☑️ Exponential backoff bij 429/5xx
- ☑️ Verificatie van de webhook-signature (HMAC-SHA256)
- ☑️ Cache resultaten op audio-hash (voorkom dubbele analyses)
- ☑️ Zet
return_features=falsevoor high-volume gebruik (kleinere responses) - ☑️ Monitor
X-RateLimit-Remainingin dashboards - ☑️ Idempotentie: geef je eigen
request_idmee om retries te dedupliceren