AlphaVision Developer API

Structured market signals for humans and AI agents. Bearer-token REST API with a free SPY surface. Signal-only — no execution. Not financial advice.

Quickstart

Free SPY (no auth)

curl https://api.alphavision.market/v1/signals/SPY

Python with API key

import os
import requests

resp = requests.get(
    "https://api.alphavision.market/v1/signals",
    headers={
        "Authorization": f"Bearer {os.environ['ALPHAVISION_API_KEY']}",
    },
    timeout=10,
)
resp.raise_for_status()

for signal in resp.json():
    print(
        signal["ticker"],
        signal["horizon"],
        signal["signal"],
        round(signal["confidence"] or 0, 3),
    )

Wire up an AI agent

# Tell your agent:

Base URL:        https://api.alphavision.market/v1
Authentication:  Authorization: Bearer <api_key>
OpenAPI spec:    https://api.alphavision.market/v1/openapi.json

# Quick rules of engagement:
# - Free SPY signal works without a key.
# - Other tickers require an active subscription.
# - Per-(key, ticker) cooldown is 10 minutes — no benefit to polling faster.
# - Signal-only. Never execute trades; surface them for human review.

Authentication

Pass a bearer token in the Authorization header:

Authorization: Bearer av_live_<your_key>

Keys are issued from your account page. One active key per member. Rotating revokes the old key immediately.

Rate limits

  • 10-min cooldown per (key, ticker) for single-ticker endpoints.
  • 10-min cooldown per key for the bulk /v1/signals endpoint.
  • Anonymous SPY = 1 request per 10 min per IP. About 6/hour.
  • Metadata endpoints (/me, /tickers, /status): 30/hour per caller.

AlphaVision signals update weekly to quarterly — polling faster than 10 minutes has no benefit.

Endpoints

Base URL: https://api.alphavision.market

Coverage spans five asset classes — stocks, crypto, macro ETFs, sector rotation, and volatility — roughly 80 instruments at weekly, monthly, and quarterly horizons. Volatility and sector signals report UP/DOWN rather than BUY/SELL. Call /v1/tickers to enumerate exactly what your key can read.

GET/v1/signals/{ticker}

Latest published signal for one ticker.

Returns the most recent prediction with confidence, the expected-move corridor (expected_move_pct + low/high), valid_until, next_signal_at, model version, a short track record, and the last few signals for context. Optional ?horizon=weekly|monthly|quarterly. SPY is publicly accessible.

GET/v1/signals

Latest signal for every (model, ticker) the caller can access.

Bulk endpoint — one row per (model, ticker) you can access, across every entitled asset class and horizon. Optional ?horizon=weekly|monthly|quarterly. Anonymous callers see only SPY. The bulk cooldown is independent of the per-ticker cooldown.

GET/v1/tickers

Accessible universe summary.

Returns each (ticker, horizon) the caller can read, with asset_class, model_version, and launch_date. Use this to learn what is queryable before fetching signals.

GET/v1/me

Caller identity, tier, and cooldown rules.

Inspect the resolved tier (Free / Equity / Multi-Asset / Quant), the key prefix, and the current cooldown values. Returns Free + no email for anonymous callers.

GET/v1/status

Data freshness by asset class.

Latest published signal_date for each asset class. Lets agents check liveness before consuming.

Example signal response

{
  "ticker": "SPY",
  "asset_class": "stocks",
  "horizon": "weekly",
  "signal": "BUY",
  "confidence": 0.92,
  "expected_move_pct": 1.18,
  "expected_move_low_pct": -0.94,
  "expected_move_high_pct": 3.30,
  "horizon_days": 5,
  "signal_date": "2026-05-10",
  "valid_until": "2026-05-15",
  "next_signal_at": "2026-05-16T20:00:00-04:00",
  "model_version": "Iris-v2.1",
  "launch_date": "2026-01-04",
  "track_record": { "sample_size": 419, "win_rate": 0.90 },
  "recent_signals": [
    { "signal_date": "2026-05-03", "signal": "SELL", "confidence": 0.96 }
  ],
  "disclaimer": "Informational only. Not financial advice. ..."
}

expected_move_pct is the signed expected move over the horizon (positive = up), with expected_move_low_pct / expected_move_high_pct giving the ~20th–80th percentile corridor and horizon_days the calendar span — the same magnitude estimates behind the on-site FutureChart. These are null when a signal side has no resolved history yet.

Errors

All errors share the same envelope. Use error.code for programmatic branching; message is for humans.

{
  "error": {
    "code": "ticker_not_entitled",
    "message": "'AAPL' requires an active subscription. SPY is free.",
    "docs_url": "https://alphavision.market/developers#ticker_not_entitled"
  }
}
codeHTTPWhen
unauthenticated401Authorization header missing or empty.
invalid_key401Bearer token is malformed, unknown, or revoked.
subscription_inactive403Member's subscription is not active.
ticker_not_entitled403Caller's tier does not cover this ticker or asset class.
ticker_not_found404No active model serves the requested ticker.
rate_limited429Per-(key, ticker) cooldown not yet elapsed. Retry-After header indicates seconds.
invalid_request400Malformed parameters.
server_error500Unexpected error. Should not occur — report to support.

What this API does not do

  • It does not place trades. No execution permissions.
  • It does not provide personalized financial advice.
  • It does not recommend position sizing.
  • It does not include historical backtest data for arbitrary date ranges.
  • It does not include heatmap images or per-feature attribution.

Past performance does not guarantee future results. Use signals as inputs to your own decision process — always with a human in the loop.