API reference 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, how large a population its percentile was ranked against and where that population came from; cohortN is the MAXIMUM of those and nothing more, so do not read it as the population behind any one percentile. A small population means an early ranking, not a precise one, and 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 populations, so one number never describes it: `signalPopulations[signal]` states the population and the source behind each percentile here, and `cohortN` is only the largest of them. 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.

      • 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 population it was ranked against — not `cohortN`, which is only the largest of them.

      • 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 population it was ranked against — not `cohortN`, which is only the largest of them.

    • 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.

    • 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, the population its percentile was actually ranked against. THE field to read before quoting any percentile: a report mixes substrates, so one number cannot describe it — a live report carried `cohortN` of 2,976,234 next to 53 graded signals, 49 of which were ranked against 207 developers. Absent on reports produced before vamo-data started recording it.

    • cohortN number required

      The MAXIMUM population any graded signal in this report was ranked against — an upper bound, and nothing more. It is NOT the population behind any particular percentile, and quoting it as one overstates every signal that took a smaller substrate; read `signalPopulations` for the per-signal truth. It is not a peer group either: Vamo ranks against a single global measured population, never against developers matched on language, seniority, region or discipline.

    • 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. Not a credit cost.

    • 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.

  • 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_error
    • 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 the credit top-up).

      • 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_error
    • 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 the credit top-up).

      • 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_error
    • 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 the credit top-up).

      • 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_error
    • 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 the credit top-up).

      • 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.