Download a Douyin video as MP4
curl --request POST \
--url https://api.agentbody.io/v1/douyin/video/download \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"url": "<string>"
}
'import requests
url = "https://api.agentbody.io/v1/douyin/video/download"
payload = { "url": "<string>" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({url: '<string>'})
};
fetch('https://api.agentbody.io/v1/douyin/video/download', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.agentbody.io/v1/douyin/video/download",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'url' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.agentbody.io/v1/douyin/video/download"
payload := strings.NewReader("{\n \"url\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.agentbody.io/v1/douyin/video/download")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"url\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.agentbody.io/v1/douyin/video/download")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"url\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"author_name": "盗月社食遇记",
"collect_count": 855021,
"comment_count": 162235,
"digg_count": 4037193,
"duration_seconds": 1082.5,
"id": "7577614489533680959",
"share_count": 5135670,
"text": "这个贵州五线小城市…",
"title": "贵州美食探店",
"url": "https://www.douyin.com/video/7577614489533680959",
"video_content_type": "video/mp4",
"video_size_bytes": 215476832,
"video_url": "https://api.apify.com/v2/key-value-stores/example/records/7577614489533680959.mp4"
}{
"error": {
"code": "INVALID_ARGUMENT",
"message": "example error"
}
}{
"error": {
"code": "UNAUTHENTICATED",
"message": "example error"
}
}{
"error": {
"code": "CONFLICT",
"message": "example error"
}
}{
"error": {
"code": "UPSTREAM_INVALID_RESPONSE",
"message": "example error"
}
}{
"error": {
"code": "UPSTREAM_UNAVAILABLE",
"message": "example error"
}
}{
"error": {
"code": "UPSTREAM_TIMEOUT",
"message": "example error"
}
}douyin
Download a Douyin video as MP4
Use this operation to download the media of one public Douyin (抖音) video as an MP4 file link with normalized video metadata. Accepts douyin.com video URLs, iesdouyin share links, v.douyin.com short links, and bare numeric video IDs.
POST
/
v1
/
douyin
/
video
/
download
Download a Douyin video as MP4
curl --request POST \
--url https://api.agentbody.io/v1/douyin/video/download \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"url": "<string>"
}
'import requests
url = "https://api.agentbody.io/v1/douyin/video/download"
payload = { "url": "<string>" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({url: '<string>'})
};
fetch('https://api.agentbody.io/v1/douyin/video/download', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.agentbody.io/v1/douyin/video/download",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'url' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.agentbody.io/v1/douyin/video/download"
payload := strings.NewReader("{\n \"url\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.agentbody.io/v1/douyin/video/download")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"url\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.agentbody.io/v1/douyin/video/download")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"url\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"author_name": "盗月社食遇记",
"collect_count": 855021,
"comment_count": 162235,
"digg_count": 4037193,
"duration_seconds": 1082.5,
"id": "7577614489533680959",
"share_count": 5135670,
"text": "这个贵州五线小城市…",
"title": "贵州美食探店",
"url": "https://www.douyin.com/video/7577614489533680959",
"video_content_type": "video/mp4",
"video_size_bytes": 215476832,
"video_url": "https://api.apify.com/v2/key-value-stores/example/records/7577614489533680959.mp4"
}{
"error": {
"code": "INVALID_ARGUMENT",
"message": "example error"
}
}{
"error": {
"code": "UNAUTHENTICATED",
"message": "example error"
}
}{
"error": {
"code": "CONFLICT",
"message": "example error"
}
}{
"error": {
"code": "UPSTREAM_INVALID_RESPONSE",
"message": "example error"
}
}{
"error": {
"code": "UPSTREAM_UNAVAILABLE",
"message": "example error"
}
}{
"error": {
"code": "UPSTREAM_TIMEOUT",
"message": "example error"
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
Optional key for safely retrying a billable write request.
Required string length:
1 - 255Body
application/json
Public Douyin video URL (douyin.com video, iesdouyin share, or v.douyin.com short link) or bare numeric video ID.
Response
Downloaded Douyin media link and normalized public video metadata.
Was this page helpful?
