API Reference
Complete reference for all portfolIQ API endpoints.
API Reference
All endpoints are prefixed with /v1. Authentication is required for all endpoints — see Authentication.
Conventions
- Base URL:
https://api.portfoliq.io - Auth header:
X-API-Key: YOUR_API_KEY - Response format: JSON
- Errors: structured JSON with
error,message, and optionallyupgrade_url
Authentication
Pass your API key as a header on every request:
X-API-Key: pk_live_your_api_key_here
Keys are available from your dashboard. The Free tier key grants access to /v1/assets, /v1/forex, and /v1/discover (50/day).
Scopes
Some endpoints require specific scopes depending on your tier:
| Scope | Available from |
|---|---|
ai:read | Starter+ |
fundamentals:read | Growth+ |
onchain:read | Growth+ |
history:full | Growth+ |
halal:screening | Pro |
star:read | Pro |
Rate limits by tier
| Tier | Monthly quota | Hourly approx |
|---|---|---|
| Free | 10K | 14 req/h |
| Starter | 100K | 278 req/h |
| Growth | 500K | 1 389 req/h |
| Pro | 5M | 13 889 req/h |
| Enterprise | Custom SLA | Contractual |
See Rate limits for headers and error codes.
Asset identifiers
Note on
{id}parameter: All{id}path parameters refer tocoingecko_id(e.g.,bitcoin,ethereum). Passing a ticker symbol (BTC) will return 404 — use/v1/discover/{ticker}to resolve a ticker to its canonical ID.
GET /v1/assets
List assets with optional filtering and pagination.
| Param | Type | Default | Description |
|---|---|---|---|
limit | int | 20 | Items per page (max 100) |
offset | int | 0 | Items to skip |
tier | int | — | Filter by tier (1, 2, or 3) |
mic | string | — | Filter by MIC (e.g. XPAR, XNAS) |
asset_class | string | — | crypto, stock, etf, commodity |
GET /v1/discover/{ticker}
Auto-resolve any ticker worldwide via OpenFIGI in under 2s.
GET /v1/discover/TSLA
X-API-Key: YOUR_API_KEY
{
"ticker": "TSLA",
"figi": "BBG000N9MNX3",
"name": "Tesla Inc",
"asset_class": "stock",
"isin": "US88160R1014",
"mic": "XNAS",
"currency": "USD",
"analyses_available": ["en", "fr"]
}
Free tier: 50 lookups/day. No additional scope required.
GET /v1/forex
ECB SDW forex rates — 30 EUR-base pairs + computed inverses.
GET /v1/forex?base=EUR"e=USD&from=2026-01-01&to=2026-01-31
X-API-Key: YOUR_API_KEY
{
"base": "EUR",
"quote": "USD",
"source": "ECB_SDW",
"data": [
{ "date": "2026-01-02", "rate": 1.0892 },
{ "date": "2026-01-03", "rate": 1.0901 }
],
"rows": 22
}
| Param | Type | Default | Description |
|---|---|---|---|
base | string | EUR | Base currency (only EUR available) |
quote | string | required | Quote currency (e.g. USD, GBP, JPY) |
from | date | 30 days ago | ISO 8601 date |
to | date | today | ISO 8601 date |
Available on Free tier. 36k+ historical rows from ECB open data.
GET /v1/etf/{ticker}
ETF metadata, NAV daily, and holdings breakdown.
GET /v1/etf/AIEQ
X-API-Key: YOUR_API_KEY
{
"ticker": "AIEQ",
"name": "AI Powered Equity ETF",
"nav": 28.54,
"nav_date": "2026-05-24",
"holdings_count": 117,
"top_holdings": [
{ "ticker": "NVDA", "weight": 0.082, "is_halal": true },
{ "ticker": "MSFT", "weight": 0.071, "is_halal": true }
],
"source": "SEC_NPORT"
}
Requires Growth+ scope. SEC N-Port for US ETFs, issuer scraping for UCITS EU ETFs.
OHLCV endpoint note
About OHLCV fields: The
open,high, andlowfields in candle responses may benull. portfolIQ computes a VWAP consensus price from 5 exchanges — this gives youvwap_usdandvolume_usd. Traditional OHLCV (open/high/low) values are not available in the current API version. Usevwap_usdas the representative price for each time window.This is expected behavior, not a data quality issue.
Not financial advice. Not a fatwa. Methodology disclosed.
View the interactive API reference below (powered by Scalar) or navigate directly to /docs/api-reference/interactive.