News feed and top movers
Two calls: one returns ranked stories with an importance score, the other a momentum leaderboard.
News strip
Top movers
One endpoint serves both a market feed and a topic feed: pass a token id for the first, free text for the second. Crypto coverage is deeper than equities today, so for stocks the free-text query is usually the better route.
POST /api/agent-tools/call {"toolName":"event_v2","arguments":{"token_address":"bitcoin","limit":6}}POST /api/agent-tools/call {"toolName":"performance_scanner","arguments":{"top_n":8}}
const TN = "https://tn-api.truenorth.xyz"; const news = await fetch(TN + "/api/agent-tools/call", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ toolName: "event_v2", arguments: { token_address: "bitcoin", limit: 6 } }) }).then(r => r.json()); news.data.result.results.forEach(story => { story.title; // headline story.publisher; // source story.published_at; // epoch milliseconds story.event_type; // "sec_filing", "earnings", ... story.final_rank_score; // 0-100 importance }); // The movers rail is the same scanner the markets page uses, // read as a one-line ticker: symbol + 7d move. const scan = await fetch(TN + "/api/agent-tools/call", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ toolName: "performance_scanner", arguments: { top_n: 8 } }) }).then(r => r.json()); scan.data.result.leaderboard.forEach(row => { row.ticker; // "LINKUSDT" row.momentum_7d; // 11.7 });