API обнаружения AI-музыки — Полное руководство для разработчиков 2026
Если вы строите DSP, дистрибьюторскую платформу, A&R-сервис или любой инструмент, которому нужно программно отмечать AI-музыку, вам нужно API. Это руководство охватывает всё: аутентификация, эндпойнты, примеры кода на Python/Node/Java, лимиты, форматы ответов, обработка ошибок и советы для продакшена.
Для примеров кода мы используем REST API AI Song Checker — начать можно бесплатно (без банковской карты), поддерживаются все основные генераторы AI-музыки (Suno, Udio, Riffusion, ElevenLabs Music, MusicGen, Stable Audio), а в ответ приходит подробный JSON с оценками уверенности и атрибуцией платформы.
Зачем интегрироваться через API, а не через интерфейс
- Масштаб: пакетный анализ тысяч треков в час
- Автоматизация: встраивание в процессы приёма демо, аудит каталога, загрузки на стриминги
- Кастомизация: собственный дашборд, оповещения, пороговые значения скоринга
- Комплаенс: журналы аудита для требований AI Act ЕС по маркировке контента
- Экономия: оплата за вызов дешевле найма ручных модераторов
Быстрый старт — 60 секунд
- Зарегистрируйтесь бесплатно на aisongchecker.pro (нужен только email)
- Перейдите на Pro (4,99€/месяц), чтобы открыть доступ к API
- Откройте Dashboard → API и скопируйте свой
ASC_API_KEY - Сделайте первый запрос (пример на Python ниже)
Аутентификация
Все запросы к API используют HTTP Basic Auth или Bearer-токен в заголовке Authorization. Рекомендуется Bearer:
Authorization: Bearer ASC_LIVE_xxxxxxxxxxxxxxxx
Ваш API-ключ даёт полный доступ к аккаунту — храните его только на сервере, никогда в клиентском JS или в сборках мобильных приложений.
Обзор эндпойнтов
| Эндпойнт | Метод | Что делает |
|---|---|---|
/api/v1/analyze/file | POST | Загрузка аудиофайла, результат AI-детекции |
/api/v1/analyze/url | POST | Анализ ссылки YouTube/Spotify/SoundCloud |
/api/v1/analyze/batch | POST | Отправка до 100 треков одним запросом |
/api/v1/result/{id} | GET | Получение результата асинхронной пакетной задачи |
/api/v1/certificate/{id} | GET | Сертификат подлинности (подписанный PDF) |
/api/v1/usage | GET | Текущее использование квоты + статус лимитов |
Анализ одного файла — 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}")
Пример ответа
{
"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"
}
Анализ 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}`);
}
Пакетный анализ — 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());
// Возвращает: {"job_id": "asc_job_xyz", "status": "queued", "estimated_completion": "..." }
Лимиты запросов
| Тариф | Запросов/мин | Запросов/день | Размер пакета |
|---|---|---|---|
| Free | 10 | 50 | 1 |
| Pro | 60 | 5 000 | 100 |
| Business | 300 | 50 000 | 500 |
| Enterprise | Индивидуально | Без ограничений | Индивидуально |
Заголовки лимитов в каждом ответе:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 47
X-RateLimit-Reset: 1716422400
Обработка ошибок
| HTTP-код | Значение | Что делать |
|---|---|---|
| 400 | Некорректный запрос (неверный формат файла, URL не поддерживается) | Проверьте входные данные, повторите с валидными |
| 401 | Недействительный API-ключ | Проверьте ключ в дашборде, замените при утечке |
| 402 | Квота исчерпана (тариф Free) | Перейдите на платный план или дождитесь сброса |
| 413 | Файл слишком большой (максимум 50 MB) | Сожмите аудио (MP3 320 kbps всё равно проходит) |
| 429 | Достигнут лимит запросов | Реализуйте экспоненциальную задержку (см. ниже) |
| 500/503 | Ошибка сервера | Повторите с задержкой. Наш SLA — 99.9%. |
Паттерн экспоненциальной задержки (backoff)
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))
# Далее используйте session.post(...) — автоповторы через 2с, 4с, 8с, 16с, 32с
Webhooks для асинхронных пакетных задач
Для пакетов из более чем 10 треков результаты приходят через webhook (быстрее, чем опрашивать API). Укажите webhook_url в пакетном запросе. Payload 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 }
}
Проверяйте заголовок X-ASC-Signature на стороне сервера через HMAC-SHA256 с вашим webhook-секретом (та же схема, что у webhooks Stripe).
Сценарии использования — реальные примеры
1. Стриминговая платформа — автоматическая маркировка загрузок
При загрузке трека асинхронно вызывайте /analyze/file. Если ai_probability > 0.85, автоматически добавляйте метку «AI-Generated» (в соответствии с требованиями AI Act ЕС). Записывайте platform_attribution.top в метаданные для прозрачности.
2. Фильтрация A&R-заявок
Платформы в духе SubmitHub вызывают API при загрузке каждого демо. Треки с ai_probability > 0.7 получают приоритет ручной проверки. Экономит кураторам часы работы.
3. Музыкальный супервайзер — проверка перед лицензированием
Перед лицензированием трека для кино/ТВ прогоните его через /analyze/file и запросите подписанный сертификат (HMAC-SHA256). Приложите сертификат к лицензионному договору как доказательство человеческого авторства.
4. Аудит каталога для лейблов
Отправьте весь бэк-каталог (10 тыс. – 1 млн треков) через /analyze/batch. Получите CSV-отчёт с подозрительными треками для ручной проверки. Стоимость: около $0.01 за трек на тарифе Business.
Доступные SDK
- Python:
pip install aisongchecker· GitHub - Node.js:
npm install @aisongchecker/sdk· GitHub - Java: зависимость Maven, GitHub
- Go:
go get github.com/aisongchecker/go-sdk - Коллекция Postman: импорт из /api-docs
Чек-лист для продакшена
- ☑️ API-ключ хранится только на сервере (переменная окружения или менеджер секретов)
- ☑️ Экспоненциальная задержка при 429/5xx
- ☑️ Проверка подписи webhook (HMAC-SHA256)
- ☑️ Кэширование результатов по хэшу аудио (без повторных анализов)
- ☑️
return_features=falseпри больших объёмах (ответы меньше) - ☑️ Мониторинг
X-RateLimit-Remainingв дашбордах - ☑️ Идемпотентность: передавайте свой
request_idдля дедупликации повторов