The portfolio optimizer that powers this site is available as a REST API. Send a request with your investment constraints, get back a tax-aware optimized ETF portfolio with full risk and sensitivity reporting.
After-tax utility with federal, state, NIIT, and LTCG inputs. Decision-support ideas — not execution or advice.
Optional factor covariance and Black-Litterman views. Cash/FI horizon glide and muni policy are continuous in tax rates.
Natural-language ETF discovery powered by embeddings + pgvector. "low cost broad market index" returns SCHB, VTI, ITOT — ranked by relevance and liquidity.
Parametric VaR/CVaR (calibrated tail family), FoF matched-risk scorecard (AOR-class), and illustrative sleeve stress maps — labeled as model risk, not forecasts.
Two-stage asset-location optimization across taxable, IRA, Roth, and 401k wrappers. Maximizes tax efficiency by placement.
No session state on the math path. Typical optimization completes in a few seconds. Fair-use rate limits per tenant (see docs).
Generate tax-aware ETF portfolios for clients with custom risk profiles and capital levels.
Recompute optimal weights when drift exceeds thresholds. Get proposed orders with tickers and target allocations.
Identify TLH pairs and harvest opportunities with the optimizer's built-in tax-loss analysis.
Semantic search, factor scorecards, eligibility filters, and provider health metrics for your ETF research workflow.
Stress test existing portfolios against historical crises. Compute greeks, concentration, and distribution risk.
Waitlist / invite only for now. We have not published paid plans, dollar pricing, or upgrade tiers — and we will not invent them on this page. Fair-use rate limits protect the service for everyone.
Programmatic access to the ETF portfolio optimizer and research data. Send a portfolio request, get back an optimized allocation with risk metrics, tax treatment, and sensitivity analysis.
https://myetfportfolio.com/v1
X-API-Key header. Each customer receives a unique key (etf_live_<32 hex chars>). Keys can be rotated or revoked at any time.
curl -X POST https://myetfportfolio.com/v1/portfolio/optimize \
-H "X-API-Key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"policy_id": "taxable_low_tax",
"capital": 25000,
"risk_tolerance": "MODERATE",
"creativity": "balanced",
"account_tax_type": "taxable",
"federal": 0.37,
"state": 0.05,
"ltcg": 0.20
}'{
"equity_pct": 0.60,
"bond_pct": 0.40,
"combined_weights": {
"SCHB": 0.27, "SCHF": 0.15, "SCHV": 0.10, "SPLV": 0.08,
"BND": 0.20, "BIV": 0.10, "BSV": 0.05, "VTIP": 0.05
},
"estimated_after_tax_return_pct": 6.85,
"estimated_portfolio_volatility_pct": 12.4,
"estimated_sortino_ratio": 0.82,
"blended_expense_ratio": 0.004,
"bond_weighted_duration": 6.2,
"tax_savings_bps": 47.0,
"efficient_frontier": [
{"equity_pct": 0.10, "volatility": 3.2, "after_tax_return": 3.1},
{"equity_pct": 0.60, "volatility": 12.4, "after_tax_return": 6.85}
]
}curl -X POST https://myetfportfolio.com/v1/portfolio/search \
-H "X-API-Key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"query": "low cost broad market index", "limit": 5}'401 — invalid or missing API key. 429 — rate limit exceeded (Retry-After header included). 422 — invalid request body. 500 — internal error.
Fair-use limits apply per API key (default is modest RPM). When exceeded, the API returns 429 with a Retry-After header. Limits may change as we learn traffic patterns — not sold as paid tiers today.
Risk-free rate and ERP come from live FRED / Damodaran-style feeds when available. ETF metadata (AUM, expense ratios, yields) is refreshed on a research schedule. Tail defaults are gated by a Yahoo return-panel calibration artifact (see /how-we-model).
See the complete endpoint catalog, schemas, quickstart guide, and SDK examples at /api-docs. Methodology detail lives at /how-we-model.
Access is waitlist / invite for now. We have not set commercial pricing or paid tiers — join the waitlist if you want a key when capacity opens.
No. The API returns decision-support portfolio ideas and scorecards. Every AllocatorResponse includes a disclaimer field. You own the decision and the brokerage path.
We'll notify you when API keys are available for self-service signup. No spam, no sharing.