Developer Reference
Two JSON endpoints expose live ByKaranteli performance data. CORS-enabled, rate-limited, cached. No authentication required. Attribution in embedded content is appreciated.
Quick facts
retry-after?format=csv for spreadsheets/api/public/performanceAggregate live performance snapshot across 30 / 90 / 180 day windows, net PnL, PF, Sharpe, DD, side breakdown, daily equity curve.
curl -s https://bykaranteli.com/api/public/performance | jq '.windows."90d"'
{
"generatedAt": "2026-04-21T06:47:00.000Z",
"firstSignalAt": "2026-03-21T07:41:27.285Z",
"lastSignalAt": "2026-04-21T06:45:12.507Z",
"totalTrades": 104397,
"windows": {
"30d": {
"trades": 90876, "wins": 45470, "losses": 45406, "ties": 0,
"winRatePct": 50.04,
"profitFactorGross": 1.5406, "profitFactorNet": 1.339,
"avgNetBps": 35.94, "medianNetBps": 1.04,
"avgWinBps": 283.70, "avgLossBps": -212.18,
"sumNetBps": 3265831.81, "maxDrawdownBps": …,
"sharpeAnnualized": …, "calmarAnnualized": …,
"avgDurationMinutes": …
},
"90d": { … },
"180d": { … }
},
"sideBreakdown": { "30d": { "LONG": {…}, "SHORT": {…} }, … },
"equityCurve180d": [ { "day": "2026-03-21", "cumulativeNetBps": 35.94, "tradesToDate": 1 }, … ],
"disclaimers": { "evalMode": "terminal", "feesIncluded": true, "slippageIncluded": true, "fundingIncluded": true, … }
}/api/public/leaderboardStrategy-level ranking computed per window with composite score = PF × √(trades/25) × winness.
| Name | Type | Required | Description |
|---|---|---|---|
| window | 30 | 90 | 180 | no | Lookback window in days. Default 90. |
curl -s 'https://bykaranteli.com/api/public/leaderboard?window=90' | jq '.strategies[:5]'
{
"generatedAt": "2026-04-21T06:47:00.000Z",
"windowDays": 90,
"minTradesQualified": 25,
"totalStrategies": 14,
"qualifiedCount": 11,
"strategies": [
{
"strategy": "breakout_v3",
"trades": 812, "longTrades": 450, "shortTrades": 362,
"wins": 430, "losses": 382,
"winRatePct": 52.96,
"profitFactorNet": 1.42,
"avgNetBps": 28.1, "sumNetBps": 22817.2,
"maxDrawdownBps": 14203.5,
"sharpeAnnualized": 1.18,
"lastTradeAt": "2026-04-21T06:30:18.201Z",
"qualified": true,
"compositeScore": 5.74
},
…
],
"disclaimers": { … }
}/api/public/symbolsPer-symbol performance ranking (qualified + low-sample). Same shape as /strategies but keyed by signals.symbol.
| Name | Type | Required | Description |
|---|---|---|---|
| window | 30 | 90 | 180 | no | Lookback window in days. Default 90. |
curl -s 'https://bykaranteli.com/api/public/symbols?window=90' | jq '.symbols[:5]'
{
"generatedAt": "2026-04-21T06:47:00.000Z",
"windowDays": 90,
"minTradesQualified": 20,
"totalSymbols": 48,
"qualifiedCount": 36,
"symbols": [
{
"symbol": "BTCUSDT",
"trades": 3120, "longTrades": 1780, "shortTrades": 1340,
"wins": 1610, "losses": 1480,
"winRatePct": 52.1, "profitFactorNet": 1.28,
"avgNetBps": 18.4, "sumNetBps": 57408.0,
"bestTradeBps": 612.0, "worstTradeBps": -480.3,
"maxDrawdownBps": 9821.4,
"lastTradeAt": "2026-04-21T06:38:21.118Z",
"qualified": true, "compositeScore": 4.82
},
…
]
}/api/public/pressureComposite 0-100 derivatives pressure score for every tracked Binance USDT-M perpetual (OI delta 1h/4h/24h + funding rate + basis). Direction-aware regimes.
| Name | Type | Required | Description |
|---|---|---|---|
| limit | 1-200 | no | Max rows. Default 60. |
| side | long | short | no | Filter by direction bias. |
curl -s 'https://bykaranteli.com/api/public/pressure?limit=20&side=long' | jq '.items[:5]'
{
"generatedAt": "2026-04-23T20:47:28.616Z",
"count": 60,
"items": [
{
"symbol": "BARDUSDT",
"score": 45, "direction": "SHORT", "regime": "SHORT_RAMP",
"regimeLabel": "Net short bias building",
"components": { "oi24hPct": -8.7, "oi4hPct": 1.5, "oi1hPct": 0.1, "fundingRatePct": -0.037, "basisPct": -0.19 },
"explainer": [ "Open interest down 8.7% over 24h", "Funding rate -0.037% per interval" ]
},
…
]
}/api/public/pressure/[symbol]Per-symbol pressure snapshot with live refresh if cache stale.
curl -s https://bykaranteli.com/api/public/pressure/BTCUSDT
/api/public/funding-arbCross-exchange funding rate spread for top symbols across 6 exchanges (Binance, OKX, Bybit, Gate, HTX, BingX) with net-of-cost annualized APR.
curl -s https://bykaranteli.com/api/public/funding-arb | jq '.rows[:5]'
/api/public/indicesAll market indices in one payload: Retail Euphoria Index (proprietary) + Fear & Greed (alternative.me) + CoinGecko global + DeFiLlama stablecoin flow.
curl -s https://bykaranteli.com/api/public/indices | jq '.euphoria.score, .fearGreed.today.valueRaw'
/api/public/euphoriaRetail Euphoria Index standalone. Composite of F&G + trending memes + BTC dominance + top-30 crowd positioning.
curl -s https://bykaranteli.com/api/public/euphoria | jq '{score, regime, explainer}'/api/public/signals/[id]Verifiable signal receipt: SHA-256 fingerprint + all decision parameters + outcome. Accepts UUID or hex hash prefix.
curl -s https://bykaranteli.com/api/public/signals/d3fbb0e3-4aef-4a8b-9fa6-2da02401f07e | jq '{hash, shortCode, symbol, side, outcome, netBps}'/embed/pressure/[symbol]Embeddable HTML widget showing current pressure score for a symbol. Use in iframe. Dark theme, no tracking.
<iframe src="https://bykaranteli.com/embed/pressure/BTCUSDT" width="340" height="200" style="border:0"></iframe>
/api/public/recentLast N closed signals within an H-hour window. Good for tickers, activity feeds, and notifications.
| Name | Type | Required | Description |
|---|---|---|---|
| hours | 1-168 | no | Window size in hours. Default 24, max 168 (7d). |
| limit | 1-100 | no | Max signals. Default 20. |
curl -s 'https://bykaranteli.com/api/public/recent?hours=24&limit=20' | jq '.signals[:5]'
{
"generatedAt": "2026-04-21T06:47:00.000Z",
"hours": 24,
"total24h": 1247, "wins24h": 648, "losses24h": 572, "timeouts24h": 27,
"net24hBps": 34219.8,
"signals": [
{
"symbol": "ETHUSDT", "side": "LONG", "outcome": "TP1",
"netBps": 182.4,
"evaluatedAt": "2026-04-21T06:44:10.009Z",
"createdAt": "2026-04-21T05:58:01.301Z"
},
…
]
}Embed example
Drop this into any HTML page. Numbers refresh every 5 minutes client-side.
<div id="bk-perf"></div>
<script>
(async () => {
const r = await fetch('https://bykaranteli.com/api/public/performance');
const j = await r.json();
const m = j.windows['90d'];
const pct = (m.sumNetBps / 100).toFixed(2);
document.getElementById('bk-perf').innerHTML =
`<strong>ByKaranteli 90d:</strong> ${pct >= 0 ? '+' : ''}${pct}%
· PF ${m.profitFactorNet?.toFixed(2)}
· ${m.trades} trades
· <a href="https://bykaranteli.com/performance">source</a>`;
})();
setInterval(() => location.reload(), 300000);
</script>Fair use
- Rate limit is 20 requests per minute per IP. Respect it or get 429'd.
- Data is read-only. No PII or trading actions exposed.
- Attribution: a visible link back to bykaranteli.com or the source page (e.g.
/performance) is appreciated when embedding. - Commercial use is allowed. Rebranding our numbers as your own in-house backtest is not.
- Scraping internal routes (
/dashboard/*,/api/admin/*,/api/terminal/*) is blocked and monitored. Stick to/api/public/*.
Not investment advice.The numbers returned describe ByKaranteli's live signal-engine performance and are not a recommendation to trade. Past performance does not guarantee future returns.