Chuyển tới nội dung chính

Streaming API

Lấy danh sách tập phim và URL nguồn stream từ các provider streaming anime Việt Nam.

Endpoints

Lấy danh sách tập

GET /api/v1/stream/episodes

Lấy danh sách server

GET /api/v1/stream/episodes/servers

Lấy nguồn stream

GET /api/v1/stream/source

Lấy M3U8 đã cache

GET /api/v1/stream/source/m3u8/{cacheKey}

Lấy danh sách tập

Lấy danh sách các tập phim có sẵn cho một media item từ một provider cụ thể.

Tham số

Tham sốKiểuBắt buộcMô tả
idintegerMedia ID (AniList media ID)
providerstringTên provider (ví dụ: ANIMEVIETSUB, ANIMETVN)
limitintegerKhôngSố lượng tập tối đa trả về (mặc định: 0 = tất cả)
offsetintegerKhôngVị trí bắt đầu cho phân trang (mặc định: 0)
serverstringKhôngLọc tập theo tên server

Ví dụ Request

GET /api/v1/stream/episodes?id=16498&provider=ANIMEVIETSUB&limit=10&offset=0
GET /api/v1/stream/episodes?id=16498&provider=ANIMEVIETSUB&server=DU

Response thành công (200 OK)

{
"provider": "ANIMEVIETSUB",
"limit": 10,
"offset": 0,
"total": 25,
"hasNextPage": true,
"episodes": [
{
"episodeNumber": "1",
"episodeId": "shingeki-no-kyojin$12345",
"server": "DU"
},
{
"episodeNumber": "2",
"episodeId": "shingeki-no-kyojin$12346",
"server": "DU"
},
{
"episodeNumber": "3",
"episodeId": "shingeki-no-kyojin$12347",
"server": "DU"
}
]
}

Response lỗi

404 Not Found - Không tìm thấy Mapping:

{
"success": false,
"message": "No mapping found for media ID 16498 and provider ANIMEVIETSUB",
"code": "MAPPING_NOT_FOUND"
}

404 Not Found - Không có tập:

{
"success": false,
"message": "No episodes found for media ID: 16498",
"code": "EPISODES_NOT_FOUND"
}

Các trường Response

TrườngKiểuMô tả
providerstringTên provider
limitintegerSố lượng tập được trả về
offsetintegerOffset đã sử dụng
totalintegerTổng số tập
hasNextPagebooleanCòn tập khác không
episodesarrayDanh sách tập

Đối tượng Episode

TrườngKiểuMô tả
episodeNumberstringSố tập (có thể bao gồm hậu tố cho các tập trùng lặp)
episodeIdstringID tập ở định dạng {mediaId}${episodeId} (sử dụng làm episodeData cho endpoint source)
serverstringTên server

Lấy danh sách server

Lấy danh sách các server có sẵn cho một media item từ một provider.

Tham số

Tham sốKiểuBắt buộcMô tả
idintegerMedia ID (AniList media ID)
providerstringTên provider

Ví dụ Request

GET /api/v1/stream/episodes/servers?id=16498&provider=ANIMEVIETSUB

Response thành công (200 OK)

{
"provider": "ANIMEVIETSUB",
"servers": ["DU", "HDX"]
}

Lấy nguồn stream

Lấy URL nguồn stream cho một tập phim cụ thể.

Tham số

Tham sốKiểuBắt buộcMô tả
episodeDatastringChuỗi dữ liệu tập (từ episodeId trong response episodes)
providerstringTên provider
serverstringKhôngTên server ưu tiên (sử dụng mặc định nếu không chỉ định)

Ví dụ Request

GET /api/v1/stream/source?episodeData=shingeki-no-kyojin$12345&provider=ANIMEVIETSUB&server=DU
GET /api/v1/stream/source?episodeData=shingeki-no-kyojin$12345&provider=ANIMEVIETSUB

Response thành công (200 OK)

Stream HLS (server DU):

{
"server": "DU",
"type": "HLS",
"corsProxyRequired": true,
"proxyHeaders": {
"Referer": "https://animevietsub.page"
},
"url": "https://api.animapper.net/api/v1/stream/source/m3u8/abc123def456"
}

Embed Player (server HDX):

{
"server": "HDX",
"type": "EMBED",
"corsProxyRequired": false,
"proxyHeaders": null,
"url": "https://embed.example.com/player?id=12345"
}

Response lỗi (400 Bad Request)

{
"success": false,
"message": "Provider INVALID is not supported for streaming",
"code": "UNSUPPORTED_PROVIDER"
}

Các trường Response

TrườngKiểuMô tả
serverstringTên server đã sử dụng
typestringLoại stream: HLS, EMBED, hoặc DIRECT
corsProxyRequiredbooleanCó cần CORS proxy không
proxyHeadersobjectHeaders để sử dụng với proxy (nếu cần)
urlstringURL stream hoặc endpoint cache M3U8

Lấy M3U8 đã cache

Lấy nội dung playlist M3U8 đã cache bằng cache key.

Tham số

Tham sốKiểuBắt buộcMô tả
cacheKeystringCache key (từ URL M3U8 trong response source)

Ví dụ Request

GET /api/v1/stream/source/m3u8/abc123def456

Response thành công (200 OK)

  • Content-Type: application/vnd.apple.mpegurl
  • Body: Nội dung playlist M3U8 thô
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:10
#EXTINF:10.0,
https://example.com/segment1.ts
#EXTINF:10.0,
https://example.com/segment2.ts
#EXT-X-ENDLIST

Response lỗi (404 Not Found)

{
"success": false,
"message": "M3U8 content not found for cache key: abc123def456",
"code": "RESOURCE_NOT_FOUND"
}

Thông tin chi tiết về Providers

Để biết thông tin chi tiết về từng provider, cách sử dụng, và các lưu ý đặc biệt, vui lòng xem:

  • AnimeVietSub - Thông tin chi tiết về provider AnimeVietSub
  • AnimeTVN - Thông tin chi tiết về provider AnimeTVN

Ví dụ Workflow

  1. Lấy Metadata Media:

    GET /api/v1/metadata?id=16498

    Kiểm tra trường streamingProviders để xem các provider có sẵn.

  2. Lấy danh sách tập:

    GET /api/v1/stream/episodes?id=16498&provider=ANIMEVIETSUB

    Lấy danh sách các tập có sẵn.

  3. Lấy nguồn stream:

    GET /api/v1/stream/source?episodeData=shingeki-no-kyojin$12345&provider=ANIMEVIETSUB&server=DU

    Lấy URL stream cho một tập cụ thể.

  4. Lấy nội dung M3U8 (nếu HLS):

    GET /api/v1/stream/source/m3u8/abc123def456

    Lấy playlist M3U8 thực tế.

Lưu ý

  • ⚠️ Lưu ý về Mapping: Do đa số mapping được thực hiện tự động, có thể xảy ra trường hợp mapping sai hoặc thiếu provider. Nếu bạn phát hiện mapping không chính xác hoặc thiếu provider cho một media, vui lòng tham gia Discord của chúng tôi để góp ý và yêu cầu chỉnh sửa.
  • Tập phim được tự động làm mới trong nền nếu dữ liệu cũ hơn 7 ngày
  • Số tập trùng lặp được xử lý với hậu tố (ví dụ: "1163_1", "1163_2")
  • Lựa chọn server: Nếu server ưu tiên không khả dụng, sẽ chuyển sang server có sẵn đầu tiên
  • Tất cả endpoints hỗ trợ phân trang cho danh sách tập lớn
  • Định dạng dữ liệu tập có thể khác nhau theo provider