Search HackerNews
Search HackerNews stories and comments (via Algolia's HN index).
Query syntax
query supports HN's native search qualifiers in addition to plain keywords: author:USERNAME / by:USERNAME (filter by author), story:ID (filter to one story's items), points>N / points<N, comments>N / comments<N, "exact phrase", and -word (exclude). A query can be qualifiers-only with no keywords, e.g. author:pg points>500.
Credits
Each successful response deducts 2 credits from your organization. Requests that fail (4xx / 5xx) are not billed.
See the credits documentation for the full rate table.
Authorization
bearerAuth Organization API key (sf_api_… from Integrations → API keys) or a partner OAuth 2.1 access token issued by SnitchFeed (authorization_code + refresh). OAuth tokens must be audience-bound to this API (resource = {apiOrigin}/v1) and carry the route scopes listed per operation.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Request body for POST /data/hackernews/search.
Search keywords for HackerNews stories/comments. Also supports HN's native search qualifiers: author:USERNAME or by:USERNAME (filter by author), story:ID (filter to one story's items), points>N / points<N (filter by points), comments>N / comments<N (filter by comment count), "exact phrase", and -word (exclude a word). Can be qualifiers-only with no keywords, e.g. "author:pg points>500".
1 <= length <= 200Restrict to stories, comments, or both (default both).
Zero-indexed page number for pagination.
0 <= valueResults per page (capped at 100).
1 <= value <= 100Response Body
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/data/hackernews/search" \ -H "Content-Type: application/json" \ -d '{ "query": "string" }'{ "requestId": "string", "posts": [ { "objectID": "string", "type": "story", "title": "string", "body": "string", "url": "string", "author": "string", "points": 0, "numComments": 0, "createdAt": "string", "storyId": "string", "storyTitle": "string" } ], "meta": { "returnedCount": 0, "hasMore": true, "nextPage": 0 }}Get LinkedIn person comments POST
Fetch recent public comments made by a LinkedIn person (comments they wrote on other people's posts) by profile URL. Returns one page at a time. When `meta.hasMore` is true, request the next page with the same `profileUrl`, `page` incremented by 1, and `paginationToken` set to the value from the previous response. > **Recommended client timeout: 90 seconds.** Most requests resolve in 2-5 seconds, but set your HTTP client timeout to at least 90 seconds to avoid false timeouts on slower lookups. ### Credits Each **successful** response deducts **10 credits** from your organization. Requests that fail (4xx / 5xx) are not billed. See the [credits documentation](https://snitchfeed.com/docs/api/credits) for the full rate table.
List mentions GET
List mentions (brand mentions your listeners matched), cursor-paginated. `sort` is `newest` (default, by `datePublished` descending) or `fitScore` (by AI fit score descending, unscored mentions last). **Cursor pagination only** — mentions insert continuously, so this endpoint does not support offset/page pagination. Pass `meta.nextCursor` from a response as `cursor` on the next request. When `meta.hasMore` is `false`, there is nothing more to fetch. A cursor is only valid for the `sort` it was minted under; reusing it with a different value returns a validation error. Because `newest` sorts by publish date, a mention backfilled or found via a delayed crawl can carry an older `datePublished` than mentions you've already paginated past, and will not appear in a subsequent page. `sort=fitScore` has a similar but more general risk: AI fit score can be overwritten by reanalysis after insert, so a mention re-scored while you're mid-pagination can occasionally be skipped or duplicated across pages. Prefer `sort=newest` if you need a gap-free stream. `status` defaults to `ready` (unarchived). Note that `status` and AI analysis (`ai.*`, including `fitScore`) are point-in-time, not live: a mention synced before it was archived or re-scored will not reflect the change unless you re-fetch it. `platform`, `sentiment`, `fitScore`, `languages`, `includeIntents`/`excludeIntents`, `listenerIds`/`excludeListenerIds`, and `includeKeywords`/`excludeKeywords` all take comma-separated values. `dateFrom`/`dateTo` filter on `datePublished` (note: independent of `sort`). **Read-only** — this endpoint does not consume credits.