Cold scoring is always async. WhenDocumentation Index
Fetch the complete documentation index at: https://docs.keplerinsights.us/llms.txt
Use this file to discover all available pages before exploring further.
POST /v1/score cannot serve a cached record within your tier’s freshness window, the server returns 202 Accepted with a job_id and continues the scoring run in the background. Poll GET /v1/jobs/{job_id} until the job settles.
This page covers the manual polling workflow. The official SDKs handle polling for you — see POST /v1/score for the SDK examples.
Eligibility
Auto-queue applies to all paid tiers (Starter, Growth, Scale, Enterprise). Free tier cannot run live cold paths at all and receives:When you’ll get a 202
POST /v1/scorefor a domain you’ve never asked for.POST /v1/scorefor a domain whose most-recent stored record is older than your tier’s freshness window (see Tiers).POST /v1/scorewithforce_fresh: trueon Enterprise (bypasses cache deliberately).
- The cached record is fresh for your tier → 200 with the score inline.
- You hit your monthly cold-call cap → 429
cold_budget_exhausted. - You hit the per-key 1h ceiling (200 cold) or account 24h breaker → 429.
Response shape
Poll until settled
status: complete, fetch the score directly:
What auto-queue does not change
- Cost. Cold-call usage and cost-log writes happen at job start. The fetcher pipeline runs whether you poll or not. Cap rules and per-account circuit breakers apply identically.
- Freshness check. The cached-fresh short-circuit happens before a job is created, so you never pay for a redundant cold run by routing through
POST /v1/score. - Sandbox.
ki_test_keys against the 4 canned test domains always return 200 inline — sandbox has no real cold path.
Job lifecycle
Migration note (pre-2026-05-12)
Before 2026-05-12,POST /v1/score blocked synchronously for up to 60 seconds on cold paths. This was incompatible with HTTP API’s 30-second integration timeout — cold requests would intermittently return 503 from the gateway while the scoring engine continued running server-side. Auto-queue resolves this. The wait=false parameter is still accepted for backwards compatibility but is now a no-op — cold is always async, sync wait=true requests get the same 202 response shape.