Developers

Plug your bot or AI agent into Ave Signal

Two ways in: a REST API secured with your personal API key for trading bots and scripts, and an MCP server so assistants like Claude, ChatGPT or Cursor can query your desk directly. Everything below is free — you only need an account.

Step 1

Create an API key

Keys are shown once at creation, stored only as a SHA-256 hash, and never expire — revoke them manually whenever a bot is retired. Send it as an Authorization: Bearer header on every request.

Sign in to generate a key — it takes a few seconds and it's free.

Step 2

REST endpoints

All endpoints live under https://avesignal.com/api/public/v1 and return JSON. Requests without a valid key return 401; a key missing the signals:read scope returns 403.

MethodEndpointWhat it returnsQuery params
GET/api/public/v1/signalsLive AI signals: entry, targets, stop loss, confidence, freshness.market, limit
GET/api/public/v1/signals/historyClosed signals with real outcome (tp_hit / sl_hit / expired) and PnL.market, days, limit
GET/api/public/v1/regimeMarket regime metrics (trend, volatility, breadth).
GET/api/public/v1/whalesLarge order flow / whale prints in real time.asset, minUsd, limit
GET/api/public/v1/cvdCumulative Volume Delta per asset and timeframe.asset, timeframe, lookback
GET/api/public/v1/ofiOrder Flow Imbalance from live orderbook pressure.asset, window
curl — first call
curl -s "https://avesignal.com/api/public/v1/signals?market=crypto&limit=10" \
  -H "Authorization: Bearer ave_live_XXXXXXXXXXXXXXXX"
Python — polling trading bot
import os, requests

BASE = "https://avesignal.com/api/public/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['AVE_API_KEY']}"}

def fresh_signals(market="crypto", min_confidence=70):
    r = requests.get(f"{BASE}/signals", headers=HEADERS,
                     params={"market": market, "limit": 50}, timeout=15)
    r.raise_for_status()
    data = r.json().get("signals", [])
    return [s for s in data
            if s.get("is_fresh") and (s.get("confidence") or 0) >= min_confidence]

def run_bot():
    for s in fresh_signals():
        print(s["asset"], s["side"], "entry", s["entry"],
              "tp", s["target_1"], "sl", s["stop_loss"],
              "conf", s["confidence"], "age(min)", s["signal_age_minutes"])
        # place_order(s["asset"], s["side"], s["entry"], s["stop_loss"], s["target_1"])

if __name__ == "__main__":
    run_bot()
Node.js — agent loop with regime context
// Node 18+ — poll signals every 5 minutes and act on fresh ones
const BASE = "https://avesignal.com/api/public/v1";
const KEY = process.env.AVE_API_KEY;

async function ave(path, params = {}) {
  const url = new URL(BASE + path);
  Object.entries(params).forEach(([k, v]) => url.searchParams.set(k, String(v)));
  const res = await fetch(url, { headers: { Authorization: `Bearer ${KEY}` } });
  if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
  return res.json();
}

async function tick() {
  const { signals } = await ave("/signals", { market: "crypto", limit: 25 });
  const [{ regime } = {}] = [await ave("/regime")];
  for (const s of signals.filter((s) => s.is_fresh && s.confidence >= 70)) {
    console.log(s.asset, s.side, s.entry, "→", s.target_1, "SL", s.stop_loss, regime);
    // await placeOrder(s);
  }
}

tick();
setInterval(tick, 5 * 60 * 1000);
Step 3

MCP server for AI agents

Ave Signal exposes an MCP endpoint at https://avesignal.com/mcp. Your assistant signs in with your Ave Signal account through OAuth, so every tool call runs as you with your own data permissions — no API key needed on this path.

ToolWhat the agent can do
list_signalsMost recent live signals — filter by market, asset or minimum confidence.
signal_performanceClosed signals with real outcomes plus win rate and cumulative PnL.
get_watchlistYour watchlists and the symbols they track.
get_my_accountYour account plan, expiry and profile basics.
Claude Desktop / Cursor — mcp config
{
  "mcpServers": {
    "ave-signal": {
      "url": "https://avesignal.com/mcp"
    }
  }
}

Connecting from ChatGPT or Claude web

  1. Open your assistant's connectors / custom MCP settings.
  2. Add a new remote MCP server with URL https://avesignal.com/mcp.
  3. You'll be redirected to Ave Signal to sign in and approve the connection.
  4. Ask it something like: “List the freshest crypto signals above 75 confidence and my win rate over 30 days.”
Good practice

Running bots safely

  • Store the key in an environment variable (AVE_API_KEY) — never commit it.
  • Poll no faster than once per minute; signals refresh on a slower cadence than that.
  • Use is_fresh and signal_age_minutes instead of a fixed cutoff — freshness is scaled to each signal's horizon.
  • Backtest against /signals/history before wiring real orders.
  • Use one key per bot so you can revoke a single integration without breaking the others.

Ave Signal provides market intelligence, not financial advice. Automated trading is at your own risk.