API di Rilevamento Musica IA — Guida completa per sviluppatori 2026

22 maggio 2026 · Il team di AI Song Checker

Pubblicato il 22 maggio 2026 · 15 min di lettura · Per sviluppatori che integrano il rilevamento di musica IA

Se stai costruendo un DSP, un distributore, una piattaforma di submission A&R o qualsiasi strumento che deve segnalare musica generata dall'IA in modo programmatico, hai bisogno di un'API. Questa guida ti accompagna attraverso tutto: autenticazione, endpoint, esempi di codice in Python/Node/Java, limiti di rate, formati di risposta, gestione degli errori e consigli per la produzione.

Useremo l'API REST di AI Song Checker per gli esempi di codice: è gratuita per iniziare (nessuna carta di credito), supporta tutti i principali motori di musica IA (Suno, Udio, Riffusion, ElevenLabs Music, MusicGen, Stable Audio) e restituisce un JSON ricco che include punteggi di confidenza e attribuzione della piattaforma.

Perché integrare via API invece che tramite UI

Avvio rapido — 60 secondi

  1. Registrati gratis su aisongchecker.pro (basta un'email)
  2. Passa a Pro (4,99€/mese) per sbloccare l'accesso all'API
  3. Vai su Dashboard → API e copia la tua ASC_API_KEY
  4. Effettua la tua prima chiamata (vedi l'esempio Python qui sotto)

Autenticazione

Tutte le richieste API usano HTTP Basic Auth o un Bearer token nell'header Authorization. Il Bearer è consigliato:

Authorization: Bearer ASC_LIVE_xxxxxxxxxxxxxxxx

La tua chiave API ha pieno accesso al tuo account: tienila lato server, mai nel JS client o nei bundle delle app mobile.

Panoramica degli endpoint

EndpointMetodoCosa fa
/api/v1/analyze/filePOSTCarica un file audio, ottieni il risultato del rilevamento IA
/api/v1/analyze/urlPOSTAnalizza un URL YouTube/Spotify/SoundCloud
/api/v1/analyze/batchPOSTInvia fino a 100 tracce in una sola chiamata
/api/v1/result/{id}GETRecupera il risultato di un job batch asincrono
/api/v1/certificate/{id}GETOttieni il certificato di autenticità (PDF, firmato)
/api/v1/usageGETUso attuale della quota + stato dei limiti di rate

Analizzare un singolo 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"Probabilità IA: {result['ai_probability']:.1%}")
print(f"Verdetto: {result['verdict']}")  # "ai" | "human" | "uncertain"
print(f"Piattaforma più probabile: {result['platform_attribution']['top']}")
print(f"Confidenza: {result['confidence']:.2f}")

Esempio di risposta

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

Analizzare un 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(`IA: ${(result.ai_probability * 100).toFixed(1)}%`);
if (result.verdict === 'ai') {
  console.log(`Piattaforma: ${result.platform_attribution.top}`);
}

Analisi in 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());
// Restituisce: {"job_id": "asc_job_xyz", "status": "queued", "estimated_completion": "..." }

Limiti di rate

PianoRichieste/minRichieste/giornoDimensione batch
Free10501
Pro605.000100
Business30050.000500
EnterprisePersonalizzatoIllimitatoPersonalizzato

Header dei limiti di rate in ogni risposta:

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

Gestione degli errori

Codice HTTPSignificatoCosa fare
400Richiesta errata (formato file non valido, URL non supportato)Controlla l'input, riprova con dati validi
401Chiave API non validaControlla la chiave nella dashboard, ruotala se compromessa
402Quota superata (piano free)Passa a un piano superiore o attendi il reset
413File troppo grande (max 50 MB)Comprimi l'audio (invia comunque MP3 320 kbps)
429Limite di rate raggiuntoImplementa un backoff esponenziale (vedi sotto)
500/503Errore del serverRiprova con backoff. Abbiamo uno SLA del 99,9%.

Pattern di backoff esponenziale

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

# Poi usa session.post(...) — ritenta automaticamente con 2s, 4s, 8s, 16s, 32s

Webhook per job batch asincroni

Per batch con >10 tracce, i risultati arrivano tramite webhook (più veloce del polling). Configura webhook_url nella richiesta batch. Payload del 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 }
}

Verifica l'header X-ASC-Signature lato server usando HMAC-SHA256 con il tuo webhook secret (stesso schema dei webhook di Stripe).

Casi d'uso — esempi reali

1. Piattaforma di streaming — segnalazione automatica degli upload

Al caricamento di una traccia, chiama /analyze/file in modo asincrono. Se ai_probability > 0.85, aggiungi automaticamente un'etichetta "Generato dall'IA" (secondo i requisiti dell'EU AI Act). Tagga platform_attribution.top nei metadati per trasparenza.

2. Filtraggio delle submission A&R

Le piattaforme in stile SubmitHub chiamano l'API a ogni upload di demo. Le tracce con ai_probability > 0.7 ottengono priorità nella revisione umana. Fa risparmiare ore ai curatori.

3. Music supervisor — due diligence sul licensing

Prima di concedere in licenza una traccia per film/TV, passala attraverso /analyze/file + richiedi il certificato firmato (HMAC-SHA256). Allega il certificato al contratto di licenza come prova della paternità umana.

4. Audit di catalogo per le etichette

Invia il tuo back catalog (10K-1M tracce) tramite /analyze/batch. Ottieni un report CSV delle tracce sospette per la revisione umana. Prezzo: ~0,01 $ per traccia con il piano Business.

SDK disponibili

Checklist per la produzione

Related