Patch workspace risk configuration
curl --request PATCH \
--url https://api.range.org/v2/risk/config \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"attribution_signals": [
{
"signal": "ofac-sanctioned",
"enabled": true,
"severity": "severe"
}
],
"exposure_signals": [
{
"signal": "compliance-risk",
"enabled": true,
"thresholds": {
"low": 0.01,
"medium": 0.05,
"high": 0.2,
"severe": 0.5
}
}
],
"behaviours": [
{
"behaviour": "smurfing-structuring",
"enabled": true,
"ignore": false,
"thresholds": {
"low": 0.3,
"medium": 0.5,
"high": 0.7,
"severe": 0.9
}
}
]
}
'import requests
url = "https://api.range.org/v2/risk/config"
payload = {
"attribution_signals": [
{
"signal": "ofac-sanctioned",
"enabled": True,
"severity": "severe"
}
],
"exposure_signals": [
{
"signal": "compliance-risk",
"enabled": True,
"thresholds": {
"low": 0.01,
"medium": 0.05,
"high": 0.2,
"severe": 0.5
}
}
],
"behaviours": [
{
"behaviour": "smurfing-structuring",
"enabled": True,
"ignore": False,
"thresholds": {
"low": 0.3,
"medium": 0.5,
"high": 0.7,
"severe": 0.9
}
}
]
}
headers = {
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
attribution_signals: [{signal: 'ofac-sanctioned', enabled: true, severity: 'severe'}],
exposure_signals: [
{
signal: 'compliance-risk',
enabled: true,
thresholds: {low: 0.01, medium: 0.05, high: 0.2, severe: 0.5}
}
],
behaviours: [
{
behaviour: 'smurfing-structuring',
enabled: true,
ignore: false,
thresholds: {low: 0.3, medium: 0.5, high: 0.7, severe: 0.9}
}
]
})
};
fetch('https://api.range.org/v2/risk/config', 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.range.org/v2/risk/config",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'attribution_signals' => [
[
'signal' => 'ofac-sanctioned',
'enabled' => true,
'severity' => 'severe'
]
],
'exposure_signals' => [
[
'signal' => 'compliance-risk',
'enabled' => true,
'thresholds' => [
'low' => 0.01,
'medium' => 0.05,
'high' => 0.2,
'severe' => 0.5
]
]
],
'behaviours' => [
[
'behaviour' => 'smurfing-structuring',
'enabled' => true,
'ignore' => false,
'thresholds' => [
'low' => 0.3,
'medium' => 0.5,
'high' => 0.7,
'severe' => 0.9
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.range.org/v2/risk/config"
payload := strings.NewReader("{\n \"attribution_signals\": [\n {\n \"signal\": \"ofac-sanctioned\",\n \"enabled\": true,\n \"severity\": \"severe\"\n }\n ],\n \"exposure_signals\": [\n {\n \"signal\": \"compliance-risk\",\n \"enabled\": true,\n \"thresholds\": {\n \"low\": 0.01,\n \"medium\": 0.05,\n \"high\": 0.2,\n \"severe\": 0.5\n }\n }\n ],\n \"behaviours\": [\n {\n \"behaviour\": \"smurfing-structuring\",\n \"enabled\": true,\n \"ignore\": false,\n \"thresholds\": {\n \"low\": 0.3,\n \"medium\": 0.5,\n \"high\": 0.7,\n \"severe\": 0.9\n }\n }\n ]\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("X-API-KEY", "<api-key>")
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.patch("https://api.range.org/v2/risk/config")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"attribution_signals\": [\n {\n \"signal\": \"ofac-sanctioned\",\n \"enabled\": true,\n \"severity\": \"severe\"\n }\n ],\n \"exposure_signals\": [\n {\n \"signal\": \"compliance-risk\",\n \"enabled\": true,\n \"thresholds\": {\n \"low\": 0.01,\n \"medium\": 0.05,\n \"high\": 0.2,\n \"severe\": 0.5\n }\n }\n ],\n \"behaviours\": [\n {\n \"behaviour\": \"smurfing-structuring\",\n \"enabled\": true,\n \"ignore\": false,\n \"thresholds\": {\n \"low\": 0.3,\n \"medium\": 0.5,\n \"high\": 0.7,\n \"severe\": 0.9\n }\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.range.org/v2/risk/config")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["X-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"attribution_signals\": [\n {\n \"signal\": \"ofac-sanctioned\",\n \"enabled\": true,\n \"severity\": \"severe\"\n }\n ],\n \"exposure_signals\": [\n {\n \"signal\": \"compliance-risk\",\n \"enabled\": true,\n \"thresholds\": {\n \"low\": 0.01,\n \"medium\": 0.05,\n \"high\": 0.2,\n \"severe\": 0.5\n }\n }\n ],\n \"behaviours\": [\n {\n \"behaviour\": \"smurfing-structuring\",\n \"enabled\": true,\n \"ignore\": false,\n \"thresholds\": {\n \"low\": 0.3,\n \"medium\": 0.5,\n \"high\": 0.7,\n \"severe\": 0.9\n }\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"workspace_id": "ws-12345",
"attribution_signals": [
{
"signal": "ofac-sanctioned",
"enabled": true,
"severity": "severe"
}
],
"exposure_signals": [
{
"signal": "compliance-risk",
"enabled": true,
"thresholds": {
"low": 0.01,
"medium": 0.05,
"high": 0.2,
"severe": 0.5
},
"floor_usd": 1000
}
],
"behaviours": [
{
"behaviour": "smurfing-structuring",
"enabled": true,
"thresholds": {
"low": 0.01,
"medium": 0.05,
"high": 0.2,
"severe": 0.5
},
"ignore": false,
"tokens": [
"0xabc…",
"usdc"
]
}
],
"case_auto_create": {
"enabled": false,
"min_tier": "high"
},
"range_whitelist": {
"enabled": true
},
"updated_at": "2026-05-18T10:00:00Z"
}Risk v2 Endpoints
Update Risk Configuration
Partially update your workspace risk configuration by sending only the fields to change, leaving omitted fields and rows as they are.
PATCH
/
v2
/
risk
/
config
Patch workspace risk configuration
curl --request PATCH \
--url https://api.range.org/v2/risk/config \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"attribution_signals": [
{
"signal": "ofac-sanctioned",
"enabled": true,
"severity": "severe"
}
],
"exposure_signals": [
{
"signal": "compliance-risk",
"enabled": true,
"thresholds": {
"low": 0.01,
"medium": 0.05,
"high": 0.2,
"severe": 0.5
}
}
],
"behaviours": [
{
"behaviour": "smurfing-structuring",
"enabled": true,
"ignore": false,
"thresholds": {
"low": 0.3,
"medium": 0.5,
"high": 0.7,
"severe": 0.9
}
}
]
}
'import requests
url = "https://api.range.org/v2/risk/config"
payload = {
"attribution_signals": [
{
"signal": "ofac-sanctioned",
"enabled": True,
"severity": "severe"
}
],
"exposure_signals": [
{
"signal": "compliance-risk",
"enabled": True,
"thresholds": {
"low": 0.01,
"medium": 0.05,
"high": 0.2,
"severe": 0.5
}
}
],
"behaviours": [
{
"behaviour": "smurfing-structuring",
"enabled": True,
"ignore": False,
"thresholds": {
"low": 0.3,
"medium": 0.5,
"high": 0.7,
"severe": 0.9
}
}
]
}
headers = {
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
attribution_signals: [{signal: 'ofac-sanctioned', enabled: true, severity: 'severe'}],
exposure_signals: [
{
signal: 'compliance-risk',
enabled: true,
thresholds: {low: 0.01, medium: 0.05, high: 0.2, severe: 0.5}
}
],
behaviours: [
{
behaviour: 'smurfing-structuring',
enabled: true,
ignore: false,
thresholds: {low: 0.3, medium: 0.5, high: 0.7, severe: 0.9}
}
]
})
};
fetch('https://api.range.org/v2/risk/config', 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.range.org/v2/risk/config",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'attribution_signals' => [
[
'signal' => 'ofac-sanctioned',
'enabled' => true,
'severity' => 'severe'
]
],
'exposure_signals' => [
[
'signal' => 'compliance-risk',
'enabled' => true,
'thresholds' => [
'low' => 0.01,
'medium' => 0.05,
'high' => 0.2,
'severe' => 0.5
]
]
],
'behaviours' => [
[
'behaviour' => 'smurfing-structuring',
'enabled' => true,
'ignore' => false,
'thresholds' => [
'low' => 0.3,
'medium' => 0.5,
'high' => 0.7,
'severe' => 0.9
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.range.org/v2/risk/config"
payload := strings.NewReader("{\n \"attribution_signals\": [\n {\n \"signal\": \"ofac-sanctioned\",\n \"enabled\": true,\n \"severity\": \"severe\"\n }\n ],\n \"exposure_signals\": [\n {\n \"signal\": \"compliance-risk\",\n \"enabled\": true,\n \"thresholds\": {\n \"low\": 0.01,\n \"medium\": 0.05,\n \"high\": 0.2,\n \"severe\": 0.5\n }\n }\n ],\n \"behaviours\": [\n {\n \"behaviour\": \"smurfing-structuring\",\n \"enabled\": true,\n \"ignore\": false,\n \"thresholds\": {\n \"low\": 0.3,\n \"medium\": 0.5,\n \"high\": 0.7,\n \"severe\": 0.9\n }\n }\n ]\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("X-API-KEY", "<api-key>")
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.patch("https://api.range.org/v2/risk/config")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"attribution_signals\": [\n {\n \"signal\": \"ofac-sanctioned\",\n \"enabled\": true,\n \"severity\": \"severe\"\n }\n ],\n \"exposure_signals\": [\n {\n \"signal\": \"compliance-risk\",\n \"enabled\": true,\n \"thresholds\": {\n \"low\": 0.01,\n \"medium\": 0.05,\n \"high\": 0.2,\n \"severe\": 0.5\n }\n }\n ],\n \"behaviours\": [\n {\n \"behaviour\": \"smurfing-structuring\",\n \"enabled\": true,\n \"ignore\": false,\n \"thresholds\": {\n \"low\": 0.3,\n \"medium\": 0.5,\n \"high\": 0.7,\n \"severe\": 0.9\n }\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.range.org/v2/risk/config")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["X-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"attribution_signals\": [\n {\n \"signal\": \"ofac-sanctioned\",\n \"enabled\": true,\n \"severity\": \"severe\"\n }\n ],\n \"exposure_signals\": [\n {\n \"signal\": \"compliance-risk\",\n \"enabled\": true,\n \"thresholds\": {\n \"low\": 0.01,\n \"medium\": 0.05,\n \"high\": 0.2,\n \"severe\": 0.5\n }\n }\n ],\n \"behaviours\": [\n {\n \"behaviour\": \"smurfing-structuring\",\n \"enabled\": true,\n \"ignore\": false,\n \"thresholds\": {\n \"low\": 0.3,\n \"medium\": 0.5,\n \"high\": 0.7,\n \"severe\": 0.9\n }\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"workspace_id": "ws-12345",
"attribution_signals": [
{
"signal": "ofac-sanctioned",
"enabled": true,
"severity": "severe"
}
],
"exposure_signals": [
{
"signal": "compliance-risk",
"enabled": true,
"thresholds": {
"low": 0.01,
"medium": 0.05,
"high": 0.2,
"severe": 0.5
},
"floor_usd": 1000
}
],
"behaviours": [
{
"behaviour": "smurfing-structuring",
"enabled": true,
"thresholds": {
"low": 0.01,
"medium": 0.05,
"high": 0.2,
"severe": 0.5
},
"ignore": false,
"tokens": [
"0xabc…",
"usdc"
]
}
],
"case_auto_create": {
"enabled": false,
"min_tier": "high"
},
"range_whitelist": {
"enabled": true
},
"updated_at": "2026-05-18T10:00:00Z"
}Authorizations
Authorization method required to allow user to access the api endpoints.
Body
application/json
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Signal ids to remove from attribution_signals.
Exposure signal ids to remove.
Behaviour ids to remove.
Response
200 - application/json
Example:
"ws-12345"
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Whether a risk_screen result at or above min_tier auto-creates a case.
Show child attributes
Show child attributes
Whether the Range address whitelist lowers severity. On by default.
Show child attributes
Show child attributes
Example:
"2026-05-18T10:00:00Z"
Last modified on October 8, 2026
Was this page helpful?