AI-Muziek Detectie API — Volledige ontwikkelaarsgids 2026

22 mei 2026 · Het AI Song Checker-team

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

Snelstart — 60 seconden

  1. Meld je gratis aan op aisongchecker.pro (alleen een e-mailadres)
  2. Upgrade naar Pro (€4,99/maand) om API-toegang te ontgrendelen
  3. Ga naar Dashboard → API en kopieer je ASC_API_KEY
  4. 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

EndpointMethodeWat het doet
/api/v1/analyze/filePOSTUpload een audiobestand, krijg het AI-detectieresultaat
/api/v1/analyze/urlPOSTAnalyseer een YouTube-/Spotify-/SoundCloud-URL
/api/v1/analyze/batchPOSTDien tot 100 tracks in één call in
/api/v1/result/{id}GETHaal het resultaat van een async batchjob op
/api/v1/certificate/{id}GETKrijg een echtheidscertificaat (PDF, ondertekend)
/api/v1/usageGETHuidig 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

TierVerzoeken/minVerzoeken/dagBatchgrootte
Free10501
Pro605.000100
Business30050.000500
EnterpriseOp maatOnbeperktOp maat

Rate-limitheaders in elke response:

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

Error handling

HTTP-codeBetekenisWat te doen
400Ongeldig verzoek (ongeldig bestandsformaat, URL niet ondersteund)Controleer de input, probeer opnieuw met geldige data
401Ongeldige API-sleutelControleer de sleutel in het dashboard, roteer bij een lek
402Quota overschreden (free tier)Upgrade je plan of wacht tot de reset
413Bestand te groot (max. 50 MB)Comprimeer de audio (MP3 320 kbps aanleveren blijft prima)
429Rate limit bereiktImplementeer exponential backoff (zie hieronder)
500/503ServerfoutProbeer 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

Productiechecklist

Related