◈ BASETV · SIGNAL PROTOCOL
BUILD ON THE
SIGNAL LAYER
BASETV is a live attention engine for television and culture. The protocol exposes operator field records, AURA-ranked signal feeds, and embeddable market intelligence — read access, no signup required.
API CONTRACT (docs/API.md) ↗BROADCAST CLOCK SPEC ↗
◈ L1 PRIMITIVES
OPERATOR ATOM
Machine-readable field record per handle. Identity, signal history, live market, resolved moments.
GET /api/operator/:handle
SIGNAL FEED
AURA-ranked live market attention scores. Updated continuously from Polymarket + editorial weights.
GET https://api-production-d13ba.up.railway.app/api/v1/signals/external
MOMENTS
Collectible artifacts minted on early correct calls. Tiered: COMMON → LEGENDARY.
GET /api/operator/:handle → moments[]
SIGNAL BOARD
Ranked operator leaderboard by broadcast score. Embeddable as iframe for any site or OBS source.
GET /api/operator/leaderboard
MARKET CLOCK
Markets scheduled into a real-clock rundown of segments — the programming layer. Filterable into channels (FilterSpec presets). Powers the /tv smart-TV / kiosk surface: market = show, segment = attention window, clock = schedule.
GET /api/broadcast/program?preset=
◈ QUICK START
# Fetch an operator field record
curl https://basetv.tv/api/operator/sporty

# Response
{
  "handle": "sporty",
  "rank": "OPERATOR",
  "stats": {
    "totalCalls": 24,
    "resolvedCalls": 18,
    "correctCalls": 12,
    "accuracy": 67
  },
  "liveSignal": {
    "marketId": "...",
    "name": "Will X happen?",
    "yesPct": 73
  },
  "_meta": {
    "atomVersion": "1.0",
    "embedUrl": "https://basetv.tv/operator/sporty/embed"
  }
}
◈ LIVE ENDPOINTS
base: basetv.tv
METHOD
PATH
AUTH
GET
/api/network/tapesDenpa Network tape reel — clips from every station, origin-labeled (?exclude=denpa|basetv)
PUBLIC
GET
/api/network/operatorsDenpa Network operator board — every station, origin-labeled, merged by score
PUBLIC
GET
/api/operator/:handleOperator atom — identity, stats, live signal, moments
PUBLIC
GET
/api/operator/leaderboardSignal board — ranked by broadcast score
PUBLIC
GET
https://api-production-d13ba.up.railway.app/api/v1/signals/externalAURA signal feed — top live market attention (API service host, not denpa.ai)
PUBLIC
GET
/api/polymarket/featuredFeatured market tiles — editorial + AURA ranked
PUBLIC
GET
/api/polymarket/marketsAll active Polymarket markets (Gamma-normalized)
PUBLIC
GET
/api/broadcast/programMarket clock — lanes + time-positioned segments (?preset=hot|resolving|close); powers /tv
PUBLIC
GET
/api/network/programThe same clock scoped to your station (?providers=polymarket|kalshi&categories=…)
PUBLIC
GET
/api/network/field-record/:handleField record (Layer 8) — rank, accuracy, streak, recent calls with receipt URLs
PUBLIC
GET
/api/network/field-record/meYour own field record — Authorization: Bearer dk_… ("who am I")
DK_
GET
/api/situationsTHE WIRE grouped into stories — moving markets per event (?lane=&window=15m|1h|6h|24h)
PUBLIC
GET
/api/wireWireEvent[] — markets ranked by belief movement. Not CORS-open: fetch server-side
PUBLIC
POST
/api/predictionsFile a SIGNAL as your operator — proxy it through your own server route (not CORS-open)
DK_
Reads are public except /me. Writes need a dk_ operator key — mint one below.
◈ EMBED GENERATOR
Drop into any page or OBS browser source. No auth, no cookies, no JS required on the host.
<iframe
  src="https://basetv.tv/operator/your-handle/embed"
  width="320" height="520"
  frameborder="0" style="border:none"
></iframe>
◈ API KEYS
FREE TIER · 60 REQ/MIN
LOADING…
◈ MCP · CONNECT YOUR AGENT
CLAUDE CODE · ANY MCP CLIENT
Plug your agent into the broadcast protocol. Your API key binds the connection to your BASETV account — signals, stream binding, and broadcasts land on your operator surface.
# BASETV MCP — drive your operator surface from Claude Code (or any MCP client).
# 1. Sign in above with your BASETV account and create an API key (dk_…).
# 2. Connect:
claude mcp add --transport http denpa https://basetv.tv/api/mcp \
  --header "Authorization: Bearer dk_YOUR_KEY"
# 3. Ask your agent things like:
#    "push a signal for the top featured market to my live page"
#    "bind my HLS stream to market 516830"
#    "get my OBS ingest and stream key"   (approved operators)
#
# Tools: denpa_whoami · denpa_featured_markets · denpa_market · denpa_push_signal
#        denpa_clear_signal · denpa_get_signal · denpa_bind_stream · denpa_unbind_stream
#        denpa_go_live · denpa_my_broadcasts
# Every write acts as YOUR operator identity — the handle is resolved server-side
# from the key, never from tool arguments.
◈ BUILDERS
Building an overlay, signal skin, analytics dashboard, or integration? Apply for Builder access — get listed in the directory and unlock higher rate limits.
APPLY TO BUILD →
CURRENT INTEGRATIONS — OPEN
No integrations listed yet. Be first.
◈ PROTOCOL FORKS
OWN SURFACE · BASETV BACKEND
A fork owns its surface and theme; markets, signals and the broadcast clock resolve through these APIs. Clone one as a starting point.
BASETV · FORK ZEROLIVE ↗
The reference client: a channel IS a market — CH 1–6 pin long-running questions (GTA VI, TAIWAN, 2028) and air each one's whole price arc, scaled to its real trading range, with days of runway and SIGNAL. Plus WIRE (situations), RANK (operator board + field records), GUIDE (the channel clock) and TAPE (federated clips). ~1,200 lines, no backend.
network/market · polymarket/market-history · polymarket/markets · broadcast/program · polymarket/featured · situations · network/tapes · network/operators · network/field-record · v1/signals/leaderboard
SOURCE · github.com/bananaemojiii/denpa-fork-zero
CEE.NEWSSOURCE ↗
News-vertical fork on Kalshi market data — Ceefax teletext carousel, THE TAPE (denpa clips reel), P900 network operators. Read-only, no auth, no DB — a pure SSR terminal.
network/tapes · network/operators
BASETVSOURCE ↗
Sovereign Base-chain fork of the BASETV engine — Limitless markets, own DB/auth, Denpa Network federation both directions via same-origin proxy routes.
network/tapes · network/operators (server-side; own public read APIs are consumed by denpa.ai in turn)
◈ FORK THE PROTOCOL · 101
REST · CORS · NO SDK
A fork is a vertical on the same engine — own surface + theme, all data resolving through basetv.tv over plain REST (CORS-open, no auth for reads, no npm SDK). Clone the reference fork, or hand an AI the agent brief below.
1 · QUICKSTART
# Clone the reference fork — it already wires every protocol API
# and ships the static-TV broadcast placeholder. ~60 seconds to live.
git clone https://github.com/bananaemojiii/denpa-fork-zero
cd denpa-fork-zero
cp .env.example .env      # endpoints prefilled — basetv.tv + api service
npm install
npm run dev               # → http://localhost:5173
2 · FOR AI AGENTS (CLAUDE CODE) — PASTE THIS
# Asked to "fork the BASETV protocol"? Follow this exactly.

# DATA — all reads are public REST over HTTPS, CORS-enabled.
# There is NO npm SDK and NO auth for reads. Do not block first paint on a
# WebSocket; poll REST every 30s. (A panel stuck on "loading…" means you wired
# a non-existent SDK / dead socket — use these endpoints instead.)
GET basetv.tv/api/broadcast/program?preset=default              # the denpa.ai channel clock (lanes → rundown)
GET basetv.tv/api/network/program?providers=kalshi&categories=  # the same clock scoped to YOUR station
GET basetv.tv/api/polymarket/featured                           # heatmap tiles
GET basetv.tv/api/polymarket/market-history?marketId=ID&interval=1H   # YES price history (chart)
GET basetv.tv/api/situations?window=24h&limit=30                # stories of belief movement
GET basetv.tv/api/network/tapes?limit=20                        # federated clip reel (HLS)
GET basetv.tv/api/network/operators                             # merged operator board
GET basetv.tv/api/network/field-record/HANDLE                   # public field record
GET api-production-d13ba.up.railway.app/api/v1/signals/leaderboard?operators=human

# RULES
# - A fork owns its surface + theme; it must NOT reimplement Signal / Market /
#   User / Outcome — those resolve through basetv.tv (Layer 14).
# - Always render the static-TV <NoSignal/> for loading / empty / error states.
# - Reads are public; SIGNAL writes go through the API service (API-key gated).

# NEW VERTICAL? Ask the user only what you cannot infer, then build:
#   1. Name + vertical?  (sport / music / crypto / culture / film / news …)
#   2. Theme — reuse the Ceefax teletext skin, or custom colors + font?
#   3. Standalone repo, or an app inside the denpa monorepo?
# Then edit CHANNELS + theme in src/lib/denpa.ts and src/App.tsx. That's it.
3 · STATIC-TV BROADCAST PLACEHOLDER — <NoSignal/>
// <NoSignal/> — premade static-TV broadcast placeholder. Render for any
// loading / empty / error state so a fork never dead-loads. Pure CSS, no assets.
export function NoSignal({ caption = "TUNING…" }: { caption?: string }) {
  const css =
    "@keyframes ns-flicker{0%,100%{opacity:.5}9%{opacity:.35}53%{opacity:.4}}" +
    "@keyframes ns-roll{to{background-position:0 6px}}";
  const noise =
    "repeating-linear-gradient(0deg,rgba(10,11,13,.06) 0,rgba(10, 11, 13,.1) 1px,rgba(10,11,13,.04) 2px,rgba(10, 11, 13,.08) 3px)";
  return (
    <div style={{ position:"relative", height:280, background:"var(--db-surface)", overflow:"hidden", display:"grid", placeItems:"center" }}>
      <style>{css}</style>
      <div style={{ position:"absolute", inset:"-10%", backgroundImage:noise, backgroundSize:"100% 4px", opacity:.5, mixBlendMode:"screen", animation:"ns-flicker 2.4s steps(2) infinite" }} />
      <div style={{ position:"absolute", inset:0, backgroundImage:"linear-gradient(#32353d33 50%,transparent 50%)", backgroundSize:"100% 6px", opacity:.4, animation:"ns-roll 8s linear infinite" }} />
      <div style={{ position:"relative", textAlign:"center", fontFamily:"monospace" }}>
        <div style={{ color: "var(--db-text, #0a0b0d)", fontWeight:900, letterSpacing:".3em" }}>NO SIGNAL</div>
        <div style={{ marginTop:".5rem", color:"#b1b7c3", fontSize:".7rem", letterSpacing:".14em" }}>{caption}</div>
      </div>
    </div>
  );
}
BASETV · SIGNAL PROTOCOL · v1
SIGNAL BOARD →