API Wykrywania Muzyki AI — Kompletny przewodnik dla deweloperów 2026

22 maja 2026 · Zespół AI Song Checker

Jeśli budujesz DSP, dystrybutora, platformę submissions A&R lub jakiekolwiek narzędzie, które musi programowo oznaczać muzykę generowaną przez AI, potrzebujesz API. Ten przewodnik prowadzi przez wszystko: uwierzytelnianie, endpointy, przykłady kodu w Pythonie/Node.js/Javie, limity zapytań, formaty odpowiedzi, obsługę błędów i wskazówki produkcyjne.

W przykładach kodu wykorzystamy REST API AI Song Checker — start jest darmowy (bez karty kredytowej), obsługuje wszystkie główne silniki muzyki AI (Suno, Udio, Riffusion, ElevenLabs Music, MusicGen, Stable Audio) i zwraca bogaty JSON, w tym wyniki pewności oraz atrybucję platformy.

Dlaczego integrować przez API zamiast przez interfejs

Szybki start — 60 sekund

  1. Zarejestruj się za darmo na aisongchecker.pro (wystarczy e-mail)
  2. Przejdź na plan Pro (4,99€/miesiąc), aby odblokować dostęp do API
  3. Wejdź w Panel → API i skopiuj swój ASC_API_KEY
  4. Wykonaj pierwsze zapytanie (zobacz przykład w Pythonie poniżej)

Uwierzytelnianie

Wszystkie zapytania do API używają HTTP Basic Auth lub tokenu Bearer w nagłówku Authorization. Zalecany jest Bearer:

Authorization: Bearer ASC_LIVE_xxxxxxxxxxxxxxxx

Twój klucz API ma pełny dostęp do konta — trzymaj go po stronie serwera, nigdy w kliencie JS ani w paczkach aplikacji mobilnej.

Przegląd endpointów

EndpointMetodaCo robi
/api/v1/analyze/filePOSTPrześlij plik audio, otrzymaj wynik wykrywania AI
/api/v1/analyze/urlPOSTAnalizuj adres URL z YouTube/Spotify/SoundCloud
/api/v1/analyze/batchPOSTPrześlij do 100 utworów w jednym zapytaniu
/api/v1/result/{id}GETPobierz wynik asynchronicznego zadania wsadowego
/api/v1/certificate/{id}GETPobierz certyfikat autentyczności (PDF, podpisany)
/api/v1/usageGETBieżące zużycie limitu + status limitu zapytań

Analiza pojedynczego pliku — 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}")

Przykładowa odpowiedź

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

Analiza adresu 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}`);
}

Analiza wsadowa — 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": "..." }

Limity zapytań

PlanZapytań/minZapytań/dzieńRozmiar wsadu
Free10501
Pro605 000100
Business30050 000500
EnterpriseNiestandardowyBez limituNiestandardowy

Nagłówki limitu zapytań w każdej odpowiedzi:

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

Obsługa błędów

Kod HTTPZnaczenieCo zrobić
400Błędne zapytanie (nieprawidłowy format pliku, nieobsługiwany URL)Sprawdź dane wejściowe, ponów z poprawnymi danymi
401Nieprawidłowy klucz APISprawdź klucz w panelu, wymień go, jeśli wyciekł
402Przekroczony limit (plan free)Zmień plan lub poczekaj na reset
413Plik za duży (maks. 50 MB)Skompresuj audio (nadal podawaj MP3 320 kbps)
429Osiągnięty limit zapytańZastosuj wykładniczy backoff (zobacz niżej)
500/503Błąd serweraPonów z backoffem. Mamy SLA 99,9%.

Wzorzec wykładniczego backoffu

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

Webhooki dla asynchronicznych zadań wsadowych

Dla wsadów >10 utworów wyniki przychodzą przez webhook (szybciej niż odpytywanie). Skonfiguruj webhook_url w zapytaniu wsadowym. Payload webhooka:

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

Zweryfikuj nagłówek X-ASC-Signature po stronie serwera przy użyciu HMAC-SHA256 ze swoim sekretem webhooka (ten sam schemat co w webhookach Stripe).

Zastosowania — realne przykłady

1. Platforma streamingowa — automatyczne oznaczanie uploadów

Przy uploadzie utworu wywołaj /analyze/file asynchronicznie. Jeśli ai_probability > 0.85, dodaj automatycznie etykietę „AI-Generated" (zgodnie z wymogami EU AI Act). Oznacz platform_attribution.top w metadanych dla przejrzystości.

2. Filtrowanie zgłoszeń A&R

Platformy w stylu SubmitHub wywołują API przy każdym uploadzie dema. Utwory z ai_probability > 0.7 trafiają na priorytet do weryfikacji przez człowieka. Oszczędza kuratorom godziny.

3. Music supervisor — due diligence przy licencjonowaniu

Przed licencjonowaniem utworu do filmu/TV przepuść go przez /analyze/file i poproś o podpisany certyfikat (HMAC-SHA256). Dołącz certyfikat do umowy licencyjnej jako dowód autorstwa człowieka.

4. Audyt katalogu dla wytwórni

Prześlij swój archiwalny katalog (10 tys.–1 mln utworów) przez /analyze/batch. Otrzymasz raport CSV z podejrzanymi utworami do weryfikacji przez człowieka. Cennik: ~$0.01 za utwór na planie Business.

Dostępne SDK

Lista kontrolna produkcyjna

Powiązane materiały

Related