API phát hiện nhạc AI — Hướng dẫn đầy đủ cho nhà phát triển 2026

22 tháng 5, 2026 · Đội ngũ AI Song Checker

Nếu bạn đang xây dựng DSP, nhà phân phối, nền tảng submission A&R, hoặc bất kỳ công cụ nào cần đánh dấu nhạc AI theo cách lập trình, bạn cần API. Hướng dẫn này sẽ dẫn bạn qua mọi thứ: xác thực, endpoint, mã mẫu Python/Node/Java, giới hạn tốc độ, định dạng phản hồi, xử lý lỗi và các mẹo triển khai production.

Chúng tôi sẽ dùng AI Song Checker REST API cho các ví dụ mã: miễn phí để bắt đầu (không cần thẻ tín dụng), hỗ trợ mọi engine nhạc AI lớn (Suno, Udio, Riffusion, ElevenLabs Music, MusicGen, Stable Audio) và trả về JSON chi tiết bao gồm điểm tin cậy cùng khả năng quy nguồn nền tảng (platform attribution).

Vì sao nên tích hợp qua API thay vì giao diện web

Bắt đầu nhanh trong 60 giây

  1. Đăng ký miễn phí tại aisongchecker.pro (chỉ cần email)
  2. Nâng cấp lên Pro (4,99€/tháng) để mở khóa quyền truy cập API
  3. Vào Dashboard → API và sao chép ASC_API_KEY của bạn
  4. Thực hiện lệnh gọi đầu tiên (xem mẫu Python bên dưới)

Xác thực

Mọi yêu cầu API đều dùng HTTP Basic Auth hoặc Bearer token trong header Authorization. Khuyến nghị dùng Bearer:

Authorization: Bearer ASC_LIVE_xxxxxxxxxxxxxxxx

API key của bạn có toàn quyền truy cập vào tài khoản: hãy giữ nó ở phía server, không bao giờ đặt trong JavaScript phía client hay gói ứng dụng di động.

Tổng quan các endpoint

EndpointPhương thứcChức năng
/api/v1/analyze/filePOSTTải file âm thanh lên, nhận kết quả phát hiện AI
/api/v1/analyze/urlPOSTPhân tích một URL YouTube/Spotify/SoundCloud
/api/v1/analyze/batchPOSTGửi tối đa 100 bản nhạc trong một lệnh gọi
/api/v1/result/{id}GETLấy kết quả của một batch job bất đồng bộ
/api/v1/certificate/{id}GETNhận chứng chỉ xác thực (PDF, có chữ ký số)
/api/v1/usageGETMức sử dụng quota hiện tại + trạng thái giới hạn tốc độ

Phân tích một file đơn lẻ với 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}")

Phản hồi mẫu

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

Phân tích một URL với 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}`);
}

Phân tích hàng loạt với 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());
// Returns: {"job_id": "asc_job_xyz", "status": "queued", "estimated_completion": "..." }

Giới hạn tốc độ

GóiYêu cầu/phútYêu cầu/ngàyKích thước batch
Miễn phí10501
Pro605,000100
Business30050,000500
EnterpriseTùy chỉnhKhông giới hạnTùy chỉnh

Header giới hạn tốc độ có mặt trong mọi phản hồi:

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

Xử lý lỗi

Mã HTTPÝ nghĩaCách xử lý
400Yêu cầu không hợp lệ (định dạng file sai, URL không được hỗ trợ)Kiểm tra dữ liệu đầu vào, thử lại với dữ liệu hợp lệ
401API key không hợp lệKiểm tra key trong dashboard, xoay vòng key nếu bị lộ
402Vượt quota (gói miễn phí)Nâng cấp gói hoặc chờ đến khi quota được đặt lại
413File quá lớn (tối đa 50 MB)Nén âm thanh lại (MP3 320 kbps vẫn được chấp nhận)
429Chạm giới hạn tốc độÁp dụng exponential backoff (xem bên dưới)
500/503Lỗi máy chủThử lại với backoff. Chúng tôi cam kết SLA 99.9%.

Mẫu exponential 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))

# Then use session.post(...) — auto retries with 2s, 4s, 8s, 16s, 32s

Webhook cho batch job bất đồng bộ

Với các batch trên 10 bản nhạc, kết quả được gửi qua webhook (nhanh hơn polling). Cấu hình webhook_url trong yêu cầu batch. Payload của 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 }
}

Hãy xác minh header X-ASC-Signature ở phía server bằng HMAC-SHA256 với webhook secret của bạn (cùng cơ chế với webhook của Stripe).

Trường hợp sử dụng thực tế

1. Nền tảng streaming: tự động gắn cờ bản tải lên

Khi có bản nhạc được tải lên, gọi /analyze/file theo cách bất đồng bộ. Nếu ai_probability > 0.85, tự động thêm nhãn "AI-Generated" (theo yêu cầu của Đạo luật AI của EU). Gắn platform_attribution.top vào metadata để đảm bảo minh bạch.

2. Lọc bản gửi A&R

Các nền tảng kiểu SubmitHub gọi API cho mỗi bản demo được tải lên. Bản nhạc có ai_probability > 0.7 được ưu tiên duyệt thủ công. Tiết kiệm hàng giờ làm việc cho các curator.

3. Music supervisor: thẩm định trước khi cấp phép

Trước khi cấp phép một bản nhạc cho phim/truyền hình, hãy chạy nó qua /analyze/file và yêu cầu chứng chỉ có chữ ký số (HMAC-SHA256). Đính kèm chứng chỉ vào hợp đồng cấp phép làm bằng chứng tác phẩm do con người sáng tác.

4. Kiểm toán danh mục cho hãng thu âm

Gửi toàn bộ back catalog của bạn (10K-1M bản nhạc) qua /analyze/batch. Nhận báo cáo CSV liệt kê các bản nhạc đáng ngờ để con người duyệt lại. Chi phí: khoảng $0.01 mỗi bản nhạc ở gói Business.

Các SDK hiện có

Checklist trước khi lên production

Related