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

GET/v1/signals/{ticker}

Latest published signal for one ticker.

Returns the most recent prediction along with confidence, valid_until, next_signal_at, model version, a short track record, and the last few signals for context. SPY is publicly accessible.

GET/v1/signals

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

Bulk endpoint. 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.61,
  "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": 410, "win_rate": 0.91 },
  "recent_signals": [
    { "signal_date": "2026-05-03", "signal": "SELL", "confidence": 0.96 }
  ],
  "disclaimer": "Informational only. Not financial advice. ..."
}

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/errors#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.