Hacker News
Search Hacker News, follow story feeds, and read public posts, comments and profiles with your agent. No Hacker News account or API key is required. These tools read public data; they cannot post, vote, edit or delete.
How to get credentials
No provider credentials are needed.
- Add Hacker News to your agent's tools in FlyMyAI.
- Keep the provider configuration empty.
- Test the connection, then ask your agent to search or read a story.
Your normal FlyMyAI execution charges apply.
Fields to fill in FlyMyAI
| FlyMyAI field | Where it comes from |
|---|---|
| No credential fields | Public reads require no provider account or API key. |
Try it
Find recent Hacker News stories about open source databases and summarize the main themes with links to the discussions.
Read the latest Show HN stories and pick three projects relevant to developer tools. Include each project's link and the Hacker News discussion.
All actions
Choose a story feed when you need current story IDs, or the front-page Atom feed for complete feed XML. Use an item lookup to read one story or comment, or a search action for text, author and date filters. Examples below are illustrative; result values change as the public data changes.
| Action | Purpose |
|---|---|
hackernews_get_top_stories | Read top ranked story IDs, including jobs. |
hackernews_get_new_stories | Read new story IDs, newest first. |
hackernews_get_best_stories | Read best story IDs. |
hackernews_get_ask_stories | Read Ask HN story IDs. |
hackernews_get_show_stories | Read Show HN story IDs. |
hackernews_get_job_stories | Read job story IDs. |
hackernews_get_item | Read one story, comment, job, poll or poll option and its linked IDs. |
hackernews_get_item_with_id | Read an indexed item with a recursively expanded public comment tree. |
hackernews_get_user_by_username | Read a public user profile and its submitted item IDs. |
hackernews_get_user | Read a public profile from the search index. |
hackernews_search_posts | Search indexed stories, comments, polls and poll options ordered by relevance, then points, then comment count. |
hackernews_get_latest_posts | Search indexed stories, comments, polls and poll options ordered by date, newest first. |
hackernews_get_frontpage | Read current front-page posts with points strictly greater than min_points. |
hackernews_get_todays_posts | Read newest-first stories created strictly after today's UTC midnight and exceeding min_points. |
hackernews_get_max_item_id | Read the largest current item ID to locate the newest allocated end of the item space. |
hackernews_get_updates | Read IDs of recently changed items and usernames of recently changed profiles. |
hackernews_get_front_page_feed | Read the complete front-page Atom feed as XML. |
Shared parameter rules
The tables below list every accepted parameter. Unlisted fields are rejected.
Usernames are case-sensitive and accept 1..128 letters, digits, underscores or
hyphens. Use JSON numbers, strings, booleans and null as shown. A print or
print_format option changes provider JSON whitespace, not the returned data;
omit it for normal use.
For search, tags accepts an expression or a list joined with AND. Supported
tags include story, comment, poll, pollopt, show_hn, ask_hn,
front_page, author_<username> and story_<id>. Commas mean AND and parentheses
mean OR: author_pg,(story,poll) finds stories or polls by that author.
numericFilters accepts created_at_i (Unix seconds), points, num_comments
and comparison operators <, <=, =, >, >=, joined with commas.
For example, tags: "story" and numericFilters: "points>=10" select stories
with at least ten points. search_parameters accepts additional
Algolia search parameters,
such as restrictSearchableAttributes: "url" or typoTolerance: false, subject
to the provider's supported features. Use JSON strings for parameters whose
provider format is an array or object. At most 32 keys are accepted; keys are
1..64 letters/digits starting with a letter, and string values are at most
2048 characters. Values may also be booleans, integers or finite numbers.
Use the named fields for query, tags, page, hitsPerPage, and
numericFilters. Credential, routing and callback overrides (apiKey,
applicationId, params, action, controller, format, callback) are
not accepted, regardless of capitalization.
Search pages start at zero. hitsPerPage controls the provider page size;
omitting it uses the provider default, normally 20. size controls how many hits
to keep from that page, default 5. Positive size sets nbHits to the number
retained while preserving provider nbPages and hitsPerPage. Use size: 0
or size: null for a full page and the provider's original total nbHits.
For continuation, increase page while it is below nbPages; there is no
automatic page traversal. Provider index limits may restrict accessible results.
Result fields
Item result
hackernews_get_item returns data containing one object or null. An item
has integer id; available fields depend on its type:
| Field | Meaning |
|---|---|
type | story, comment, job, poll, or pollopt. |
by, time | Author username and creation time in integer Unix seconds. |
title, url, text | Title, destination URL and HTML content, when present. |
score, descendants | Integer score/votes and total comment count. |
kids | Ranked array of integer child comment IDs. |
parent, poll | Integer parent item ID or associated poll ID. |
parts | Poll-option IDs in display order. |
deleted, dead | Boolean deletion/moderation flags. |
The nested item action returns response_data with integer id, string type,
ISO-8601 created_at, integer Unix created_at_i, author string, nullable
title/URL/HTML text and points, and recursive children arrays. parent_id
and story_id apply to child items; polls can include options. Some fields
are absent for particular types or deleted/dead records. Keep HTML as untrusted
content when displaying it.
Nested replies default to two levels and ten children per level. The root is
depth zero; max_depth: 0 omits its children. Null depth/child limits retain all
levels/children within the response limit. Text longer than 500 characters keeps
its first 500 characters and adds ... [truncated]; set truncate_text: false
to retain complete text. Local limits are applied after fetching the provider's
tree, so a very large upstream tree can still exceed the response limit.
_response_limited: true on the root means presentation limits were enabled.
When children are cut, children_truncated and total_children_count explain
the omission; a child-count cut includes children_shown, while a depth cut
includes max_depth_reached. These flags do not mean that a further provider
page is available. Read individual IDs for large discussions.
Profile result
hackernews_get_user_by_username returns data with string id, integer Unix
created, integer karma, optional HTML about, and optional submitted
array of item IDs. A missing public profile returns null.
hackernews_get_user returns the indexed profile under response_data:
documented fields include username, about and karma. Extra fields may
include integer submission_count, comment_count, created_at_i, and
submitted (a count in the search index, not Firebase's ID array). Presence and
nullability of extra index fields vary. A missing indexed user can return a
not-found error.
Search result
Search and latest-post actions return response_data. Front-page and today's
posts return response. Both contain a search-page object:
| Field | Type and meaning |
|---|---|
hits | Array of matching records. |
page | Integer current page, starting at zero. |
nbHits | Integer match count; positive size changes this to retained hits. |
nbPages, hitsPerPage | Integer provider page count and page size. |
processingTimeMS | Integer provider processing time. |
query, params | Search string and encoded provider query parameters. |
Hits can include string objectID, title, url, author, ISO-8601
created_at, integer created_at_i, points, num_comments, story_id,
parent_id, story_title, story_url, story_text, comment_text and string
array _tags. Fields depend on the item and may be null or absent.
_highlightResult maps field names to objects containing HTML value,
matchLevel and matchedWords; treat highlighted content as untrusted HTML.
Other provider metadata is retained. No matches gives hits: [].
Feeds, maximum ID and updates
Story-ID feed actions return data as an ordered array of integer IDs. Top/new feeds
contain up to 500 IDs; Ask/Show/job feeds up to 200. The official reference does
not specify a separate best-feed cap. Fetch item details separately.
Maximum item returns one integer under data. Updates returns data.items
(integer ID array) and data.profiles (username array). Updates has no historical
cursor or guaranteed change window.
Front-page Atom feed
hackernews_get_front_page_feed returns feed_xml, the provider's complete
UTF-8 XML text. It preserves the feed's metadata, entries, links, markup and
extension fields. It does not convert entries to JSON, follow links, resolve
XML entities or fetch item details. Treat the XML and any embedded HTML as
untrusted content when displaying or processing it. Feed contents can change
between calls.
Limits and errors
Each action reads one provider response with a 20-second timeout. The Atom feed has a 256 KiB upstream limit; other actions have a 2 MiB upstream limit. Returned JSON envelopes are also limited to 2 MiB. Large results may need a smaller search page or individual item lookups. Search and nested-item results also have bounded nesting; exceeding a bound fails instead of silently discarding required fields. A large Firebase result may be supplied through FlyMyAI's result memory mechanism. The Atom feed is returned whole or fails; it is never shortened or automatically paginated.
The search API documents 10,000 requests per IP per hour. If it rate-limits a request, wait before trying again; reconnecting an account is not required. Missing Firebase records return null; a missing indexed record may return an HTTP 404 error. A successful empty search is a page with no hits. Invalid inputs, invalid provider JSON, temporary access failures and timeouts report errors. The Atom feed rejects unexpected media types, compressed responses, invalid UTF-8 and oversized bodies. XML syntax is preserved without parsing. These actions do not upload/download files, start jobs, or subscribe to a stream.
Action reference
hackernews-get-top-stories
hackernews_get_top_stories - Read top ranked story IDs, including jobs.
One current snapshot, up to 500; fetch item details separately.
| Parameter | Type and limits | Required | Default | Meaning |
|---|---|---|---|---|
print | string (one of ["pretty", ""]) or null | no | null | Optional Firebase JSON formatting. |
Result: data: an ordered array of item IDs. Shared limits and errors apply.
Arguments:
{}
Example result:
{
"data": [
8863,
8864
]
}
hackernews-get-new-stories
hackernews_get_new_stories - Read new story IDs, newest first.
One current snapshot, up to 500; fetch item details separately.
| Parameter | Type and limits | Required | Default | Meaning |
|---|---|---|---|---|
print_format | string (one of ["pretty", ""]) or null | no | null | Optional Firebase JSON formatting. |
Result: data: an ordered array of item IDs. Shared limits and errors apply.
Arguments:
{}
Example result:
{
"data": [
8863,
8864
]
}
hackernews-get-best-stories
hackernews_get_best_stories - Read best story IDs.
One current snapshot, exact maximum not documented by the official README; fetch item details separately.
| Parameter | Type and limits | Required | Default | Meaning |
|---|---|---|---|---|
print | string (one of ["pretty", ""]) or null | no | null | Optional Firebase JSON formatting. |
Result: data: an ordered array of item IDs. Shared limits and errors apply.
Arguments:
{}
Example result:
{
"data": [
8863,
8864
]
}
hackernews-get-ask-stories
hackernews_get_ask_stories - Read Ask HN story IDs.
One current snapshot, up to 200; fetch item details separately.
| Parameter | Type and limits | Required | Default | Meaning |
|---|---|---|---|---|
print | string (one of ["pretty", ""]) or null | no | null | Optional Firebase JSON formatting. |
Result: data: an ordered array of item IDs. Shared limits and errors apply.
Arguments:
{}
Example result:
{
"data": [
8863,
8864
]
}
hackernews-get-show-stories
hackernews_get_show_stories - Read Show HN story IDs.
One current snapshot, up to 200; fetch item details separately.
| Parameter | Type and limits | Required | Default | Meaning |
|---|---|---|---|---|
print_format | string (one of ["pretty", ""]) or null | no | null | Optional Firebase JSON formatting. |
Result: data: an ordered array of item IDs. Shared limits and errors apply.
Arguments:
{}
Example result:
{
"data": [
8863,
8864
]
}
hackernews-get-job-stories
hackernews_get_job_stories - Read job story IDs.
One current snapshot, up to 200; fetch item details separately.
| Parameter | Type and limits | Required | Default | Meaning |
|---|---|---|---|---|
print_format | string (one of ["pretty", ""]) or null | no | null | Optional Firebase JSON formatting. |
Result: data: an ordered array of item IDs. Shared limits and errors apply.
Arguments:
{}
Example result:
{
"data": [
8863,
8864
]
}
hackernews-get-item
hackernews_get_item - Read one story, comment, job, poll or poll option and its linked IDs.
| Parameter | Type and limits | Required | Default | Meaning |
|---|---|---|---|---|
print | string (one of ["pretty", ""]) or null | no | null | Optional Firebase JSON formatting. |
id | integer (min 1; max 9007199254740991) | yes | required | Hacker News item ID. |
Result: data: one item object or null; child IDs are not automatically fetched. Shared limits and errors apply.
Arguments:
{
"id": 8863
}
Example result:
{
"data": {
"id": 8863,
"type": "story",
"by": "example",
"time": 1700000000,
"title": "Example story",
"score": 42,
"kids": [
8864
],
"descendants": 1
}
}
hackernews-get-item-with-id
hackernews_get_item_with_id - Read an indexed item with a recursively expanded public comment tree.
| Parameter | Type and limits | Required | Default | Meaning |
|---|---|---|---|---|
item_id | string (min chars 1; max chars 16; pattern ^[0-9]+$) | yes | required | Numeric Hacker News item ID, as a string. |
max_depth | integer (min 0; max 64) or null | no | 2 | Comment levels to retain; 0 omits children, null retains all levels within the response limit. |
max_children | integer (min 0; max 1000) or null | no | 10 | Children to retain at each level; null retains all within the response limit. |
truncate_text | boolean | no | true | Keep the first 500 text characters and append ... [truncated] when text is longer. |
Result: response_data: a nested item, with presentation-limit markers when configured. Shared limits and errors apply.
Arguments:
{
"item_id": "8863",
"max_depth": 1,
"max_children": 5
}
Example result:
{
"response_data": {
"id": 8863,
"type": "story",
"author": "example",
"title": "Example story",
"text": null,
"points": 42,
"created_at": "2023-11-14T22:13:20.000Z",
"children": [],
"_response_limited": true
}
}
hackernews-get-user-by-username
hackernews_get_user_by_username - Read a public user profile and its submitted item IDs.
| Parameter | Type and limits | Required | Default | Meaning |
|---|---|---|---|---|
print | string (one of ["pretty", ""]) or null | no | null | Optional Firebase JSON formatting. |
username | string (min chars 1; max chars 128; pattern ^[A-Za-z0-9_-]+$) | yes | required | Case-sensitive Hacker News username. |
Result: data: a public profile or null, including available submission IDs. Shared limits and errors apply.
Arguments:
{
"username": "example"
}
Example result:
{
"data": {
"id": "example",
"created": 1700000000,
"karma": 42,
"about": "Example profile",
"submitted": [
8863
]
}
}
hackernews-get-user
hackernews_get_user - Read a public profile from the search index.
| Parameter | Type and limits | Required | Default | Meaning |
|---|---|---|---|---|
username | string (min chars 1; max chars 128; pattern ^[A-Za-z0-9_-]+$) | yes | required | Case-sensitive Hacker News username. |
Result: response_data: an indexed profile, with provider fields retained. Shared limits and errors apply.
Arguments:
{
"username": "example"
}
Example result:
{
"response_data": {
"username": "example",
"about": "Example profile",
"karma": 42
}
}
hackernews-search-posts
hackernews_search_posts - Search indexed stories, comments, polls and poll options ordered by relevance, then points, then comment count.
| Parameter | Type and limits | Required | Default | Meaning |
|---|---|---|---|---|
page | integer (min 0; max 1000000) | no | 0 | Zero-based result page. |
size | integer (min 0; max 1000) or null | no | 5 | Hits retained from this page; 0 or null keeps the whole page. Does not change page boundaries. |
tags | array of string (min chars 1; max chars 512) (max items 32) or string (max chars 2048) or null | no | null | Tags ANDed as a list, or the provider expression, e.g. author_pg,(story,poll). |
query | string (max chars 2048) | yes | required | Full-text search query; empty text searches all matching tags. |
numericFilters | string (max chars 2048) or null | no | null | Numeric conditions, e.g. points>=10,created_at_i>1700000000,num_comments>5. |
hitsPerPage | integer (min 1; max 1000) or null | no | null | Provider page size; omit for its default 20. Set size=0 to keep every hit. |
search_parameters | object (max keys 32; keys: string (min chars 1; max chars 64)) | no | {} | Additional Algolia Search query parameters, e.g. restrictSearchableAttributes=url, typoTolerance=false. Encode array/object values as JSON strings. Routing, JSONP and credentials are forbidden. |
Result: response_data: a search page ordered by relevance, then points and comment count. Positive size changes nbHits to retained-hit count. Shared limits and errors apply.
Arguments:
{
"query": "database",
"size": 0
}
Example result:
{
"response_data": {
"hits": [],
"page": 0,
"nbHits": 0,
"nbPages": 0,
"hitsPerPage": 20,
"processingTimeMS": 1,
"query": "database",
"params": "query=database&page=0"
}
}
hackernews-get-latest-posts
hackernews_get_latest_posts - Search indexed stories, comments, polls and poll options ordered by date, newest first.
| Parameter | Type and limits | Required | Default | Meaning |
|---|---|---|---|---|
page | integer (min 0; max 1000000) | no | 0 | Zero-based result page. |
size | integer (min 0; max 1000) or null | no | 5 | Hits retained from this page; 0 or null keeps the whole page. Does not change page boundaries. |
tags | array of string (min chars 1; max chars 512) (max items 32) or string (max chars 2048) or null | no | null | Tags ANDed as a list, or the provider expression, e.g. author_pg,(story,poll). |
query | string (max chars 2048) | no | "" | Optional full-text query. |
numericFilters | string (max chars 2048) or null | no | null | Numeric conditions, e.g. points>=10,created_at_i>1700000000,num_comments>5. |
hitsPerPage | integer (min 1; max 1000) or null | no | null | Provider page size; omit for its default 20. Set size=0 to keep every hit. |
search_parameters | object (max keys 32; keys: string (min chars 1; max chars 64)) | no | {} | Additional Algolia Search query parameters, e.g. restrictSearchableAttributes=url, typoTolerance=false. Encode array/object values as JSON strings. Routing, JSONP and credentials are forbidden. |
Result: response_data: a search page, newest first. Positive size changes nbHits to retained-hit count. Shared limits and errors apply.
Arguments:
{
"query": "database",
"size": 0
}
Example result:
{
"response_data": {
"hits": [],
"page": 0,
"nbHits": 0,
"nbPages": 0,
"hitsPerPage": 20,
"processingTimeMS": 1,
"query": "database",
"params": "query=database&page=0"
}
}
hackernews-get-frontpage
hackernews_get_frontpage - Read current front-page posts with points strictly greater than min_points.
min_points is an integer, default 40, without a nonnegative restriction. Search uses tags=front_page, numericFilters=points>min_points, hitsPerPage=50 and page=0. No query, cursor or further page is exposed by this convenience action.
| Parameter | Type and limits | Required | Default | Meaning |
|---|---|---|---|---|
min_points | integer | no | 40 | Minimum points a post must exceed. Returns at most 50 posts. |
Result: response: the full bounded search page, including provider metadata. Empty results have hits: []. Shared limits and errors apply.
Arguments:
{
"min_points": 40
}
Example result:
{
"response": {
"hits": [],
"page": 0,
"nbHits": 0,
"nbPages": 0,
"hitsPerPage": 50,
"processingTimeMS": 1,
"query": "",
"params": "tags=front_page&numericFilters=points%3E40&hitsPerPage=50&page=0"
}
}
hackernews-get-todays-posts
hackernews_get_todays_posts - Read newest-first stories created strictly after today's UTC midnight and exceeding min_points.
min_points is an integer, default 200, without a nonnegative restriction. Search uses tags=story, strict created_at_i>UTC-midnight and points>min_points, hitsPerPage=1000 and page=0. The day uses UTC at invocation; no local timezone or historical date input exists.
| Parameter | Type and limits | Required | Default | Meaning |
|---|---|---|---|---|
min_points | integer | no | 200 | Minimum points a post must exceed. Returns at most 1000 posts. |
Result: response: the full bounded search page, including provider metadata. Empty results have hits: []. Shared limits and errors apply.
Arguments:
{
"min_points": 200
}
Example result:
{
"response": {
"hits": [],
"page": 0,
"nbHits": 0,
"nbPages": 0,
"hitsPerPage": 1000,
"processingTimeMS": 1,
"query": "",
"params": "tags=story&numericFilters=created_at_i%3E1700006400%2Cpoints%3E200&hitsPerPage=1000&page=0"
}
}
hackernews-get-max-item-id
hackernews_get_max_item_id - Read the largest current item ID to locate the newest allocated end of the item space.
| Parameter | Type and limits | Required | Default | Meaning |
|---|---|---|---|---|
print | string (one of ["pretty", ""]) or null | no | null | Optional Firebase JSON formatting. |
Result: data: the largest current integer item ID. Smaller IDs may be missing. Shared limits and errors apply.
Arguments:
{}
Example result:
{
"data": 42000000
}
hackernews-get-updates
hackernews_get_updates - Read IDs of recently changed items and usernames of recently changed profiles.
| Parameter | Type and limits | Required | Default | Meaning |
|---|---|---|---|---|
print | string (one of ["pretty", ""]) or null | no | null | Optional Firebase JSON formatting. |
Result: data: an updates object with items and profiles arrays. Shared limits and errors apply.
Arguments:
{}
Example result:
{
"data": {
"items": [
8863
],
"profiles": [
"example"
]
}
}
hackernews-get-front-page-feed
hackernews_get_front_page_feed - Read the complete front-page Atom feed as XML.
Read one current snapshot from the public Hacker News Search feed. No arguments are accepted. The result preserves provider XML rather than extracting a list of story IDs. Use story-ID feeds or search actions when you need structured JSON records.
| Parameter | Type and limits | Required | Default | Meaning |
|---|
Result: feed_xml: complete UTF-8 Atom XML, including provider metadata and entries. The 256 KiB upstream limit applies.
Arguments:
{}
Example result:
{
"feed_xml": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<feed xmlns=\"http://www.w3.org/2005/Atom\"><title>Hacker News</title><id>https://hn.algolia.com/</id><updated>2026-11-10T10:00:00Z</updated><entry><title>Example story</title><id>https://news.ycombinator.com/item?id=8863</id><updated>2026-11-10T09:00:00Z</updated><link href=\"https://example.com/story\" /></entry></feed>"
}
Troubleshooting
- Missing item or profile - check the ID or exact username case. A record may have no public data; deleted/dead items can omit content.
- Search differs from a feed - the search index and current feeds can update at different times. A search rank is not the same as front-page rank.
- Unexpected search counts - positive
sizemakesnbHitsa retained-hit count. Usesize: 0to keep the full provider page and total-match metadata. - A large discussion exceeds the result limit - use
hackernews_get_itemand follow selected child IDs. Local reply limits apply after the fetch. - Today's results differ from your local date - today's posts use UTC and include only creation times strictly after that day's midnight.
- Rate limit or temporary error - reduce calls or wait before retrying. No personal provider account needs to be reconnected.
Links
Provider documentation reviewed 2026-11-10. Available fields can vary by item type and provider index state; examples are illustrative.