Extract Comments
Extract comments and reply threads from video pages.
/v1/comments
1 credit
Description
Extract comments and reply threads from video pages. Returns threaded discussions with author info, like counts, and timestamps. Supports sorting by popularity or recency.
Request Body
Send a JSON body with the following parameters:
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| url | string | Yes | — | Source video URL |
| max_comments | int | No | 100 | Maximum top-level comments (1–1000) |
| sort | string | No | "top" | Sort order: "top" (most liked) or "newest" |
| include_replies | boolean | No | true | Include reply threads |
Code Examples
curl -X POST "https://videoconduit.com/v1/comments" \
-H "Authorization: Bearer vc_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"url": "https://youtube.com/watch?v=dQw4w9WgXcQ",
"max_comments": 100,
"sort": "top"
}'import requests
response = requests.post(
"https://videoconduit.com/v1/comments",
headers={"Authorization": "Bearer vc_your_api_key"},
json={
"url": "https://youtube.com/watch?v=dQw4w9WgXcQ",
"max_comments": 100,
"sort": "top",
},
)
data = response.json()
print(data["job_id"])const response = await fetch("https://videoconduit.com/v1/comments", {
method: "POST",
headers: {
"Authorization": "Bearer vc_your_api_key",
"Content-Type": "application/json",
},
body: JSON.stringify({
url: "https://youtube.com/watch?v=dQw4w9WgXcQ",
max_comments: 100,
sort: "top",
}),
});
const data = await response.json();
console.log(data.job_id);$client = new GuzzleHttp\Client();
$response = $client->post("https://videoconduit.com/v1/comments", [
"headers" => ["Authorization" => "Bearer vc_your_api_key"],
"json" => [
"url" => "https://youtube.com/watch?v=dQw4w9WgXcQ",
"max_comments" => 100,
"sort" => "top",
],
]);
$data = json_decode($response->getBody(), true);
echo $data["job_id"];body := strings.NewReader(`{
"url": "https://youtube.com/watch?v=dQw4w9WgXcQ",
"max_comments": 100,
"sort": "top"
}`)
req, _ := http.NewRequest("POST", "https://videoconduit.com/v1/comments", body)
req.Header.Set("Authorization", "Bearer vc_your_api_key")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
var data map[string]interface{}
json.NewDecoder(resp.Body).Decode(&data)require "net/http"
require "json"
uri = URI("https://videoconduit.com/v1/comments")
req = Net::HTTP::Post.new(uri)
req["Authorization"] = "Bearer vc_your_api_key"
req["Content-Type"] = "application/json"
req.body = {
url: "https://youtube.com/watch?v=dQw4w9WgXcQ",
max_comments: 100,
sort: "top",
}.to_json
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
data = JSON.parse(res.body)
puts data["job_id"]Response (download file)
The download_url points to a JSON file with the extracted comments:
{
"url": "https://youtube.com/watch?v=dQw4w9WgXcQ",
"title": "Rick Astley - Never Gonna Give You Up",
"comment_count": 87,
"comments": [
{
"id": "abc123",
"text": "This song never gets old!",
"author": "MusicFan2024",
"author_url": "https://youtube.com/@MusicFan2024",
"like_count": 1542,
"timestamp": "2025-01-10T15:30:00Z",
"is_pinned": false,
"replies": [
{
"id": "def456",
"text": "Agreed! A timeless classic.",
"author": "RetroVibes",
"author_url": "https://youtube.com/@RetroVibes",
"like_count": 89,
"timestamp": "2025-01-10T16:00:00Z"
}
]
}
]
}
Platform Support
Comment extraction depends on the platform. Some platforms may not support comments or may limit the number of retrievable comments.
Try It
{# Usage: {% include "docs/_playground.html" with endpoint_method="POST" endpoint_path="/v1/download" fields=playground_fields %} playground_fields is a list of dicts passed from the view: [ {"name": "url", "type": "text", "required": True, "placeholder": "https://youtube.com/watch?v=...", "label": "Video URL"}, {"name": "quality", "type": "select", "options": ["best", "1080p", "720p", "480p", "audio"], "default": "best", "label": "Quality"}, ] #}Try It
POST /v1/comments
Notes
Reduce Payload Size
Set include_replies to false if you only need top-level comments. This can significantly reduce the output file size for videos with deep reply threads.