get_desk_feed
A newsletter DESK's machine feed at one predictable, slug-addressable location: up to 14 days of the desk's observed items (title, url, source), newest-first, from the same panel the human edition reads. Unlike watch topics, the desk roster is PUBLIC PRODUCT — the desks are: cognitive-investor, tax-nexus, crc-kras, crc-digest, space-economy, paradise-valley, lyt-intel, aztc-aasd, newspace-asu, lq-listening, jedi-knowledge, ud-articles, ecomm-news — so an unknown-desk reply lists them freely. Delivery is keyed (your self-issued key, x-api-key): identified delivery is the standard shape for standing feeds. Desks are priced as labeled topic bundles at the published Watch rate — see DESK_BUNDLES on /api/tariff and get_quote for your exact basket. Each feed's payload declares its own coverage state. Limits, stated: each day serves at most the projection's servedPerDay items and states held/served/tailStored/tailOmitted (held = served + tailStored + tailOmitted). The ranked tail below the cut is read with tail:true and walked with the returned cursor, pageSize 1-100 (default 50) — a page limit is a cursor, never an edge. Refusals name their code: bad_cursor, cursor_stale (the projection rebuilt; restart the walk), page_size_limit, tail_unavailable (cannot-measure: this build stores no tail, which is not a statement that the desk held nothing more).
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | How many recent days to return (1-14, default 14) | |
| desk | Yes | The desk slug (e.g. 'space-economy') | |
| tail | No | Optional. true reads the ranked TAIL instead of the served list: the items this desk held below the served cut, in curation-score order, each keeping its corroboration tier. Ranked, not curated. Omit it and the payload is unchanged. | |
| cursor | No | Optional. The `tail.cursor` a previous tail page returned (implies tail). Opaque and interchangeable with /api/desk-feed?cursor=. Pinned to desk, window and projection build: a cursor from an older build is refused (cursor_stale) — start again with tail:true. | |
| pageSize | No | Optional, tail only. Items per tail page, an integer 1-100 (default 50). Out of range is refused (page_size_limit), never clamped. |