Skip to main content

Learning loop

Newsignal does not host third-party models. Sellers bring their own predictor; the marketplace owns seal → reveal → resolve → score → feedback.

registerFeed → publishPrediction → (wait settle) → listFeedback → createFeedVersion → publishPrediction …

Drain feedback​

curl​

curl -sS "$API/v1/feeds/<feedIdOrSlug>/feedback?limit=100" \
-H "authorization: Bearer $NEWSIGNAL_SELLER_KEY"

curl -sS "$API/v1/feeds/<feedIdOrSlug>/feedback?cursor=<releasedAt>" \
-H "authorization: Bearer $NEWSIGNAL_SELLER_KEY"

curl -sS "$API/v1/predictions/<id>/feedback" \
-H "authorization: Bearer $NEWSIGNAL_SELLER_KEY"

Python​

import os, json, urllib.request

API = os.environ.get("NEWSIGNAL_API_URL", "http://localhost:8787")
SELLER = os.environ["NEWSIGNAL_SELLER_KEY"]

def list_feedback(feed: str, cursor: str | None = None):
q = "?limit=100" + (f"&cursor={cursor}" if cursor else "")
req = urllib.request.Request(
f"{API}/v1/feeds/{feed}/feedback{q}",
headers={"authorization": f"Bearer {SELLER}"},
)
with urllib.request.urlopen(req) as r:
return json.load(r)

page = list_feedback("my-btc-vol")
print(len(page["feedback"]), page.get("nextCursor"))

TypeScript​

import { NewsignalSellerClient } from '@newsignal/seller-sdk';

const client = new NewsignalSellerClient({
baseUrl: process.env.NEWSIGNAL_API_URL!,
apiKey: process.env.NEWSIGNAL_SELLER_KEY!,
});

const page = await client.listFeedback(feedId, { since });
await client.createFeedVersion(feedId, {
changeType: 'recalibrate',
notes: 'offline recalibration',
});

Sandbox feeds use the same loop. Pass visibility: 'sandbox' at register (Python visibility="sandbox"). The public catalog and leaderboard omit those slugs. Seller keys still drain feedback.

Bump a version​

curl -sS -X POST "$API/v1/feeds/<feedId>/versions" \
-H "authorization: Bearer $NEWSIGNAL_SELLER_KEY" \
-H "content-type: application/json" \
-d '{"changeType":"recalibrate","notes":"isotonic fit n=40"}'

Version churn: more than one version within 7 days requires ≥30 resolved on the current version and skill improvement vs the prior version (admin force: true only). Listing still requires 30 resolved per version before earning Signal (listed).

Platform producer (first-party)​

Catalog feeds publish on each feed’s indicator.publishCadenceMinutes (default 60). A wake loop runs due-checks / reveal / resolve / learn. Optional env: PRODUCER_INTERVAL_MS, PRODUCER_MIN_INTERVAL_MS, PRODUCER_CADENCE_OVERRIDE_MINUTES.

When AI keys are set, Jev question packs drive realized_vol / drawdown_prob; otherwise deterministic fallbacks are published (jev_skipped_no_keys). After resolve, the producer may refit an isotonic calibration map (≥30 probability samples) and bump changeType: recalibrate when the churn/skill gate allows.