Skip to main content
Every error response has the same shape:
Branch on error, not on message. The error string is stable across versions; message may be tightened or expanded.

4xx — caller errors

5xx — server / pipeline errors

How cold scoring fails after kickoff

A successful POST /v1/score cold path returns 202 with a job_id immediately, then queues the run. If the engine later fails to produce a score (insufficient data, fetcher credit exhaustion, etc.), the corresponding GET /v1/jobs/{job_id} poll returns:
Possible failure_reason values: sfn_failed, sfn_timed_out, sfn_aborted, scoring_completed_no_record. Retry with a different domain, or wait a few hours and re-run — fetcher credit exhaustion clears on the daily rollover. See GET /v1/jobs/{job_id} for the full response shape.

What we never do

  • Surface fetcher errors directly. A data fetcher timeout becomes a data_warnings entry in GET /v1/company/{domain}/confidence, not a 5xx. The score is still produced.
  • Return partial data on 200. A 200 response always has the full schema. Missing data appears as neutral defaults (signal score ≈ 50) flagged in confidence.
  • Auto-retry your call on a 4xx. If you sent bad input, retrying doesn’t help.