/v1/deep-research/reports/developers/{login}Read a persisted deep-research report for a developer
search:deepThe 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
loginstring requiredmin 1 chars, max 39 chars
Responses
200The persisted reportidstring requiredIdentifier of this report.
githubLoginstring requiredThe GitHub handle the research was run on.
statusstring requiredWhether the research finished. Only a `done` report carries a complete set of signals.
runningdonefailedfailCodestring | nullWhy 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_errorrawSignalsobject requiredSignal 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.
pctSignalsobject requiredSignal 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`.
compositesobject requiredPercentile-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.
gemScorenumberThe 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.
qualitynumberThe quality composite, built from the `qualityTerms` below.
visibilitynumberThe visibility composite, built from the `visibilityTerms` below.
reachablenumberThe reachability composite.
qualityTermsarray of objectThe individual signals that fed `quality`, with their weights, so the composite can be decomposed rather than trusted blind.
signalstring requiredThe signal that contributed.
weightnumber requiredIts weight in the composite.
pctnumber requiredThe 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.
visibilityTermsarray of objectThe individual signals that fed `visibility`, with their weights.
signalstring requiredThe signal that contributed.
weightnumber requiredIts weight in the composite.
pctnumber requiredThe 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.
evidencearray of string requiredHuman-readable evidence lines the research produced.
profileobject | null requiredThe 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.
loginstring requiredThe GitHub handle, as read live during the research.
createdAtstring requiredWhen the GitHub account was created, as an ISO 8601 instant.
followersnumber requiredFollower count at research time.
followingnumber requiredHow many accounts they follow, at research time.
organizationsarray of string requiredPublic GitHub organisations they belong to. Private memberships are invisible, so an empty list is not evidence of none.
socialAccountsarray of object requiredSocial links the developer has published on their GitHub profile.
providerstring requiredWhich platform the link points at.
urlstring requiredThe linked profile URL.
contributionsobject | null requiredContribution 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.
totalCommitContributionsnumber requiredCommits GitHub counted over the research window.
totalPullRequestContributionsnumber requiredPull requests opened over the window.
totalPullRequestReviewContributionsnumber requiredPull request reviews over the window.
calendararray of object requiredDaily contribution counts across the window.
datestring requiredThe calendar day, `YYYY-MM-DD`.
countnumber requiredContributions GitHub counted that day.
weekdaynumber requiredDay of the week, 0 for Sunday through 6 for Saturday. Present so weekday and weekend activity can be told apart without re-deriving it.
reposarray of object requiredThe repositories actually sampled by this research. A SAMPLE, not a complete list: `commitStats` says how much was sampled and how much was skipped.
namestring requiredThe repository name, without the owner.
ownerstring requiredThe owning account’s login, which may be a person or an organisation.
isForkboolean requiredTrue 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.
primaryLanguagestring | null requiredGitHub’s primary language. Null when it reports none.
languagesarray of object requiredLanguage breakdown by bytes of code, which is a proxy for effort and not a measure of skill.
namestring requiredThe language.
sizenumber requiredBytes of code GitHub attributes to it in this repository.
topicsarray of string requiredGitHub topics the owner tagged the repository with.
starsnumber requiredStargazer count at research time.
forksnumber requiredFork count at research time.
pushedAtstring requiredWhen the repository was last pushed to, as an ISO 8601 instant.
latestReleaseAtstring | null requiredWhen it last cut a release, as an ISO 8601 instant. Null when it has never released.
commitStatsobject requiredHow much of the developer’s work this research actually looked at. Read it before treating the signals as comprehensive.
sampleNnumber requiredHow many commits were examined.
reposSamplednumber requiredHow many repositories were examined.
reposSkippednumber requiredHow many were skipped, typically for size. A high number here means the signals rest on a narrower base than the developer’s full output.
familiesPresentarray of string requiredWhich signal families had enough data to contribute to this report.
signalsGradednumber requiredHow many signals were successfully percentile-ranked. The rest are explained in `signalsExcluded`.
signalsExcludedobject requiredSignal 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.
signalPopulationsobject | nullPer 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.
cohortNnumber requiredThe 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.
pointsSpentnumber requiredGitHub 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.
requestCountnumber requiredUpstream requests made by the whole round, shared by every developer in it. Divide by `roundLogins` for an average.
roundLoginsnumber requiredHow many developers shared the round. The divisor for `pointsSpent` and `requestCount`.
startedAtstring requiredWhen the research started, as an ISO 8601 instant.
finishedAtstring requiredWhen the research finished, as an ISO 8601 instant.
401No or invalid credentialcodestring requiredStable 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_errormessagestring requiredHuman-readable explanation of the refusal.
statusinteger requiredThe HTTP status code, repeated in the body.
remedyobjectA self-serve path forward, when one exists (a 402 points at the credit top-up).
kindstring requiredWhat 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_mailboxurlstring requiredWhere to go to clear the condition: an API path, or a web app page when only a person can.
402Plan lacks search:deepcodestring requiredStable 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_errormessagestring requiredHuman-readable explanation of the refusal.
statusinteger requiredThe HTTP status code, repeated in the body.
remedyobjectA self-serve path forward, when one exists (a 402 points at the credit top-up).
kindstring requiredWhat 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_mailboxurlstring requiredWhere to go to clear the condition: an API path, or a web app page when only a person can.
403Missing search:deep (role)codestring requiredStable 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_errormessagestring requiredHuman-readable explanation of the refusal.
statusinteger requiredThe HTTP status code, repeated in the body.
remedyobjectA self-serve path forward, when one exists (a 402 points at the credit top-up).
kindstring requiredWhat 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_mailboxurlstring requiredWhere to go to clear the condition: an API path, or a web app page when only a person can.
404This account has not researched this developer (or nobody has)codestring requiredStable 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_errormessagestring requiredHuman-readable explanation of the refusal.
statusinteger requiredThe HTTP status code, repeated in the body.
remedyobjectA self-serve path forward, when one exists (a 402 points at the credit top-up).
kindstring requiredWhat 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_mailboxurlstring requiredWhere to go to clear the condition: an API path, or a web app page when only a person can.