portfolIQ
Documentation

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 optionally upgrade_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:

ScopeAvailable from
ai:readStarter+
fundamentals:readGrowth+
onchain:readGrowth+
history:fullGrowth+
halal:screeningPro
star:readPro

Rate limits by tier

TierMonthly quotaHourly approx
Free10K14 req/h
Starter100K278 req/h
Growth500K1 389 req/h
Pro5M13 889 req/h
EnterpriseCustom SLAContractual

See Rate limits for headers and error codes.

Asset identifiers

Note on {id} parameter: All {id} path parameters refer to coingecko_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.

ParamTypeDefaultDescription
limitint20Items per page (max 100)
offsetint0Items to skip
tierintFilter by tier (1, 2, or 3)
micstringFilter by MIC (e.g. XPAR, XNAS)
asset_classstringcrypto, 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&quote=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
}
ParamTypeDefaultDescription
basestringEURBase currency (only EUR available)
quotestringrequiredQuote currency (e.g. USD, GBP, JPY)
fromdate30 days agoISO 8601 date
todatetodayISO 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, and low fields in candle responses may be null. portfolIQ computes a VWAP consensus price from 5 exchanges — this gives you vwap_usd and volume_usd. Traditional OHLCV (open/high/low) values are not available in the current API version. Use vwap_usd as 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.