Yahoo News API endpoint
Returns a page of an article's top-level comments: author, body, reaction counts, reply count, and pin status, with sort order and cursor-based pagination. Sourced from Yahoo's own comment platform gateway.
/yahoo-news/commentsReturns a page of an article's top-level comments: author, body, reaction counts, reply count, and pin status. Sourced from Yahoo's own comment platform gateway, not from the article page itself (comments are loaded on demand and never appear in the article page's HTML).
Query parameters:
content_id (required) — the article id, i.e. the id field returned
by /yahoo-news/home, /yahoo-news/category, or /yahoo-news/article.sort (optional) — comment sort order. One of top, popular,
newest, oldest. Defaults to top.cursor (optional) — pagination cursor, taken from a previous
response's next_cursor. Omit for the first page.count (optional) — number of comments to return, default 10, clamped
to 1-50.Notable response behavior:
comments_count is the article's total comment count, independent of
count/pagination.has_next_page/next_cursor drive pagination: pass next_cursor back
as cursor to fetch the next page. next_cursor is omitted once
has_next_page is false.content_id with no comments, or one that does not correspond to a
real article, both return a successful empty page (comments_count: 0,
items: []) rather than an error — this matches Yahoo's own upstream
behavior, which does not distinguish the two cases.content_id must look like a Yahoo News article id (a UUID); a
malformed value returns 400 before any upstream request is made.| Field | Filled in, of 10 checked | Values in the sample |
|---|---|---|
| id | 10 | |
| body | 10 | median 277 characters |
| created_at | 10 | 2026-08-13 |
| pinned | 10 | true in 0 of 10 |
| author | 10 | |
| reply_count | 10 | 24 to 207, median 46 |
| reactions | 10 | |
| updated_at | 1 | 2026-08-13 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| content_id | string | Yes | Article id (the id field returned by home/category/article) | 70253ef0-7509-31ec-aabf-d8e369db3f73 | |
| sort | string | No | top | Sort order, defaults to top Allowed values: top, popular, newest, oldest. | top |
| cursor | string | No | Pagination cursor from a previous response's next_cursor | ||
| count | integer | No | Number of comments to return, default 10, clamped to 1..50 | 10 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/yahoo-news/comments?content_id=70253ef0-7509-31ec-aabf-d8e369db3f73&sort=top&count=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"content_id": "70253ef0-7509-31ec-aabf-d8e369db3f73",
"sort": "top",
"comments_count": 365,
"items": [
{
"id": "eb4886ed-3ccc-4709-878f-70e239ca1e9c",
"body": "Well let's see, that's \"interesting\".",
"created_at": "2026-08-13T16:24:56.096Z",
"pinned": false,
"author": {
"nickname": "Chuck",
"handle": "chuck23117",
"avatar_url": "https://s.yimg.com/ag/images/default_user_profile_pic_64sq.jpg",
"has_default_avatar": true,
"total_comment_count": 3931,
"total_reaction_count": 14055
},
"reply_count": 11,
"reactions": {
"thumbs_up": 135,
"thumbs_down": 8,
"heart": 13,
"laugh": 1,
"clap": 4,
"sad": 0,
"total": 161
}
}
],
"has_next_page": true,
"next_cursor": "eyJ0aW1lc3RhbXBNaWNyb3MiOjE3ODY2Mzg3NTUzODk0MjQsImlkIjoiMGI1YjhlYzAtNzk2Ny00OGI0LTg2ZDktZmRlYWVhYmQ4MTMyIiwiaW5zdGFudCI6IjIwMjYtMDgtMTNUMTY6MzI6MzUuMzg5NDI0WiJ9"
}
}Request schema
No body schema
Response schema
#/definitions/yahoonews.commentsResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | yahoonews.CommentsResponse | No | ||||
| data.comments_count | integer | No | ||||
| data.content_id | string | No | ||||
| data.has_next_page | boolean | No | ||||
| data.items | array | No | ||||
| data.items[].author | yahoonews.CommentAuthor | No | ||||
| data.items[].author.avatar_url | string | No | ||||
| data.items[].author.handle | string | No | ||||
| data.items[].author.has_default_avatar | boolean | No | ||||
| data.items[].author.nickname | string | No | ||||
| data.items[].author.total_comment_count | integer | No | ||||
| data.items[].author.total_reaction_count | integer | No | ||||
| data.items[].body | string | No | ||||
| data.items[].created_at | string | No | ||||
| data.items[].id | string | No | ||||
| data.items[].pinned | boolean | No | ||||
| data.items[].reactions | yahoonews.CommentReactions | No | ||||
| data.items[].reactions.clap | integer | No | ||||
| data.items[].reactions.heart | integer | No | ||||
| data.items[].reactions.laugh | integer | No | ||||
| data.items[].reactions.sad | integer | No | ||||
| data.items[].reactions.thumbs_down | integer | No | ||||
| data.items[].reactions.thumbs_up | integer | No | ||||
| data.items[].reactions.total | integer | No | ||||
| data.items[].reply_count | integer | No | ||||
| data.items[].updated_at | string | No | ||||
| data.next_cursor | string | No | ||||
| data.sort | string | No | ||||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 500 | Internal Server Error | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/yahoo-news/comments?content_id=70253ef0-7509-31ec-aabf-d8e369db3f73&sort=top&count=10" \
-H "x-api-key: $CRAWLORA_API_KEY"