> ## Documentation Index
> Fetch the complete documentation index at: https://partners.centaur.io/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Partner Feed

> Read presentation-ready source-message groups and poll for curated event changes.

`GET /api/v1/feed` returns a partner-native feed grouped by source message, designed for direct rendering. Its curation rules match the Centaur app feed's, but the feed is its own documented contract: behavior changes ship as documented API updates, not as side effects of app changes.

Feed groups must pass both the trader's signal and message visibility gates. The feed only shows activity whose source message the caller is entitled to read, so `/events` can intentionally return events for a trader that never appears in `/feed`.

## Supported parameters

* `traderIds`
* `assetIds`
* `startTime`
* `endTime`
* `limit`
* `cursor`
* `since`

`limit` counts source-message groups, defaults to `20`, and accepts up to `100`. The feed contains only source messages posted during the rolling seven days before the request. `startTime` and `endTime` can narrow that window, and an earlier `startTime` is clamped to its lower edge. A range that ends before the window starts therefore returns an empty page rather than an error. The applied bounds are returned in `data.meta.appliedTimeRange`.

`cursor` and `since` are mutually exclusive. The tokens are opaque and signed, so store and return them unchanged.

## Initial read and scroll-back pagination

```bash theme={null}
curl -s 'https://partners.centaur.io/api/v1/feed?assetIds=34&limit=20' \
  -H 'x-api-key: <api-key>'
```

Groups are ordered by `writtenAt` descending with Source Message ID as the tiebreak. Events inside a group are ordered by `timeOfEvent` descending with event ID as the tiebreak.

When `meta.hasMore` is `true`, pass `meta.nextCursor` as `cursor` to fetch the next older page:

```bash theme={null}
curl -s 'https://partners.centaur.io/api/v1/feed?cursor=<next-cursor>' \
  -H 'x-api-key: <api-key>'
```

For continuous history, establish a local mirror with `since`; the feed does not scroll beyond the rolling seven-day window.

## Polling with `since`

`since` is an ingestion-watermark change feed. It is based on newly visible event-log rows, not message post time, so a retrospective event can make a source-message group within the rolling seven-day window reappear.

Pass the latest `meta.nextCursor` as `since`:

```bash theme={null}
curl -s 'https://partners.centaur.io/api/v1/feed?since=<next-cursor>' \
  -H 'x-api-key: <api-key>'
```

A returned group contains all of its currently visible curated events, including events that predate the watermark. Treat each result as an upsert: replace the previous group wholesale using the group's `id` as the key.

If a change response has `hasMore: true`, continue passing its `nextCursor` as `since` until `hasMore` becomes `false`. Every successful `since` poll returns an updated non-null `nextCursor`, including polls with no groups, so store the newest token for the next poll.

Event IDs can be allocated before concurrent transactions commit. Keep the token from before the latest successful poll for one additional cycle and replay it once as a small overlap, merging results by group `id` and replacing each complete group payload while continuing forward with the newest token. This lets a late commit appear without moving the primary polling cursor backward.

## Server-side curation

The partner feed removes fabricated events that have no message evidence or duplicate the message's real event:

* assumed and GC-generated closes
* instant opens fabricated at a position's close
* assumed opens with another event for the same message and asset

Lone inferred opens form feed groups and remain visible with `assumed: true`, as do assumed increases and decreases. Retrospective events remain visible with `retrospective: true`.

Centaur may exclude specific sources from the feed for editorial or quality reasons. Those exclusions apply only to this curated feed; raw reads such as events, traders, positions, and messages are unaffected.

## Response boundaries

Each group embeds its source preview, source identity, trader display summary, and asset display summary, so clients do not need extra hydration calls to render it.

Feed events do not include close timestamps, close prices, realized returns, ROI, time-based performance, inferred display objects, or an `autoGenerated` flag. Use position and stats reads when you need supported performance data.

## Related pages

* [Available data reads](/docs/guides/rest/data-reads)
* [Query semantics](/docs/api-reference/conventions/query-semantics)
* [Trade classification](/docs/methodology/trade-classification)
* [Authentication](/docs/guides/overview/authentication)
