Xây dựng bot, lớp phủ, công cụ truyền phát và tích hợp với dữ liệu D1Arena.
Xác thực
Tất cả các yêu cầu API đều yêu cầu khóa API được chuyển trong tiêu đề X-API-Key / Authorization: Bearer.
Để tạo khóa API, hãy truy cập Cài đặt dành cho nhà phát triển trong bảng điều khiển của bạn. Bạn có thể có tối đa 5 phím.
429 Too Many Requests với tiêu đề Retry-After.
URL cơ sở
Tất cả các điểm cuối đều trả về JSON. Các điểm cuối được phân trang bao gồm một đối tượng meta với current_page, last_page và total.
Luồng
| tham số | Kiểu | Mô tả |
|---|---|---|
category_id | integer | Lọc theo ID trò chơi/danh mục |
limit | integer | Kết quả trên mỗi trang (mặc định: 20) |
page | integer | Số trang |
Danh mục
| tham số | Kiểu | Mô tả |
|---|---|---|
search | string | Lọc danh mục theo tên |
limit | integer | Kết quả trên mỗi trang (mặc định: 50) |
Người dùng
Đoạn phim
| tham số | Kiểu | Mô tả |
|---|---|---|
streamer_id | integer | Lọc clip theo ID người dùng của người truyền phát |
category_id | integer | Lọc theo ID trò chơi/danh mục |
limit | integer | Kết quả trên mỗi trang (mặc định: 20) |
Giải Đấu
| tham số | Kiểu | Mô tả |
|---|---|---|
status | string | Lọc theo trạng thái (ví dụ: open, in_progress, completed) |
league_id | integer | Lọc theo ID giải đấu |
limit | integer | Kết quả trên mỗi trang (mặc định: 20) |
Bảng xếp hạng ELO
| tham số | Kiểu | Mô tả |
|---|---|---|
category_id | integer | Lọc theo ID trò chơi/danh mục |
limit | integer | Số kết quả (mặc định: 50) |
Giải đấu
| tham số | Kiểu | Mô tả |
|---|---|---|
status | string | Lọc theo trạng thái giải đấu |
category_id | integer | Lọc theo ID trò chơi/danh mục |
limit | integer | Kết quả trên mỗi trang (mặc định: 20) |
Phản hồi lỗi
Tất cả các lỗi đều trả về một đường bao JSON nhất quán. Đối tượng error luôn chứa một code mà máy có thể đọc được và một message mà con người có thể đọc được.
Mã trạng thái
Tham chiếu mã lỗi
| Mã | Trạng thái HTTP | Mô tả |
|---|---|---|
invalid_api_key | 401 | Khóa API bị thiếu, không đúng định dạng hoặc không tồn tại |
api_key_disabled | 403 | Khóa API đã bị thu hồi hoặc vô hiệu hóa |
not_found | 404 | Không thể tìm thấy tài nguyên được yêu cầu |
validation_error | 422 | Một hoặc nhiều tham số yêu cầu không hợp lệ |
rate_limited | 429 | Đã vượt quá giới hạn tốc độ yêu cầu đối với khóa API này |
server_error | 500 | Lỗi máy chủ nội bộ — vui lòng thử lại hoặc liên hệ với bộ phận hỗ trợ |
Giới hạn tỷ lệ
Yêu cầu API bị giới hạn tỷ lệ cho mỗi khóa API. Khi bạn vượt quá giới hạn, các yêu cầu sẽ trả về 429 Too Many Requests với tiêu đề Retry-After.
Giới hạn theo cấp độ
| cấp | Yêu cầu / Phút (Mặc định) | Phím tối đa |
|---|---|---|
| người mới bắt đầu (Miễn phí) | 60 | 5 |
| CHUYÊN NGHIỆP | 60 | 5 |
| Tối thượng | 60 | 5 |
| Cộng sự | 60 | 5 |
Tiêu đề giới hạn tỷ lệ
Yêu cầu API bị giới hạn tỷ lệ cho mỗi khóa API. Khi bạn vượt quá giới hạn, các yêu cầu sẽ trả về 429 Too Many Requests với tiêu đề Retry-After.
| tiêu đề | Mô tả |
|---|---|
Retry-After | Số giây chờ trước khi thử lại (chỉ xuất hiện trên 429 phản hồi) |
Thực tiễn tốt nhất
- Cache responses locally — stream and tournament data doesn't change every second.
- Đăng ký webhooks để biết các sự kiện theo thời gian thực thay vì bỏ phiếu cho các điểm cuối.
- Yêu cầu hàng loạt nếu có thể — sử dụng tham số bộ lọc để nhận được chính xác những gì bạn cần với ít cuộc gọi hơn.
Webhook (EventSub)
Đăng ký nhận thông báo đẩy theo thời gian thực thay vì bỏ phiếu. Khi một sự kiện xảy ra, D1Arena sẽ gửi HTTP POST tới URL gọi lại của bạn kèm theo tải trọng JSON được ký bằng HMAC-SHA256.
thiết lập
Tạo đăng ký webhook trong Cài đặt dành cho nhà phát triển. Mỗi đăng ký yêu cầu:
- URL gọi lại — Điểm cuối HTTPS có thể truy cập công khai trên máy chủ của bạn.
- Sự kiện — Một hoặc nhiều loại sự kiện để đăng ký.
You'll receive a whsec_ signing secret upon creation. Store it securely — it's shown only once.
Định dạng tải trọng
Mỗi lần phân phối webhook sẽ gửi một phần nội dung JSON có cấu trúc sau:
Tiêu đề
Mỗi lần phân phối bao gồm các tiêu đề sau để định tuyến và xác minh:
| tiêu đề | Mô tả |
|---|---|
Content-Type | application/json |
X-D1Arena-Event | Loại sự kiện (ví dụ: stream.online) |
X-D1Arena-Signature | Bản tóm tắt hex HMAC-SHA256 của nội dung yêu cầu thô |
X-D1Arena-Signature-Version | Định dạng khóa ký: v2 cho đăng ký hiện tại hoặc v1-hashed-secret cho đăng ký cũ |
X-D1Arena-Delivery-Id | UUID phân phối duy nhất — sử dụng để chống trùng lặp |
X-D1Arena-Timestamp | Dấu thời gian Unix khi sự kiện được gửi |
Xác minh chữ ký
Luôn xác minh tiêu đề X-D1Arena-Signature trước khi xử lý webhook. Chữ ký được tính là HMAC-SHA256(raw_body, webhook_secret).
Đối với việc gửi v2, hãy sử dụng bí mật whsec_ được hiển thị khi đăng ký được tạo. Đối với phân phối v1-hashed-secret trước khi nâng cấp, trước tiên hãy tính toán SHA256(whsec_secret) từ bí mật ban đầu đó và sử dụng thông số thập lục phân viết thường thu được làm khóa HMAC. Hãy tạo lại đăng ký khi có thể để chuyển sang v2.
Sự kiện có sẵn
| Sự kiện | Mô tả |
|---|---|
| stream.online | Một người phát trực tiếp đã phát trực tiếp |
| stream.offline | Một người phát trực tiếp đã ngoại tuyến |
| channel.follow | Một người dùng đã theo dõi một kênh |
| channel.subscribe | Đăng ký ủng hộ mới trên một kênh |
| channel.tip | Một mẹo đã được gửi tới người truyền phát |
| tournament.started | Một trận đấu giải đấu đã bắt đầu |
| tournament.ended | Một giải đấu đã kết thúc |
| tournament.match.completed | Kết quả trận đấu được ghi lại |
| clip.created | Một clip mới đã được tạo từ luồng trực tiếp |
| overdrive.started | D1 Frenzy bắt đầu trên một kênh |
| overdrive.level_up | D1 Frenzy tiến lên cấp độ tiếp theo |
| overdrive.ended | D1 Frenzy đã hoàn thành hoặc hết hạn |
Ví dụ về tải trọng sự kiện
stream.online
stream.offline
channel.follow
channel.tip
tournament.match.completed
clip.created
Chính sách giao hàng và thử lại
| Cố gắng | Trì hoãn | Ghi chú |
|---|---|---|
| Lần 1 (ban đầu) | ngay lập tức | Được gửi trong vòng vài giây của sự kiện |
| Lần 2 (thử lại) | 30 giây | Nếu lần thử đầu tiên không thành công hoặc hết thời gian |
| Lần 3 (thử lại) | 2 phút | Sự lùi lại theo cấp số nhân |
| Lần thứ 4 (cuối cùng) | 10 phút | Lần thử cuối cùng trước khi đánh dấu là không thành công |
2xx status within 10 giây. Non-2xx responses or timeouts trigger a retry. After 10 lần thất bại liên tiếp, the subscription is automatically disabled. You'll receive an email notification and can re-enable it in Cài đặt dành cho nhà phát triển.
Thực tiễn tốt nhất
- Luôn xác minh chữ ký trước khi xử lý tải trọng để ngăn chặn các sự kiện giả mạo.
- Sử dụng Id phân phối để chống trùng lặp — các lần thử lại sẽ gửi cùng một ID, vì vậy hãy lưu trữ các ID đã xử lý để tránh xử lý kép.
- Phản hồi nhanh, xử lý không đồng bộ — return
200 OKngay lập tức và xử lý logic nghiệp vụ trong công việc nền. - Chỉ sử dụng điểm cuối HTTPS — URL webhook phải sử dụng TLS. Cuộc gọi lại HTTP bị từ chối.
- Xử lý các sự kiện chưa biết một cách khéo léo — các loại sự kiện mới có thể được thêm vào. Trả về
200cho các sự kiện không được nhận dạng thay vì có lỗi.
D1 điên cuồng
D1 Frenzy được kích hoạt bởi các mẹo và đăng ký nhanh chóng trong khi người phát trực tiếp đang phát trực tiếp. Nó tiến triển qua 5 cấp độ với mục tiêu ngày càng tăng.
GET /api/overdrive/{streamerId}
Nhận D1 Frenzy đang hoạt động cho người phát trực tiếp. Trả về {"active": false} nếu không có.
Mục tiêu cấp độ
| Cấp độ | Điểm |
|---|---|
| 1 | 100 |
| 2 | 250 |
| 3 | 500 |
| 4 | 1,000 |
| 5 | 2,000 |
D1 điên cuồng — Điểm: Mẹo $1 → 100; Đăng ký 500 × cấp. Thời lượng: 5 Phút; Thời gian hồi chiêu: 30 Phút.
SDK mở rộng
Xây dựng các tiện ích mở rộng lớp phủ và bảng điều khiển tùy chỉnh mà người truyền phát có thể cài đặt trên trang kênh của họ. Tiện ích mở rộng chạy trong iframe có hộp cát và liên lạc với trang lưu trữ qua postMessage.
Bắt đầu
- Tạo khóa API trong Cài đặt dành cho nhà phát triển.
- Tạo tiện ích mở rộng của bạn dưới dạng trang HTML độc lập được lưu trữ trên miền của bạn (yêu cầu HTTPS).
- Gửi nó để xem xét trong phần Tiện ích mở rộng của tôi.
- Sau khi được phê duyệt, người phát trực tuyến có thể cài đặt nó từ Thị trường mở rộng.
Các loại tiện ích mở rộng
| Kiểu | Vị trí | Hành vi |
|---|---|---|
panel | Bên dưới trình phát luồng | Hiển thị khi luồng trực tiếp. Thẻ có chiều rộng đầy đủ, chiều cao mặc định 300px. |
overlay | Trên trình phát video | Hiển thị khi trực tiếp. Vị trí/kích thước được bộ truyền phát kiểm soát thông qua công cụ định vị lớp phủ. |
API postMessage
Tiện ích mở rộng của bạn tự động nhận dữ liệu ngữ cảnh khi tải. Thực hiện các sự kiện này:
Sử dụng nguồn gốc D1Arena chính xác cho mọi thư. SDK chính thức tự động lấy và xác thực nguồn gốc này từ trang nhúng.
Vì iframe tiện ích mở rộng có chủ ý sử dụng nguồn gốc hộp cát mờ nên máy chủ D1Arena xác thực cửa sổ iframe đã đăng ký chính xác. Mã tiện ích mở rộng vẫn phải xác thực cửa sổ chính và nguồn gốc D1Arena chính xác trước khi chấp nhận ngữ cảnh.
1. Tín hiệu sẵn sàng
2. Nhận ngữ cảnh
3. Gửi hành động (tùy chọn)
Phạm vi quyền
Khai báo dữ liệu nào tiện ích mở rộng của bạn cần. Người đánh giá xác minh mã của bạn khớp với các quyền đã khai báo.
| Phạm vi | Cấp quyền truy cập vào |
|---|---|
read:stream | Trạng thái luồng, tiêu đề, danh mục |
read:viewers | Số lượng người xem và danh sách |
read:chat | Tin nhắn trò chuyện (thông qua kênh Pusher) |
read:clips | Kênh clip qua /api/clips/{slug} |
read:tournaments | Thông tin trận đấu đang hoạt động qua /api/active-match/{id} |
read:channel | Hồ sơ kênh, người theo dõi, lịch trình |
Yêu cầu bảo mật
sandbox="allow-scripts". Tiện ích mở rộng không thể của bạn truy cập cookie, localStorage hoặc thực hiện các yêu cầu được xác thực tới d1arena.com.
- Yêu cầu công khai HTTPS — URL iframe của bạn phải sử dụng TLS và chỉ phân giải thành các địa chỉ mạng công cộng.
- Nguồn con người có thể đọc được — Không có JavaScript bị xáo trộn hoặc chỉ được rút gọn. Người đánh giá phải có khả năng đọc mã của bạn.
- Không tải tập lệnh bên ngoài trừ khi được khai báo trong bài nộp của bạn. Thư viện CDN (jQuery, Chart.js, v.v.) đều ổn.
- Không lọc dữ liệu — Tiện ích mở rộng không được gửi dữ liệu người xem đến các dịch vụ theo dõi hoặc phân tích của bên thứ ba.
- Chính sách nội dung — Không có quảng cáo, nội dung NSFW, khai thác tiền điện tử hoặc hành vi độc hại.
Quá trình xem xét
| Trạng thái | Ý nghĩa |
|---|---|
| pending | Đã gửi, đang chờ quản trị viên xem xét (thường là 1-3 ngày làm việc). |
| approved | Đã được phê duyệt và hiển thị trên Thị trường mở rộng. |
| rejected | Bị từ chối có lý do. Hãy khắc phục sự cố và gửi lại. |
| suspended | Tạm thời bị xóa do vi phạm chính sách. Liên hệ hỗ trợ. |
Cập nhật phiên bản
Để cập nhật tiện ích mở rộng đã được phê duyệt, hãy xóa phiên bản hiện tại và gửi phiên bản mới có số phiên bản tăng dần. Phiên bản mới sẽ được xem xét lại.
Nhật ký thay đổi
Theo dõi các thay đổi API và các tính năng mới. Chúng tôi tuân theo việc lập phiên bản ngữ nghĩa và thông báo những thay đổi quan trọng trước ít nhất 30 ngày.
- Phát hành API công khai lần đầu với xác thực khóa API.
- Luồng: Liệt kê các luồng trực tiếp, nhận thông tin chi tiết về người phát trực tuyến bằng slug.
- Danh mục: Tìm kiếm và liệt kê tất cả các danh mục trò chơi.
- Người dùng: Hồ sơ công khai có số liệu thống kê cạnh tranh, xếp hạng ELO và số huy chương.
- Đoạn: Duyệt qua và truy xuất chi tiết clip bằng thông tin về người truyền phát/người sáng tạo.
- Giải đấu: Danh sách, lọc theo trạng thái/giải đấu, lấy số lượng người tham gia.
- Bảng xếp hạng ELO: Bảng xếp hạng toàn cầu và xếp hạng theo danh mục.
- Giải đấu: Liệt kê các giải đấu kèm theo thứ hạng và phân tích điểm.
- D1 Frenzy: Trạng thái Frenzy theo thời gian thực cho bất kỳ người phát trực tiếp nào.
- Webhooks (EventSub): 12 loại sự kiện bao gồm sự kiện phát trực tuyến, kênh, giải đấu, clip và sự kiện Frenzy.
- Giới hạn tỷ lệ
Cần trợ giúp?
Câu hỏi về API? Liên hệ với chúng tôi.