---
title: "Look-through of a portfolio, computed"
method: GET
path: "/lookthrough"
---

# Look-through of a portfolio, computed

`GET /lookthrough`

## Request

- Base URL: `https://tickerinside.com/api/v1`
- URL: `https://tickerinside.com/api/v1/lookthrough`
- Auth: none required

The companies under a portfolio, as the MCP tool get_etf_portfolio_lookthrough gives them. 1 to 6 funds, whose files weigh at most 30 KB, a file of the other layers a third of its size, and hold at most 1,100 lines between them. The portfolios whose x-ray the site writes, listed under pages in /og/answers.json, answer past these limits, in any order of their funds, with the weights written as listed there, top up to 25 and currency as given.

## Query parameters

- `portfolio` string, required
- `top` integer
- `currency` string
- `format` 'json' | 'csv'

## Response `200`

The answer, computed when asked and kept in the edge cache for up to a day. The example is a real answer, shortened.

- Lookthrough
  - `page_url` string, nullable: The web page whose HTML, as the server sends it, prints the answer's figure, so that it reads without JavaScript: for a pair, its written comparison when there is one, else its "Does it diversify me?" answer within that answer's limits; for three funds or more, the x-ray the site wrote of the same funds; for a look-through, the x-ray the site wrote of the portfolio at the same weights (listed under pages in /og/answers.json), or for one fund, its page. Null where no page prints the figure yet: any other overlap of three funds or more or look-through of two funds or more, a pair past those limits, a pair of bond funds.
  - `share_url` string: The address whose HTML reproduces the whole answer on the site: for a pair, its "Does it diversify me?" answer within that answer's limits; for three funds or more and for a portfolio, the x-ray the site wrote of the same funds (listed under pages in /og/answers.json), each weight in percent to 0.01 point and never an amount, in the order of the funds the site wrote it in. Absent where no page prints the answer.
  - `priced` boolean: true when the portfolio gives each fund a weight or an amount; false when every fund counts equally.
  - `portfolio_value` number, nullable: The sum of the weights or amounts of the funds looked through: the funds under not_looked_through and skipped are left out of it, as they are left out of the percentages. Null when none is given.
  - `currency` string, nullable: The currency given, upper case, echoed and never converted; unstated when amounts are given without one. Null when none is given.
  - `prices_as_of` string, nullable: The price date of the figures read from weekly returns. Null when no fund has prices.
  - `funds` integer, nullable: How many funds are looked through.
  - `distinct_companies` integer, nullable: How many distinct holdings they hold between them, counted by ticker: two share classes of one company (GOOGL and GOOG) count as two.
  - `top_10_weight_pct` number, nullable: The weight of the ten largest companies, in percent of what is looked through, summed unrounded and rounded once.
  - `looked_through_pct` number, nullable: The part of the portfolio its covered funds make up that the funds looked through are, in percent, by amount or in equal parts: weight_pct and top_10_weight_pct are of that part, and not_looked_through names the rest.
  - `holdings_as_of` object: Each fund's holdings date, by ticker: the date of its issuer file, or the quarter end its SEC filing describes.
  - `holdings_source` object: Each fund's source, by ticker: issuer file, SEC Form N-PORT, trust's own SEC filing, sponsor's own holdings file, or prospectus, no holdings yet.
  - `companies` object[]: The companies underneath, largest first, top of them (25 when top is left out).
    - `ticker` string, required: The company's key, as the funds' holdings write it.
    - `weight_pct` number, nullable, required: Its weight, in percent of what is looked through.
    - `weight_pct_2dp` number, nullable: Its weight to two decimals, rounded once from the unrounded sum, as the x-ray page prints it.
    - `through` object[], required: Each fund it comes through, the largest first, with its part in percent of what is looked through.
      - `fund` string
      - `weight_pct` number, nullable
    - `value` number, nullable: Its value, in the unit of the weights or amounts given. Null when none is given.
    - `listed_abroad` boolean: true for a foreign company's line whose local code is a US ticker too. Absent otherwise.
  - `same_ticker_two_companies` object: The tickers listed twice: once for the US company of that ticker, once, marked listed_abroad, for the foreign company whose local code it is in another fund, with a note. Absent when there is none.
  - `skipped` object: The tickers not covered, under not_covered, with what is covered (covered_issuers, also_covered and hint). Absent when every ticker is covered.
    - `covered` boolean
    - `not_covered` string[], required
    - `covered_issuers` string[]
    - `also_covered` string
    - `hint` string
  - `not_looked_through` object[]: The funds left out of the percentages and the value, each with why and fund_file.
    - `ticker` string, required
    - `why` string, required
    - `fund_file` string
  - `covered` boolean: true when the funds are covered but the answer has no figures (see comparable or computed).
  - `computed` boolean: false when none of the funds holds shares that can be looked through (see reason).
  - `reason` string: Why nothing is computed, when computed is false.
  - `renamed` object: Each ticker asked that a fund had before it was renamed, with its ticker now, under which the answer reads and names it. Absent when there is none.
  - `source` object: The files the answer is computed from: each fund's page_url, null without a page, api_url, holdings_source and, for a fund from a filing, filing_url; benchmark_url, SPY's file, when a one-year beta is computed; license; and cite_as, the line to print under a figure.
    - `provider` string, required
    - `license` string, required
    - `cite_as` string, required
    - `benchmark_url` string
    - `links` object[], required
      - `ticker` string, required
      - `page_url` string, nullable, required
      - `api_url` string, required
      - `holdings_source` string, required
      - `filing_url` string
      - `sponsor_page` string
  - `note` string, required: Measurement, not investment advice.
  - `license` string, required: The licence the data is published under.
  - `attribution` string, required: How to credit the data: a link to the page of a fund the figure comes from, or to this address, where the medium allows one, the name where it does not.
  - `docs` string, required: The reference of this endpoint.

## Other responses

- `304`: Not modified: the ETag of your copy, sent in If-None-Match, is still current.
- `400`: The query was refused: reason and parameter say what to fix, and limit and asked give the figures of a call past the limits.
- `404`: A fund the answer needs is not covered: not_covered lists the tickers, with the reason in message, and reason has_security_file the stock file of one that has one (security).
- `405`: Another method than GET or HEAD.
- `503`: The answer could not be computed just then: retry after a minute.

---

[API](https://skmtc.dev/tickerinside/apis/tickerinside-api.md) · [All operations](https://skmtc.dev/tickerinside/apis/tickerinside-api/llms.txt) · [OpenAPI document](https://skmtc.dev/tickerinside/apis/tickerinside-api/revisions/4dae3d8c4119?raw)
