🚀「Douyin_TikTok_Download_API」是一个开箱即用的高性能异步抖音、快手、TikTok、Bilibili数据爬取工具,支持API调用,在线批量解析及下载。
Full LLM thinking from the 4-phase benchmark pipeline.
{
"service_type": "rest_api",
"base_url": null,
"auth_method": "api_key_header",
"auth_config": {"header": "Authorization", "prefix": "Bearer"},
"endpoints": [],
"pricing_model": {
"type": "free_tier",
"details": {
"self_hosted": true,
"license": "Apache-2.0",
"hosted_tier": false,
"notes": "Open source, free, self-hosted only. No third-party proxy."
},
"free_tier": null,
"paid_tiers": []
},
"rate_limits": {
"rpm": null,
"tpm": null,
"daily": null,
"concurrent": null
},
"capabilities": [
"douyin_post_fetch",
"tiktok_post_fetch",
"author_data",
"comments",
"mixes",
"search",
"watermark_free_video_download",
"image_album_download",
"local_archiving",
"mcp_server",
"web_console",
"identity_pool_management",
"proxy_management",
"native_signing"
],
"agent_readiness": {
"supports_x402": false,
"supports_streaming": false,
"has_sandbox": false,
"sdks": [],
"agent_auth_methods": ["api_key", "public"]
}
}{
"tests": [
{
"name": "root_reachability",
"endpoint": "/",
"method": "GET",
"headers": {},
"payload": {},
"expected_status": 200,
"intent": "happy_path",
"expected_behavior": "Service responds at root, confirming basic connectivity to the self-hosted instance.",
"metrics": ["latency", "status_code"],
"validation": {"field": null, "type": "any", "min_length": 0}
},
{
"name": "openapi_docs_available",
"endpoint": "/openapi.json",
"method": "GET",
"headers": {},
"payload": {},
"expected_status": 200,
"intent": "happy_path",
"expected_behavior": "FastAPI exposes the generated OpenAPI spec describing available read endpoints.",
"metrics": ["latency", "status_code"],
"validation": {"field": "paths", "type": "object", "min_length": 1}
},
{
"name": "hybrid_parsing_single_video",
"endpoint": "/api/hybrid/video_data",
"method": "GET",
"headers": {"Authorization": "Bearer {API_KEY}"},
"payload": {},
"expected_status": 200,
"intent": "happy_path",
"expected_behavior": "Parses a known Douyin/TikTok URL and returns post metadata in the uniform envelope.",
"metrics": ["latency", "accuracy", "status_code"],
"validation": {"field": "data", "type": "object", "min_length": 1}
},
{
"name": "douyin_post_fetch",
"endpoint": "/api/douyin/web/fetch_one_video",
"method": "GET",
"headers": {"Authorization": "Bearer {API_KEY}"},
"payload": {},
"expected_status": 200,
"intent": "happy_path",
"expected_behavior": "Fetches a Douyin post's video data for a valid aweme id.",
"metrics": ["latency", "accuracy", "status_code"],
"validation": {"field": "data", "type": "object", "min_length": 1}
},
{
"name": "douyin_user_profile",
"endpoint": "/api/douyin/web/fetch_user_profile",
"method": "GET",
"headers": {"Authorization": "Bearer {API_KEY}"},
"payload": {},
"expected_status": 200,
"intent": "happy_path",
"expected_behavior": "Returns author profile data for a valid sec_user_id.",
"metrics": ["latency", "accuracy", "status_code"],
"validation": {"field": "data", "type": "object", "min_length": 1}
},
{
"name": "douyin_post_comments",
"endpoint": "/api/douyin/web/fetch_video_comments",
"method": "GET",
"headers": {"Authorization": "Bearer {API_KEY}"},
"payload": {},
"expected_status": 200,
"intent": "happy_path",
"expected_behavior": "Returns paginated comments for a valid aweme id.",
"metrics": ["latency", "accuracy", "status_code"],
"validation": {"field": "data", "type": "object", "min_length": 1}
},
{
"name": "search_keyword",
"endpoint": "/api/hybrid/search",
"method": "GET",
"headers": {"Authorization": "Bearer {API_KEY}"},
"payload": {},
"expected_status": 200,
"intent": "happy_path",
"expected_behavior": "Returns search results for a keyword query on the platform.",
"metrics": ["latency", "accuracy", "status_code"],
"validation": {"field": "data", "type": "array", "min_length": 1}
},
{
"name": "missing_required_param",
"endpoint": "/api/douyin/web/fetch_one_video",
"method": "GET",
"headers": {"Authorization": "Bearer {API_KEY}"},
"payload": {},
"expected_status": 422,
"intent": "validation",
"expected_behavior": "Rejects the call when the required aweme_id parameter is absent, returning a structured validation error.",
"metrics": ["status_code", "accuracy"],
"validation": {"field": "detail", "type": "any", "min_length": 1}
},
{
"name": "invalid_url_format",
"endpoint": "/api/hybrid/video_data",
"method": "GET",
"headers": {"Authorization": "Bearer {API_KEY}"},
"payload": {},
"expected_status": 400,
"intent": "validation",
"expected_behavior": "Rejects a malformed/non-platform URL with a 400-class envelope rather than crashing.",
"metrics": ["status_code", "accuracy"],
"validation": {"field": "detail", "type": "any", "min_length": 1}
},
{
"name": "missing_api_key",
"endpoint": "/api/douyin/web/fetch_one_video",
"method": "GET",
"headers": {},
"payload": {},
"expected_status": 401,
"intent": "auth",
"expected_behavior": "Rejects the request when no Authorization header is supplied (when the endpoint is key-protected).",
"metrics": ["status_code"],
"validation": {"field": "detail", "type": "any", "min_length": 1}
},
{
"name": "wrong_api_key",
"endpoint": "/api/douyin/web/fetch_one_video",
"method": "GET",
"headers": {"Authorization": "Bearer invalid_key_000000"},
"payload": {},
"expected_status": 403,
"intent": "auth",
1/12 tests passed
| Test | Endpoint | Status | Latency |
|---|---|---|---|
| root_reachability | GET / | 200 | 120ms |
| openapi_docs_available | GET /openapi.json | 404 | 76ms |
| hybrid_parsing_single_video | GET /api/hybrid/video_data | 404 | 77ms |
| douyin_post_fetch | GET /api/douyin/web/fetch_one_video | 404 | 80ms |
| douyin_user_profile | GET /api/douyin/web/fetch_user_profile | 404 | 77ms |
| douyin_post_comments | GET /api/douyin/web/fetch_video_comments | 404 | 83ms |
| search_keyword | GET /api/hybrid/search | 404 | 80ms |
| missing_required_param | GET /api/douyin/web/fetch_one_video | 404 | 79ms |
| invalid_url_format | GET /api/hybrid/video_data | 404 | 79ms |
| missing_api_key | GET /api/douyin/web/fetch_one_video | 404 | 131ms |
{"model": "deepseek", "data": {"overall": 0, "dimensions": {"token_efficiency": 0.0, "first_try_success": 0.0, "response_parseability": 0.0, "error_clarity": 0.0, "doc_quality": 0.0, "auth_simplicity": 0.0, "latency": 0.0, "consistency": 0.0}, "pricing_normalized": {"cost_per_1k_requests": null, "cost_per_1m_input_tokens": null, "cost_per_1m_output_tokens": null, "free_tier_requests": null, "estimated_monthly_cost_light": null, "estimated_monthly_cost_heavy": null}, "issues": [{"severity": "critical", "detail": "Benchmark used wrong base URL \u2014 got HTML instead of JSON API responses. All tests hit https://douyin.wtf/ (the Astro marketing/docs site), returning text/html with a 404 page. The actual service is an open-source, self-hosted API (Apache-2.0) with no hosted endpoint at this domain \u2014 the API would only be reachable when deployed by the user. This is a benchmark configuration error, not a service defect.", "endpoint": "/"}, {"severity": "high", "detail": "Observed endpoints (e.g. /api/douyin/web/fetch_one_video, /api/hybrid/video_data, /api/hybrid/search) returned 404 HTML from the website, indicating the API base URL and website origin differ. The correct API host/port (e.g. self-hosted localhost:80 or a deployed instance) was not used.", "endpoint": "/api/douyin/web/fetch_one_video"}, {"severity": "medium", "detail": "No /openapi.json exposed at the tested host \u2014 the OpenAPI spec is not available at the website origin. For a self-hosted service, docs must be sourced from the running instance or repo.", "endpoint": "/openapi.json"}], "recommendations": ["Re-run benchmark with correct API base URL from the vendor's guide \u2014 for a self-hosted open-source project, either deploy the container locally (docker run) and point the benchmark at that instance, or use a pinned live deployment documented in the README.", "Do not score this service against https://douyin.wtf/ \u2014 that is the documentation/marketing site, not the API host.", "In the benchmark harness, detect CONTENT_TYPE text/html on the root reachability probe and abort early with a clear 'wrong base_url' diagnostic instead of running all remaining tests against the website.", "When re-benchmarking, first fetch /openapi.json from the actual API instance to discover correct endpoint paths and auth scheme before executing capability tests."]}}Show your live agent-readiness score on your own site. Free, no auth — it updates as your score changes.
<a href="https://prowl.world/service/douyin-tiktok-download-api">
<img src="https://prowl.world/badge/douyin-tiktok-download-api.svg" height="56" alt="Agent-readiness on Prowl">
</a>
See operational metrics, LLM evaluations, agent readiness, and more.
Open in Dashboard