API de Detección de Música IA — Guía completa para desarrolladores 2026
Si estás construyendo un DSP, distribuidor, plataforma de submissions A&R o cualquier herramienta que necesite marcar música generada por IA de forma programática, necesitas una API. Esta guía te muestra todo: autenticación, endpoints, ejemplos de código en Python/Node/Java, límites de tasa, formatos de respuesta, manejo de errores y consejos para producción.
Usaremos la API REST de AI Song Checker para los ejemplos de código: es gratis para empezar (sin tarjeta de crédito), admite todos los principales motores de música IA (Suno, Udio, Riffusion, ElevenLabs Music, MusicGen, Stable Audio) y devuelve un JSON completo que incluye puntuaciones de confianza y atribución de plataforma.
Por qué integrar vía API en lugar de la interfaz
- Escala: analiza por lotes miles de pistas por hora
- Automatización: intégralo en flujos de submissions, auditorías de catálogo, subidas a streaming
- Personalización: crea tu propio panel, alertas y umbrales de puntuación
- Cumplimiento: genera registros de auditoría para los requisitos de marca de agua de la EU AI Act
- Rentabilidad: pagar por llamada supera a contratar revisores manuales
Inicio rápido — 60 segundos
- Regístrate gratis en aisongchecker.pro (solo un email)
- Pasa a Pro (4,99€/mes) para desbloquear el acceso a la API
- Ve a Panel → API y copia tu
ASC_API_KEY - Haz tu primera llamada (mira el ejemplo en Python más abajo)
Autenticación
Todas las solicitudes a la API usan HTTP Basic Auth o un token Bearer en la cabecera Authorization. Se recomienda Bearer:
Authorization: Bearer ASC_LIVE_xxxxxxxxxxxxxxxx
Tu clave de API tiene acceso completo a tu cuenta: manténla en el servidor, nunca en JS del cliente ni en los bundles de una app móvil.
Resumen de endpoints
| Endpoint | Método | Qué hace |
|---|---|---|
/api/v1/analyze/file | POST | Sube un archivo de audio y obtén el resultado de detección de IA |
/api/v1/analyze/url | POST | Analiza una URL de YouTube/Spotify/SoundCloud |
/api/v1/analyze/batch | POST | Envía hasta 100 pistas en una sola llamada |
/api/v1/result/{id} | GET | Recupera el resultado de un trabajo por lotes asíncrono |
/api/v1/certificate/{id} | GET | Obtén el certificado de autenticidad (PDF, firmado) |
/api/v1/usage | GET | Uso actual de la cuota + estado del límite de tasa |
Analizar un solo archivo — 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}")
Ejemplo de respuesta
{
"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"
}
Analizar una 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}`);
}
Análisis por lotes — 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());
// Devuelve: {"job_id": "asc_job_xyz", "status": "queued", "estimated_completion": "..." }
Límites de tasa
| Plan | Solicitudes/min | Solicitudes/día | Tamaño de lote |
|---|---|---|---|
| Free | 10 | 50 | 1 |
| Pro | 60 | 5.000 | 100 |
| Business | 300 | 50.000 | 500 |
| Enterprise | Personalizado | Ilimitado | Personalizado |
Cabeceras de límite de tasa en cada respuesta:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 47
X-RateLimit-Reset: 1716422400
Manejo de errores
| Código HTTP | Significado | Qué hacer |
|---|---|---|
| 400 | Solicitud incorrecta (formato de archivo inválido, URL no admitida) | Revisa la entrada, reintenta con datos válidos |
| 401 | Clave de API inválida | Revisa la clave en el panel, rótala si se ha filtrado |
| 402 | Cuota superada (plan gratuito) | Mejora el plan o espera al reinicio |
| 413 | Archivo demasiado grande (máx. 50 MB) | Comprime el audio (aún válido con MP3 a 320 kbps) |
| 429 | Límite de tasa alcanzado | Implementa backoff exponencial (mira abajo) |
| 500/503 | Error del servidor | Reintenta con backoff. Tenemos un SLA del 99,9%. |
Patrón de backoff exponencial
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))
# Luego usa session.post(...) — reintenta automáticamente a los 2s, 4s, 8s, 16s, 32s
Webhooks para trabajos por lotes asíncronos
Para lotes de más de 10 pistas, los resultados llegan por webhook (más rápido que el polling). Configura webhook_url en la solicitud del lote. 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 la cabecera X-ASC-Signature en el servidor usando HMAC-SHA256 con tu secreto de webhook (el mismo esquema que los webhooks de Stripe).
Casos de uso — ejemplos reales
1. Plataforma de streaming — marcar subidas automáticamente
Al subir una pista, llama a /analyze/file de forma asíncrona. Si ai_probability > 0.85, añade automáticamente una etiqueta "Generada por IA" (según los requisitos de la EU AI Act). Etiqueta platform_attribution.top en los metadatos para mayor transparencia.
2. Filtrado de submissions A&R
Las plataformas tipo SubmitHub llaman a la API en cada demo subida. Las pistas con ai_probability > 0.7 reciben prioridad de revisión humana. Ahorra horas a los curadores.
3. Supervisor musical — due diligence de licencias
Antes de licenciar una pista para cine/TV, pásala por /analyze/file y solicita el certificado firmado (HMAC-SHA256). Adjunta el certificado al contrato de licencia como prueba de autoría humana.
4. Auditoría de catálogo para sellos
Envía tu catálogo histórico (de 10K a 1M de pistas) vía /analyze/batch. Obtén un informe CSV de las pistas sospechosas para revisión humana. Precio: ~0,01 $ por pista en el plan Business.
SDKs disponibles
- Python:
pip install aisongchecker· GitHub - Node.js:
npm install @aisongchecker/sdk· GitHub - Java: dependencia Maven, GitHub
- Go:
go get github.com/aisongchecker/go-sdk - Colección de Postman: impórtala desde /api-docs
Checklist de producción
- ☑️ Clave de API guardada solo en el servidor (variable de entorno o gestor de secretos)
- ☑️ Backoff exponencial ante 429/5xx
- ☑️ Verificación de la firma del webhook (HMAC-SHA256)
- ☑️ Cachea los resultados por hash de audio (evita análisis duplicados)
- ☑️ Fija
return_features=falsepara uso de alto volumen (respuestas más pequeñas) - ☑️ Monitoriza
X-RateLimit-Remainingen tus paneles - ☑️ Idempotencia: pasa tu propio
request_idpara deduplicar los reintentos