Read a persisted deep-research report for a repository

GET https://api.vamotalent.ai/v2/deep-research/reports/repos/{owner}/{name}
Access
Authenticated
search:deep
Cost
Free
Rate limit
120 / minute per account
Quota
None

The full research report a completed repos job produced: contributors weighted toward recent work, a recent-starrer sample, identity facts on every surfaced person the index knows, and starPlacements — where this repo’s star audience places, as bands, so you can tell a project practitioners respect from one that is merely popular. Readable only for a repository this account has already researched, and free to read from then on. A repository the account has not researched is a 404, whether or not anyone else has. Send Accept: application/pdf for the report as a PDF (see GET /v2/deep-research/reports/repos/{owner}/{name}/pdf). For every person who does the work on the repository, reviewers and mergers included, page through GET /v2/deep-research/reports/repos/{owner}/{name}/contributors.

Path parameters

  • owner string required
    min 1 chars, max 39 chars
  • name string required
    min 1 chars, max 100 chars

Responses

The persisted report

  • id string required

    Identifier of this report.

  • repoName string required

    The `owner/name` the research was run on.

  • status string required

    Whether the research finished.

    donefailed
  • failCode string | null

    Why the research failed, when it did. Null on a report that succeeded.

    not_foundrate_limitedprovider_errortimeout
  • meta object | null required

    The repository header as read from GitHub at research time: description, topics, primary language, stars, forks, created/pushed instants, license, archived and fork flags.

  • contributors array of object required

    Who actually builds this, recency-weighted: Push and merged-PR actors over the last year, scored so current maintainers outrank drive-by history. Each row carries the activity counts, first/last seen, whether they own the repo, `depth` (authored vs merged-for-others vs review work in this repository), and — where Vamo knows them — contact-shaped identity facts: name, title, LinkedIn URL, resolved city and country, raw location, company, cracked score 0-100 with its tier, gem score, seniority, years of experience, and `hasEmail` (the address itself is a paid facet).

    • depth object | null

      What this contributor does here, read off the repository’s sampled merged PRs: the PRs they authored and how those were merged, the other people’s PRs they merged, the reviews they gave, and the file types their own PRs touch. Null when they do not appear in the sample; absent on reports produced before contributor depth existed. Absent or null means unknown, never zero.

      • login string required

        The contributor’s GitHub handle.

      • authoredPrsMerged number | null

        AUTHORED work: merged PRs this contributor opened here, over the most recently updated merged PRs of this repository (up to 50) the research sampled. Absent or null means unknown, never zero.

        min 0
      • authoredPrsMergedByOthers number | null

        AUTHORED work: of those, how many another person (not a bot) merged, which is outside validation, over the most recently updated merged PRs of this repository (up to 50) the research sampled. Absent or null means unknown, never zero.

        min 0
      • selfMergedPrs number | null

        AUTHORED work: of those, how many the contributor merged themselves, which shows write access rather than validation, over the most recently updated merged PRs of this repository (up to 50) the research sampled. Absent or null means unknown, never zero.

        min 0
      • mergedForOthers number | null

        MERGED-FOR-OTHERS work: other people’s PRs this contributor merged here, over the most recently updated merged PRs of this repository (up to 50) the research sampled. A gatekeeping fact, never added to the authored counts. Absent or null means unknown, never zero.

        min 0
      • reviewsGiven number | null

        REVIEW work: reviews this contributor left on other people’s PRs here, over the most recently updated merged PRs of this repository (up to 50) the research sampled. A floor, since each PR’s reviews are read up to a cap. Absent or null means unknown, never zero.

        min 0
      • topExtensions array | null

        The extensions this contributor’s own merged PRs here touch most, at most 5, vendored, generated and lockfile paths excluded. Absent or null means unknown, never zero.

        max 5 items
        • extension string required

          The lowercased final extension without the dot (`ts`, `rs`), a known bare file name (`dockerfile`), or `(none)`.

        • filesTouched number required

          Changed files with this extension across the contributor’s own sampled merged PRs here, counted from paths (never line counts).

          min 0
    • person DeepResearchRepoPerson required

      Who this contributor is: GitHub and LinkedIn URLs, location, normalized employer, devRank and whether an email is held. Null only on a row with no login.

      • login string required

        The GitHub handle.

      • githubUrl string required

        The GitHub profile URL.

      • name string | null required

        Their name, when we hold it.

      • linkedinUrl string | null required

        Their LinkedIn profile URL, when we hold it.

      • location object | null required

        Where they are. Null when we hold no location.

        • city string | null required

          City, when resolved.

        • country string | null required

          Country, when resolved.

        • raw string | null required

          The location as they wrote it.

      • employer object | null required

        Their current employer. Null when we hold none, which says nothing about whether they have one.

        • name string required

          The company in one display form ("Cloudflare" for "Cloudflare, Inc." and "@cloudflare").

        • key string required

          The same company as a lowercase key, equal for every spelling of it, to group people by.

      • devRank number | null required

        devRank, 0 to 100. Null when they are not scored.

      • hasEmail boolean required

        Whether we hold an email address for them. The address is a paid facet.

  • earlyStarrers array | null

    The earliest recorded starrers — who was there before the crowd, oldest first, hydrated with the same identity facts. Dataset coverage starts 2023, so for older repos this is "earliest recorded", not "earliest ever". Absent on reports produced before it was recorded.

  • starrers array of object required

    A sample of the repo’s most recent starrers, hydrated with the same identity facts, so the CURRENT audience is readable person by person next to the `starPlacements` bands that summarise it.

  • forkers array | null

    The repo’s most recent forkers, dated and hydrated with the same identity facts as `starrers`. Forks are the audience surface GitHub left open when it closed repo-side stargazer enumeration in 2026, so on a repo whose recent stars can no longer be read this list IS the current audience. Absent on reports produced before forkers were captured.

  • starPlacements object | null

    How this repo’s star audience places against the wider field of scored repositories, as formatted bands. This is the read for "is this project respected by people who build, or just popular": `audienceWeight` for the authority behind the audience, `audienceShare` for how much of it are builders rather than passers-by, and `authenticity` for whether the stars arrived the way real discovery arrives. Null when the repo is not scored, and absent on reports produced before placements were recorded — in both cases absence of a measurement, never a bad result.

    • audienceWeight object | null required

      Where the authority-weighted weight of this repo’s audience places: stars counted in proportion to what the people giving them build and maintain themselves. A high band means practitioners with real work behind them are watching this.

      • placement string required

        Where this repository placed, already formatted for reading. Inside the top ten percent this carries real resolution ("Top 7.9%"); below it, a band ("Top 25%", "Top 50%", "Bottom half").

      • pct number required

        The quantile it resolved to, 0..1. Ordering and debugging only — never rendered.

    • audienceShare object | null required

      Where the builder SHARE of the recent audience places: how much of the recent attention comes from people who ship, rather than from passers-by. The hidden-gem read — a small project can place at the top here.

      • placement string required

        Where this repository placed, already formatted for reading. Inside the top ten percent this carries real resolution ("Top 7.9%"); below it, a band ("Top 25%", "Top 50%", "Bottom half").

      • pct number required

        The quantile it resolved to, 0..1. Ordering and debugging only — never rendered.

    • authenticity string | null required

      A verdict on how the stars arrived: `organic` when the pattern looks like ordinary discovery, `suspect` when attention landed in bursts the way purchased or coordinated stars do. Null when it was not measured.

      organicsuspect
    • epoch string required

      The measurement day these placements were resolved against, as YYYY-MM-DD.

  • structuralMeasures object | null

    Work-distribution, succession, and momentum measurements over the FULL contributor set (not just the recency-weighted top slice above), anchored per-repo at that repo’s own last contribution: how many people carry half/80% of the work, the top-1/3/5 concentration shares, a Gini coefficient, quarter-over-quarter builder and activity momentum ratios, and contributor retention. Every flat field above measures HOW CONCENTRATED the building is and is blind to who does it; the nested `contributorQuality` block adds that axis, weighting the same work by each contributor’s cracked score (`eliteWorkMass`/`eliteWorkShare`, with `scoredContributors`/`scoredWorkShare` as their own coverage denominators, since an unscored contributor is outside the scored population rather than a weak one). It is nested because its POPULATION is different: the ranked top slice the `contributors` array carries, never the full set the flat fields aggregate, so the two are never averaged or compared. It rides here whenever contributors surfaced, including when the full-set measures did not. Null on reports computed before this measure existed.

    • contributorDepth object | null

      Contributor depth for this repository: `status`, the merged-PR sample window, and `unlisted` (mergers and reviewers the ranked `contributors` list does not carry). Absent on reports produced before contributor depth existed.

      • status string required

        `ok` when the merged-PR sample was read; `unavailable` when it could not be, which says nothing about the repository.

        okunavailable
      • source string | null

        Which lane produced the depth. Absent when unavailable.

      • sampledPrs number | null

        Merged PRs the sample read. Absent or null means unknown, never zero.

        min 0
      • windowFrom string | null

        The earliest merge in the sample, as an ISO 8601 instant. Absent or null means unknown, never zero.

      • windowTo string | null

        The latest merge in the sample, as an ISO 8601 instant. Absent or null means unknown, never zero.

      • unlisted array | null

        Depth for people absent from `contributors` (mergers and reviewers who rarely push), strongest first, at most 100. Absent or null means unknown, never zero.

        max 100 items
        • login string required

          The contributor’s GitHub handle.

        • authoredPrsMerged number | null

          AUTHORED work: merged PRs this contributor opened here, over the most recently updated merged PRs of this repository (up to 50) the research sampled. Absent or null means unknown, never zero.

          min 0
        • authoredPrsMergedByOthers number | null

          AUTHORED work: of those, how many another person (not a bot) merged, which is outside validation, over the most recently updated merged PRs of this repository (up to 50) the research sampled. Absent or null means unknown, never zero.

          min 0
        • selfMergedPrs number | null

          AUTHORED work: of those, how many the contributor merged themselves, which shows write access rather than validation, over the most recently updated merged PRs of this repository (up to 50) the research sampled. Absent or null means unknown, never zero.

          min 0
        • mergedForOthers number | null

          MERGED-FOR-OTHERS work: other people’s PRs this contributor merged here, over the most recently updated merged PRs of this repository (up to 50) the research sampled. A gatekeeping fact, never added to the authored counts. Absent or null means unknown, never zero.

          min 0
        • reviewsGiven number | null

          REVIEW work: reviews this contributor left on other people’s PRs here, over the most recently updated merged PRs of this repository (up to 50) the research sampled. A floor, since each PR’s reviews are read up to a cap. Absent or null means unknown, never zero.

          min 0
        • topExtensions array | null

          The extensions this contributor’s own merged PRs here touch most, at most 5, vendored, generated and lockfile paths excluded. Absent or null means unknown, never zero.

          max 5 items
          • extension string required

            The lowercased final extension without the dot (`ts`, `rs`), a known bare file name (`dockerfile`), or `(none)`.

          • filesTouched number required

            Changed files with this extension across the contributor’s own sampled merged PRs here, counted from paths (never line counts).

            min 0
  • contributorGrowth object | null

    Distinct ACTIVE contributors per calendar month over the trailing year: `{ status: "ok", measure, source, months: [{ month, contributors }] }`. An activity trend, never a cumulative "contributors ever" total — it goes DOWN when a repo gets quieter, and `measure` names what the numbers are so a reader cannot relabel a decline as growth. `status: "ok"` with an empty `months` is a MEASUREMENT (the query ran, the repo had no in-window activity); `{ status: "query_failed" }` is not a measurement at all and is worth re-asking. Null means only that the report predates this measure, and a report written between it landing and the status wrapper carries the bare `{ measure, source, months }` object instead.

  • audienceGrowth object | null

    The `forkers` and `starrers` lists re-aggregated into a month-by-month audience curve: ascending contiguous `months` of `{ month, forkers, scoredForkers, forkerEliteMass, starrers, scoredStarrers, starrerEliteMass }`, plus the `forkersTotal`/`forkersScored`/`starrersTotal`/`starrersScored` denominators behind them. Raw counts are the primary signal; the elite-mass fields are a partial-coverage overlay that weights each month’s audience by what those people build themselves, which is why each carries its own scored denominator rather than being averaged in. A month is `null` when NO source observed it (the frozen mirror and the live graph cover disjoint eras) and `0` only when a source did cover it and saw nothing, so a gap in the curve is never a quiet month. Null overall when neither list carried dated rows, and absent on reports produced before this was computed.

  • commitActivity object | null

    Whether the CODE moves, where the audience curves say only who is watching: GitHub’s trailing-52-week commit rollup bucketed into `{ month, commits, weeks }` per calendar month. A verdict object rather than a bare trend, because the three ways there is no trend are three different facts. `{ status: "ok", months }` is measured, and a year of `commits: 0` there is a real finding about the repo. `{ status: "not_computed" }` means GitHub had not built the series when we asked (its stats endpoints answer a cold repo with an empty 202, and the ask itself warms it), so the next dive of the same repo likely gets it — never read it as a zero-commit year. `{ status: "unavailable" }` means the ask failed outright and says nothing about the repo. `weeks` is each month’s coverage denominator: a 52-week window opens and closes mid-month, so the first and last buckets hold fewer weeks and would otherwise read as a slump. Null when the report predates this measure; a report written between it landing and the verdict shape carries a bare ARRAY of months, which reads as `ok`.

  • subjects array | null

    WHAT-domain tags (fintech, mobile, devtools) read off this repo’s topics + description + manifest dependencies — never the README body, which has no cross-repo repetition to corroborate a loose match against for a single repo. Null on reports produced before this field existed.

  • technologies array | null

    HOW-it-builds tags (react, rust, kafka) read the same way as `subjects`, same vocabulary as a developer report’s `technologies`, computed alongside `subjects` but never blended in. Null on reports produced before this field existed.

  • anchor string required

    The dataset instant the contributor and starrer windows end at.

  • contributionAnchor string | null

    The dataset instant the contribution (push/merged-PR) window ends at — later than `anchor`, since contribution data lags star data. Empty on reports computed before this measure existed.

  • contributorsFound number required

    How many contributors the report carries, strongest first. Every builder in the window on current reports (up to 10,000); 300 or 30 on older ones.

  • contributorsWindowTotal number default: 0

    TOTAL distinct human contributors in the window. `contributors` is the top slice; this says what the cap hid. 0 on reports produced before it was recorded.

  • starrersSampled number required

    How many recent starrers were sampled.

  • starrersWindowTotal number default: 0

    TOTAL distinct starrers in the sample window. 0 on reports produced before it was recorded.

  • forkersSampled number default: 0

    How many recent forkers were sampled and hydrated into `forkers`. 0 on reports produced before forkers were captured.

  • forkersWindowTotal number default: 0

    TOTAL forks GitHub reports for the repo (its own `forkCount`), not just the sampled slice — the denominator that says whether `forkers` is the whole audience or the most recent face of it. 0 on reports produced before it was recorded.

  • identitiesResolved number required

    How many surfaced people resolved to a known identity in Vamo’s index — the denominator behind the hydrated facts.

  • startedAt string required

    When the research started, as an ISO 8601 instant.

  • finishedAt string required

    When the research finished, as an ISO 8601 instant.

  • reviewers array of object required

    The people who merge and review other people’s pull requests but rarely push, so they do not rank among `contributors`, each with the same `person` block. Empty when the report predates contributor depth.

    • rank integer required

      Position in the whole list of people, after every builder.

    • login string required

      The GitHub handle.

    • depth object | null

      What they merge and review here, from the sampled merged pull requests.

      • login string required

        The contributor’s GitHub handle.

      • authoredPrsMerged number | null

        AUTHORED work: merged PRs this contributor opened here, over the most recently updated merged PRs of this repository (up to 50) the research sampled. Absent or null means unknown, never zero.

        min 0
      • authoredPrsMergedByOthers number | null

        AUTHORED work: of those, how many another person (not a bot) merged, which is outside validation, over the most recently updated merged PRs of this repository (up to 50) the research sampled. Absent or null means unknown, never zero.

        min 0
      • selfMergedPrs number | null

        AUTHORED work: of those, how many the contributor merged themselves, which shows write access rather than validation, over the most recently updated merged PRs of this repository (up to 50) the research sampled. Absent or null means unknown, never zero.

        min 0
      • mergedForOthers number | null

        MERGED-FOR-OTHERS work: other people’s PRs this contributor merged here, over the most recently updated merged PRs of this repository (up to 50) the research sampled. A gatekeeping fact, never added to the authored counts. Absent or null means unknown, never zero.

        min 0
      • reviewsGiven number | null

        REVIEW work: reviews this contributor left on other people’s PRs here, over the most recently updated merged PRs of this repository (up to 50) the research sampled. A floor, since each PR’s reviews are read up to a cap. Absent or null means unknown, never zero.

        min 0
      • topExtensions array | null

        The extensions this contributor’s own merged PRs here touch most, at most 5, vendored, generated and lockfile paths excluded. Absent or null means unknown, never zero.

        max 5 items
        • extension string required

          The lowercased final extension without the dot (`ts`, `rs`), a known bare file name (`dockerfile`), or `(none)`.

        • filesTouched number required

          Changed files with this extension across the contributor’s own sampled merged PRs here, counted from paths (never line counts).

          min 0
    • person object required
      • login string required

        The GitHub handle.

      • githubUrl string required

        The GitHub profile URL.

      • name string | null required

        Their name, when we hold it.

      • linkedinUrl string | null required

        Their LinkedIn profile URL, when we hold it.

      • location object | null required

        Where they are. Null when we hold no location.

        • city string | null required

          City, when resolved.

        • country string | null required

          Country, when resolved.

        • raw string | null required

          The location as they wrote it.

      • employer object | null required

        Their current employer. Null when we hold none, which says nothing about whether they have one.

        • name string required

          The company in one display form ("Cloudflare" for "Cloudflare, Inc." and "@cloudflare").

        • key string required

          The same company as a lowercase key, equal for every spelling of it, to group people by.

      • devRank number | null required

        devRank, 0 to 100. Null when they are not scored.

      • hasEmail boolean required

        Whether we hold an email address for them. The address is a paid facet.