curl --request POST \
--url https://api.example.com/v1/score \
--header 'Content-Type: application/json' \
--data '
{
"subject": {
"phone_number": "<string>",
"ip_address": "<string>"
},
"context_id": "<string>",
"client_reference": "<string>",
"options": {
"explain": true,
"max_latency_ms": 51,
"shadow_version": "<string>"
}
}
'import requests
url = "https://api.example.com/v1/score"
payload = {
"subject": {
"phone_number": "<string>",
"ip_address": "<string>"
},
"context_id": "<string>",
"client_reference": "<string>",
"options": {
"explain": True,
"max_latency_ms": 51,
"shadow_version": "<string>"
}
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
subject: {phone_number: '<string>', ip_address: '<string>'},
context_id: '<string>',
client_reference: '<string>',
options: {explain: true, max_latency_ms: 51, shadow_version: '<string>'}
})
};
fetch('https://api.example.com/v1/score', 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.example.com/v1/score",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'subject' => [
'phone_number' => '<string>',
'ip_address' => '<string>'
],
'context_id' => '<string>',
'client_reference' => '<string>',
'options' => [
'explain' => true,
'max_latency_ms' => 51,
'shadow_version' => '<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/v1/score"
payload := strings.NewReader("{\n \"subject\": {\n \"phone_number\": \"<string>\",\n \"ip_address\": \"<string>\"\n },\n \"context_id\": \"<string>\",\n \"client_reference\": \"<string>\",\n \"options\": {\n \"explain\": true,\n \"max_latency_ms\": 51,\n \"shadow_version\": \"<string>\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/v1/score")
.header("Content-Type", "application/json")
.body("{\n \"subject\": {\n \"phone_number\": \"<string>\",\n \"ip_address\": \"<string>\"\n },\n \"context_id\": \"<string>\",\n \"client_reference\": \"<string>\",\n \"options\": {\n \"explain\": true,\n \"max_latency_ms\": 51,\n \"shadow_version\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/score")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"subject\": {\n \"phone_number\": \"<string>\",\n \"ip_address\": \"<string>\"\n },\n \"context_id\": \"<string>\",\n \"client_reference\": \"<string>\",\n \"options\": {\n \"explain\": true,\n \"max_latency_ms\": 51,\n \"shadow_version\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"score_id": "<string>",
"tier": "verify",
"score_version": "<string>",
"score": 50,
"score_type": "ranking",
"band": "minimal",
"recommended_action": "allow",
"suppressed": [
{
"component": "<string>",
"available_in": "assess"
}
],
"disclosure": "<string>",
"degraded_sources": [
"<string>"
],
"score_basis": "<string>",
"coverage": "strong",
"subject": {
"phone_number": {
"e164": "<string>",
"valid": true,
"country_code": "<string>",
"ndc": "<string>",
"operator": "<string>",
"line_type": "<string>",
"allocated": true
},
"ip_address": {
"asn": "<string>",
"as_name": "<string>",
"as_type": "<string>",
"country_code": "<string>",
"continent": "<string>",
"hosting": true,
"vpn": true,
"proxy": true,
"tor": true,
"bogon": true
}
},
"components": [
{
"component": "<string>",
"verdict": "clean",
"contribution": 123,
"detail": "<string>"
}
],
"primary_risk_factor": {
"code": "<string>",
"narrative": "<string>"
},
"benign_exclusions": [
"<string>"
],
"context_applied": {
"context_id": "<string>",
"effect": "band_elevated",
"reason": "<string>"
},
"shadow": {
"score_version": "<string>",
"score": 123,
"band": "<string>"
},
"client_reference": "<string>",
"cluster_id": "<string>",
"latency_ms": 123
}{
"errors": [
{
"code": "<string>",
"message": "<string>",
"field": "<string>"
}
]
}{
"errors": [
{
"code": "<string>",
"message": "<string>",
"field": "<string>"
}
]
}{
"errors": [
{
"code": "<string>",
"message": "<string>",
"field": "<string>"
}
]
}{
"errors": [
{
"code": "<string>",
"message": "<string>",
"field": "<string>"
}
]
}{
"errors": [
{
"code": "<string>",
"message": "<string>",
"field": "<string>"
}
]
}Score a subject (phone and/or IP) synchronously
curl --request POST \
--url https://api.example.com/v1/score \
--header 'Content-Type: application/json' \
--data '
{
"subject": {
"phone_number": "<string>",
"ip_address": "<string>"
},
"context_id": "<string>",
"client_reference": "<string>",
"options": {
"explain": true,
"max_latency_ms": 51,
"shadow_version": "<string>"
}
}
'import requests
url = "https://api.example.com/v1/score"
payload = {
"subject": {
"phone_number": "<string>",
"ip_address": "<string>"
},
"context_id": "<string>",
"client_reference": "<string>",
"options": {
"explain": True,
"max_latency_ms": 51,
"shadow_version": "<string>"
}
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
subject: {phone_number: '<string>', ip_address: '<string>'},
context_id: '<string>',
client_reference: '<string>',
options: {explain: true, max_latency_ms: 51, shadow_version: '<string>'}
})
};
fetch('https://api.example.com/v1/score', 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.example.com/v1/score",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'subject' => [
'phone_number' => '<string>',
'ip_address' => '<string>'
],
'context_id' => '<string>',
'client_reference' => '<string>',
'options' => [
'explain' => true,
'max_latency_ms' => 51,
'shadow_version' => '<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/v1/score"
payload := strings.NewReader("{\n \"subject\": {\n \"phone_number\": \"<string>\",\n \"ip_address\": \"<string>\"\n },\n \"context_id\": \"<string>\",\n \"client_reference\": \"<string>\",\n \"options\": {\n \"explain\": true,\n \"max_latency_ms\": 51,\n \"shadow_version\": \"<string>\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/v1/score")
.header("Content-Type", "application/json")
.body("{\n \"subject\": {\n \"phone_number\": \"<string>\",\n \"ip_address\": \"<string>\"\n },\n \"context_id\": \"<string>\",\n \"client_reference\": \"<string>\",\n \"options\": {\n \"explain\": true,\n \"max_latency_ms\": 51,\n \"shadow_version\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/score")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"subject\": {\n \"phone_number\": \"<string>\",\n \"ip_address\": \"<string>\"\n },\n \"context_id\": \"<string>\",\n \"client_reference\": \"<string>\",\n \"options\": {\n \"explain\": true,\n \"max_latency_ms\": 51,\n \"shadow_version\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"score_id": "<string>",
"tier": "verify",
"score_version": "<string>",
"score": 50,
"score_type": "ranking",
"band": "minimal",
"recommended_action": "allow",
"suppressed": [
{
"component": "<string>",
"available_in": "assess"
}
],
"disclosure": "<string>",
"degraded_sources": [
"<string>"
],
"score_basis": "<string>",
"coverage": "strong",
"subject": {
"phone_number": {
"e164": "<string>",
"valid": true,
"country_code": "<string>",
"ndc": "<string>",
"operator": "<string>",
"line_type": "<string>",
"allocated": true
},
"ip_address": {
"asn": "<string>",
"as_name": "<string>",
"as_type": "<string>",
"country_code": "<string>",
"continent": "<string>",
"hosting": true,
"vpn": true,
"proxy": true,
"tor": true,
"bogon": true
}
},
"components": [
{
"component": "<string>",
"verdict": "clean",
"contribution": 123,
"detail": "<string>"
}
],
"primary_risk_factor": {
"code": "<string>",
"narrative": "<string>"
},
"benign_exclusions": [
"<string>"
],
"context_applied": {
"context_id": "<string>",
"effect": "band_elevated",
"reason": "<string>"
},
"shadow": {
"score_version": "<string>",
"score": 123,
"band": "<string>"
},
"client_reference": "<string>",
"cluster_id": "<string>",
"latency_ms": 123
}{
"errors": [
{
"code": "<string>",
"message": "<string>",
"field": "<string>"
}
]
}{
"errors": [
{
"code": "<string>",
"message": "<string>",
"field": "<string>"
}
]
}{
"errors": [
{
"code": "<string>",
"message": "<string>",
"field": "<string>"
}
]
}{
"errors": [
{
"code": "<string>",
"message": "<string>",
"field": "<string>"
}
]
}{
"errors": [
{
"code": "<string>",
"message": "<string>",
"field": "<string>"
}
]
}Headers
128Body
Response
Scored (possibly degraded — see degraded_sources; never 5xx for upstream outages)
Opaque score identifier, "sc_" followed by 32 lowercase hex characters. The prefix is pinned (v1.0.3) — clients may rely on it.
verify, assess, bureau 0 <= x <= 100"ranking"minimal, low, medium, high, critical allow, watch, investigate, step_up_auth, challenge, block Show child attributes
Show child attributes
Capabilities that answered this request on reduced evidence — the same names as components[].component and the health endpoint's capabilities map. Empty means every evaluated capability answered at full fidelity.
Reporting-density context, never a score modifier — see scoring/COVERAGE.md
strong, partial, thin Identity resolution of network assets only — never subscriber identity (RSP-4)
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Present only when shadow_version requested (VER-2)
Show child attributes
Show child attributes
Bureau tier only — stable infrastructure-cluster id (spec 4.3)