API di Rilevamento Musica IA — Guida completa per sviluppatori 2026
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
- Scala: analizza in batch migliaia di tracce all'ora
- Automazione: integra nei flussi di submission, negli audit di catalogo, negli upload di streaming
- Personalizzazione: costruisci la tua dashboard, il tuo sistema di alert, le tue soglie di scoring
- Conformità: genera log di audit per i requisiti di watermarking dell'EU AI Act
- Conveniente: il pagamento a chiamata batte l'assunzione di revisori manuali
Avvio rapido — 60 secondi
- Registrati gratis su aisongchecker.pro (basta un'email)
- Passa a Pro (4,99€/mese) per sbloccare l'accesso all'API
- Vai su Dashboard → API e copia la tua
ASC_API_KEY - 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
| Endpoint | Metodo | Cosa fa |
|---|---|---|
/api/v1/analyze/file | POST | Carica un file audio, ottieni il risultato del rilevamento IA |
/api/v1/analyze/url | POST | Analizza un URL YouTube/Spotify/SoundCloud |
/api/v1/analyze/batch | POST | Invia fino a 100 tracce in una sola chiamata |
/api/v1/result/{id} | GET | Recupera il risultato di un job batch asincrono |
/api/v1/certificate/{id} | GET | Ottieni il certificato di autenticità (PDF, firmato) |
/api/v1/usage | GET | Uso 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
| Piano | Richieste/min | Richieste/giorno | Dimensione batch |
|---|---|---|---|
| Free | 10 | 50 | 1 |
| Pro | 60 | 5.000 | 100 |
| Business | 300 | 50.000 | 500 |
| Enterprise | Personalizzato | Illimitato | Personalizzato |
Header dei limiti di rate in ogni risposta:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 47
X-RateLimit-Reset: 1716422400
Gestione degli errori
| Codice HTTP | Significato | Cosa fare |
|---|---|---|
| 400 | Richiesta errata (formato file non valido, URL non supportato) | Controlla l'input, riprova con dati validi |
| 401 | Chiave API non valida | Controlla la chiave nella dashboard, ruotala se compromessa |
| 402 | Quota superata (piano free) | Passa a un piano superiore o attendi il reset |
| 413 | File troppo grande (max 50 MB) | Comprimi l'audio (invia comunque MP3 320 kbps) |
| 429 | Limite di rate raggiunto | Implementa un backoff esponenziale (vedi sotto) |
| 500/503 | Errore del server | Riprova 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
- Python:
pip install aisongchecker· GitHub - Node.js:
npm install @aisongchecker/sdk· GitHub - Java: dipendenza Maven, GitHub
- Go:
go get github.com/aisongchecker/go-sdk - Collection Postman: importa da /api-docs
Checklist per la produzione
- ☑️ Chiave API memorizzata solo lato server (variabile d'ambiente o secret manager)
- ☑️ Backoff esponenziale su 429/5xx
- ☑️ Verifica della firma dei webhook (HMAC-SHA256)
- ☑️ Cache dei risultati per hash audio (evita analisi duplicate)
- ☑️ Imposta
return_features=falseper un uso ad alto volume (risposte più leggere) - ☑️ Monitora
X-RateLimit-Remainingnelle dashboard - ☑️ Idempotenza: passa il tuo
request_idper deduplicare i retry