API phát hiện nhạc AI — Hướng dẫn đầy đủ cho nhà phát triển 2026
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
- Quy mô: phân tích hàng loạt hàng nghìn bản nhạc mỗi giờ
- Tự động hóa: tích hợp vào quy trình gửi nhạc, kiểm toán danh mục, tải nhạc lên nền tảng streaming
- Tùy biến: tự xây dựng dashboard, hệ thống cảnh báo, ngưỡng chấm điểm riêng
- Tuân thủ: tạo nhật ký kiểm toán đáp ứng yêu cầu watermark của Đạo luật AI của EU (EU AI Act)
- Tiết kiệm chi phí: trả tiền theo lượt gọi rẻ hơn nhiều so với thuê người duyệt thủ công
Bắt đầu nhanh trong 60 giây
- Đăng ký miễn phí tại aisongchecker.pro (chỉ cần email)
- Nâng cấp lên Pro (4,99€/tháng) để mở khóa quyền truy cập API
- Vào Dashboard → API và sao chép
ASC_API_KEYcủa bạn - 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
| Endpoint | Phương thức | Chức năng |
|---|---|---|
/api/v1/analyze/file | POST | Tải file âm thanh lên, nhận kết quả phát hiện AI |
/api/v1/analyze/url | POST | Phân tích một URL YouTube/Spotify/SoundCloud |
/api/v1/analyze/batch | POST | Gửi tối đa 100 bản nhạc trong một lệnh gọi |
/api/v1/result/{id} | GET | Lấy kết quả của một batch job bất đồng bộ |
/api/v1/certificate/{id} | GET | Nhận chứng chỉ xác thực (PDF, có chữ ký số) |
/api/v1/usage | GET | Mứ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ói | Yêu cầu/phút | Yêu cầu/ngày | Kích thước batch |
|---|---|---|---|
| Miễn phí | 10 | 50 | 1 |
| Pro | 60 | 5,000 | 100 |
| Business | 300 | 50,000 | 500 |
| Enterprise | Tùy chỉnh | Không giới hạn | Tù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ĩa | Cách xử lý |
|---|---|---|
| 400 | Yê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ệ |
| 401 | API key không hợp lệ | Kiểm tra key trong dashboard, xoay vòng key nếu bị lộ |
| 402 | Vượt quota (gói miễn phí) | Nâng cấp gói hoặc chờ đến khi quota được đặt lại |
| 413 | File quá lớn (tối đa 50 MB) | Nén âm thanh lại (MP3 320 kbps vẫn được chấp nhận) |
| 429 | Chạm giới hạn tốc độ | Áp dụng exponential backoff (xem bên dưới) |
| 500/503 | Lỗ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ó
- Python:
pip install aisongchecker· GitHub - Node.js:
npm install @aisongchecker/sdk· GitHub - Java: dependency Maven, GitHub
- Go:
go get github.com/aisongchecker/go-sdk - Bộ sưu tập Postman: import từ /api-docs
Checklist trước khi lên production
- ☑️ API key chỉ lưu ở phía server (biến môi trường hoặc secret manager)
- ☑️ Exponential backoff khi gặp lỗi 429/5xx
- ☑️ Xác minh chữ ký webhook (HMAC-SHA256)
- ☑️ Cache kết quả theo hash âm thanh (tránh phân tích trùng lặp)
- ☑️ Đặt
return_features=falsekhi dùng khối lượng lớn (phản hồi gọn nhẹ hơn) - ☑️ Theo dõi
X-RateLimit-Remainingtrong dashboard của bạn - ☑️ Idempotency: truyền
request_idriêng của bạn để loại trùng khi retry