InsightSocial API
YouTube

YouTube Video Comments API reference

Your first 10 calls are free, no card needed. Pricing and FAQ

Get a free API key
Example request
curl "https://api.insightsocial.app/v1/youtube/video/comments?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DdQw4w9WgXcQ" \
  -H "x-api-key: $INSIGHTSOCIAL_API_KEY"

Step-by-step: Sentiment analysis

GET
/v1/youtube/video/comments

Returns comments on a video, each with the author name, comment text, like count, reply count, and publish timestamp.

Use it for a video's top-level comments, then pass a comment's id as continuationToken to video/comment/replies to open a single thread.

10 credits per call.

Paginates by cursor: see Pagination.

x-api-key<token>

Your key from the dashboard. It starts with isk_.

In: header

Query Parameters

url*string

Full URL of the YouTube video to fetch comments for

order?string

Order of comments: 'top' (default, YouTube's relevance ranking) or 'newest' (exact newest-first on comment.published_at; each next page continues strictly older with no overlap: the lane for date-window and recency pulls).

Value in

  • "top"
  • "newest"
searchTerm?string

Filter comments to those containing this search term.

format?string

Text format for comment bodies: 'html' (default) or 'plainText'.

Value in

  • "html"
  • "plainText"
max_results?integer

Comments per page, 1-100. The default page is already 100, so set this only to shrink a page; out-of-range values are rejected with a free 400 rather than degrading the response.

Range1 <= value <= 100
channel_id?string

YouTube channel id to fetch channel-level community comments for (instead of a video's comments).

dry_run?"1"

Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.

Value in

  • "1"
since?string

Only rows published on or after this date: YYYY-MM-DD (midnight UTC) or an ISO 8601 timestamp. Rows older than it are left off the page, and the page that reaches one ends the walk: next_cursor is not returned and pagination.stopped_at is since. Sending it sets the newest-first sort shown in this endpoint's sort parameter (any other sort value is a free 400). The page still costs what a page costs, so you pay for the pages you walk and no more. A row with no date is kept.

until?string

Only rows published on or before this date: YYYY-MM-DD (that whole UTC day is included) or an ISO 8601 timestamp. Newer rows are left off each page and the walk does not stop, so older pages follow. A row with no date is kept.

cursor?string

The pagination.next_cursor from the previous page, sent back unchanged. Omit it for the first page.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://api.insightsocial.app/v1/youtube/video/comments?url=string"
{  "success": true,  "platform": "string",  "endpoint": "string",  "schema_version": "2",  "pagination": {    "next_cursor": "string",    "has_more": true,    "page_size": 0,    "stopped_at": "since"  },  "unavailable": [    "string"  ],  "credits_used": 0,  "credits_remaining": 0,  "request_id": "string",  "cached": true,  "idempotent_replay": true,  "charge_reason": "string",  "free_call": true,  "data": {    "items": [      {        "comment": {          "id": "string",          "url": "http://example.com",          "parent_id": "string",          "post_id": "string",          "text": "string",          "author": {            "id": "string",            "username": "string",            "display_name": "string",            "avatar_url": "http://example.com",            "verified": true          },          "engagement": {            "likes": 0,            "replies": 0          },          "flags": {            "pinned": true,            "deleted": true          },          "published_at": "2019-08-24T14:15:22Z",          "language": "string",          "replies": [            {}          ],          "ext": {            "property1": null,            "property2": null          }        }      }    ],    "total": 0,    "truncated": true,    "ext": {      "property1": null,      "property2": null    }  }}