Sunday Memory
Stream Summaries
A structured summary of each Twitch crypto stream we capture — who was bullish, what chat thought, which coins came up and when — sold per call to AI agents for about $0.01 USDC over x402 on Base.
Base URL: {{BASE_URL}}
How to call it
- Ask.
GETa paid path. You getHTTP 402with the price and a pay-to address in the body. - Pay. Your x402 client signs a USDC transfer on Base (
eip155:8453) and retries with the payment header. ~$0.01. - Read.
HTTP 200with the summary as JSON. No key, no account, no subscription.
# free catalogue — which channels, how many summaries
curl {{BASE_URL}}/v1/streams
# paid path — returns 402 until an x402 client pays
curl -i {{BASE_URL}}/v1/streams/threadguy/latest
import { wrapFetchWithPayment } from "@x402/fetch";
import { privateKeyToAccount } from "viem/accounts";
const account = privateKeyToAccount(process.env.PRIVATE_KEY);
const fetchPaid = wrapFetchWithPayment(fetch, account);
const res = await fetchPaid("{{BASE_URL}}/v1/streams/threadguy/latest");
console.log(await res.json()); // 402 → pay → 200, done for you
Any x402-aware client works; @x402/fetch is just the shortest example. The wallet needs a little USDC on Base.
Endpoints
| Endpoint | Price | What you get |
|---|---|---|
GET /v1/streams |
free | catalogue: channels, last stream, how many summaries |
GET /v1/streams/{channel}/latest |
$0.01 | the most recent finished stream's summary |
GET /v1/streams/{channel}/history?limit=20 |
$0.03 | the last N summaries, newest first |
GET /v1/streams/{channel}/{session} |
$0.01 | one specific stream by session id |
GET /v1/meta, /openapi.json, /health |
free | contract, discovery, liveness |
Prices are in USDC and are quoted in each 402 response; the table is the current list.
Sample response
Abbreviated. Schema stream_summary_v1; sentiment runs −1 to +1.
{
"schema": "stream_summary_v1",
"channel": "threadguy",
"source": "twitch",
"session": "2026-10-08T08-46-31",
"started_at": "2026-10-08T08:46:36-04:00",
"ended_at": "2026-10-08T11:04:24-04:00",
"duration_s": 8268,
"streamer": { "sentiment": 0.21, "label": "bullish", "n_lines": 1214 },
"chat": {
"sentiment": -0.04, "label": "neutral",
"n_messages": 3120, "n_users": 412
},
"guests": [
{ "name": "ansem", "confidence": 0.6,
"evidence": "named 14x by streamer" }
],
"coins": [
{
"symbol": "EST", "chain": "solana", "address": "GUS5…pump",
"mentions": { "chat": 38, "streamer": 5 },
"first_mention_at": "2026-10-08T09:12:10-04:00",
"first_mention_by": "chat",
"price_first_mention": 3.15e-06,
"price_end": 2.9e-06,
"sentiment": 0.3
}
],
"topics": [ { "topic": "airdrop", "users": 57, "sentiment": 0.1 } ],
"produced_at": "2026-10-08T11:05:02-04:00"
}
What's in a summary
- Streamer sentiment — score, label and how many lines it rests on.
- Chat sentiment — score, label, message and unique-user counts.
- Coins discussed — symbol, chain, address, who said it first and when, price at first mention and at stream end, mention counts by side.
- Topics — the main threads of the stream with how many users carried each.
- Guests — named participants with a confidence and the evidence for it.
- Timing — start, end, duration, and when the summary was produced.