VectorFin in Python
Query VectorFin embeddings and signals from a Python notebook via the REST API. Works on every plan, including Free, with no SDK and no infrastructure.
Prerequisites
Connection Guide
Install requests and set your API key
No SDK required. The REST API uses a single header (X-API-Key). Free-tier keys are issued instantly when you sign up at app.vectorfinancials.com. Everything below runs in a plain Jupyter / Colab notebook cell.
pip install requests pandas numpy
# Set the key from your dashboard. Free tier covers the top 100 tickers
# with a 90-day signal lookback and 250 calls/month.
import os
VF_API_KEY = os.environ["VECTORFIN_API_KEY"]List available tickers
Fetch the tickers your plan can access. In beta the universe is the S&P 500 (~500 tickers); Free returns the top 100. The 5,000+ ticker universe is the Starter (and above) plan limit at GA.
import requests
resp = requests.get(
"https://api.vectorfinancials.com/v1/tickers",
headers={"X-API-Key": VF_API_KEY},
timeout=10,
)
resp.raise_for_status()
data = resp.json()
print(f"{data['total']} tickers available")
print(data["tickers"][:10])Fetch transcript embeddings
Pull 768-dim embeddings (Google gemini-embedding-2-preview) for a ticker and fiscal period. fiscal_period is required (it scopes the partition scan); limit caps at 100 per call.
import pandas as pd, numpy as np
resp = requests.get(
"https://api.vectorfinancials.com/v1/embeddings/AAPL",
headers={"X-API-Key": VF_API_KEY},
params={"fiscal_period": "2024-Q3", "limit": 50},
timeout=10,
)
resp.raise_for_status()
records = resp.json() # list[EmbeddingRecord]
df = pd.DataFrame(records)
E = np.stack(df["embedding"].values) # (N, 768)
print(f"Loaded {E.shape[0]} chunks for AAPL 2024-Q3")Fetch quant signals
Pull the signal feed for a ticker. Free tier is capped at a 90-day lookback and a 30-row cap; paid tiers go back to the start of data history.
resp = requests.get(
"https://api.vectorfinancials.com/v1/signals/NVDA",
headers={"X-API-Key": VF_API_KEY},
params={"date_from": "2024-01-01", "limit": 365},
timeout=10,
)
resp.raise_for_status()
signals = pd.DataFrame(resp.json())
signals["date"] = pd.to_datetime(signals["date"])
signals = signals.set_index("date").sort_index()
print(signals[["score", "components"]].tail())Local cosine search over fetched embeddings
There is no server-side vector search on the REST API, so fetch the chunks for the tickers you care about and run similarity locally. For corpus-wide search, upgrade to Pro and query the shared Iceberg tables directly (see the BigQuery and Snowflake guides, or the shared bucket).
# Fetch chunks for a basket and run cosine locally
chunks = []
for ticker in ["AAPL", "MSFT", "NVDA"]:
r = requests.get(
f"https://api.vectorfinancials.com/v1/embeddings/{ticker}",
headers={"X-API-Key": VF_API_KEY},
params={"fiscal_period": "2024-Q3", "limit": 100},
)
r.raise_for_status()
chunks.extend(r.json())
E = np.stack([c["embedding"] for c in chunks])
query = np.random.randn(768) # replace with your real query embedding
query /= np.linalg.norm(query)
sims = E @ query / np.linalg.norm(E, axis=1)
top5 = np.argsort(sims)[::-1][:5]
for i in top5:
c = chunks[i]
print(f"{c['ticker']} {c['fiscal_period']} chunk {c['chunk_idx']} sim={sims[i]:.3f}")Available Tables
VectorFin data tables: bitemporal (effective_ts + knowledge_ts), append-only, weekly updates.
GET /v1/tickersList tickers available on your plan▼
requests.get("https://api.vectorfinancials.com/v1/tickers", headers={"X-API-Key": key})GET /v1/embeddings/{ticker}Transcript chunk embeddings (768-dim) for a ticker + fiscal_period (required)▼
requests.get("https://api.vectorfinancials.com/v1/embeddings/AAPL", params={"fiscal_period": "2024-Q3"}, headers={"X-API-Key": key})GET /v1/signals/{ticker}Quant signals for a ticker (date_from, date_to, limit)▼
requests.get("https://api.vectorfinancials.com/v1/signals/NVDA", params={"date_from": "2024-01-01", "limit": 365}, headers={"X-API-Key": key})Related Integrations
Start querying in 2 minutes
Sign up for VectorFin and get immediate API access.