curl --request PATCH \
--url https://api.range.org/v2/cases/{id} \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"read": true,
"resolution": "dismissed",
"assignee": "compliance@example.com",
"note": "Known desk; verified with the client."
}
'import requests
url = "https://api.range.org/v2/cases/{id}"
payload = {
"read": True,
"resolution": "dismissed",
"assignee": "compliance@example.com",
"note": "Known desk; verified with the client."
}
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({
read: true,
resolution: 'dismissed',
assignee: 'compliance@example.com',
note: 'Known desk; verified with the client.'
})
};
fetch('https://api.range.org/v2/cases/{id}', 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/cases/{id}",
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([
'read' => true,
'resolution' => 'dismissed',
'assignee' => 'compliance@example.com',
'note' => 'Known desk; verified with the client.'
]),
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/cases/{id}"
payload := strings.NewReader("{\n \"read\": true,\n \"resolution\": \"dismissed\",\n \"assignee\": \"compliance@example.com\",\n \"note\": \"Known desk; verified with the client.\"\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/cases/{id}")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"read\": true,\n \"resolution\": \"dismissed\",\n \"assignee\": \"compliance@example.com\",\n \"note\": \"Known desk; verified with the client.\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.range.org/v2/cases/{id}")
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 \"read\": true,\n \"resolution\": \"dismissed\",\n \"assignee\": \"compliance@example.com\",\n \"note\": \"Known desk; verified with the client.\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"workspace_id": "<string>",
"title": "<string>",
"status": "open",
"severity": "severe",
"source_type": "risk_screen",
"subject": {
"type": "address",
"address": "0x742d35Cc6634C0532925a3b844Bc9e7595f2bD28",
"network": "ethereum",
"tx_hash": "0xabc...",
"name": "<string>"
},
"created_at": "<string>",
"updated_at": "<string>",
"viewed": true,
"autopilot_status": "queued",
"autopilot_recommendation": "escalate",
"available_actions": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"label": "<string>",
"kind": "select",
"options": [
"open"
],
"requires_note": true
}
],
"comments": [
{
"id": "<string>",
"author": "analyst@range.org",
"body": "<string>",
"created_at": "<string>"
}
],
"autopilot": {
"run_id": "<string>",
"status": "queued",
"runs_count": 123,
"recommendation": "escalate",
"confidence": "low",
"headline": "<string>",
"report": {},
"started_at": "<string>",
"completed_at": "<string>"
},
"resolution": "dismissed",
"source_id": "<string>",
"client_entity_id": "550e8400-e29b-41d4-a716-446655440000",
"assignee": "<string>",
"created_by": "<string>",
"resolved_at": "<string>",
"counterparty_deleted": true,
"evidence_summary": {}
}Update case status, resolution, assignee, or read state
curl --request PATCH \
--url https://api.range.org/v2/cases/{id} \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"read": true,
"resolution": "dismissed",
"assignee": "compliance@example.com",
"note": "Known desk; verified with the client."
}
'import requests
url = "https://api.range.org/v2/cases/{id}"
payload = {
"read": True,
"resolution": "dismissed",
"assignee": "compliance@example.com",
"note": "Known desk; verified with the client."
}
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({
read: true,
resolution: 'dismissed',
assignee: 'compliance@example.com',
note: 'Known desk; verified with the client.'
})
};
fetch('https://api.range.org/v2/cases/{id}', 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/cases/{id}",
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([
'read' => true,
'resolution' => 'dismissed',
'assignee' => 'compliance@example.com',
'note' => 'Known desk; verified with the client.'
]),
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/cases/{id}"
payload := strings.NewReader("{\n \"read\": true,\n \"resolution\": \"dismissed\",\n \"assignee\": \"compliance@example.com\",\n \"note\": \"Known desk; verified with the client.\"\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/cases/{id}")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"read\": true,\n \"resolution\": \"dismissed\",\n \"assignee\": \"compliance@example.com\",\n \"note\": \"Known desk; verified with the client.\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.range.org/v2/cases/{id}")
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 \"read\": true,\n \"resolution\": \"dismissed\",\n \"assignee\": \"compliance@example.com\",\n \"note\": \"Known desk; verified with the client.\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"workspace_id": "<string>",
"title": "<string>",
"status": "open",
"severity": "severe",
"source_type": "risk_screen",
"subject": {
"type": "address",
"address": "0x742d35Cc6634C0532925a3b844Bc9e7595f2bD28",
"network": "ethereum",
"tx_hash": "0xabc...",
"name": "<string>"
},
"created_at": "<string>",
"updated_at": "<string>",
"viewed": true,
"autopilot_status": "queued",
"autopilot_recommendation": "escalate",
"available_actions": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"label": "<string>",
"kind": "select",
"options": [
"open"
],
"requires_note": true
}
],
"comments": [
{
"id": "<string>",
"author": "analyst@range.org",
"body": "<string>",
"created_at": "<string>"
}
],
"autopilot": {
"run_id": "<string>",
"status": "queued",
"runs_count": 123,
"recommendation": "escalate",
"confidence": "low",
"headline": "<string>",
"report": {},
"started_at": "<string>",
"completed_at": "<string>"
},
"resolution": "dismissed",
"source_id": "<string>",
"client_entity_id": "550e8400-e29b-41d4-a716-446655440000",
"assignee": "<string>",
"created_by": "<string>",
"resolved_at": "<string>",
"counterparty_deleted": true,
"evidence_summary": {}
}Authorizations
Authorization method required to allow user to access the api endpoints.
Path Parameters
The case id (uuid).
Body
Mark this case read or unread for the caller only, without a timeline entry. Session-only; API-key callers receive 403.
open, in_review, resolved Only "dismissed" is settable here — "escalated" is only set via POST /escalate.
dismissed "compliance@example.com"
Why the status changes, recorded on the timeline. Required to dismiss a screening case (transaction_screening, counterparty_screening).
2000"Known desk; verified with the client."
Response
open, in_review, resolved severe, high, medium, low risk_screen, sanctions_screen, alert_event, manual, regulatory_filing, tie_out_break, corridor_discrepancy, redemption, transaction_screening, counterparty_screening Show child attributes
Show child attributes
In list responses, whether this case is read for the caller.
Status of the latest Autopilot run on this case, or null when Autopilot has not touched it.
queued, running, completed, failed, skipped Recommendation of the latest Autopilot run, or null when it has none yet.
escalate, dismiss, review Actions supported by this source and status. Existing write permissions still apply. Resolving via set_status requires resolution=dismissed.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
The latest Autopilot run on this case, or null. Its report is model output: render it as text, never as HTML.
Show child attributes
Show child attributes
dismissed, escalated, paid The client entity the case concerns (screening cases).
"550e8400-e29b-41d4-a716-446655440000"
Counterparty screening cases on one counterparty address or wallet: true when that counterparty entity or wallet account has since been deleted from the register. The case stays open. Absent on other cases.
What the case was opened on. A redemption case carries redemption_id, burn_time and deadline, linking it to GET /v2/redemptions/{id}.
Was this page helpful?