/v1/developers/reports/{reportId}Retrieve a developer enrichment report by id
search:readRe-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
reportIdstring requiredmax 17 chars
Responses
200The report id and its current cell snapshotreportIdstring requiredThe report id you polled.
statusstring 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.
generatingreadycellsarray of object requiredThe current state of the (developer × facet) grid.
developerIdstring requiredThe developer this cell is about.
max 64 charsfacetKeystring requiredWhich 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_sheetstatusstring requiredThe 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_requiredvalueobjectThe 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.
jobIdstringThe background compute job producing this cell. Present only when `status` is `pending`.
pendingboolean requiredTrue while any cell is still being computed.
retryAfterMsinteger | null requiredHow long to wait before polling again, in milliseconds. Null once nothing is pending.
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.
404No report with this id 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_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.