KI-Musik-Erkennung API — Vollständiger Entwicklerleitfaden 2026

22. Mai 2026 · Das AI Song Checker Team

Wenn du eine DSP, einen Distributor, eine A&R-Einreichungsplattform oder ein beliebiges Tool baust, das KI-generierte Musik programmatisch kennzeichnen muss, brauchst du eine API. Dieser Guide führt dich durch alles: Authentifizierung, Endpunkte, Code-Beispiele in Python/Node/Java, Rate Limits, Antwortformate, Fehlerbehandlung und Praxis-Tipps.

Für die Code-Beispiele verwenden wir die AI Song Checker REST API — der Einstieg ist kostenlos (keine Kreditkarte), sie unterstützt alle wichtigen KI-Musik-Engines (Suno, Udio, Riffusion, ElevenLabs Music, MusicGen, Stable Audio) und liefert umfangreiches JSON inklusive Confidence-Scores und Plattform-Zuordnung.

Warum über die API integrieren statt über die Oberfläche

Schnellstart — 60 Sekunden

  1. Kostenlos registrieren auf aisongchecker.pro (nur eine E-Mail nötig)
  2. Auf Pro upgraden (4,99€/Monat), um den API-Zugriff freizuschalten
  3. Zu Dashboard → API gehen und den ASC_API_KEY kopieren
  4. Den ersten Aufruf ausführen (siehe Python-Beispiel unten)

Authentifizierung

Alle API-Anfragen nutzen HTTP Basic Auth oder ein Bearer-Token im Authorization-Header. Bearer wird empfohlen:

Authorization: Bearer ASC_LIVE_xxxxxxxxxxxxxxxx

Dein API-Schlüssel hat vollen Zugriff auf dein Konto — bewahre ihn ausschließlich serverseitig auf, niemals in Client-JS oder in Mobile-App-Bundles.

Übersicht der Endpunkte

EndpunktMethodeFunktion
/api/v1/analyze/filePOSTAudiodatei hochladen, KI-Erkennungsergebnis erhalten
/api/v1/analyze/urlPOSTEine YouTube-/Spotify-/SoundCloud-URL analysieren
/api/v1/analyze/batchPOSTBis zu 100 Tracks in einem Aufruf einreichen
/api/v1/result/{id}GETErgebnis eines asynchronen Batch-Jobs abrufen
/api/v1/certificate/{id}GETEchtheitszertifikat abrufen (PDF, signiert)
/api/v1/usageGETAktueller Kontingentverbrauch + Rate-Limit-Status

Eine einzelne Datei analysieren — 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}")

Beispielantwort

{
  "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"
}

Eine URL analysieren — 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}`);
}

Batch-Analyse — 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());
// Gibt zurück: {"job_id": "asc_job_xyz", "status": "queued", "estimated_completion": "..." }

Rate Limits

TarifAnfragen/Min.Anfragen/TagBatch-Größe
Free10501
Pro605.000100
Business30050.000500
EnterpriseIndividuellUnbegrenztIndividuell

Rate-Limit-Header in jeder Antwort:

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

Fehlerbehandlung

HTTP-CodeBedeutungMaßnahme
400Ungültige Anfrage (ungültiges Dateiformat, URL nicht unterstützt)Eingabe prüfen, mit gültigen Daten erneut versuchen
401Ungültiger API-SchlüsselSchlüssel im Dashboard prüfen, bei Leak rotieren
402Kontingent überschritten (Free-Tier)Tarif upgraden oder bis zum Reset warten
413Datei zu groß (max. 50 MB)Audio komprimieren (weiterhin MP3 320 kbps übergeben)
429Rate-Limit erreichtExponentielles Backoff implementieren (siehe unten)
500/503ServerfehlerMit Backoff erneut versuchen. Wir bieten 99,9 % SLA.

Muster für exponentielles 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))

# Dann session.post(...) verwenden — automatische Wiederholungen mit 2s, 4s, 8s, 16s, 32s

Webhooks für asynchrone Batch-Jobs

Bei Batches mit >10 Tracks kommen die Ergebnisse per Webhook (schneller als Polling). Konfiguriere webhook_url in der Batch-Anfrage. 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 }
}

Verifiziere den X-ASC-Signature-Header serverseitig mittels HMAC-SHA256 mit deinem Webhook-Secret (dasselbe Schema wie bei Stripe-Webhooks).

Anwendungsfälle — echte Beispiele

1. Streaming-Plattform — Uploads automatisch kennzeichnen

Rufe beim Track-Upload /analyze/file asynchron auf. Wenn ai_probability > 0.85, wird automatisch ein „AI-Generated“-Label vergeben (gemäß den Anforderungen des EU AI Act). Kennzeichne platform_attribution.top aus Transparenzgründen in den Metadaten.

2. A&R-Einreichungsfilter

Plattformen im SubmitHub-Stil rufen die API bei jedem Demo-Upload auf. Tracks mit ai_probability > 0.7 erhalten Priorität für die manuelle Prüfung. Das spart Kuratoren Stunden.

3. Music Supervisor — Lizenz-Due-Diligence

Bevor ein Track für Film/TV lizenziert wird, lasse ihn durch /analyze/file laufen und fordere das signierte Zertifikat an (HMAC-SHA256). Hänge das Zertifikat als Nachweis menschlicher Urheberschaft an den Lizenzvertrag an.

4. Katalog-Audit für Labels

Schicke deinen Backkatalog (10K–1M Tracks) über /analyze/batch. Erhalte einen CSV-Report verdächtiger Tracks für die manuelle Prüfung. Preis: ca. 0,01 $ pro Track im Business-Tarif.

Verfügbare SDKs

Produktions-Checkliste

Related