Developer Reference

API Documentation

Quick Start

Get up and running in minutes. ArcQuant supports two authentication modes — pick the one that suits your workflow.

Base URLhttps://arcquant.xyz— All responses are JSON · TLS only
1

Register your wallet & get an API key

POST to /api/auth/register with your wallet address. You'll receive an aq_-prefixed API key instantly.
curl
curl -X POST https://arcquant.xyz/api/auth/register \
  -H "Content-Type: application/json" \
  -d '{"wallet": "0xYourWalletAddress"}'
Response: { "apiKey": "aq_xxxxxxxxxxxxxxxx", "wallet": "0x..." }
2

Make authenticated requests

Pass the key as a Bearer token in the Authorization header.
curl
curl https://arcquant.xyz/api/acp/price?symbol=AAPL \
  -H "Authorization: Bearer aq_xxxxxxxxxxxxxxxx"
3

Or use x402 — no registration needed

Call any authenticated endpoint without auth. You'll receive an HTTP 402 with the USDC price. Pay on Base and retry.
curl
# 1. Call without auth → receive 402 Payment Required
curl https://arcquant.xyz/api/acp/price?symbol=AAPL

# 2. Pay the USDC amount specified in X-Payment-Required header
# 3. Retry with payment receipt header → receive data

Public Endpoints

These endpoints require no authentication and are freely accessible.

GET/api/acp/healthNo Auth Required

Health check. Returns API status and current timestamp. Use this to verify the service is reachable before making authenticated requests.

Example Request

curl
curl https://arcquant.xyz/api/acp/health

Response

json
{
  "status": "ok",
  "timestamp": "2026-02-18T12:00:00Z",
  "version": "1.0.0"
}
GET/api/acp/servicesNo Auth Required

Service discovery — lists all available data products, their descriptions, pricing, and supported parameters. Use this to discover what endpoints and strategies are available before subscribing.

Parameters

categorystring

Filter by category: price, indicators, fundamentals, signals, etc.

limitinteger

Max results to return (default 20, max 100).

Example Request

curl
curl https://arcquant.xyz/api/acp/services

Response

json
{
  "services": [
    {
      "id": "price",
      "name": "Real-time Price Data",
      "description": "Live stock & crypto prices",
      "pricePerCall": "0.001",
      "currency": "USDC",
      "endpoint": "/api/acp/price"
    },
    {
      "id": "indicators",
      "name": "Technical Indicators",
      "description": "RSI, MACD, EMA and more",
      "pricePerCall": "0.002",
      "currency": "USDC",
      "endpoint": "/api/acp/indicators"
    }
  ],
  "total": 12
}
GET/api/acp/statusNo Auth Required

ACP SDK connection status. Returns whether the ArcQuant node is connected to the Virtuals Protocol ACP network, active job count, and SDK version.

Example Request

curl
curl https://arcquant.xyz/api/acp/status

Response

json
{
  "connected": true,
  "agentAddress": "0xArcQuantAddress",
  "activeJobs": 3,
  "sdkVersion": "1.2.0",
  "network": "base-mainnet"
}

Price Data

Real-time price data for stocks and crypto. Supports US equities and major crypto pairs with real-time data feeds.

GET/api/acp/priceBearer aq_ OR x402

Fetch the latest real-time price for any stock or crypto symbol. Supports US equities and major crypto pairs (e.g. BTCUSDT, ETHUSDT) with real-time market data.

Parameters

symbolstringrequired

Ticker symbol. Stocks: AAPL, TSLA, NVDA. Crypto: BTCUSDT, ETHUSDT, SOLUSDT.

Example Request

curl
curl "https://arcquant.xyz/api/acp/price?symbol=AAPL" \
  -H "Authorization: Bearer aq_xxxxxxxxxxxxxxxx"

Response

json
{
  "symbol": "AAPL",
  "price": 227.83,
  "change": 1.24,
  "changePercent": 0.55,
  "high": 229.10,
  "low": 225.40,
  "volume": 48293012,
  "timestamp": "2026-02-18T12:00:00Z",
  "source": "market-data"
}

Technical Indicators

Compute technical indicators on demand. Supports 18 indicator types across momentum, trend, volatility, and volume categories.

RSISMAEMAMACDBollinger BandsATRVWAPStochasticWilliams %ROBVCCIIchimokuParabolic SARADXROCMFIAroonTRIX
GET/api/acp/indicatorsBearer aq_ OR x402

Compute a technical indicator for any symbol. Returns the current indicator value(s) based on recent OHLCV candle data. Supports all 18 indicators: RSI, SMA, EMA, MACD, Bollinger Bands, ATR, VWAP, Stochastic, Williams %R, OBV, CCI, Ichimoku, Parabolic SAR, ADX, ROC, MFI, Aroon, and TRIX.

Parameters

symbolstringrequired

Ticker symbol, e.g. AAPL, BTCUSDT.

indicatorstringrequired

Indicator name (case-insensitive): rsi, sma, ema, macd, bollinger, atr, vwap, stochastic, williams_r, obv, cci, ichimoku, parabolic_sar, adx, roc, mfi, aroon, trix.

periodinteger

Lookback period for the indicator (default: 14). Applies to RSI, SMA, EMA, ATR, CCI, Williams %R, Stochastic, ADX, ROC, MFI, Aroon, TRIX.

intervalstring

Candle interval: 1m, 5m, 15m, 1h, 4h, 1d (default: 1h).

Example Request

curl
curl "https://arcquant.xyz/api/acp/indicators?symbol=AAPL&indicator=rsi&period=14" \
  -H "Authorization: Bearer aq_xxxxxxxxxxxxxxxx"

Response

json
{
  "symbol": "AAPL",
  "indicator": "rsi",
  "period": 14,
  "interval": "1h",
  "value": 58.43,
  "signal": "neutral",
  "timestamp": "2026-02-18T12:00:00Z"
}

Market Intelligence

Deep market data: company fundamentals, insider activity, technical consensus, and earnings history.

GET/api/acp/fundamentalsBearer aq_ OR x402

Company financial fundamentals — valuation metrics, profitability, growth rates, balance sheet highlights. Ideal for fundamental screening and agent decision-making.

Parameters

symbolstringrequired

Stock ticker, e.g. AAPL, NVDA, MSFT.

Example Request

curl
curl "https://arcquant.xyz/api/acp/fundamentals?symbol=AAPL" \
  -H "Authorization: Bearer aq_xxxxxxxxxxxxxxxx"

Response

json
{
  "symbol": "AAPL",
  "name": "Apple Inc.",
  "marketCap": 3420000000000,
  "peRatio": 28.4,
  "pbRatio": 44.2,
  "psRatio": 8.7,
  "evEbitda": 22.1,
  "revenueGrowthYoY": 0.062,
  "earningsGrowthYoY": 0.118,
  "grossMargin": 0.447,
  "operatingMargin": 0.308,
  "netMargin": 0.261,
  "debtToEquity": 1.87,
  "currentRatio": 0.99,
  "roe": 1.47,
  "dividendYield": 0.0055,
  "52wHigh": 259.81,
  "52wLow": 164.08,
  "updatedAt": "2026-02-18T00:00:00Z"
}
GET/api/acp/insiderBearer aq_ OR x402

Recent insider transactions (buys and sells by executives and directors) plus an MSPR (Market Sentiment Participation Rate) sentiment score. Higher MSPR indicates stronger insider buying conviction.

Parameters

symbolstringrequired

Stock ticker, e.g. AAPL.

limitinteger

Number of recent transactions to return (default 10).

Example Request

curl
curl "https://arcquant.xyz/api/acp/insider?symbol=AAPL" \
  -H "Authorization: Bearer aq_xxxxxxxxxxxxxxxx"

Response

json
{
  "symbol": "AAPL",
  "mspr": 0.42,
  "msprSignal": "slightly bullish",
  "transactions": [
    {
      "name": "Timothy D. Cook",
      "title": "CEO",
      "transactionType": "S",
      "shares": 150000,
      "pricePerShare": 226.50,
      "totalValue": 33975000,
      "date": "2026-01-28",
      "filingDate": "2026-01-30"
    }
  ],
  "totalBuyValue30d": 2100000,
  "totalSellValue30d": 45800000
}
GET/api/acp/technicalsBearer aq_ OR x402

Technical analysis summary — identified chart patterns, key support and resistance levels, and a consensus signal aggregated across multiple indicators. Great for getting a quick read on market structure.

Parameters

symbolstringrequired

Ticker symbol, e.g. AAPL or BTCUSDT.

intervalstring

Candle interval for analysis: 1h, 4h, 1d (default: 1d).

Example Request

curl
curl "https://arcquant.xyz/api/acp/technicals?symbol=AAPL" \
  -H "Authorization: Bearer aq_xxxxxxxxxxxxxxxx"

Response

json
{
  "symbol": "AAPL",
  "interval": "1d",
  "consensus": "buy",
  "buy": 8,
  "sell": 3,
  "neutral": 4,
  "patterns": ["bullish_engulfing", "golden_cross"],
  "support": [218.50, 212.00],
  "resistance": [232.00, 240.50],
  "trend": "uptrend",
  "updatedAt": "2026-02-18T12:00:00Z"
}
GET/api/acp/earningsBearer aq_ OR x402

Historical earnings results plus EPS surprise data — how actual results compared to analyst estimates. Useful for momentum and event-driven strategies.

Parameters

symbolstringrequired

Stock ticker, e.g. AAPL.

limitinteger

Number of recent quarters to return (default 8).

Example Request

curl
curl "https://arcquant.xyz/api/acp/earnings?symbol=AAPL" \
  -H "Authorization: Bearer aq_xxxxxxxxxxxxxxxx"

Response

json
{
  "symbol": "AAPL",
  "earnings": [
    {
      "period": "Q1 FY2026",
      "reportDate": "2026-01-30",
      "epsActual": 2.41,
      "epsEstimate": 2.35,
      "epsSurprise": 0.06,
      "epsSurprisePercent": 2.55,
      "revenueActual": 124300000000,
      "revenueEstimate": 123100000000,
      "beat": true
    }
  ]
}

Strategy Signals

Evaluate strategy node graphs and receive actionable trading signals. Subscribe for recurring delivery or query on demand.

GET/api/acp/signalsBearer aq_ OR x402

Evaluate a strategy's node graph and get the latest signals. Each signal includes direction (LONG/SHORT/HOLD), a confidence score, contributing indicator values, and a full strategy execution trace for explainability. Each call is billed once.

Parameters

strategyIdstringrequired

The ID of the strategy to evaluate. Find IDs via /api/acp/services.

symbolstring

Override the default symbol for this strategy.

limitinteger

Number of recent signals to return (default 5).

Example Request

curl
curl "https://arcquant.xyz/api/acp/signals?strategyId=momentum_alpha_v2" \
  -H "Authorization: Bearer aq_xxxxxxxxxxxxxxxx"

Response

json
{
  "strategyId": "momentum_alpha_v2",
  "signals": [
    {
      "id": "sig_7f2a9b",
      "timestamp": "2026-02-18T12:00:00Z",
      "symbol": "BTCUSDT",
      "direction": "LONG",
      "confidence": 0.82,
      "indicators": {
        "rsi_14": 38.4,
        "ema_cross": "bullish",
        "volume_ratio": 1.47
      },
      "traceUrl": "https://arcquant.xyz/trace/sig_7f2a9b"
    }
  ],
  "costThisCall": "0.05",
  "currency": "USDC"
}
POST/api/acp/subscribeBearer aq_ key

Subscribe to recurring signal delivery for a strategy. Signals are pushed to your agent or webhook endpoint on each new evaluation cycle. Payment is settled per delivery via the ACP protocol in USDC.

Parameters

strategyIdstringrequired

ID of the strategy to subscribe to.

agentWalletstringrequired

Your agent's wallet address for ACP settlement.

webhookUrlstring

Optional webhook URL to receive signals via HTTP POST.

maxCallsPerDayinteger

Daily call cap to prevent runaway spend (default: unlimited).

Example Request

curl
curl -X POST https://arcquant.xyz/api/acp/subscribe \
  -H "Authorization: Bearer aq_xxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "strategyId": "momentum_alpha_v2",
    "agentWallet": "0xYourAgentWallet",
    "webhookUrl": "https://your-agent.xyz/signals",
    "maxCallsPerDay": 100
  }'

Response

json
{
  "subscriptionId": "sub_xK9mNpQ3",
  "strategyId": "momentum_alpha_v2",
  "status": "active",
  "agentWallet": "0xYourAgentWallet",
  "pricePerCall": "0.05",
  "currency": "USDC",
  "createdAt": "2026-02-18T12:00:00Z"
}

Strategy Leaderboard

Browse the top-performing strategies ranked by a composite score derived from win rate, Sharpe ratio, call volume, and recency. Use this to discover high-quality strategies before subscribing.

GET/api/strategies/leaderboardNo Auth Required

Returns the top 20 strategies ranked by composite performance score for the selected period. The composite score weights Sharpe ratio (40%), win rate (30%), total call volume (20%), and recency (10%). Agents can use this endpoint to programmatically discover the highest-signal strategies without prior knowledge of strategy IDs.

Parameters

periodstring

Scoring window: "all" (all time), "30d" (last 30 days), "7d" (last 7 days). Default: "all".

Example Request

curl
curl "https://arcquant.xyz/api/strategies/leaderboard?period=30d"

Response

json
{
  "period": "30d",
  "updatedAt": "2026-02-18T12:00:00Z",
  "leaderboard": [
    {
      "rank": 1,
      "strategyId": "momentum_alpha_v2",
      "name": "Momentum Alpha v2",
      "creator": "0xCreator...",
      "compositeScore": 94.2,
      "sharpeRatio": 2.41,
      "winRate": 0.73,
      "totalCalls": 18420,
      "pricePerCall": "0.05",
      "currency": "USDC",
      "assets": ["BTCUSDT", "ETHUSDT"],
      "public": true
    },
    {
      "rank": 2,
      "strategyId": "vwap_bounce_pro",
      "name": "VWAP Bounce Pro",
      "creator": "0xCreator2...",
      "compositeScore": 88.7,
      "sharpeRatio": 1.98,
      "winRate": 0.68,
      "totalCalls": 9310,
      "pricePerCall": "0.03",
      "currency": "USDC",
      "assets": ["AAPL", "NVDA", "TSLA"],
      "public": true
    }
  ],
  "total": 20
}

Chart API

Generate premium branded PNG charts with up to six overlaid technical indicators. Works for both stocks and crypto. Optionally overlay BUY/SELL signal markers from any strategy you own or that is publicly listed.

🔒

Ownership check: When passing strategyId, the server verifies your identity via API key lookup or x402 payment receipt. Signal overlays are only rendered for strategies that are publicly listed or owned by your wallet. No spoofable headers are accepted.

GET/api/acp/chartBearer aq_ OR x402

Returns a premium PNG chart image (default 1200×640px) with your chosen indicators rendered as overlays on a candlestick price chart. The chart is branded with the ArcQuant logo and includes price, volume bars, and a formatted legend. Use the optional strategyId parameter to overlay BUY/SELL signal markers from that strategy's historical evaluations — ideal for creating 'ready to post' social media content or agent dashboards.

Parameters

symbolstringrequired

Ticker symbol. Stocks: AAPL, NVDA, TSLA. Crypto: BTCUSDT, ETHUSDT, SOLUSDT.

periodinteger

Chart lookback window in days. Range: 7–365. Default: 60.

indicatorsstring

Comma-separated list of indicators to overlay: sma, ema, bollinger, rsi, macd, vwap. Example: indicators=sma,bollinger,rsi

strategyIdstring

Optional. Overlay BUY/SELL signal markers from this strategy. Only works for public strategies or strategies you own.

widthinteger

Chart width in pixels. Default: 1200. Max: 2400.

heightinteger

Chart height in pixels. Default: 640. Max: 1200.

themestring

Chart color theme: "dark" (default) or "light".

Example Request

curl
# Basic chart — AAPL with Bollinger + RSI + SMA overlays
curl "https://arcquant.xyz/api/acp/chart?symbol=AAPL&period=60&indicators=sma,bollinger,rsi" \
  -H "Authorization: Bearer aq_xxxxxxxxxxxxxxxx" \
  --output aapl_chart.png

# Chart with strategy signal markers
curl "https://arcquant.xyz/api/acp/chart?symbol=BTCUSDT&period=30&indicators=macd,vwap&strategyId=momentum_alpha_v2" \
  -H "Authorization: Bearer aq_xxxxxxxxxxxxxxxx" \
  --output btc_signals.png

Response

json
# Returns: image/png (binary)
# Content-Type: image/png
# X-Chart-Symbol: AAPL
# X-Chart-Period: 60d
# X-Chart-Indicators: sma,bollinger,rsi
# X-Chart-Signals: 0  (or number of signal markers if strategyId provided)
#
# Save directly to file or embed in your agent's response

Chart API — Code Examples

curl
# Generate a 90-day BTCUSDT chart with MACD + Bollinger overlays
# and BUY/SELL markers from a strategy
curl "https://arcquant.xyz/api/acp/chart?symbol=BTCUSDT\
&period=90&indicators=macd,bollinger&strategyId=momentum_alpha_v2" \
  -H "Authorization: Bearer aq_xxxxxxxxxxxxxxxx" \
  --output btc_90d_signals.png
python
import requests

API_KEY = "aq_xxxxxxxxxxxxxxxx"
BASE_URL = "https://arcquant.xyz"

# Generate chart with RSI + SMA overlays
resp = requests.get(
    f"{BASE_URL}/api/acp/chart",
    params={
        "symbol": "AAPL",
        "period": 60,
        "indicators": "sma,rsi,bollinger",
        "theme": "dark"
    },
    headers={"Authorization": f"Bearer {API_KEY}"}
)
resp.raise_for_status()
with open("aapl_chart.png", "wb") as f:
    f.write(resp.content)
print("Chart saved — ready to post!")
javascript
const API_KEY = "aq_xxxxxxxxxxxxxxxx";

// Fetch chart with signal overlays
const resp = await fetch(
  "https://arcquant.xyz/api/acp/chart?symbol=ETHUSDT&period=30&indicators=ema,macd&strategyId=vwap_bounce_pro",
  { headers: { "Authorization": `Bearer ${API_KEY}` } }
);

const buffer = await resp.arrayBuffer();
// e.g. write to disk, upload to S3, or embed in a tweet

Webhook Delivery

Register a webhook URL to receive real-time signal pushes instead of polling. Every delivery is signed with HMAC-SHA256 so you can verify authenticity server-side. Webhooks are automatically disabled after 3 consecutive delivery failures to protect your subscription.

Webhook Payload Format

json
{
  "event": "signal.new",
  "strategyId": "momentum_alpha_v2",
  "subscriptionId": "sub_xK9mNpQ3",
  "signal": {
    "symbol": "BTCUSDT",
    "direction": "LONG",
    "confidence": 0.82,
    "timestamp": "2026-02-18T14:32:07Z"
  },
  "meta": {
    "callId": "call_9f3bc2",
    "costUsdc": "0.05",
    "traceUrl": "https://arcquant.xyz/trace/call_9f3bc2"
  }
}

Every request includes an X-ArcQuant-Signature header: sha256=<HMAC-SHA256 of raw body using your secret>. Verify this on your server before processing the payload.

POST/api/subscriptions/webhookBearer aq_ key

Register a webhook URL for an existing subscription. When a new signal fires, ArcQuant will POST the signal payload to your URL with an HMAC-SHA256 signature header. If no secret is provided, a random secret is generated and returned — store it securely. Webhooks are auto-disabled after 3 consecutive failures.

Parameters

subscriptionIdstringrequired

The subscription ID to attach this webhook to.

urlstringrequired

Your HTTPS webhook endpoint URL.

secretstring

Optional HMAC secret for signature verification. A random secret is generated if not provided.

Example Request

curl
curl -X POST https://arcquant.xyz/api/subscriptions/webhook \
  -H "Authorization: Bearer aq_xxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "subscriptionId": "sub_xK9mNpQ3",
    "url": "https://your-agent.xyz/signals",
    "secret": "my_webhook_secret"
  }'

Response

json
{
  "webhookId": "wh_p3rK8nX2",
  "subscriptionId": "sub_xK9mNpQ3",
  "url": "https://your-agent.xyz/signals",
  "secret": "my_webhook_secret",
  "status": "active",
  "createdAt": "2026-02-18T12:00:00Z"
}
POST/api/subscriptions/webhook/testBearer aq_ key

Send a test webhook delivery to verify your endpoint is reachable and signature verification is working. Returns the HTTP status code and response body your server returned.

Parameters

webhookIdstringrequired

The webhook ID to test.

Example Request

curl
curl -X POST https://arcquant.xyz/api/subscriptions/webhook/test \
  -H "Authorization: Bearer aq_xxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"webhookId": "wh_p3rK8nX2"}'

Response

json
{
  "webhookId": "wh_p3rK8nX2",
  "testDelivered": true,
  "endpointStatus": 200,
  "endpointResponse": "ok",
  "deliveredAt": "2026-02-18T12:01:00Z",
  "signatureHeader": "sha256=abc123..."
}
GET/api/subscriptions/webhook/logsBearer aq_ key

Retrieve delivery logs for a webhook. Shows the last 100 delivery attempts with HTTP status codes, timestamps, and any error details. Use this to debug failed deliveries or confirm successful signal pushes.

Parameters

subscriptionIdstringrequired

The subscription ID to fetch logs for.

limitinteger

Max log entries to return (default 20, max 100).

Example Request

curl
curl "https://arcquant.xyz/api/subscriptions/webhook/logs?subscriptionId=sub_xK9mNpQ3" \
  -H "Authorization: Bearer aq_xxxxxxxxxxxxxxxx"

Response

json
{
  "subscriptionId": "sub_xK9mNpQ3",
  "webhookId": "wh_p3rK8nX2",
  "logs": [
    {
      "deliveryId": "dlv_001",
      "timestamp": "2026-02-18T14:32:07Z",
      "status": "success",
      "httpStatus": 200,
      "durationMs": 142
    },
    {
      "deliveryId": "dlv_000",
      "timestamp": "2026-02-18T13:32:07Z",
      "status": "failed",
      "httpStatus": 503,
      "error": "Connection refused",
      "durationMs": 5000,
      "retried": true,
      "consecutiveFailures": 1
    }
  ],
  "autoDisableAfter": 3
}

Verifying Webhook Signatures

Always verify the X-ArcQuant-Signature header before processing a webhook payload.

python
import hmac, hashlib
from flask import Flask, request, abort

app = Flask(__name__)
WEBHOOK_SECRET = "my_webhook_secret"

@app.route("/signals", methods=["POST"])
def receive_signal():
    sig_header = request.headers.get("X-ArcQuant-Signature", "")
    expected = "sha256=" + hmac.new(
        WEBHOOK_SECRET.encode(),
        request.get_data(),
        hashlib.sha256
    ).hexdigest()

    if not hmac.compare_digest(sig_header, expected):
        abort(401)  # Invalid signature

    payload = request.json
    print(f"Signal: {payload['signal']['direction']} on {payload['signal']['symbol']}")
    return "ok", 200
javascript
import crypto from "crypto";
import express from "express";

const app = express();
const WEBHOOK_SECRET = "my_webhook_secret";

app.post("/signals", express.raw({ type: "application/json" }), (req, res) => {
  const sigHeader = req.headers["x-arcquant-signature"] ?? "";
  const expected = "sha256=" + crypto
    .createHmac("sha256", WEBHOOK_SECRET)
    .update(req.body)
    .digest("hex");

  if (!crypto.timingSafeEqual(Buffer.from(sigHeader), Buffer.from(expected))) {
    return res.status(401).send("Invalid signature");
  }

  const payload = JSON.parse(req.body);
  console.log(`Signal: ${payload.signal.direction} on ${payload.signal.symbol}`);
  res.send("ok");
});

Analysis Snapshot

One API call returns everything: 150+ technical indicators, 7 quant modules, price data, fundamentals, earnings, insider activity, and news sentiment. Works for both stocks (Finnhub) and crypto (Binance).

GET/api/analysis?symbol=AAPLNewNo Auth Required

Full snapshot analysis for any symbol. Returns technical indicators (RSI, MACD, Bollinger, SMA/EMA, ATR, VWAP, Stochastic, etc.), quant signals (momentum, mean-reversion, alpha blend, VPIN, risk, Kelly, alpha decay), and for equities: fundamentals, earnings, insider trades, and news sentiment. Results cached for 10 minutes.

Parameters

symbolstringrequired

Ticker symbol. Stocks: AAPL, TSLA. Crypto: BTCUSDT, ETHUSDT, SOLUSDT.

Example Request

curl
curl https://arcquant.xyz/api/analysis?symbol=BTCUSDT

Response

json
{
  "symbol": "BTCUSDT",
  "timestamp": "2026-03-01T10:00:00Z",
  "price": {
    "current": 84250.50,
    "change24h": 0.0312,
    "high52w": 109000.00,
    "low52w": 49200.00
  },
  "indicators": {
    "rsi": { "value": 58.4, "period": 14 },
    "macd": { "value": 312.5, "signal": 280.1, "histogram": 32.4 },
    "bollingerBands": { "upper": 88100, "middle": 83500, "lower": 78900 },
    "sma": { "sma20": 83100, "sma50": 81200, "sma200": 72500 },
    "atr": { "value": 2450.8, "period": 14 },
    "vwap": { "deviation": 0.89 }
  },
  "quant": {
    "momentum": { "direction": "long", "zScore": 1.42, "confidence": 0.47 },
    "risk": { "var95": 0.0385, "regime": "medium-vol" },
    "vpin": { "value": 0.31, "classification": "elevated" },
    "kelly": { "recommendedSize": 0.12, "winRate": 0.54 }
  }
}

Backtest Engine

Run historical backtests on strategies across single or multiple symbols. Compare strategies side-by-side or run walk-forward optimization.

POST/api/backtest/runNewx-wallet-address

Run a backtest for a strategy on one or more symbols. Returns equity curve, trade list, and performance metrics (Sharpe, max drawdown, win rate, profit factor). Use multi=true with a symbols array for multi-symbol backtesting.

Parameters

strategyIdstringrequired

Strategy ID to backtest.

symbolstring

Single symbol for backtest (e.g., AAPL, BTCUSDT).

symbolsstring[]

Array of symbols for multi-symbol backtest.

startDatestring

ISO date string for backtest start.

endDatestring

ISO date string for backtest end.

multiboolean

Set true for multi-symbol mode.

Example Request

curl
curl -X POST https://arcquant.xyz/api/backtest/run \
  -H "x-wallet-address: 0xYourWallet" \
  -H "Content-Type: application/json" \
  -d '{
    "strategyId": "strat_abc123",
    "symbol": "AAPL",
    "startDate": "2025-01-01",
    "endDate": "2026-01-01"
  }'

Response

json
{
  "strategyId": "strat_abc123",
  "symbol": "AAPL",
  "metrics": {
    "totalReturn": 0.234,
    "sharpeRatio": 1.82,
    "maxDrawdown": -0.087,
    "winRate": 0.62,
    "totalTrades": 47,
    "profitFactor": 2.15
  },
  "equityCurve": [
    { "date": "2025-01-02", "equity": 10000 },
    { "date": "2025-06-15", "equity": 11420 }
  ],
  "trades": [
    { "date": "2025-01-15", "direction": "long", "price": 185.20, "pnl": 312.50 }
  ]
}
POST/api/backtest/comparex-wallet-address

Compare multiple strategies on the same symbol with a benchmark. Returns side-by-side metrics, equity curves, and correlation data.

Parameters

strategyIdsstring[]required

Array of strategy IDs to compare (2-5).

symbolstringrequired

Symbol to backtest all strategies on.

startDatestring

Backtest start date.

endDatestring

Backtest end date.

Example Request

curl
curl -X POST https://arcquant.xyz/api/backtest/compare \
  -H "x-wallet-address: 0xYourWallet" \
  -H "Content-Type: application/json" \
  -d '{
    "strategyIds": ["strat_abc", "strat_def"],
    "symbol": "AAPL",
    "startDate": "2025-01-01",
    "endDate": "2026-01-01"
  }'

Response

json
{
  "results": [
    { "strategyId": "strat_abc", "totalReturn": 0.234, "sharpe": 1.82 },
    { "strategyId": "strat_def", "totalReturn": 0.189, "sharpe": 1.45 }
  ],
  "benchmark": { "totalReturn": 0.152, "sharpe": 0.94 }
}

Quant Engine

Research-grade quantitative analytics: VPIN flow toxicity, Kelly criterion sizing, factor-based signals, risk metrics, alpha decay, and portfolio optimization. All endpoints now support both stocks and crypto.

GET/api/quant/vpin?symbol=AAPLNewNo Auth Required

Volume-Synchronized Probability of Informed Trading (VPIN). Uses BVC method on intraday candles to detect flow toxicity. Classification: normal < 0.2, elevated < 0.5, high < 0.7, toxic ≥ 0.7.

Parameters

symbolstringrequired

Symbol (e.g., AAPL, BTCUSDT).

symbolsstring

Comma-separated symbols for watchlist mode.

bucketVolumenumber

Volume per bucket (auto-calculated if omitted).

windownumber

Rolling window in buckets (default: 50).

Example Request

curl
curl https://arcquant.xyz/api/quant/vpin?symbol=BTCUSDT

Response

json
{
  "symbol": "BTCUSDT",
  "vpin": 0.3142,
  "classification": "elevated",
  "orderImbalance": 0.1823,
  "buckets": [ { "buyVolume": 45200, "sellVolume": 38100, "imbalance": 0.085 } ],
  "timestamp": "2026-03-01T10:00:00Z"
}
POST/api/quant/kellyNo Auth Required

Kelly Criterion position sizing with Monte Carlo bootstrap. Computes optimal bet size from historical return distribution. Returns classic Kelly, empirical Kelly (10K simulations), and recommended position size.

Parameters

returnsnumber[]required

Array of historical returns (decimal, e.g., 0.02 for 2%).

bankrollnumber

Portfolio value in USD (default: 100000).

maxPositionnumber

Maximum position size cap (default: 0.25).

Example Request

curl
curl -X POST https://arcquant.xyz/api/quant/kelly \
  -H "Content-Type: application/json" \
  -d '{"returns": [0.02, -0.01, 0.03, -0.005, 0.015], "bankroll": 100000}'

Response

json
{
  "classicKelly": 0.342,
  "empiricalKelly": 0.285,
  "recommendedSize": 0.142,
  "winRate": 0.60,
  "edge": 0.0125,
  "maxPosition": 0.25
}
GET/api/quant/risk?symbol=AAPLNo Auth Required

Risk analytics: historical VaR (95%/99%), CVaR (Expected Shortfall), max drawdown, and volatility regime detection. Regime is classified as low-vol, medium-vol, or high-vol based on 20-day rolling realized vol percentile.

Parameters

symbolstringrequired

Symbol (e.g., TSLA, ETHUSDT).

symbolsstring

Comma-separated for multi-asset risk.

Example Request

curl
curl https://arcquant.xyz/api/quant/risk?symbol=ETHUSDT

Response

json
{
  "symbol": "ETHUSDT",
  "var95": 0.0452,
  "cvar95": 0.0681,
  "maxDrawdown": 0.2341,
  "regime": "medium-vol",
  "regimeVolatility": 0.58,
  "regimePercentile": 62.5
}
GET/api/quant/signals?type=momentum&symbols=AAPL,TSLANo Auth Required

Factor-based signals: momentum (12-1mo trailing, Jegadeesh-Titman), reversal (5-day), or composite blend. Returns z-scored signals with decile ranks and direction classification.

Parameters

typestringrequired

Signal type: momentum, reversal, or composite.

symbolsstringrequired

Comma-separated symbols.

Example Request

curl
curl "https://arcquant.xyz/api/quant/signals?type=momentum&symbols=BTCUSDT,ETHUSDT,SOLUSDT"

Response

json
{
  "signals": [
    { "symbol": "SOLUSDT", "direction": "long", "zScore": 1.85, "decile": 9, "confidence": 0.62 },
    { "symbol": "BTCUSDT", "direction": "neutral", "zScore": 0.42, "decile": 6, "confidence": 0.14 },
    { "symbol": "ETHUSDT", "direction": "neutral", "zScore": -0.31, "decile": 4, "confidence": 0.10 }
  ]
}
POST/api/quant/portfolioNo Auth Required

Portfolio optimization: Markowitz mean-variance, Risk Parity, or Black-Litterman. Returns optimal weights, expected return, and portfolio risk metrics.

Parameters

symbolsstring[]required

Array of symbols (2-20).

methodstring

Optimization method: markowitz (default), risk-parity, black-litterman.

gammanumber

Risk aversion parameter (default: 1).

viewsobject[]

Black-Litterman views (for BL method).

Example Request

curl
curl -X POST https://arcquant.xyz/api/quant/portfolio \
  -H "Content-Type: application/json" \
  -d '{"symbols": ["AAPL","TSLA","NVDA","GOOGL"], "method": "risk-parity"}'

Response

json
{
  "method": "risk-parity",
  "weights": { "AAPL": 0.32, "TSLA": 0.18, "NVDA": 0.22, "GOOGL": 0.28 },
  "expectedReturn": 0.185,
  "portfolioVol": 0.214,
  "sharpe": 0.865
}

Strategies API

Create, read, update, and delete strategies. Each strategy is a DAG (directed acyclic graph) of data sources, indicators, filters, and actions.

GET/api/strategiesx-wallet-address

List all strategies owned by the authenticated wallet. Supports pagination, sorting, and status filtering.

Parameters

pagenumber

Page number (default: 1).

limitnumber

Results per page (default: 20).

sortstring

Sort: newest, oldest, most-signals, name-az.

statusstring

Filter: live, paused, draft, backtesting.

Example Request

curl
curl https://arcquant.xyz/api/strategies \
  -H "x-wallet-address: 0xYourWallet"

Response

json
{
  "strategies": [
    {
      "id": "strat_abc123",
      "name": "Golden Cross Momentum",
      "status": "live",
      "symbols": ["AAPL", "TSLA"],
      "metrics": { "totalSignals": 142, "successRate": 0.68 },
      "updatedAt": "2026-02-28T18:00:00Z"
    }
  ],
  "total": 5,
  "page": 1
}
POST/api/strategiesx-wallet-address

Create a new strategy. Provide a name, description, symbols, timeframe, and DAG (nodes + edges). The strategy is created in draft status.

Parameters

namestringrequired

Strategy name.

descriptionstring

Strategy description.

symbolsstring[]required

Target symbols.

timeframestring

Candle timeframe: 1m, 5m, 15m, 1h, 4h, D (default: D).

dagobjectrequired

DAG definition: { nodes: [], edges: [] }.

Example Request

curl
curl -X POST https://arcquant.xyz/api/strategies \
  -H "x-wallet-address: 0xYourWallet" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "RSI Bounce",
    "symbols": ["BTCUSDT"],
    "timeframe": "4h",
    "dag": { "nodes": [...], "edges": [...] }
  }'

Response

json
{
  "id": "strat_new123",
  "name": "RSI Bounce",
  "status": "draft",
  "createdAt": "2026-03-01T10:00:00Z"
}

Strategy Marketplace

Browse published strategies, subscribe to get signals, and manage subscriptions.

GET/api/marketplaceNewNo Auth Required

Browse all published strategies. Filter by category, search by name, and sort by popularity or performance.

Parameters

categorystring

Filter: momentum, mean-reversion, trend, scalper, multi-factor.

searchstring

Search by strategy name or description.

sortstring

Sort: popular (default), newest, price-low, price-high.

Example Request

curl
curl https://arcquant.xyz/api/marketplace

Response

json
{
  "strategies": [
    {
      "id": "strat_pub1",
      "name": "AI Momentum Alpha",
      "creator": "0xCreatorWallet",
      "subscriptionPrice": 29.00,
      "subscribers": 142,
      "metrics": { "totalSignals": 1820, "successRate": 0.71 },
      "category": "momentum"
    }
  ],
  "total": 48
}
POST/api/marketplace/:id/subscribex-wallet-address

Subscribe to a published strategy. You'll receive signals via webhook or polling.

Parameters

:idstringrequired

Strategy ID (path parameter).

Example Request

curl
curl -X POST https://arcquant.xyz/api/marketplace/strat_pub1/subscribe \
  -H "x-wallet-address: 0xYourWallet"

Response

json
{
  "subscriptionId": "sub_xyz789",
  "strategyId": "strat_pub1",
  "status": "active",
  "price": 29.00,
  "nextBilling": "2026-04-01T00:00:00Z"
}

Auth Endpoints

Register a wallet, retrieve API keys, check usage, and revoke access.

POST/api/auth/registerNo Auth Required

Register a wallet address and receive an aq_-prefixed API key. The key is tied to the wallet for on-chain ACP settlement. No signature required at registration — ownership is verified at first payment.

Parameters

walletstringrequired

Your EVM-compatible wallet address (0x...).

Example Request

curl
curl -X POST https://arcquant.xyz/api/auth/register \
  -H "Content-Type: application/json" \
  -d '{"wallet": "0xYourWalletAddress"}'

Response

json
{
  "apiKey": "aq_xxxxxxxxxxxxxxxxxxxxxxxx",
  "wallet": "0xYourWalletAddress",
  "createdAt": "2026-02-18T12:00:00Z",
  "rateLimit": "100/min"
}
GET/api/auth/usageBearer aq_ key

Check the usage statistics for your API key — total calls, calls today, USDC spent, and remaining balance.

Example Request

curl
curl https://arcquant.xyz/api/auth/usage \
  -H "Authorization: Bearer aq_xxxxxxxxxxxxxxxx"

Response

json
{
  "apiKey": "aq_xxxx...xxxx",
  "wallet": "0xYourWalletAddress",
  "callsTotal": 1482,
  "callsToday": 34,
  "usdcSpentTotal": "7.42",
  "usdcBalance": "12.58",
  "currency": "USDC"
}
POST/api/auth/revokeBearer aq_ key

Permanently revoke your API key. The key will immediately stop working. You can register a new key at any time.

Parameters

apiKeystringrequired

The aq_ key to revoke.

Example Request

curl
curl -X POST https://arcquant.xyz/api/auth/revoke \
  -H "Authorization: Bearer aq_xxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"apiKey": "aq_xxxxxxxxxxxxxxxx"}'

Response

json
{
  "revoked": true,
  "revokedAt": "2026-02-18T12:00:00Z"
}

User Endpoints

Manage your profile, strategies, subscriptions, and usage. These endpoints use wallet-based authentication via the x-wallet-address header instead of an API key.

Pass x-wallet-address: 0xYourWallet as a header for all user endpoints. These do not accept Bearer tokens.

🔒

Security: Wallet identity is verified server-side via API key lookup or x402 payment receipt. The x-wallet-address header alone is not sufficient — it must correspond to a registered wallet with a valid session or active key. No header spoofing is possible.

GET/api/user/profilex-wallet-address

Get your user profile — wallet address, registered name, avatar, and account metadata.

Example Request

curl
curl https://arcquant.xyz/api/user/profile \
  -H "x-wallet-address: 0xYourWalletAddress"

Response

json
{
  "wallet": "0xYourWalletAddress",
  "displayName": "My Agent",
  "createdAt": "2026-01-01T00:00:00Z",
  "strategiesOwned": 3,
  "strategiesForked": 2
}
PUT/api/user/profilex-wallet-address

Update your user profile fields (displayName, bio, avatarUrl).

Parameters

displayNamestring

Your public display name.

biostring

Short bio (max 200 chars).

avatarUrlstring

URL to your avatar image.

Example Request

curl
curl -X PUT https://arcquant.xyz/api/user/profile \
  -H "x-wallet-address: 0xYourWalletAddress" \
  -H "Content-Type: application/json" \
  -d '{"displayName": "Alpha Agent"}'

Response

json
{
  "updated": true,
  "displayName": "Alpha Agent"
}
GET/api/user/strategiesx-wallet-address

List all strategies associated with your wallet — both strategies you own (created) and strategies you have forked from other users.

Example Request

curl
curl https://arcquant.xyz/api/user/strategies \
  -H "x-wallet-address: 0xYourWalletAddress"

Response

json
{
  "owned": [
    {
      "id": "my_strategy_v1",
      "name": "My RSI Bounce",
      "public": true,
      "createdAt": "2026-01-15T00:00:00Z"
    }
  ],
  "forked": [
    {
      "id": "momentum_alpha_v2_fork",
      "forkedFrom": "momentum_alpha_v2",
      "createdAt": "2026-02-01T00:00:00Z"
    }
  ]
}
GET/api/user/subscriptionsx-wallet-address

List all your active signal subscriptions, including strategy details, pricing, and next delivery timestamp.

Example Request

curl
curl https://arcquant.xyz/api/user/subscriptions \
  -H "x-wallet-address: 0xYourWalletAddress"

Response

json
{
  "subscriptions": [
    {
      "subscriptionId": "sub_xK9mNpQ3",
      "strategyId": "momentum_alpha_v2",
      "status": "active",
      "pricePerCall": "0.05",
      "currency": "USDC",
      "callsToday": 12,
      "nextDelivery": "2026-02-18T13:00:00Z"
    }
  ]
}
GET/api/user/usagex-wallet-address

Detailed usage stats and cost breakdown for your wallet — total calls per endpoint, USDC spent, and daily averages.

Example Request

curl
curl https://arcquant.xyz/api/user/usage \
  -H "x-wallet-address: 0xYourWalletAddress"

Response

json
{
  "wallet": "0xYourWalletAddress",
  "period": "30d",
  "totalCalls": 4821,
  "totalUsdcSpent": "24.10",
  "breakdown": {
    "/api/acp/price": { "calls": 2100, "usdcSpent": "2.10" },
    "/api/acp/indicators": { "calls": 1400, "usdcSpent": "2.80" },
    "/api/acp/signals": { "calls": 1200, "usdcSpent": "60.00" },
    "/api/acp/fundamentals": { "calls": 121, "usdcSpent": "0.60" }
  },
  "dailyAvgCalls": 160.7
}

Payment Methods

ArcQuant supports two payment methods. Choose based on your integration needs.

1

API Key

Traditional metered billing. Best for automated agents with predictable usage.

  1. Register your wallet → receive aq_ API key
  2. Pass as Authorization: Bearer aq_xxx
  3. Metered billing — pay per call in USDC
  4. Track usage via /api/auth/usage
✓ Rate limit: 100 calls/min  ·  ✓ Usage tracking  ·  ✓ Subscriptions
2

x402 (Pay-per-call)

Zero-setup payments. No registration, no API key. Pay per call in USDC on Base. No rate limit.

  1. Call any endpoint without auth
  2. Receive HTTP 402 Payment Required
  3. Pay USDC amount on Base (from 402 response)
  4. Retry with payment receipt → get data
✓ No registration  ·  ✓ No rate limit  ·  ✓ Pay only what you use

Code Examples

Both payment methods shown — fetch a real-time price.

Method 1 — API Key (Bearer token)

curl
curl "https://arcquant.xyz/api/acp/price?symbol=AAPL" \
  -H "Authorization: Bearer aq_xxxxxxxxxxxxxxxx"
python
import requests

API_KEY = "aq_xxxxxxxxxxxxxxxx"
BASE_URL = "https://arcquant.xyz"

resp = requests.get(
    f"{BASE_URL}/api/acp/price",
    params={"symbol": "AAPL"},
    headers={"Authorization": f"Bearer {API_KEY}"}
)
data = resp.json()
print(f"AAPL price: ${data['price']}")
javascript
const API_KEY = "aq_xxxxxxxxxxxxxxxx";
const BASE_URL = "https://arcquant.xyz";

const resp = await fetch(`${BASE_URL}/api/acp/price?symbol=AAPL`, {
  headers: { "Authorization": `Bearer ${API_KEY}` }
});
const data = await resp.json();
console.log(`AAPL price: $${data.price}`);

Method 2 — x402 (Pay-per-call)

curl
# Step 1: Call without auth → receive 402
curl -i "https://arcquant.xyz/api/acp/price?symbol=AAPL"
# → HTTP 402 Payment Required
# → X-Payment-Required: {"amount":"0.001","currency":"USDC","network":"base"}

# Step 2: Pay USDC on Base (via your wallet)
# Step 3: Retry with payment receipt
curl "https://arcquant.xyz/api/acp/price?symbol=AAPL" \
  -H "X-Payment-Receipt: 0xtxhash..."
python
import requests

# Using the x402-python client (handles 402 flow automatically)
# pip install x402

from x402.client import X402Client

client = X402Client(private_key="0xYourPrivateKey", network="base")

resp = client.get("https://arcquant.xyz/api/acp/price", params={"symbol": "AAPL"})
data = resp.json()
print(f"AAPL: ${data['price']} (paid {resp.payment_amount} USDC)")
javascript
// Using the x402 JS client (handles 402 flow automatically)
// npm install x402

import { withX402 } from "x402/client";
import { createWalletClient } from "viem";

const client = withX402(fetch, {
  wallet: createWalletClient({ ... }),  // your viem wallet
  network: "base"
});

const resp = await client("https://arcquant.xyz/api/acp/price?symbol=AAPL");
const data = await resp.json();
console.log(`AAPL: $${data.price}`);

Fetching an indicator — Python

python
import requests

API_KEY = "aq_xxxxxxxxxxxxxxxx"
BASE_URL = "https://arcquant.xyz"
headers = {"Authorization": f"Bearer {API_KEY}"}

# Fetch RSI(14) for AAPL
resp = requests.get(
    f"{BASE_URL}/api/acp/indicators",
    params={"symbol": "AAPL", "indicator": "rsi", "period": 14},
    headers=headers
)
rsi = resp.json()
print(f"RSI(14): {rsi['value']} → {rsi['signal']}")

# Fetch MACD
resp = requests.get(
    f"{BASE_URL}/api/acp/indicators",
    params={"symbol": "AAPL", "indicator": "macd"},
    headers=headers
)
macd = resp.json()
print(f"MACD: {macd['value']}")

Rate Limits

Rate limits differ by payment method. When exceeded via API key, the API returns 429 Too Many Requests with a Retry-After header. x402 has no rate limit — you pay per call.

MethodRate Limit
API Key (aq_)100 calls/min
x402 (Pay-per-call)No limit

Rate limit headers are returned on every API-key response: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.

Common Error Codes

401
UnauthorizedMissing or invalid API key.
402
Payment Requiredx402: pay the USDC amount in the response header and retry.
403
ForbiddenYour key does not have access to this endpoint or strategy.
404
Not FoundStrategy, job, or resource does not exist.
429
Rate Limit ExceededAPI key limit hit (100/min). Check Retry-After header.
503
Service UnavailableACP pipeline or data provider temporarily offline.

Ready to integrate?

Register your wallet and get an API key in seconds, or start calling with x402 — no setup needed.