CONTRACT
Free bounded portfolio normalize
- Skill
qj-portfolio-normalize- Route
/v1/query/portfolio-normalize- Identity
- ANONYMOUS
- Price
- FREE
QJ//BOUNDED QUERY · OFFLINE
Resolve up to 25 unique long-only tickers and return normalized weights, identity coverage and concentration without creating a stored portfolio.
/v1/query/portfolio-normalizeANONYMOUSFREE
CONTRACT
qj-portfolio-normalize/v1/query/portfolio-normalizeGOVERNED METHOD
data.instruments.searchqj-data-mcpdata.profile.batchqj-data-mcpNo direct database, provider API or private service access. Missing coverage remains missing—it is never turned into a negative fact.
INVOKE
READY
REQUEST
{
"baseCurrency": "USD",
"positions": [
{
"ticker": "AAPL",
"marketValue": 25000,
"currency": "USD"
},
{
"ticker": "NVDA",
"marketValue": 15000,
"currency": "USD"
},
{
"ticker": "TSM",
"marketValue": 10000,
"currency": "USD"
}
]
}
ILLUSTRATIVE RESPONSE SHAPE · NOT LIVE MARKET DATA
{
"schemaVersion": "qj-agents.portfolio-normalize.v2",
"skillId": "qj-portfolio-normalize",
"priceUsd": "0.00",
"status": "complete | partial",
"query": {
"baseCurrency": "USD",
"positions": [
{
"ticker": "AAPL",
"marketValue": 25000,
"currency": "USD"
},
{
"ticker": "NVDA",
"marketValue": 15000,
"currency": "USD"
},
{
"ticker": "TSM",
"marketValue": 10000,
"currency": "USD"
}
]
},
"facts": {
"example": "live fields are returned here"
},
"interpretation": [],
"coverage": [
{
"tool": "data.instruments.search",
"status": "ok"
}
],
"toolsUsed": [
"data.instruments.search",
"data.profile.batch"
],
"asOf": "ISO-8601 source timestamp",
"freshness": {
"status": "fresh | stale | unknown"
},
"lineageRefs": [
"source and materialization references"
]
}