Nova·Market
Read-only · no auth · CORS

NovaMarket Agent API

A public read-only API for AI agents and developers: read pools, params, balances and settlements directly. All GET, anonymous, JSON; amounts are USDC base units (decimals: 6, big integers returned as strings); errors follow RFC 7807. No write/trade operations.

Machine-discoverable

Endpoints

GET/api/v1/protocolPlatform metadata: brand, chain, contracts, markets, discovery links
GET/api/v1/contractsDeployed contract addresses
GET/api/v1/marketsSupported markets (HL/PM) and coming soon
GET/api/v1/healthChain reachability & config status
GET/api/v1/poolsAll pools: params + live balances
GET/api/v1/pools/{address}A single pool's details
GET/api/v1/pools/{address}/settlementsRecent on-chain settlements (best-effort)

Base URL: https://novamarket.io/api/v1

curl

curl https://novamarket.io/api/v1/pools

JavaScript

const r = await fetch("https://novamarket.io/api/v1/pools");
const { items } = await r.json();
console.log(items[0].balances.investorNav); // USDC base units (string)

Python

import httpx
r = httpx.get("https://novamarket.io/api/v1/pools").json()
for p in r["items"]:
    print(p["strategy"]["label"], p["status"]["name"])

Integration notes for AI agents

  • Discovery: fetch /.well-known/agents.json for capabilities and OpenAPI/llms links.
  • Context: read /llms.txt (concise) or /llms-full.txt (with mechanism notes).
  • Data: /api/v1/pools to list, /pools/{address} for details, /settlements for settlements.
  • Fields: bps is basis points (1500=15%); status 0 funding / 1 active / 2 halted / 3 closed; market 0 HL / 1 PM.

Write operations (deposit/stake/report) go through on-chain signed transactions, outside this API; for contract ABIs and flows see the mechanism page. This API is read-only data, not investment advice. Mechanism

Strategy SDK

Quant developers write one strategy class and run the same logic in deterministic backtests and on real venues. A strategy's name is the pool's on-chain strategyType — declaring/accepting a pool with that name means you operate with it. Strategies are developer-defined; the platform presets none.

SDK source · README
from strategy_sdk import StrategyBase, register, indicators as ind

@register("MyTrend")                  # name = on-chain strategyType
class MyTrend(StrategyBase):
    params = {"fast": 10, "slow": 30, "size": 5.0}
    async def on_tick(self, ctx):     # called every tick
        sym = ctx.conn_symbol()
        hist = await ctx.history(sym, 31)
        f, s = ind.ema(hist, 10), ind.ema(hist, 30)
        if f and s:
            await ctx.target(sym, 5.0 if f > s else 0.0)   # move to target position

# Backtest:  fp-strategy backtest MyTrend --seed 7 --steps 300

ctx provides price/history/position/equity and buy/sell/target/flatten (with max_position/max_order risk clamps); indicators include sma/ema/rsi/zscore/bollinger/atr. Backtest with the built-in deterministic simulator (seeded GBM, reproducible) or real Hyperliquid candles.

Trendfast / slow / size

EMA fast/slow crossover: long in an uptrend, else flat

Backtest 240 stepsReturn 4.97%Sharpe 0.96Max drawdown 4.40%
Mean reversionwindow / k / size

z-score buys dips below mean, exits on reversion

Backtest 240 stepsReturn 4.43%Sharpe 2.16Max drawdown 1.39%
Market makingref_window / max_inventory / spread

inventory skew around mid: hold more when cheaper

Backtest 240 stepsReturn 9.06%Sharpe 2.79Max drawdown 1.40%
Gridgrid_pct / levels / unit

even grid in a range: add a step on each drop, trim on each rise

Backtest 240 stepsReturn 4.01%Sharpe 1.32Max drawdown 2.01%

Backtest curves are examples on a deterministic simulated price path (same path), to illustrate behavior — not real returns.