Documentation navigation
GET /v1/deep-research/reports/developers/{login}

Read a persisted deep-research report for a developer

Access
Authenticated
search:deep
Cost
Free
Rate limit
120 / minute per account
Quota
None

The full research report a completed job produced: pctSignals maps each graded signal to its percentile, signalsExcluded names every signal that could not be graded and why, plus the composites, the contribution history, and the repositories sampled. Readable only for a developer this account has already researched, and free to read from then on — the job that produced it already paid, the report is persisted, and everyone on the account shares it. A developer the account has not researched is a 404, whether or not anyone else has. signalPopulations says, per graded signal, WHICH substrate its percentile was ranked against: a dive_population ranking is a coarser claim than a benchmark_grid one, and an absolute signal was never ranked against anybody. None of these are peer groups matched on language, seniority or region — there is one global measured population.

Path parameters

  • login string required
    min 1 chars, max 39 chars

Responses

  • 200 The persisted report
    • id string required

      Identifier of this report.

    • githubLogin string required

      The GitHub handle the research was run on.

    • status string required

      Whether the research finished. Only a `done` report carries a complete set of signals.

      runningdonefailed
    • failCode string | null

      Why the research failed, when it did. `engine_error` is our fault and is never billed. Null or absent on a report that succeeded.

      not_foundrate_limitedprovider_errortimeoutengine_error
    • rawSignals object required

      Signal name to the VALUE actually measured for this developer. Present whether or not the signal could be ranked, so this is the number to show when `pctSignals` has no entry for it. MEASURED is not the same claim as RANKED.

    • pctSignals object required

      Signal name to its percentile, 0..1, for the signals that could be ranked. A report MIXES ranking substrates, so one description never covers all of them: `signalPopulations[signal]` states which substrate each percentile here was ranked against. No percentile in this report is against a peer group matched on language, seniority, region or discipline — no such peer group exists; there is one measured population. A signal missing here is explained in `signalsExcluded`.

    • composites object required

      Percentile-derived composite scores. EMPTY (`{}`) whenever the ranking population is below its floor, which is the normal case early on: the keys are absent together rather than zeroed, so absence means "not ranked yet", never "scored zero". Read `rawSignals` and say "measured, not yet ranked" instead of showing a bare blank.

      • gemScore number

        The gem score: how far this developer’s demonstrated quality runs ahead of their visible reputation. Built from the percentiles in `pctSignals`, so it inherits their populations (`signalPopulations`) — mostly the developers Vamo has previously deep-researched, which grows, which makes this number not comparable across reports taken at different times.

      • quality number

        The quality composite, built from the `qualityTerms` below.

      • visibility number

        The visibility composite, built from the `visibilityTerms` below.

      • reachable number

        The reachability composite.

      • productionMaturity number

        The production-maturity cluster: how much this developer builds and RUNS production software — CI, instrumentation, releases, maintenance, tests — averaged across whichever of those signals they have. A cluster score, so no single thin signal drives it. Built from `pctSignals`, so it inherits their populations. Not a factor in `gemScore`.

      • qualityTerms array of object

        The individual signals that fed `quality`, with their weights, so the composite can be decomposed rather than trusted blind.

        • signal string required

          The signal that contributed.

        • weight number required

          Its weight in the composite.

        • pct number required

          The developer’s percentile on that signal, 0 to 1. `signalPopulations[signal]` says which substrate it was ranked against, and a report mixes substrates, so read it before quoting this.

      • visibilityTerms array of object

        The individual signals that fed `visibility`, with their weights.

        • signal string required

          The signal that contributed.

        • weight number required

          Its weight in the composite.

        • pct number required

          The developer’s percentile on that signal, 0 to 1. `signalPopulations[signal]` says which substrate it was ranked against, and a report mixes substrates, so read it before quoting this.

      • productionMaturityTerms array of object

        The individual signals that fed `productionMaturity`, with their weights.

        • signal string required

          The signal that contributed.

        • weight number required

          Its weight in the composite.

        • pct number required

          The developer’s percentile on that signal, 0 to 1. `signalPopulations[signal]` says which substrate it was ranked against, and a report mixes substrates, so read it before quoting this.

    • evidence array of string required

      Human-readable evidence lines the research produced.

    • profile object | null required

      The GitHub profile as read during the research. Open to extra keys: new fields arrive without a release here. Null when the profile could not be read.

      • login string required

        The GitHub handle, as read live during the research.

      • createdAt string required

        When the GitHub account was created, as an ISO 8601 instant.

      • followers number required

        Follower count at research time.

      • following number required

        How many accounts they follow, at research time.

      • organizations array of string required

        Public GitHub organisations they belong to. Private memberships are invisible, so an empty list is not evidence of none.

      • socialAccounts array of object required

        Social links the developer has published on their GitHub profile.

        • provider string required

          Which platform the link points at.

        • url string required

          The linked profile URL.

    • contributions object | null required

      Contribution activity, PUBLIC only: work in private repositories is invisible to GitHub’s counters, so low numbers are not evidence of low output. Null when it could not be read.

      • totalCommitContributions number required

        Commits GitHub counted over the research window.

      • totalPullRequestContributions number required

        Pull requests opened over the window.

      • totalPullRequestReviewContributions number required

        Pull request reviews over the window.

      • calendar array of object required

        Daily contribution counts across the window.

        • date string required

          The calendar day, `YYYY-MM-DD`.

        • count number required

          Contributions GitHub counted that day.

        • weekday number required

          Day of the week, 0 for Sunday through 6 for Saturday. Present so weekday and weekend activity can be told apart without re-deriving it.

    • repos array of object required

      The repositories actually sampled by this research. A SAMPLE, not a complete list: `commitStats` says how much was sampled and how much was skipped.

      • name string required

        The repository name, without the owner.

      • owner string required

        The owning account’s login, which may be a person or an organisation.

      • isFork boolean required

        True when the repository is a fork. Forks are kept in the sample rather than dropped, so filter on this if you only want original work.

      • primaryLanguage string | null required

        GitHub’s primary language. Null when it reports none.

      • languages array of object required

        Language breakdown by bytes of code, which is a proxy for effort and not a measure of skill.

        • name string required

          The language.

        • size number required

          Bytes of code GitHub attributes to it in this repository.

      • topics array of string required

        GitHub topics the owner tagged the repository with.

      • stars number required

        Stargazer count at research time.

      • forks number required

        Fork count at research time.

      • pushedAt string required

        When the repository was last pushed to, as an ISO 8601 instant.

      • latestReleaseAt string | null required

        When it last cut a release, as an ISO 8601 instant. Null when it has never released.

      • contribution object | null

        What the developer did in this repository, AUTHORED work kept apart from MERGED-FOR-OTHERS work. Absent on reports produced before contribution depth existed, and absent means unknown, never zero.

        • relation string | null

          How the developer relates to this repository, first match wins: `owner` (their own repository), `maintainer` (merged other people’s PRs here, or merged two or more of their own PRs in a repository they do not own, which shows write access), `core` (ten or more of their authored PRs merged), `reviewer` (three or more reviews given with at most two authored PRs merged), `drive-by` (one or two authored PRs merged). Reviews alone never make someone a maintainer. Absent or null means unknown, never zero.

          ownermaintainercorereviewerdrive-by
        • commitsAuthored number | null

          AUTHORED work: commits the developer authored in this repository that GitHub credits to them (default branch, linked email), across the years the research read. Absent or null means unknown, never zero.

          min 0
        • authoredPrs number | null

          AUTHORED work: pull requests the developer opened in this repository, over about the trailing two years of public activity. Absent or null means unknown, never zero.

          min 0
        • authoredPrsMerged number | null

          AUTHORED work: of the PRs they opened here, how many were merged by anyone, including themselves, over about the trailing two years of public activity. Estimated from a sample when they opened more than the dive reads one by one. Absent or null means unknown, never zero.

          min 0
        • authoredPrsMergedByOthers number | null

          AUTHORED work: of their merged PRs here, how many someone other than the developer (and not a bot) merged, which is outside validation of the work, over about the trailing two years of public activity. Absent or null means unknown, never zero.

          min 0
        • selfMergedPrs number | null

          AUTHORED work: of their merged PRs here, how many the developer merged themselves, which shows write access rather than outside validation, over about the trailing two years of public activity. Absent or null means unknown, never zero.

          min 0
        • mergedForOthers number | null

          MERGED-FOR-OTHERS work: other people’s PRs this developer merged here, read from the latest 50 merged PRs of each repository they own or hold write access to. A gatekeeping fact, never added to the authored counts. Absent or null means unknown, never zero.

          min 0
        • reviewsGiven number | null

          REVIEW work: reviews the developer left on other people’s PRs here, over about the trailing two years of public activity. Neither authored nor merged work. Absent or null means unknown, never zero.

          min 0
        • filesTouchedMedian number | null

          AUTHORED work: the median number of files changed per merged PR the developer authored here, over about the trailing two years of public activity. Absent or null means unknown, never zero.

          min 0
        • firstMergedAt string | null

          AUTHORED work: when the earliest PR the developer authored here was merged, as an ISO 8601 instant. Absent or null means unknown, never zero.

        • lastMergedAt string | null

          AUTHORED work: when the most recent PR the developer authored here was merged, as an ISO 8601 instant. Absent or null means unknown, never zero.

        • prTitles array | null

          AUTHORED work: titles of PRs the developer authored here, newest first, at most 8. Absent or null means unknown, never zero.

          max 8 items
    • subjects array | null

      WHAT-domain tags (fintech, mobile, devtools) read off the sampled repositories — owned AND contributed, manifests included — strength order. Null on reports produced before this field existed.

    • technologies array | null

      HOW-they-build tags (react, rust, kafka) read the same way as `subjects`, same vocabulary, computed alongside it but never blended in. Null on reports produced before this field existed.

    • commitStats object required

      How much of the developer’s work this research actually looked at. Read it before treating the signals as comprehensive.

      • sampleN number required

        How many commits were examined.

      • reposSampled number required

        How many repositories were examined.

      • reposSkipped number required

        How many were skipped, typically for size. A high number here means the signals rest on a narrower base than the developer’s full output.

    • familiesPresent array of string required

      Which signal families had enough data to contribute to this report.

    • signalsGraded number required

      How many signals were successfully percentile-ranked. The rest are explained in `signalsExcluded`.

    • signalsExcluded object required

      Signal name to why it was not ranked, and the four reasons say genuinely different things. `insufficient_cohort` = the signal WAS measured (its value is in `rawSignals`) but the ranking population is too small to place it; do not render this as "no evidence". `insufficient_evidence` = this developer did not produce enough activity to measure it. `no_family_data` = its whole signal family was unavailable. `not_percentile` = the signal is not the kind of thing that gets ranked.

    • signalPopulations object | null

      Per graded signal, WHICH substrate its percentile was ranked against. THE field to read before quoting any percentile: a report mixes substrates, so one sentence never covers all of them, and a `dive_population` percentile is a coarser claim than a `benchmark_grid` one. Absent on reports produced before vamo-data started recording it.

    • pointsSpent number required

      GitHub API quota consumed by the whole round this report was part of, not by this developer alone. Divide by `roundLogins` for an average, and say that you did.

    • requestCount number required

      Upstream requests made by the whole round, shared by every developer in it. Divide by `roundLogins` for an average.

    • roundLogins number required

      How many developers shared the round. The divisor for `pointsSpent` and `requestCount`.

    • startedAt string required

      When the research started, as an ISO 8601 instant.

    • finishedAt string required

      When the research finished, as an ISO 8601 instant.

    • contributionDepth object | null

      Contribution depth beyond owned repositories: AUTHORED work and MERGED-FOR-OTHERS work, counted separately and never summed, from public work only. Absent on reports produced before this field existed, and absent means unknown, never zero.

      • windowFrom string | null

        Start of the window the authored PR counts cover. Absent or null means unknown, never zero.

      • windowTo string | null

        End of the window the authored PR counts cover. Absent or null means unknown, never zero.

      • commitsAuthored number | null

        AUTHORED work: public commits GitHub credits to the developer across the years the research read. Absent or null means unknown, never zero.

        min 0
      • authoredPrs number | null

        AUTHORED work: pull requests the developer opened, over about the trailing two years of public activity. Absent or null means unknown, never zero.

        min 0
      • authoredPrsMerged number | null

        AUTHORED work: of those, how many were merged by anyone, over about the trailing two years of public activity. Absent or null means unknown, never zero.

        min 0
      • authoredPrsMergedExternal number | null

        AUTHORED work: merged PRs they authored in repositories they do not own, over about the trailing two years of public activity. Absent or null means unknown, never zero.

        min 0
      • authoredPrsMergedByOthers number | null

        AUTHORED work: merged PRs they authored that someone else (not a bot) merged, which is outside validation, over about the trailing two years of public activity. Absent or null means unknown, never zero.

        min 0
      • selfMergedPrs number | null

        AUTHORED work: merged PRs they authored and merged themselves, which shows write access rather than validation, over about the trailing two years of public activity. Absent or null means unknown, never zero.

        min 0
      • mergedForOthers number | null

        MERGED-FOR-OTHERS work: other people’s PRs the developer merged, read from the latest 50 merged PRs of each repository they own or hold write access to. Never added to the authored counts. Absent or null means unknown, never zero.

        min 0
      • reviewsGiven number | null

        REVIEW work: reviews they gave on other people’s PRs, over about the trailing two years of public activity. Absent or null means unknown, never zero.

        min 0
      • reviewsGivenExternal number | null

        REVIEW work: reviews they gave in repositories they do not own, over about the trailing two years of public activity. Absent or null means unknown, never zero.

        min 0
      • externalRepos number | null

        AUTHORED work: distinct repositories they do not own with at least one merged PR they authored, over about the trailing two years of public activity. Absent or null means unknown, never zero.

        min 0
      • yearly array | null

        Public activity by calendar year, oldest first. Absent or null means unknown, never zero.

        • year number required

          The calendar year.

        • commits number | null

          AUTHORED commits GitHub credited to them that year. Absent or null means unknown, never zero.

          min 0
        • prs number | null

          Pull requests they AUTHORED that year. Absent or null means unknown, never zero.

          min 0
        • reviews number | null

          Reviews they gave on other people’s PRs that year. Absent or null means unknown, never zero.

          min 0
      • prs array | null

        A sample of PRs the developer AUTHORED, at most 60, each saying who merged it. Absent or null means unknown, never zero.

        max 60 items
        • repo string required

          The repository as `owner/name`.

        • number number required

          The PR number in that repository.

        • title string | null

          The PR title. Absent or null means unknown, never zero.

        • merged boolean | null

          Whether the PR was merged. Absent or null means unknown, never zero.

        • mergedAt string | null

          When it was merged, as an ISO 8601 instant. Null when unmerged. Absent or null means unknown, never zero.

        • changedFiles number | null

          How many files the PR touched. Absent or null means unknown, never zero.

          min 0
        • mergedBy string | null

          `self` when the developer merged their own PR (write access, not outside validation), `other` when another person merged it, `bot` when automation did. Null when unmerged or unknown.

          selfotherbot
        • reviewsReceived number | null

          How many reviews other people left on this PR. Absent or null means unknown, never zero.

          min 0
      • fileMix object | null

        Files touched by extension and by top-level directory in the developer’s own merged PRs. Absent when the report predates the file mix; null when the research could not read the file lists (unknown, never an empty mix).

        • samplePrs number | null

          Merged PRs the developer AUTHORED whose file lists were read. Absent or null means unknown, never zero.

          min 0
        • reposSampled number | null

          Repositories those PRs came from. Absent or null means unknown, never zero.

          min 0
        • filesTouched number | null

          Changed files counted, after exclusions. Absent or null means unknown, never zero.

          min 0
        • filesExcluded number | null

          Changed files dropped as vendored, generated or lockfiles. Absent or null means unknown, never zero.

          min 0
        • extensions array of object required

          Files touched by extension, most files first, at most 20 keys, counted from the changed-file PATHS of merged PRs the developer AUTHORED (never line counts), with vendored, generated and lockfile paths excluded.

          max 20 items
          • key string required

            In `extensions`: the lowercased final extension without the dot (`ts`, `rs`), a known bare file name (`dockerfile`, `makefile`), or `(none)` for other files with no extension. In `directories`: the lowercased top-level directory, or `/` for a file at the repository root.

          • filesTouched number required

            Changed files under this key across the sampled authored PRs.

            min 0
          • prs number required

            Sampled authored PRs with at least one changed file under this key.

            min 0
        • directories array of object required

          Files touched by top-level directory, most files first, at most 20 keys, counted from the changed-file PATHS of merged PRs the developer AUTHORED (never line counts), with vendored, generated and lockfile paths excluded.

          max 20 items
          • key string required

            In `extensions`: the lowercased final extension without the dot (`ts`, `rs`), a known bare file name (`dockerfile`, `makefile`), or `(none)` for other files with no extension. In `directories`: the lowercased top-level directory, or `/` for a file at the repository root.

          • filesTouched number required

            Changed files under this key across the sampled authored PRs.

            min 0
          • prs number required

            Sampled authored PRs with at least one changed file under this key.

            min 0
    • narrative DeepResearchNarrative required

      The written narrative of THIS report snapshot: the top summary (`persona`) and the activity, code and social paragraphs. Null when it has not been written yet, which is a normal state and never an error: it is generated off the hot path when the research job completes, a read that finds it missing or incomplete kicks the generation, and `narrativePending` is true until the complete prose is stored. Stored against the report row.

      • persona string required

        The pitch: three to five sentences on what this developer is like to hire, written from this report and the engine’s read of their public work. A reading of a body of work, not a score: it asserts no employer, no title, no seniority and no location.

        max 640 chars
      • sections object required

        The three supporting sections, each a paragraph. Each is nullable only while the narrative is still being completed: `narrativePending` says whether the missing ones are coming.

        • activity string | null required

          How they work: their rhythm, and what having them on a team looks like.

          max 640 chars
        • code string | null required

          The work itself: what recurs in it, and what they build with it.

          max 640 chars
        • social string | null required

          How they work with other people, as their public work evidences it.

          max 640 chars
    • narrativePending boolean required

      True while the narrative is missing, missing a section, or being rewritten (an older version is served meanwhile) AND is still being written: render the prose that is there, a placeholder for any missing piece, and read again shortly. False once all four current pieces are stored, and also false when they cannot be written (the retries for this report are spent), so a placeholder never waits forever.

  • 401 No or invalid credential
    • code string required

      Stable machine-readable error code. Branch on this, never on the numeric status.

      bad_requestunauthorizedsignature_requiredpayment_requiredforbiddennot_foundconflictgonepayload_too_largeunprocessable_entitytoo_many_requestsinternal_errornot_implementedbilling_unavailablenot_contactablemailbox_link_unavailablemailbox_requiredmail_engine_unavailablewebhook_publisher_unavailabledatabase_unavailableclient_errorbuild_failed
    • message string required

      Human-readable explanation of the refusal.

    • status integer required

      The HTTP status code, repeated in the body.

    • remedy object

      A self-serve path forward, when one exists (a 402 points at how to restore access).

      • kind string required

        What kind of remedy this is, so a client can route it: whether the caller can clear the condition through the API, or a person must act in the web app.

        topupconnect_mailbox
      • url string required

        Where to go to clear the condition: an API path, or a web app page when only a person can.

  • 402 Plan lacks search:deep
    • code string required

      Stable machine-readable error code. Branch on this, never on the numeric status.

      bad_requestunauthorizedsignature_requiredpayment_requiredforbiddennot_foundconflictgonepayload_too_largeunprocessable_entitytoo_many_requestsinternal_errornot_implementedbilling_unavailablenot_contactablemailbox_link_unavailablemailbox_requiredmail_engine_unavailablewebhook_publisher_unavailabledatabase_unavailableclient_errorbuild_failed
    • message string required

      Human-readable explanation of the refusal.

    • status integer required

      The HTTP status code, repeated in the body.

    • remedy object

      A self-serve path forward, when one exists (a 402 points at how to restore access).

      • kind string required

        What kind of remedy this is, so a client can route it: whether the caller can clear the condition through the API, or a person must act in the web app.

        topupconnect_mailbox
      • url string required

        Where to go to clear the condition: an API path, or a web app page when only a person can.

  • 403 Missing search:deep (role)
    • code string required

      Stable machine-readable error code. Branch on this, never on the numeric status.

      bad_requestunauthorizedsignature_requiredpayment_requiredforbiddennot_foundconflictgonepayload_too_largeunprocessable_entitytoo_many_requestsinternal_errornot_implementedbilling_unavailablenot_contactablemailbox_link_unavailablemailbox_requiredmail_engine_unavailablewebhook_publisher_unavailabledatabase_unavailableclient_errorbuild_failed
    • message string required

      Human-readable explanation of the refusal.

    • status integer required

      The HTTP status code, repeated in the body.

    • remedy object

      A self-serve path forward, when one exists (a 402 points at how to restore access).

      • kind string required

        What kind of remedy this is, so a client can route it: whether the caller can clear the condition through the API, or a person must act in the web app.

        topupconnect_mailbox
      • url string required

        Where to go to clear the condition: an API path, or a web app page when only a person can.

  • 404 This account has not researched this developer (or nobody has)
    • code string required

      Stable machine-readable error code. Branch on this, never on the numeric status.

      bad_requestunauthorizedsignature_requiredpayment_requiredforbiddennot_foundconflictgonepayload_too_largeunprocessable_entitytoo_many_requestsinternal_errornot_implementedbilling_unavailablenot_contactablemailbox_link_unavailablemailbox_requiredmail_engine_unavailablewebhook_publisher_unavailabledatabase_unavailableclient_errorbuild_failed
    • message string required

      Human-readable explanation of the refusal.

    • status integer required

      The HTTP status code, repeated in the body.

    • remedy object

      A self-serve path forward, when one exists (a 402 points at how to restore access).

      • kind string required

        What kind of remedy this is, so a client can route it: whether the caller can clear the condition through the API, or a person must act in the web app.

        topupconnect_mailbox
      • url string required

        Where to go to clear the condition: an API path, or a web app page when only a person can.

  • 429 A rate limit or a usage quota is exhausted. Back off and retry; the `x-quota-*` response headers report the remaining allowance.
    • code string required

      Stable machine-readable error code. Branch on this, never on the numeric status.

      bad_requestunauthorizedsignature_requiredpayment_requiredforbiddennot_foundconflictgonepayload_too_largeunprocessable_entitytoo_many_requestsinternal_errornot_implementedbilling_unavailablenot_contactablemailbox_link_unavailablemailbox_requiredmail_engine_unavailablewebhook_publisher_unavailabledatabase_unavailableclient_errorbuild_failed
    • message string required

      Human-readable explanation of the refusal.

    • status integer required

      The HTTP status code, repeated in the body.

    • remedy object

      A self-serve path forward, when one exists (a 402 points at how to restore access).

      • kind string required

        What kind of remedy this is, so a client can route it: whether the caller can clear the condition through the API, or a person must act in the web app.

        topupconnect_mailbox
      • url string required

        Where to go to clear the condition: an API path, or a web app page when only a person can.