/v1/fit-rankScore and rank developers against a role
fit_rank:readScore a set of GitHub logins against a role and rank them. Each login is resolved to a developer and scored with one pass over their public work: a fit score (0 off-topic/toy, 1 adjacent, 2 strong direct fit), how readily they could bridge into the role, and how realistically they could be recruited. Results come back best-fit first; equal fits go to the more recruitable, then to confidence. Low gettability is ranked and shown, not hidden. Only deterministically prominent developers (celebrities) are left out, and they are listed in dropped with the reason; a login that does not resolve is returned in misses, and a candidate the scorer could not read sits at the bottom with scored:false. Billed 2 credits per candidate SCORED — dropped and unscored candidates cost nothing, and a call that scores nobody is free.
Request body FitRankRequest
loginsarray of string requiredGitHub logins to score, 1 to 50. Each is resolved to a developer; an unresolvable login comes back in `misses`.
min 1 items, max 50 itemsrolestringThe role or full job description to score fit against, up to 20,000 characters. Optional: with no role, fit is scored on intrinsic build quality instead.
max 20000 charscompanystringThe hiring company, passed to the model as context for the role.
max 200 chars
Responses
200Ranked candidates plus unresolved loginsresultsarray of FitRankResult requiredEvery resolved, non-dropped candidate, best fit first; ties go to the more recruitable (higher gettable), then to confidence, then to `prescore`. Low gettability is ranked, not hidden, so filter on `gettable` yourself. A candidate that could not be scored sits at the bottom with `scored:false`.
max 50 itemsloginstring requiredThe GitHub login that was scored.
max 39 charsdeveloperIdstring requiredThe canonical developerId the login resolved to.
max 64 charsfitnumber requiredHow well they fit the role, 0 (off-topic/toy) to 2 (strong direct fit). 0 when they could not be scored.
gettablenumber requiredHow realistically they could be recruited, 0 to 1.
bridgeablenumber requiredHow readily they could bridge into the role, 0 to 1.
confidencenumber requiredThe model’s confidence in the fit score, 0 to 1.
bridgestring requiredA short reason they can bridge into the role, or empty when the model gave none.
max 5000 charsscoredboolean requiredTrue when the model scored them; false when the per-candidate scoring failed (the row sits at the bottom and is not billed).
prescorenumberA deterministic evidence score, no model involved: the sum of the substance of their three strongest repositories (pull requests they authored that were merged, or commits they authored, scaled by reviews, depth, relation and stars), read from their pull-request record. Absent when that record was not read (absent is unknown, not 0). It only breaks ties after confidence. A relative score, not a unit.
missesarray of string requiredLogins that did not resolve to a developer.
max 50 itemsdroppedarray of FitRankDropped requiredResolved candidates left out of the ranking, each with its reason. Every input login lands in exactly one of `results`, `misses` or `dropped`.
max 50 itemsloginstring requiredThe GitHub login that was left out.
max 39 charsdeveloperIdstring requiredThe canonical developerId the login resolved to.
max 64 charsreasonstring requiredWhy it was left out. `celebrity`: too prominent to be a realistic recruit (very large following or a flagship repo). Never scored, never billed.
celebrity
scoredCountnumber requiredHow many candidates were successfully scored. This is what the call is billed on (2 credits each).
400Empty logins, too many, or a malformed logincodestring 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 the capability, or the credit balance is emptycodestring 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 fit_rank:read, or fit ranking is not enabled for this accountcodestring 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.
429Rate limit exceededcodestring 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.