EXTRA.WATCH ◆ STREAM SUMMARIES API ◆ 13 CHANNELS ◆ 178 SUMMARIES ◆ $0.01 / CALL ◆ x402 ◆ USDC ON BASE ◆ NO KEYS ◆ NO ACCOUNT ◆ STREAMER SENTIMENT ◆ CHAT SENTIMENT ◆ COINS · FIRST MENTION · PRICE ◆ TOPICS ◆ GUESTS ◆ JSON ◆ WAGMIEXTRA.WATCH ◆ STREAM SUMMARIES API ◆ 13 CHANNELS ◆ 178 SUMMARIES ◆ $0.01 / CALL ◆ x402 ◆ USDC ON BASE ◆ NO KEYS ◆ NO ACCOUNT ◆ STREAMER SENTIMENT ◆ CHAT SENTIMENT ◆ COINS · FIRST MENTION · PRICE ◆ TOPICS ◆ GUESTS ◆ JSON ◆ WAGMI
STREAM SUMMARIES · x402 API
EXTRA.WATCH
Every Twitch crypto & memecoin stream we capture becomes one structured JSON: who was bullish,
what chat thought, which coins came up, when, and at what price. Sold per call to AI agents for about $0.01 USDC
over x402 on Base. No key, no account, no subscription.
Three HTTP calls, no sign-up. The first one is refused with a price; your x402 client pays it and retries.
Ask
GET a paid path. You get HTTP 402 with the price, the asset and a pay-to address in the PAYMENT-REQUIRED header.
Pay
Your client signs a USDC transfer on Base (eip155:8453) — about $0.01 — and retries with the payment header.
Read
HTTP 200 and the summary as JSON: schema stream_summary_v1, sentiment from −1 to +1, every coin, topic and guest.
Live examples
Real responses. The free routes are fetched from this server as you read; the paid routes show the 402
you get first, then an abbreviated real response from the matching free /v1/sample/… route (3 coins, 3 topics,
data.sample: true). If a fetch fails, the block keeps a static copy captured 2026-10-09.
FREE
The catalogue
GET /v1/streams
REQUEST
curl https://extra.watch/v1/streams
STATIC COPYevery channel with a summary, its last stream, and how many summaries exist
decu23summarieslast stream 2h 46m · ended Oct 9, 17:34
vladesiu14summarieslast stream 3h 00m · ended Oct 9, 16:57
hectortrade16summarieslast stream 3h 01m · ended Oct 9, 14:48
megga27summarieslast stream 1h 43m · ended Oct 9, 11:47
threadguy17summarieslast stream 1h 22m · ended Oct 9, 10:04
alxcooks9summarieslast stream 16m · ended Oct 9, 08:42
boxbox312227summarieslast stream 2h 37m · ended Oct 9, 05:46
sh4vwty4summarieslast stream 3h 01m · ended Oct 9, 01:40
advyth10summarieslast stream 7h 12m · ended Oct 8, 09:11
cented13summarieslast stream 3h 30m · ended Oct 7, 22:03
dvces15summarieslast stream 5h 08m · ended Oct 7, 20:22
USDC on Base (eip155:8453), x402 protocol v2. Any x402-aware client works —
@x402/fetch is just the shortest example. The wallet needs a little USDC on Base. Bitcoin not accepted; it is here for the vibes.
Pick a channel
GET /v1/streams is free and lists every channel and session id.
Call a paid path
The first reply is 402. Your client reads PAYMENT-REQUIRED, signs the USDC transfer, retries.
Keep the JSON
200 with the envelope: data, as_of, data_age_seconds, source, schema.
CURL
# free catalogue — which channels, how many summaries
curl https://extra.watch/v1/streams
# paid path — 402 until an x402 client pays
curl -i https://extra.watch/v1/streams/threadguy/latest
JAVASCRIPT · @x402/fetch
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("https://extra.watch/v1/streams/threadguy/latest");
console.log(await res.json()); // 402 → pay → 200, done for you
Endpoints & prices
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 (N ≤ 30)
GET /v1/streams/{channel}/{session}
$0.01
one specific stream by session id
GET /v1/sample/latest, /v1/sample/history, /v1/sample/session
FREE
abbreviated real responses for demos — 3 coins, 3 topics, sample: true
GET /v1/meta, /openapi.json, /health
FREE
contract, discovery, liveness
Prices are in USDC and are quoted in each 402; this table is filled from /v1/meta when reachable.
What's in a summary
Streamer sentimentscore −1…+1, label bullish / neutral / bearish, and how many spoken lines it rests on (n_lines, n_scored).
Chat sentimentscore and label for chat, with n_messages, n_users and messages_per_min.
Coins discussedsymbol, chain, address, who said it first and when, mention counts by side, price_near_first_mention and price_at_summary.
Topicsthe main threads of the stream — mention counts by side, how many chat users carried each, sentiment and label.
Guestsnamed participants with a confidence and the evidence for it.
Timingstarted_at, ended_at, duration_s, and produced_at for the summary itself.
Derived data only. There are no transcripts and no chat usernames in any response.