API обнаружения AI-музыки — Полное руководство для разработчиков 2026

22 мая 2026 · Команда AI Song Checker

Если вы строите DSP, дистрибьюторскую платформу, A&R-сервис или любой инструмент, которому нужно программно отмечать AI-музыку, вам нужно API. Это руководство охватывает всё: аутентификация, эндпойнты, примеры кода на Python/Node/Java, лимиты, форматы ответов, обработка ошибок и советы для продакшена.

Для примеров кода мы используем REST API AI Song Checker — начать можно бесплатно (без банковской карты), поддерживаются все основные генераторы AI-музыки (Suno, Udio, Riffusion, ElevenLabs Music, MusicGen, Stable Audio), а в ответ приходит подробный JSON с оценками уверенности и атрибуцией платформы.

Зачем интегрироваться через API, а не через интерфейс

Быстрый старт — 60 секунд

  1. Зарегистрируйтесь бесплатно на aisongchecker.pro (нужен только email)
  2. Перейдите на Pro (4,99€/месяц), чтобы открыть доступ к API
  3. Откройте Dashboard → API и скопируйте свой ASC_API_KEY
  4. Сделайте первый запрос (пример на Python ниже)

Аутентификация

Все запросы к API используют HTTP Basic Auth или Bearer-токен в заголовке Authorization. Рекомендуется Bearer:

Authorization: Bearer ASC_LIVE_xxxxxxxxxxxxxxxx

Ваш API-ключ даёт полный доступ к аккаунту — храните его только на сервере, никогда в клиентском JS или в сборках мобильных приложений.

Обзор эндпойнтов

ЭндпойнтМетодЧто делает
/api/v1/analyze/filePOSTЗагрузка аудиофайла, результат AI-детекции
/api/v1/analyze/urlPOSTАнализ ссылки YouTube/Spotify/SoundCloud
/api/v1/analyze/batchPOSTОтправка до 100 треков одним запросом
/api/v1/result/{id}GETПолучение результата асинхронной пакетной задачи
/api/v1/certificate/{id}GETСертификат подлинности (подписанный PDF)
/api/v1/usageGETТекущее использование квоты + статус лимитов

Анализ одного файла — 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": "..." }

Лимиты запросов

ТарифЗапросов/минЗапросов/деньРазмер пакета
Free10501
Pro605 000100
Business30050 000500
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

Чек-лист для продакшена

Related