Skip to content

Surfaces ​

Besides top posts, Jetfuel runs the Creator hub, Stories, News, the sports and live-events hub, onboarding and a few framework routes. Most of these payloads describe UI components rather than data with a clean model, so these helpers fetch and decode the page and leave you to read its strings, nodes and timelineTokens. Each one calls jetfuel.page(route) with a fixed route, and all of them accept the same opts as page.

Stories and news ​

jetfuel.stories(opts?) ​

The Stories browser (stories/home), a news hub split into categories such as Top Stories, For You, Politics, Sports and Technology.

js
const home = await client.jetfuel.stories();
home.strings.includes("Top Stories"); // true

jetfuel.storiesRemote({ category }, opts?) ​

One Stories category feed (stories/storiesRemote). Pass a category, since Twitter returns an empty stub without one.

js
const sports = await client.jetfuel.storiesRemote({ category: "Sports" });

jetfuel.newsArticle(id, opts?) ​

A news article page (news/article/id/<id>). The id comes from a Stories or News card.

js
const article = await client.jetfuel.newsArticle("1895256113429241856");

Sports and live events ​

Twitter's sports and live-events hub, including fantasy leagues and brackets. Event ids come from timeline score cards. Sports Twitter hasn't moved to Jetfuel yet render an error_not_found placeholder.

jetfuel.sportHome(sport, opts?) ​

A sport's landing page (<sport>/home), such as f1, nba or nfl.

js
const f1 = await client.jetfuel.sportHome("f1");

jetfuel.league(sport, opts?) ​

A sport's fantasy-league page (<sport>/league/home), such as nba, nfl, soccer or ncaamb.

js
await client.jetfuel.league("nba");

jetfuel.game({ sport, id, noun?, home? }, opts?) ​

One game, race or match. The route differs per sport, so emusks picks it from this table. noun and home override it for other sports:

SportRoute shape
nba, nfl<sport>/game/home/id/<id>
f1f1/race/home/id/<id>
nhlnhl/game/id/<id>
soccersoccer/match/id/<id>
js
await client.jetfuel.game({ sport: "f1", id: "1895256113429241856" });
await client.jetfuel.game({ sport: "soccer", id: "..." });
await client.jetfuel.game({ sport: "ncaamb", id: "...", noun: "game", home: true });

jetfuel.event(id, opts?) ​

The generic event screen (events/event?id=<id>). Event pages embed a Timeline: token, returned in timelineTokens, which you can resolve with GenericTimelineById like top posts does.

js
const ev = await client.jetfuel.event("1895256113429241856");
ev.timelineTokens; // ["VGltZWxpbmU6..."]

jetfuel.brackets(opts?) ​

The March Madness bracket challenge (brackets/home). Twitter gates it behind the march_madness_brackets_enabled flag and renders error_not_found when it's off.

js
await client.jetfuel.brackets();

jetfuel.bracketView(userId?, opts?) ​

A user's bracket (brackets/view/id/<userId>), or yours (brackets/view) without a user id.

js
await client.jetfuel.bracketView("44196397");

Creator hub and onboarding ​

jetfuel.creatorsStudio(opts?) ​

The Creator hub home (creators/studio), with links to revenue sharing, subscriptions, inspiration and payouts. Twitter gates most sub-pages per account. Fetch them with page:

js
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), with every topic and its select and deselect actions in nodes.

js
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 at jf.x.com/health, which is outside the jfapi data API. Returns the plain-text body.

js
await client.jetfuel.health(); // "I'm good, mom"

ogImageUrl(tweetId) and mediaPreviewUrl(tweetId) are on the requests page.

not affiliated with X Corp.