API de Detecção de Música IA — Guia completo para desenvolvedores 2026

22 de maio de 2026 · Equipe AI Song Checker

Se você está construindo um DSP, distribuidor, plataforma de submissão A&R ou qualquer ferramenta que precise sinalizar música gerada por IA de forma programática, você precisa de uma API. Este guia mostra tudo: autenticação, endpoints, exemplos de código em Python/Node/Java, limites de taxa, formatos de resposta, tratamento de erros e dicas de produção.

Usaremos a API REST do AI Song Checker para os exemplos de código — é gratuita para começar (sem cartão de crédito), suporta todos os principais motores de música IA (Suno, Udio, Riffusion, ElevenLabs Music, MusicGen, Stable Audio) e retorna JSON detalhado, incluindo pontuações de confiança e atribuição de plataforma.

Por que integrar via API em vez de interface

Início rápido — 60 segundos

  1. Cadastre-se gratuitamente em aisongchecker.pro (só um e-mail)
  2. Faça upgrade para o Pro (4,99€/mês) para desbloquear o acesso à API
  3. Vá em Painel → API e copie sua ASC_API_KEY
  4. Faça sua primeira chamada (veja o exemplo em Python abaixo)

Autenticação

Todas as requisições da API usam HTTP Basic Auth ou token Bearer no cabeçalho Authorization. O Bearer é recomendado:

Authorization: Bearer ASC_LIVE_xxxxxxxxxxxxxxxx

Sua chave de API tem acesso total à sua conta — mantenha-a no lado do servidor, nunca em JS de cliente ou em pacotes de aplicativos móveis.

Visão geral dos endpoints

EndpointMétodoO que faz
/api/v1/analyze/filePOSTEnvia um arquivo de áudio e retorna o resultado de detecção de IA
/api/v1/analyze/urlPOSTAnalisa uma URL do YouTube/Spotify/SoundCloud
/api/v1/analyze/batchPOSTEnvia até 100 faixas em uma única chamada
/api/v1/result/{id}GETRecupera o resultado de um job em lote assíncrono
/api/v1/certificate/{id}GETObtém o certificado de autenticidade (PDF, assinado)
/api/v1/usageGETUso atual da cota + status do limite de taxa

Analisar um único arquivo — 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}")

Exemplo de resposta

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

Analisar uma 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álise em lote — 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());
// Retorna: {"job_id": "asc_job_xyz", "status": "queued", "estimated_completion": "..." }

Limites de taxa

PlanoRequisições/minRequisições/diaTamanho do lote
Free10501
Pro605.000100
Business30050.000500
EnterprisePersonalizadoIlimitadoPersonalizado

Cabeçalhos de limite de taxa em cada resposta:

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

Tratamento de erros

Código HTTPSignificadoO que fazer
400Requisição inválida (formato de arquivo inválido, URL não suportada)Verifique a entrada e tente novamente com dados válidos
401Chave de API inválidaVerifique a chave no painel; rotacione se vazou
402Cota excedida (plano gratuito)Faça upgrade do plano ou aguarde a renovação
413Arquivo grande demais (máx. 50 MB)Comprima o áudio (envie MP3 320 kbps)
429Limite de taxa atingidoImplemente backoff exponencial (veja abaixo)
500/503Erro do servidorTente novamente com backoff. Temos SLA de 99,9%.

Padrão 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))

# Depois use session.post(...) — repete automaticamente com 2s, 4s, 8s, 16s, 32s

Webhooks para jobs em lote assíncronos

Para lotes com mais de 10 faixas, os resultados chegam via webhook (mais rápido que polling). Configure a webhook_url na requisição em lote. Payload do 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 }
}

Verifique o cabeçalho X-ASC-Signature no lado do servidor usando HMAC-SHA256 com o seu segredo de webhook (mesmo esquema dos webhooks do Stripe).

Casos de uso — exemplos reais

1. Plataforma de streaming — sinalização automática de uploads

No upload de uma faixa, chame /analyze/file de forma assíncrona. Se ai_probability > 0.85, adicione automaticamente um rótulo "Gerado por IA" (conforme os requisitos do EU AI Act). Marque platform_attribution.top nos metadados para transparência.

2. Filtragem de submissões A&R

Plataformas no estilo SubmitHub chamam a API a cada envio de demo. Faixas com ai_probability > 0.7 recebem prioridade de revisão humana. Poupa horas dos curadores.

3. Supervisor musical — due diligence de licenciamento

Antes de licenciar uma faixa para cinema/TV, processe-a por /analyze/file + solicite o certificado assinado (HMAC-SHA256). Anexe o certificado ao contrato de licenciamento como prova de autoria humana.

4. Auditoria de catálogo para gravadoras

Envie o seu catálogo antigo (10 mil a 1 milhão de faixas) via /analyze/batch. Receba um relatório CSV das faixas suspeitas para revisão humana. Preço: cerca de US$ 0,01 por faixa no plano Business.

SDKs disponíveis

Checklist de produção

Leitura relacionada

Related