Skip to main content
Hacker News logo

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.

  1. Add Hacker News to your agent's tools in FlyMyAI.
  2. Keep the provider configuration empty.
  3. 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 fieldWhere it comes from
No credential fieldsPublic 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.

ActionPurpose
hackernews_get_top_storiesRead top ranked story IDs, including jobs.
hackernews_get_new_storiesRead new story IDs, newest first.
hackernews_get_best_storiesRead best story IDs.
hackernews_get_ask_storiesRead Ask HN story IDs.
hackernews_get_show_storiesRead Show HN story IDs.
hackernews_get_job_storiesRead job story IDs.
hackernews_get_itemRead one story, comment, job, poll or poll option and its linked IDs.
hackernews_get_item_with_idRead an indexed item with a recursively expanded public comment tree.
hackernews_get_user_by_usernameRead a public user profile and its submitted item IDs.
hackernews_get_userRead a public profile from the search index.
hackernews_search_postsSearch indexed stories, comments, polls and poll options ordered by relevance, then points, then comment count.
hackernews_get_latest_postsSearch indexed stories, comments, polls and poll options ordered by date, newest first.
hackernews_get_frontpageRead current front-page posts with points strictly greater than min_points.
hackernews_get_todays_postsRead newest-first stories created strictly after today's UTC midnight and exceeding min_points.
hackernews_get_max_item_idRead the largest current item ID to locate the newest allocated end of the item space.
hackernews_get_updatesRead IDs of recently changed items and usernames of recently changed profiles.
hackernews_get_front_page_feedRead 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:

FieldMeaning
typestory, comment, job, poll, or pollopt.
by, timeAuthor username and creation time in integer Unix seconds.
title, url, textTitle, destination URL and HTML content, when present.
score, descendantsInteger score/votes and total comment count.
kidsRanked array of integer child comment IDs.
parent, pollInteger parent item ID or associated poll ID.
partsPoll-option IDs in display order.
deleted, deadBoolean 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:

FieldType and meaning
hitsArray of matching records.
pageInteger current page, starting at zero.
nbHitsInteger match count; positive size changes this to retained hits.
nbPages, hitsPerPageInteger provider page count and page size.
processingTimeMSInteger provider processing time.
query, paramsSearch 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.

ParameterType and limitsRequiredDefaultMeaning
printstring (one of ["pretty", ""]) or nullnonullOptional 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.

ParameterType and limitsRequiredDefaultMeaning
print_formatstring (one of ["pretty", ""]) or nullnonullOptional 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.

ParameterType and limitsRequiredDefaultMeaning
printstring (one of ["pretty", ""]) or nullnonullOptional 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.

ParameterType and limitsRequiredDefaultMeaning
printstring (one of ["pretty", ""]) or nullnonullOptional 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.

ParameterType and limitsRequiredDefaultMeaning
print_formatstring (one of ["pretty", ""]) or nullnonullOptional 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.

ParameterType and limitsRequiredDefaultMeaning
print_formatstring (one of ["pretty", ""]) or nullnonullOptional 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.

ParameterType and limitsRequiredDefaultMeaning
printstring (one of ["pretty", ""]) or nullnonullOptional Firebase JSON formatting.
idinteger (min 1; max 9007199254740991)yesrequiredHacker 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.

ParameterType and limitsRequiredDefaultMeaning
item_idstring (min chars 1; max chars 16; pattern ^[0-9]+$)yesrequiredNumeric Hacker News item ID, as a string.
max_depthinteger (min 0; max 64) or nullno2Comment levels to retain; 0 omits children, null retains all levels within the response limit.
max_childreninteger (min 0; max 1000) or nullno10Children to retain at each level; null retains all within the response limit.
truncate_textbooleannotrueKeep 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.

ParameterType and limitsRequiredDefaultMeaning
printstring (one of ["pretty", ""]) or nullnonullOptional Firebase JSON formatting.
usernamestring (min chars 1; max chars 128; pattern ^[A-Za-z0-9_-]+$)yesrequiredCase-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.

ParameterType and limitsRequiredDefaultMeaning
usernamestring (min chars 1; max chars 128; pattern ^[A-Za-z0-9_-]+$)yesrequiredCase-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.

ParameterType and limitsRequiredDefaultMeaning
pageinteger (min 0; max 1000000)no0Zero-based result page.
sizeinteger (min 0; max 1000) or nullno5Hits retained from this page; 0 or null keeps the whole page. Does not change page boundaries.
tagsarray of string (min chars 1; max chars 512) (max items 32) or string (max chars 2048) or nullnonullTags ANDed as a list, or the provider expression, e.g. author_pg,(story,poll).
querystring (max chars 2048)yesrequiredFull-text search query; empty text searches all matching tags.
numericFiltersstring (max chars 2048) or nullnonullNumeric conditions, e.g. points>=10,created_at_i>1700000000,num_comments>5.
hitsPerPageinteger (min 1; max 1000) or nullnonullProvider page size; omit for its default 20. Set size=0 to keep every hit.
search_parametersobject (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.

ParameterType and limitsRequiredDefaultMeaning
pageinteger (min 0; max 1000000)no0Zero-based result page.
sizeinteger (min 0; max 1000) or nullno5Hits retained from this page; 0 or null keeps the whole page. Does not change page boundaries.
tagsarray of string (min chars 1; max chars 512) (max items 32) or string (max chars 2048) or nullnonullTags ANDed as a list, or the provider expression, e.g. author_pg,(story,poll).
querystring (max chars 2048)no""Optional full-text query.
numericFiltersstring (max chars 2048) or nullnonullNumeric conditions, e.g. points>=10,created_at_i>1700000000,num_comments>5.
hitsPerPageinteger (min 1; max 1000) or nullnonullProvider page size; omit for its default 20. Set size=0 to keep every hit.
search_parametersobject (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.

ParameterType and limitsRequiredDefaultMeaning
min_pointsintegerno40Minimum 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.

ParameterType and limitsRequiredDefaultMeaning
min_pointsintegerno200Minimum 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.

ParameterType and limitsRequiredDefaultMeaning
printstring (one of ["pretty", ""]) or nullnonullOptional 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.

ParameterType and limitsRequiredDefaultMeaning
printstring (one of ["pretty", ""]) or nullnonullOptional 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.

ParameterType and limitsRequiredDefaultMeaning

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 size makes nbHits a retained-hit count. Use size: 0 to keep the full provider page and total-match metadata.
  • A large discussion exceeds the result limit - use hackernews_get_item and 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.

Provider documentation reviewed 2026-11-10. Available fields can vary by item type and provider index state; examples are illustrative.

We love our partners - FlyMy.AI builds with the best. Thanks, Hacker News!