API Reference
Grade strategies and track records programmatically, pull market intelligence, and embed verified badges. Everything below is the real, live surface — no aspirational endpoints.
Base URL & authentication
Base URL: https://anonimous.net/tessen-api Authenticated endpoints take an API key header: X-API-Key: tsn_live_...
Generate keys in the Studio under Developer Keys (beta access required). The raw key is shown onceat creation — store it securely; afterwards only a masked preview exists, and we can't recover it. Revoke and re-issue any time. Tiers are metered on a rolling 30-day window: Free = 100 calls, Developer ($29 one-time, no auto-renew) = 5,000 calls. The badge and public-grade endpoints need no key at all.
Grade an AgentSpec
Submit a strategy specification; Tessen backtests it on its own engine and historical data and returns the full Grade report. Because the inputs can't be faked, the result is marked verified: true and gets a permanent public proof page.
curl -X POST https://anonimous.net/tessen-api/v1/api/grade/spec \
-H "X-API-Key: tsn_live_..." \
-H "Content-Type: application/json" \
-d '{
"agentSpec": {
"name": "rsi-bounce",
"universe": ["BTC_USDT", "ETH_USDT", "SOL_USDT"],
"timeframe": "1h",
"entry": {
"type": "rule",
"logic": "all",
"long": [{"indicator": "rsi", "period": 14, "op": "<", "value": 30}],
"short": []
},
"exit": {"take_profit_pct": 3.0, "stop_loss_pct": 1.5},
"risk": {"risk_per_trade_pct": 1.0}
}
}'Grade your own track record
Submit real trade history instead of a spec — minimum 30 trades. The same gates and scoring run on it. Trades are ordered chronologically and split 60/40 (train/test) for the overfit check, so don't pre-split. Since the data is self-supplied it's marked verified: false — shown as "Checked", never "Verified". Returns are treated as already net of your costs (a conservative proxy: it can understate your edge, never overstate it).
curl -X POST https://anonimous.net/tessen-api/v1/api/grade/record \
-H "X-API-Key: tsn_live_..." \
-H "Content-Type: application/json" \
-d '{
"risk_per_trade_pct": 1.0,
"trades": [
{"symbol": "BTC_USDT", "entry_ts": 1735689600, "net_return_pct": 1.4},
{"symbol": "ETH_USDT", "entry_ts": 1735776000, "net_return_pct": -0.8}
// ... at least 30 total
]
}'Market intelligence snapshot
The current cross-venue Lumen snapshot — positioning, funding, and open-interest signals, each labeled validated or information-only, exactly as the in-app page shows them. Returns 503 if the intelligence pipeline is briefly unavailable rather than serving stale data silently.
curl https://anonimous.net/tessen-api/v1/api/lumen/snapshot \ -H "X-API-Key: tsn_live_..."
Public proof endpoints (no key)
Every grade gets a permanent ID. The JSON endpoint returns the stored report; the SVG badge embeds on any site (cached 5 minutes) and links honesty into your README or landing page:
<a href="https://tessen-pi.vercel.app/verify/GRADE_ID"> <img src="https://anonimous.net/tessen-api/v1/badge/GRADE_ID.svg" /> </a>
The AgentSpec schema
A flat single-sleeve spec (shown above) or a multi-sleeve one via sleeves: []. All fields:
{
"name": "string",
"universe": ["BTC_USDT", ...], // symbols, BASE_QUOTE format
"sleeves": [{ // OR flat: timeframe/entry/exit at top level
"name": "string",
"timeframe": "5m|15m|1h|4h|1d",
"entry": {
"type": "rule" | "confluence",
"logic": "all" | "any", // rule mode: how signals combine
"long": [Signal], "short": [Signal],
"vote_threshold": 3 // confluence mode
},
"exit": {
"take_profit_pct": 3.0, // all optional; combine freely
"stop_loss_pct": 1.5,
"time_exit_bars": 48,
"cat_stop_atr": 3.0, // catastrophic ATR stop
"trail_atr": 2.0, // ATR trailing stop distance
"breakeven_atr": 1.0, // favorable ATRs that arm the trail at breakeven
"partial_lock_atr": 1.5, // favorable ATRs that trigger a partial close
"partial_lock_pct": 0.5 // fraction closed at that trigger
},
"regime": { // optional entry filters
"adx_gt": 20, // require ADX(14) above x
"atr_pct_tercile": "high" | "low" // volatility tercile gate
},
"confirm": [{ // optional higher-timeframe confirmation
"timeframe": "4h",
"long": [Signal], "short": [Signal], "logic": "all"
}],
"confirm_k": 1 // how many confirms must agree (0 = off)
}],
"risk": {
"risk_per_trade_pct": 1.0,
"leverage_cap": 20.0,
"max_daily_loss_pct": 5.0,
"max_dd_halt_pct": 25.0
}
}
Signal = {
"indicator": "rsi|ema|roc|cmf|adx|atr|bb_pband|macd_hist|stoch",
"period": 14,
"op": "<" | ">" | "<=" | ">=",
"value": 30
}Order-flow & derivatives indicators
Beyond price-derived indicators, a signal can reference cross-venue market data we collect ourselves: funding_annual, ls_div (crowd divergence — retail vs. top-trader long/short positioning, a validated Lumen signal), oi_usd, ob_imb (order-book imbalance), spread_bp, taker_bs, basis_bp, and cvd_delta. period is a rolling-mean smoothing window in bars (1 = raw value), not a percentile.
Honesty note: this data collection started 2026-06-29 and the history is short and growing every day. A strategy built on these indicators will often — correctly — hit the "insufficient out-of-sample trades" gate until enough days accumulate. We'd rather show that than fabricate a grade from too little data.
The Grade report
Both grading endpoints return the same shape:
{
"gradeId": "…", // permanent — /verify/:id and the badge use it
"verified": true, // true = spec mode (our engine), false = record mode
"grade": "A".."F", // F whenever any gate fails, regardless of score
"passed_gate": true,
"gate": { // the five hard checks
"oos_expectancy_positive": true,
"clears_cost_hurdle": true, // gross edge >= 1.5x trading costs
"robust_across_assets": true, // >= 60% of traded assets individually profitable
"survivable_drawdown": true, // sized median max-DD <= 35%
"not_overfit": true // OOS holds >= 50% of train expectancy
},
"scores": { // 0-100 components of the letter
"edge": 61.1, "robustness": 100.0, "risk": 5.8,
"execution": 50.0, // held at 50 until real fills are measured — disclosed
"live": 0.0, // grows only with a live track record
"weighted": 59.7
},
"headline": {
"oos_trades": 8733, // out-of-sample sample size — check this first
"net_expectancy_bp": 7.33, // THE metric: net expectancy per trade, basis points
"total_return_pct": 64.1,
"rr": 0.44, // avg win / avg loss
"win_rate_pct": 71.2 // context only — never a greenlight
},
"sizing": {
"risk_per_trade_pct": 1.0,
"notional_per_equity": 0.32, // responsible leverage implied by your risk setting
"sized_maxdd": 0.33 // median max drawdown at that sizing (Monte-Carlo)
},
"per_asset": { "BTC_USDT": {"n": 512, "exp": 0.0004, ...}, ... },
"reason": null // set when an F is structural, e.g. "<30 OOS trades"
}Errors & limits
401 missing or invalid X-API-Key 422 invalid AgentSpec (message says which field), or < 30 trades in record mode 429 tier call limit reached (rolling 30 days), or public-endpoint rate limit 500 engine error — our fault, not billed against your quota 503 lumen snapshot temporarily unavailable
No SDKs yet — the API is deliberately small and plain JSON over HTTPS. If you build something on it, we'd genuinely like to see it: reach us via the waitlist form or the in-app feedback widget.