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.
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.
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.
| Method | Endpoint | What it returns | Query params |
|---|---|---|---|
| GET | /api/public/v1/signals | Live AI signals: entry, targets, stop loss, confidence, freshness. | market, limit |
| GET | /api/public/v1/signals/history | Closed signals with real outcome (tp_hit / sl_hit / expired) and PnL. | market, days, limit |
| GET | /api/public/v1/regime | Market regime metrics (trend, volatility, breadth). | — |
| GET | /api/public/v1/whales | Large order flow / whale prints in real time. | asset, minUsd, limit |
| GET | /api/public/v1/cvd | Cumulative Volume Delta per asset and timeframe. | asset, timeframe, lookback |
| GET | /api/public/v1/ofi | Order Flow Imbalance from live orderbook pressure. | asset, window |
curl -s "https://avesignal.com/api/public/v1/signals?market=crypto&limit=10" \
-H "Authorization: Bearer ave_live_XXXXXXXXXXXXXXXX"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 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);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.
| Tool | What the agent can do |
|---|---|
| list_signals | Most recent live signals — filter by market, asset or minimum confidence. |
| signal_performance | Closed signals with real outcomes plus win rate and cumulative PnL. |
| get_watchlist | Your watchlists and the symbols they track. |
| get_my_account | Your account plan, expiry and profile basics. |
{
"mcpServers": {
"ave-signal": {
"url": "https://avesignal.com/mcp"
}
}
}Connecting from ChatGPT or Claude web
- Open your assistant's connectors / custom MCP settings.
- Add a new remote MCP server with URL https://avesignal.com/mcp.
- You'll be redirected to Ave Signal to sign in and approve the connection.
- Ask it something like: “List the freshest crypto signals above 75 confidence and my win rate over 30 days.”
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.