Surfaces
Beyond top posts, Jetfuel powers a lot of X: the Creator hub, Stories, News, the sports and live-events hub, onboarding, and a few framework routes. Most of these are pure UI (their payloads describe components, not data you can map to a clean model), so these helpers fetch and decode the page and let you read its .strings, .nodes and .timelineTokens. Each one is just sugar over client.jetfuel.page(route), so anything here also works with a raw route string.
All accept the same opts as page (params, theme, headers, etc.).
Stories & News
jetfuel.stories(opts?)
The Jetfuel Stories browser (stories/home): a categorized news hub (Top Stories, For You, Politics, Sports, Business & Finance, Technology, Music, Movies & TV, Science, Anime, ...).
const home = await client.jetfuel.stories();
home.strings.includes("Top Stories"); // truejetfuel.storiesRemote({ category }, opts?)
A single Stories category feed (stories/storiesRemote). A category is required; a bare call returns an empty stub.
const sports = await client.jetfuel.storiesRemote({ category: "Sports" });jetfuel.newsArticle(id, opts?)
A Jetfuel news article page (news/article/id/<id>). The id comes from a Stories/News card; a bare news/article returns a 400.
const article = await client.jetfuel.newsArticle("1895256113429241856");Sports & live events
Jetfuel powers X's sports and live-events hub, including fantasy leagues and brackets. Event ids are not guessable; they come from timeline score cards. Sports not yet migrated render an error_not_found placeholder.
jetfuel.sportHome(sport, opts?)
A sport's landing page (<sport>/home), e.g. f1, nba, nfl.
const f1 = await client.jetfuel.sportHome("f1"); // rich: live race header, podiums, storiesjetfuel.league(sport, opts?)
A sport's fantasy-league landing (<sport>/league/home), e.g. nba, nfl, soccer, ncaamb.
jetfuel.game({ sport, id }, opts?)
A specific game / race / match detail page. The URL shape differs per sport, so emusks infers it (overridable with { noun, home }):
| Sport | Route shape |
|---|---|
nba, nfl | <sport>/game/home/id/<id> |
f1 | f1/race/home/id/<id> |
nhl | nhl/game/id/<id> |
soccer | soccer/match/id/<id> |
The mapping is exported as SPORT_EVENTS.
await client.jetfuel.game({ sport: "f1", id: "1895256113429241856" });
await client.jetfuel.game({ sport: "soccer", id: "..." });
// custom sport/shape:
await client.jetfuel.game({ sport: "ncaamb", id: "...", noun: "game", home: true });jetfuel.event(id, opts?)
The generic Jetfuel event screen (events/event?id=<id>). Event pages embed a Timeline: token, surfaced as .timelineTokens on the decoded result; you can feed it to GenericTimelineById like top posts does.
const ev = await client.jetfuel.event("1895256113429241856");
ev.timelineTokens; // ["VGltZWxpbmU6..."]jetfuel.brackets(opts?) · jetfuel.bracketView(userId?, opts?)
The March Madness bracket challenge (brackets/home, brackets/view, brackets/view/id/<userId>). Gated behind the march_madness_brackets_enabled flag; renders error_not_found when off.
Creator hub & onboarding
jetfuel.creatorsStudio(opts?)
The Creator hub home (creators/studio), which links out to revenue sharing, subscriptions, inspiration and payouts. Most sub-pages are gated per account; fetch them directly with page:
await client.jetfuel.page("creators/revenue_sharing");
await client.jetfuel.page("creators/subscriptionsv2/eligibility");
await client.jetfuel.page("creators/stripe_connect");jetfuel.onboardingTopics(opts?)
The onboarding "Pick your interests" catalog (onboarding/remotes/topics): the full topic list (News, Sports, Technology, Gaming, Memes, Cryptocurrency, ...) with select/deselect actions and topic ids in .nodes.
const topics = await client.jetfuel.onboardingTopics();
topics.nodes.filter((n) => n.type === "deselect_topic").map((n) => n.key);
// ["News", "Sports", "Business & Finance", ...]Framework
jetfuel.health(opts?)
The health check (jf.x.com/health). Returns the plain-text body. Served from the jf.x.com origin (not the jfapi data API), so this helper hits that origin directly.
await client.jetfuel.health(); // "I'm good, mom"Images
See requests for ogImageUrl(tweetId) and mediaPreviewUrl(tweetId).