Skip to content

The categorised protocol feed

GET
/api/v1/signals/external

Two exchanges: Polymarket carries sports and politics; Kalshi carries the whole music_culture bucket (~80 % of the feed). category is an exact match on the four buckets — music, culture, entertainment and sport are accepted aliases; anything else returns an empty feed rather than an error. source=polymarket is the only pin (denpa.ai’s own heatmap uses it). Falls back to the Postgres snapshot (stale: true) when a live fetch fails. CORS * on the API service.

  • None
category
string
Allowed values: sports politics fashion music_culture music culture entertainment sport
source
string
Allowed values: polymarket
limit
integer
default: 10 >= 1 <= 500
fresh
string
Allowed values: 1 true

Bypass the 30 s cache.

OK

object
source
required

The exchange(s) the rows actually came from — polymarket, kalshi, kalshi+polymarket, none, or postgres_snapshot on a DB fallback.

string
mode
required
string
Allowed values: live_external db_snapshot
stale
required
boolean
failedSources
required
Array<string>
Allowed values: polymarket kalshi
top
required
Array<object>

One market of the categorised protocol feed (@denpa/types ExternalSignal).

object
id
required
string
source
required
string
Allowed values: polymarket kalshi
marketId
required
string
title
required
string
category
required

sports · politics · fashion · music_culture.

string
status
required
string
Allowed values: active inactive
yesProbabilityBps
required

Probability in basis points (0–10000).

integer
<= 10000
noProbabilityBps
required

Probability in basis points (0–10000).

integer
<= 10000
volumeUsd
required
number
liquidityUsd
required
number | null
signalScoreBps
required
integer
freshnessScoreBps
integer
sourceReliabilityBps
integer
stale
boolean
staleReason
string
marketUrl
required
string | null
endTime
required
string | null
updatedAt
required
string
bestBid
number | null
bestAsk
number | null
spread
number | null
volume24hUsd
number | null
volume1wUsd
number | null
lastTradePrice
number | null
oneDayPriceChange
number | null
imageUrl
string | null
description
string | null
conditionId
string | null
clobTokenIds
array | null
slug
string | null

external_signals_unavailable — live fetch failed and no snapshot.

object
error
required

Stable machine-readable code (snake_case) or a short reason.

string
message
string
key
additional properties
any