API reference navigation
GET /v1/developers/reports/{reportId}

Retrieve a developer enrichment report by id

Access
Authenticated
search:read
Cost
1 credit per result returned
Rate limit
120 / minute per account
Quota
None

Re-runs fulfilment over the saved request behind this reportId and returns the current cell snapshot. Ready cells serve from the cache; still-running compute cells stay pending (the ownership grant from the original request prevents re-dispatch). A compute job that finished without delivering resolves its cells failed and is never re-dispatched, so polling ALWAYS terminates: ready means every cell reached ok, failed or unavailable, not that every cell succeeded. Account-scoped: an unknown or foreign reportId is a 404. A retrieve of work already paid for costs 0 — the ownership grant from the request prices every re-read at zero, so poll as often as you like. The one exception is a facet composed from other facets (dossier.*), which cannot be dispatched until its dependency facets have landed: it is dispatched on the first poll after they do, and charged its catalog price once, there. status is generating while any cell is pending, ready once all resolve.

Path parameters

  • reportId string required
    max 17 chars

Responses

  • 200 The report id and its current cell snapshot
    • reportId string required

      The report id you polled.

    • status string required

      `generating` = at least one cell is still being computed; poll again after `retryAfterMs`. `ready` = every cell has settled, which means each one reached `ok`, `unavailable` or `failed` — it does NOT mean every cell succeeded. Polling always terminates.

      generatingready
    • cells array of object required

      The current state of the (developer × facet) grid.

      • developerId string required

        The developer this cell is about.

        max 64 chars
      • facetKey string required

        Which facet this cell answers.

        id.coreprofile.basicscore.crackedgithub.gardentags.matchedsignals.archetypesignals.signature_techsignals.builder_scopescore.gemsignals.ai_usagesignals.commit_factsactivity.contributionssignals.coreai.repo_summariesai.person_summaryidentity.linkedincontact.socialscontact.emailsfit.match_rationalefit.score_vs_jddossier.coredossier.contextualdossier.pitch_sheet
      • status string required

        The outcome for this one (developer × facet) pair. Exactly one status is billed: `ok`. `ok` = delivered, `value` is populated, and you were charged for it (or you already owned it). `pending` = a background job is computing it; poll the report until it settles. Not charged now; the charge is settled by the job. `unavailable` = we ran and there is genuinely nothing to return for this developer, including the case where the source answered with an empty result. Not charged. `failed` = the attempt errored. Not charged, and never retried inside the same report. `report_required` = this facet needs background compute and you asked on a synchronous endpoint that does not dispatch jobs. Not charged; request it via `POST /v1/developers/reports` to get it. Treat every status other than `ok` as "no data", not as a value.

        okpendingunavailablefailedreport_required
      • value object

        The facet payload. Present only when `status` is `ok`; its shape is specific to the facet key, so read it against the facet you asked for. A cell whose payload came back with nothing in it is downgraded to `unavailable` rather than returned as an empty `ok`, so an `ok` cell always carries at least one real field.

      • jobId string

        The background compute job producing this cell. Present only when `status` is `pending`.

    • pending boolean required

      True while any cell is still being computed.

    • retryAfterMs integer | null required

      How long to wait before polling again, in milliseconds. Null once nothing is pending.

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

  • 404 No report with this id 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_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.