Extract Comments

Extract comments and reply threads from video pages.

POST /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
Response

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.

This site uses only essential cookies required for the service to function (session authentication and security). We do not use analytics, tracking, or advertising cookies. Learn more