Skip to main content
GET
/
v1
/
score
/
{domain}
Get latest cached score for a company.
curl --request GET \
  --url https://api.keplerinsights.us/v1/score/{domain} \
  --header 'X-API-Key: <api-key>'
import requests

url = "https://api.keplerinsights.us/v1/score/{domain}"

headers = {"X-API-Key": "<api-key>"}

response = requests.get(url, headers=headers)

print(response.text)
const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};

fetch('https://api.keplerinsights.us/v1/score/{domain}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => "https://api.keplerinsights.us/v1/score/{domain}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
package main

import (
"fmt"
"net/http"
"io"
)

func main() {

url := "https://api.keplerinsights.us/v1/score/{domain}"

req, _ := http.NewRequest("GET", url, nil)

req.Header.Add("X-API-Key", "<api-key>")

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.get("https://api.keplerinsights.us/v1/score/{domain}")
.header("X-API-Key", "<api-key>")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.keplerinsights.us/v1/score/{domain}")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'

response = http.request(request)
puts response.read_body
{
  "domain": "<string>",
  "scored_at": "2023-11-07T05:31:56Z",
  "composite_score": 50,
  "buckets": {
    "team_structure": 50,
    "market_position": 50,
    "momentum_tailwinds": 50,
    "financial_health": 50
  },
  "mode": "<string>",
  "scale_premium": 6,
  "rank": {
    "percentile": 50,
    "cohort_size": 1
  },
  "x_kepler": {
    "cache_status": "cached",
    "freshness_window_hours": 123
  }
}
{
"error": "unauthorized",
"message": "<string>",
"reason": "<string>"
}
{
"error": "unauthorized",
"message": "<string>",
"reason": "<string>"
}
Cached-only score lookup. Returns the freshest stored record, or 404 if Kepler has never scored this domain.

When to use it

  • After a 202 from POST /v1/score — once GET /v1/jobs/{job_id} reports status: "complete", call this endpoint (or use the score_url the job response hands you) to fetch the fresh score. The Python and TypeScript SDKs do this automatically inside Kepler.score().
  • To re-render an existing UI without using a cold-call slot — calls to this endpoint count against your cached quota, not cold.

What it does NOT do

  • Trigger a cold run. Even with no cached record, you get 404, never a 60-second wait.
  • Respect the freshness window. It returns the latest record regardless of age. If you care about freshness, check the scored_at timestamp yourself or use POST /v1/score.

Example

curl https://api.keplerinsights.us/v1/score/stripe.com \
  -H "X-API-Key: ki_live_..."
{
  "domain": "stripe.com",
  "scored_at": "2026-05-12T14:30:00Z",
  "ki_rating": "KI-1+",
  "composite_score": 78.2,
  "scale_premium": 6.4,
  "buckets": { ... },
  "rank": { "percentile": 99, "cohort_size": 541 },
  "x_kepler": {
    "tier": "growth",
    "cache_status": "cached",
    "freshness_window_hours": 6
  }
}

Authorizations

X-API-Key
string
header
required

Live keys are prefixed ki_live_, test keys ki_test_. Issue + revoke keys at https://console.keplerinsights.us. Never embed a key in client-side code — every endpoint is backend-to-API only.

Path Parameters

domain
string
required

Bare hostname. Strips a leading www. and any URL scheme automatically.

Response

Latest score.

domain
string
required
scored_at
string<date-time>
required
ki_rating
enum<string>
required
Available options:
KI-1+,
KI-1,
KI-2+,
KI-2,
KI-3,
KI-4,
KI-5
composite_score
number<float>
required
Required range: 0 <= x <= 100
buckets
object
required

The 4 KI buckets. Each is 0–100.

mode
string

Present and = sandbox only with a ki_test_ key.

scale_premium
number<float>

Up to ~12 pts for established mega-caps; up to ~6 pts for growth profile.

Required range: 0 <= x <= 12
rank
object
x_kepler
object

Caller-facing metadata. Stable across versions.