/v2/deep-research/reports/repos/{owner}/{name}/contributorsList every contributor on a repository report
search:deepEveryone a repository report holds as doing the work, one page at a time. The report and its PDF show the top contributors; this lists all of them: the builders ranked by recency-weighted work (pushes and merged pull requests over the last year, with GitHub’s own pull request and commit authorship), then the reviewers and mergers who keep the project moving without pushing much themselves. Each person carries the same fields as a contributor on the report: activity counts, first and last seen, pace, what they author, merge and review, the file types they touch, and identity facts with devRank where Vamo knows them. windowTotal and complete say whether the repository has more builders than a report keeps. Read from the stored report, so it is free and readable only for a repository this account has already researched; a repository the account has not researched is a 404.
Path parameters
ownerstring requiredmin 1 chars, max 39 charsnamestring requiredmin 1 chars, max 100 chars
Query parameters
cursorstringThe `nextCursor` from the page before, to read the next page. Omit it for the first page.
max 256 charslimitinteger default: 100People per page, 100 by default.
min 1, max 250
Responses
200One page of the full contributor listrepoNamestring requiredThe `owner/name` the research was run on.
contributorsarray of object requiredThis page of the list, in rank order: builders by recency-weighted work, then reviewers.
rankinteger requiredPosition in the whole list, 1 for the person who does the most recent weighted work.
loginstring requiredThe contributor’s GitHub handle.
rolestring required`builder` when they pushed code or authored merged pull requests in the window, ranked by recency-weighted work. `reviewer` when they only merged or reviewed other people’s pull requests in the sampled merged pull requests, so they carry `depth` but no weight. Builders come first, then reviewers.
builderreviewerworkSharenumber | null requiredA builder’s share, 0 to 1, of the recency-weighted work of every builder this report holds, so the shares across the whole list add up to 1. Null for a reviewer.
depthobject | nullWhat this person does here, read off the repository’s sampled merged pull requests: pull requests authored and how they were merged, other people’s pull requests merged, reviews given, and the file types their own pull requests touch (the area of the codebase they work in). Null or absent when they are not in the sample.
loginstring requiredThe contributor’s GitHub handle.
authoredPrsMergednumber | nullAUTHORED 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 0authoredPrsMergedByOthersnumber | nullAUTHORED 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 0selfMergedPrsnumber | nullAUTHORED 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 0mergedForOthersnumber | nullMERGED-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 0reviewsGivennumber | nullREVIEW 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 0topExtensionsarray | nullThe 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 itemsextensionstring requiredThe lowercased final extension without the dot (`ts`, `rs`), a known bare file name (`dockerfile`), or `(none)`.
filesTouchednumber requiredChanged files with this extension across the contributor’s own sampled merged PRs here, counted from paths (never line counts).
min 0
identityobject | nullIdentity facts where Vamo’s index knows the person, the same block a report contributor carries: name, title, LinkedIn URL, city and country, company, devRank (`crackedScore` and `crackedTier`), gem score, seniority, years of experience, and `hasEmail`. Null when the index does not know them, and always null for a reviewer.
totalinteger requiredPeople in the whole list, builders and reviewers, across every page.
min 0buildersinteger requiredBuilders in the whole list.
min 0windowTotalinteger | null requiredDistinct people who pushed code or merged pull requests in the window, counted before any cap. Null on a report produced before this count was recorded.
completeboolean | null requiredTrue when the list holds every builder in the window. False when the repository has more builders than a report keeps (the research keeps the 300 with the most recent weighted work; reports produced before 2026-09-10 keep 30), so `windowTotal` is larger than `builders`. Null when the report cannot say. Run the research again with `force: true` for a report with the current ceiling.
nextCursorstring | null requiredPass as `cursor` to read the next page. Null on the last page.
researchedAtstring requiredWhen the research finished, as an ISO 8601 instant.
400A cursor or limit that is not validcodestring 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_errorbuild_failedmessagestring 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 how to restore access).
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.
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_errorbuild_failedmessagestring 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 how to restore access).
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_errorbuild_failedmessagestring 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 how to restore access).
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_errorbuild_failedmessagestring 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 how to restore access).
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 repository (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_errorbuild_failedmessagestring 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 how to restore access).
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.
429A rate limit or a usage quota is exhausted. Back off and retry; the `x-quota-*` response headers report the remaining allowance.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_errorbuild_failedmessagestring 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 how to restore access).
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.