Documentation navigation
POST /v1/fit-rank

Score and rank developers against a role

Access
Authenticated
fit_rank:read
Cost
Free
Rate limit
60 / minute per account
Quota
None

Score 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

  • logins array of string required

    GitHub logins to score, 1 to 50. Each is resolved to a developer; an unresolvable login comes back in `misses`.

    min 1 items, max 50 items
  • role string

    The 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 chars
  • company string

    The hiring company, passed to the model as context for the role.

    max 200 chars

Responses

  • 200 Ranked candidates plus unresolved logins
    • results array of FitRankResult required

      Every 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 items
      • login string required

        The GitHub login that was scored.

        max 39 chars
      • developerId string required

        The canonical developerId the login resolved to.

        max 64 chars
      • fit number required

        How well they fit the role, 0 (off-topic/toy) to 2 (strong direct fit). 0 when they could not be scored.

      • gettable number required

        How realistically they could be recruited, 0 to 1.

      • bridgeable number required

        How readily they could bridge into the role, 0 to 1.

      • confidence number required

        The model’s confidence in the fit score, 0 to 1.

      • bridge string required

        A short reason they can bridge into the role, or empty when the model gave none.

        max 5000 chars
      • scored boolean required

        True when the model scored them; false when the per-candidate scoring failed (the row sits at the bottom and is not billed).

      • prescore number

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

    • misses array of string required

      Logins that did not resolve to a developer.

      max 50 items
    • dropped array of FitRankDropped required

      Resolved candidates left out of the ranking, each with its reason. Every input login lands in exactly one of `results`, `misses` or `dropped`.

      max 50 items
      • login string required

        The GitHub login that was left out.

        max 39 chars
      • developerId string required

        The canonical developerId the login resolved to.

        max 64 chars
      • reason string required

        Why it was left out. `celebrity`: too prominent to be a realistic recruit (very large following or a flagship repo). Never scored, never billed.

        celebrity
    • scoredCount number required

      How many candidates were successfully scored. This is what the call is billed on (2 credits each).

  • 400 Empty logins, too many, or a malformed login
    • 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.

  • 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 the capability, or the credit balance is empty
    • 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 fit_rank:read, or fit ranking is not enabled for this account
    • 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 Rate limit exceeded
    • 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.