Hacker News Search
Web & Search · 1 endpoint
Search every story and comment Hacker News has carried — Algolia's index of the firehose, with points, comment counts, and links.
Base URL
Endpoint
Snippet
Request — cURL
v1
curl https://api.diraz.ae/v1/hackernews/search \
-H "Authorization: Bearer drz_live_…"Query parameters
- qstring · required
- The query — matched against story titles and URLs, and comment text.
- limitinteger · optional
- Hits per page, `1`-`100`.Default: 20
- max_ageinteger (seconds) · optional
- Ask for data no older than this. Clamped to the product's own floor, so it can narrow the window but never force a refresh on every call.Default: 300
Example response
200 OK
v1
{
"data": {
"query": "anthropic",
"total": 131999,
"page": 0,
"items": [
{
"id": "46124267",
"title": "Anthropic acquires Bun",
"author": "ryanvogel",
"points": 2192,
"comments": 1072,
"url": "https://bun.com/blog/bun-joins-anthropic",
"created_at": "2025-12-02T18:05:44Z"
},
{
"id": "48889637",
"title": "Zig Creator Calls Spade a Spade, Anthropic Blows Smoke",
"author": "crowdhailer",
"points": 1554,
"comments": 786,
"url": "https://raymyers.org/post/zed-creator-calls-spade-a-spade/",
"created_at": "2026-07-13T08:39:39Z"
}
]
},
"meta": {
"request_id": "req_7Q2fK4mZ",
"as_of": "2026-08-20T04:05:00.000Z",
"age_seconds": 42,
"next_update_at": "2026-08-20T04:10:00.000Z"
}
}- query / total / page
- What was asked, how many hits it holds, and which page this is.
- items[].title / author
- The story title (the parent story's, for comment hits) and who posted it.
- items[].points / comments
- The numbers HN sorts by; `null` on comment hits.
- items[].url / created_at
- The linked URL and when the item was posted.
Errors
401 Unauthorized
v1
{
"error": {
"code": "UNAUTHORIZED",
"message": "The API key is invalid, expired, or revoked."
},
"meta": {
"request_id": "req_7Q2fK4mZ"
}
}Every failure carries a stable machine-readable code before the human message, and the same meta.request_id the successful responses carry. Quote it and we can find your exact request.
Errors are free
Nothing on this page is billed. You are charged for a 2xx and nothing else — a rejected key, a bad parameter, a rate limit, or an outage on our side all cost you zero. Retry without watching the meter.
- UNAUTHORIZEDHTTP 401
- Missing, malformed, expired, or revoked API key.
- FORBIDDENHTTP 403
- The key is valid but lacks the scope this product needs.
- VALIDATION_ERRORHTTP 422
- A query parameter is the wrong type or out of range.
- RATE_LIMITEDHTTP 429
- Rate limit exhausted. `Retry-After` says how long to wait.
- SERVICE_UNAVAILABLEHTTP 503
- No data recent enough to serve. Carries `Retry-After`, and is never billed.
- Status
- Operational
- Category
- Web & Search
- Scope
- market:read
- Rate limit
- 120 requests / 60s per key
- Pricing
- 1 credit / request
- Hacker News Search
1/1 passing
Every response is timestamped. as_of is when the data was published, age_seconds how old that is now, and next_update_at when newer data is expected.
Three shapes to handle:
- Up to date200
The data is inside its published window. The overwhelming majority of requests.
- Delayeddelayed: true
Newer data is late. You still get the most recent there is, flagged so you can decide whether to use it.
- Unavailable503
Nothing recent enough to serve. Carries Retry-After, and is never billed.