# Hacker News

> Search Hacker News, follow story feeds, and read public posts, comments and profiles without a provider API key. Includes parameters and examples for every action.

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 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`](#hackernews-get-top-stories) | Read top ranked story IDs, including jobs. |
| [`hackernews_get_new_stories`](#hackernews-get-new-stories) | Read new story IDs, newest first. |
| [`hackernews_get_best_stories`](#hackernews-get-best-stories) | Read best story IDs. |
| [`hackernews_get_ask_stories`](#hackernews-get-ask-stories) | Read Ask HN story IDs. |
| [`hackernews_get_show_stories`](#hackernews-get-show-stories) | Read Show HN story IDs. |
| [`hackernews_get_job_stories`](#hackernews-get-job-stories) | Read job story IDs. |
| [`hackernews_get_item`](#hackernews-get-item) | Read one story, comment, job, poll or poll option and its linked IDs. |
| [`hackernews_get_item_with_id`](#hackernews-get-item-with-id) | Read an indexed item with a recursively expanded public comment tree. |
| [`hackernews_get_user_by_username`](#hackernews-get-user-by-username) | Read a public user profile and its submitted item IDs. |
| [`hackernews_get_user`](#hackernews-get-user) | Read a public profile from the search index. |
| [`hackernews_search_posts`](#hackernews-search-posts) | Search indexed stories, comments, polls and poll options ordered by relevance, then points, then comment count. |
| [`hackernews_get_latest_posts`](#hackernews-get-latest-posts) | Search indexed stories, comments, polls and poll options ordered by date, newest first. |
| [`hackernews_get_frontpage`](#hackernews-get-frontpage) | Read current front-page posts with points strictly greater than min_points. |
| [`hackernews_get_todays_posts`](#hackernews-get-todays-posts) | Read newest-first stories created strictly after today's UTC midnight and exceeding min_points. |
| [`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. |
| [`hackernews_get_updates`](#hackernews-get-updates) | Read IDs of recently changed items and usernames of recently changed profiles. |
| [`hackernews_get_front_page_feed`](#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](https://www.algolia.com/doc/rest-api/search/search-single-index),
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](#feeds-maximum-id-and-updates). Shared [limits and errors](#limits-and-errors) apply.

Arguments:

```json
{}
```

Example result:

```json
{
  "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](#feeds-maximum-id-and-updates). Shared [limits and errors](#limits-and-errors) apply.

Arguments:

```json
{}
```

Example result:

```json
{
  "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](#feeds-maximum-id-and-updates). Shared [limits and errors](#limits-and-errors) apply.

Arguments:

```json
{}
```

Example result:

```json
{
  "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](#feeds-maximum-id-and-updates). Shared [limits and errors](#limits-and-errors) apply.

Arguments:

```json
{}
```

Example result:

```json
{
  "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](#feeds-maximum-id-and-updates). Shared [limits and errors](#limits-and-errors) apply.

Arguments:

```json
{}
```

Example result:

```json
{
  "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](#feeds-maximum-id-and-updates). Shared [limits and errors](#limits-and-errors) apply.

Arguments:

```json
{}
```

Example result:

```json
{
  "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](#item-result) or null; child IDs are not automatically fetched. Shared [limits and errors](#limits-and-errors) apply.

Arguments:

```json
{
  "id": 8863
}
```

Example result:

```json
{
  "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](#item-result), with presentation-limit markers when configured. Shared [limits and errors](#limits-and-errors) apply.

Arguments:

```json
{
  "item_id": "8863",
  "max_depth": 1,
  "max_children": 5
}
```

Example result:

```json
{
  "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](#profile-result) or null, including available submission IDs. Shared [limits and errors](#limits-and-errors) apply.

Arguments:

```json
{
  "username": "example"
}
```

Example result:

```json
{
  "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](#profile-result), with provider fields retained. Shared [limits and errors](#limits-and-errors) apply.

Arguments:

```json
{
  "username": "example"
}
```

Example result:

```json
{
  "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](#search-result) ordered by relevance, then points and comment count. Positive size changes nbHits to retained-hit count. Shared [limits and errors](#limits-and-errors) apply.

Arguments:

```json
{
  "query": "database",
  "size": 0
}
```

Example result:

```json
{
  "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](#search-result), newest first. Positive size changes nbHits to retained-hit count. Shared [limits and errors](#limits-and-errors) apply.

Arguments:

```json
{
  "query": "database",
  "size": 0
}
```

Example result:

```json
{
  "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](#search-result), including provider metadata. Empty results have hits: []. Shared [limits and errors](#limits-and-errors) apply.

Arguments:

```json
{
  "min_points": 40
}
```

Example result:

```json
{
  "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](#search-result), including provider metadata. Empty results have hits: []. Shared [limits and errors](#limits-and-errors) apply.

Arguments:

```json
{
  "min_points": 200
}
```

Example result:

```json
{
  "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](#limits-and-errors) apply.

Arguments:

```json
{}
```

Example result:

```json
{
  "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](#feeds-maximum-id-and-updates) with items and profiles arrays. Shared [limits and errors](#limits-and-errors) apply.

Arguments:

```json
{}
```

Example result:

```json
{
  "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](#front-page-atom-feed), including provider metadata and entries. The [256 KiB upstream limit](#limits-and-errors) applies.

Arguments:

```json
{}
```

Example result:

```json
{
  "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.

## Links

- [Hacker News](https://news.ycombinator.com/)
- [Hacker News Firebase API v0 reference](https://github.com/HackerNews/API)
- [Hacker News Search API v1 reference](https://hn.algolia.com/api)

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