Feed
List unified feed items
GET /api/feed-items.json
Request policy
- Operation
getFeedItems- Access
- anonymous
- Automatic retries
- None
- Redirects
- Returned to the caller without following
- Request body limit
- No request body
- Pagination
- One page per call. Explicit iteration defaults to at most 10 pages, 1,000 items, and 32 MiB; reaching a bound reports incomplete execution.
Parameters
limit number
Requested page size (default 50). Numeric values are floored and clamped to 1–100.
cursor string
Opaque cursor copied from a returned pagination link. Arbitrary strings are rejected with 400; windowed feed cursors must retain their original filters.
sort string
Sort field and direction (e.g., "year:desc", "addedAt:asc")
facets string
Include facet metadata in response meta (set to 1)
mode string
Optional upcoming (soonest first) or past (newest first) window; omitted preserves the unpartitioned feed
Allowed: "upcoming" | "past"
asOf string (date-time)
Frozen UTC boundary in YYYY-MM-DDTHH:mm:ss.sssZ format; requires mode
kind string
Filter by comma-separated kind values
source string
Filter by comma-separated source values
year number
Filter by feed content year
from string (date)
Include items on or after this YYYY-MM-DD content date
to string (date)
Include items before this YYYY-MM-DD content date
q string
Case-insensitive search across feed item fields
Request headers
API-Version(optional) — Header-based API version selection. Omit it, send an empty value, or send 1.0.0; surrounding whitespace is ignored.Idempotency-Key(optional) — Accepted for clients that attach a key uniformly. GET, HEAD, and OPTIONS are already safe and intrinsically idempotent, so read responses are not stored in an idempotency replay cache.
Responses
200
List response for feed-items
Response headers
{
"Content-Usage": {
"description": "IETF AIPREF usage preferences for this public content",
"schema": {
"type": "string",
"examples": [
"train-ai=y, search=y"
]
}
},
"Content-Signal": {
"description": "Compatibility AI usage preferences for deployed crawlers",
"schema": {
"type": "string",
"examples": [
"ai-train=yes, search=yes, ai-input=yes"
]
}
},
"API-Version": {
"description": "Selected public REST contract version",
"schema": {
"type": "string",
"enum": [
"1.0.0"
]
}
},
"RateLimit-Policy": {
"description": "Public REST quota policy: 1000 Worker requests per 60 seconds for each source and Cloudflare location",
"schema": {
"type": "string"
}
},
"RateLimit-Limit": {
"description": "Compatibility form of the current public REST request limit",
"schema": {
"type": "integer",
"enum": [
1000
]
}
},
"ETag": {
"description": "Entity tag for conditional requests",
"schema": {
"type": "string"
}
},
"Cache-Control": {
"description": "Caching directives",
"schema": {
"type": "string"
}
},
"X-Total-Count": {
"description": "Total number of items",
"schema": {
"type": "integer"
}
},
"Link": {
"description": "RFC 8288 Web Linking header with pagination links",
"schema": {
"type": "string"
}
},
"Link-Template": {
"description": "RFC 9652 Link-Template header with query parameter templates",
"schema": {
"type": "string"
}
},
"Deprecation": {
"description": "RFC 9745 lifecycle deprecation signal",
"schema": {
"type": "string"
}
},
"Sunset": {
"description": "RFC 8594 lifecycle sunset date (HTTP IMF-fixdate)",
"schema": {
"type": "string",
"pattern": "^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), [0-9]{2} (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} [0-9]{2}:[0-9]{2}:[0-9]{2} GMT$",
"examples": [
"Sun, 06 Sep 2026 17:40:13 GMT"
]
}
}
}application/json
object
Schema details
data FeedItem[] required
Schema details
FeedItem
Schema details
id string required
canonicalId string required
kind string required
source string required
title string required
itemPath string required
url string required
activityAt string required (date-time)
activityYear number required
contentTimestamp string required (date-time)
timestamp string required (date-time)
summary string required
year number required
slug string
writingSource string
Allowed: "substack" | "cloudflare" | "other"
videoId string
embedUrl string (uri)
movieType string
Allowed: "movie" | "tv"
category string
playlistId string
mixId string
mixSource string
Allowed: "youtube" | "soundcloud" | "unknown"
albumId string
trackId string
appleUrl string (uri)
spotifyUrl string (uri)
tweetId string
author string
eventType string
repo string
score number
reasons string[]
Schema details
string
notes string
domain string
siteName string
description string
image string
alt string
caption string
bookAuthor string
displayYear number
stravaActivityId string
embedToken string
routeSummaryPolyline string
sportType string
distanceMeters number
movingTimeSeconds number
totalElevationGainMeters number
sportingEvent object
Schema details
sport string required
league string required
date string required (date)
startTime string required
Schema details
string (date-time)
unknown
endTime string required
Schema details
string (date-time)
unknown
timeZone string required
schedule object
Schema details
necessity string required
Allowed: "unknown" | "required" | "if-necessary" | "not-needed"
state string required
Allowed: "scheduled" | "unconfirmed" | "postponed" | "cancelled" | "completed"
timeConfirmed boolean required
providerEventId string
checkedAt string (date-time)
status string required
Allowed: "scheduled" | "completed" | "cancelled"
experience object required
Schema details
kind string required
Allowed: "in-person" | "watch"
status string required
Allowed: "planned" | "completed"
venue object required
Schema details
object
Schema details
name string required
city string
region string
country string
unknown
competitors object[] required
Schema details
object
Schema details
designation string required
Allowed: "away" | "home"
team object required
score number
result string
Allowed: "win" | "loss" | "tie"
referenceUrl string required (uri)
semantic object
Schema details
creators object[]
Schema details
object
Schema details
name string required
role string
parent object
Schema details
kind string required
Allowed: "album" | "podcast-show" | "series" | "tour"
title string required
canonicalId string
position string
genres string[]
Schema details
string
topics string[]
Schema details
string
publication string
venue object
Schema details
name string required
city string
region string
personal object
Schema details
rating number
experience string
Allowed: "in-person" | "watch"
format string
Allowed: "kindle" | "paperback" | "hardcover" | "print"
sourceSignals string[]
Schema details
string
Allowed: "authored" | "retweeted" | "liked" | "bookmarked"
readCount number
dateRead string (date-time)
counts object
Schema details
tracks number
songs number
sets number
encores number
pages number
performers number
achievements number
activity object
Schema details
averageSpeedMetersPerSecond number
achievementCount number
trainer boolean
commute boolean
manual boolean
sourceLabel string
camera string
endAt string (date-time)
company string
occurredAt string
meta PaginationMeta required
Schema details
totalCount number required
pageSize number required
timestamp string required (date-time)
rowsRead number
Rows materialized by the bounded D1 list window, when available.
boundedD1Window boolean
The list was served through a bounded D1 window.
facets object
correction object
Schema details
original string required
resolved string required
applied boolean required
kind string required
Allowed: "alias" | "fuzzy"
links PaginationLinks required
Schema details
self string required (uri)
first string required (uri)
next string (uri)
prev string (uri)
last string required (uri)
text/csv
string
304
Not Modified
400
Bad Request
application/problem+json
ProblemDetails
Schema details
type string required (uri)
Problem type URI (see /problems/)
title string required
Short human-readable summary
status number required
HTTP status code
detail string required
Human-readable explanation
instance string (uri)
URI reference for this occurrence
406
Not Acceptable
application/problem+json
ProblemDetails
Schema details
type string required (uri)
Problem type URI (see /problems/)
title string required
Short human-readable summary
status number required
HTTP status code
detail string required
Human-readable explanation
instance string (uri)
URI reference for this occurrence
429
Public REST request limit exceeded
Response headers
{
"Retry-After": {
"description": "Seconds before the request should be retried",
"schema": {
"type": "integer",
"enum": [
60
]
}
},
"RateLimit": {
"description": "Current quota state for the exhausted public-rest policy",
"schema": {
"type": "string"
}
},
"Content-Usage": {
"description": "IETF AIPREF usage preferences for this public content",
"schema": {
"type": "string",
"examples": [
"train-ai=y, search=y"
]
}
},
"Content-Signal": {
"description": "Compatibility AI usage preferences for deployed crawlers",
"schema": {
"type": "string",
"examples": [
"ai-train=yes, search=yes, ai-input=yes"
]
}
},
"API-Version": {
"description": "Selected public REST contract version",
"schema": {
"type": "string",
"enum": [
"1.0.0"
]
}
},
"RateLimit-Policy": {
"description": "Public REST quota policy: 1000 Worker requests per 60 seconds for each source and Cloudflare location",
"schema": {
"type": "string"
}
},
"RateLimit-Limit": {
"description": "Compatibility form of the current public REST request limit",
"schema": {
"type": "integer",
"enum": [
1000
]
}
}
}application/problem+json
ProblemDetails
Schema details
type string required (uri)
Problem type URI (see /problems/)
title string required
Short human-readable summary
status number required
HTTP status code
detail string required
Human-readable explanation
instance string (uri)
URI reference for this occurrence
503
Portable location provenance is incomplete, so the export is unavailable
application/problem+json
ProblemDetails
Schema details
type string required (uri)
Problem type URI (see /problems/)
title string required
Short human-readable summary
status number required
HTTP status code
detail string required
Human-readable explanation
instance string (uri)
URI reference for this occurrence
Examples
Examples use synthetic fixture values. Replace fixture identifiers with public IDs returned by the service. Request bodies and precise locations are transient; keep them out of logs.
curl
curl --fail-with-body --max-time 30 --max-filesize 16777216 --request GET 'https://irvinebroque.com/api/feed-items.json' --header 'Accept: application/json'TypeScript
import { PublicApi } from '@irvinebroque/public-api';
const api = new PublicApi();
const result = await api.feed.list({});
console.log(result.status, result.headers.get('content-type')); // Keep transient capabilities in memory.CLI
irvinebroque feed listThe SDK preserves status, headers, and the server envelope. A 304 has no fresh body. Errors retain structured problem details; ordinary error messages omit response details. Responses are limited to 16 MiB and requests time out after 30 seconds by default.