curl --request POST \
--url https://app.sphinxhq.com/api/cases/{id}/start/ \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"allow_restart": false
}
'import requests
url = "https://app.sphinxhq.com/api/cases/{id}/start/"
payload = { "allow_restart": False }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({allow_restart: false})
};
fetch('https://app.sphinxhq.com/api/cases/{id}/start/', 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://app.sphinxhq.com/api/cases/{id}/start/",
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([
'allow_restart' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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://app.sphinxhq.com/api/cases/{id}/start/"
payload := strings.NewReader("{\n \"allow_restart\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://app.sphinxhq.com/api/cases/{id}/start/")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"allow_restart\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.sphinxhq.com/api/cases/{id}/start/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"allow_restart\": false\n}"
response = http.request(request)
puts response.read_body{
"id": 123,
"external_id": "<string>",
"origin_url": "<string>",
"customer": {
"id": 123,
"full_name": "<string>",
"external_id": "<string>",
"customer_type": "INDIVIDUAL"
},
"note": "<string>",
"risk_score": 123,
"outcome": "ACCEPTED",
"is_started": true,
"is_complete": true,
"failed": true,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"checks": [
{
"id": 123,
"risk_score": 123,
"title": "<string>",
"note": "<string>",
"reasoning": [
"<string>"
],
"outcome": "ACCEPTED",
"status": "PENDING",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"input_details": {},
"check_type": "UBO_RESOLUTION",
"delete_after": -1
}
],
"rfi": {
"body": "<string>",
"title": "<string>",
"details": {}
},
"webhook_url": "<string>",
"delete_after": -1,
"metadata": {},
"sync_platforms": {}
}{
"id": 123,
"external_id": "<string>",
"origin_url": "<string>",
"customer": {
"id": 123,
"full_name": "<string>",
"external_id": "<string>",
"customer_type": "INDIVIDUAL"
},
"note": "<string>",
"risk_score": 123,
"outcome": "ACCEPTED",
"is_started": true,
"is_complete": true,
"failed": true,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"checks": [
{
"id": 123,
"risk_score": 123,
"title": "<string>",
"note": "<string>",
"reasoning": [
"<string>"
],
"outcome": "ACCEPTED",
"status": "PENDING",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"input_details": {},
"check_type": "UBO_RESOLUTION",
"delete_after": -1
}
],
"rfi": {
"body": "<string>",
"title": "<string>",
"details": {}
},
"action_taken": "noop_already_running",
"message": "<string>",
"webhook_url": "<string>",
"delete_after": -1,
"metadata": {},
"sync_platforms": {}
}"<unknown>"Start or Rerun Case
Starts processing for a case. If the case is already running, returns 202 with action_taken="noop_already_running"; no new work is triggered. If the case is already completed (DECIDED/SUBMITTING/SUBMITTED), the default behavior is 202 with action_taken="noop_already_started" — pass allow_restart=true to instead archive the original case and create a new one with the same external_id (but a new numeric id). Cases stuck with engaged=True for more than 30 minutes are auto-rescued and restarted in place on the same case (no new id), regardless of allow_restart. Dual-config parent cases use step-based running detection (they legitimately run with engaged=False while children process) and are not subject to stale rescue. For standard cases, at least one check is required. For dual config cases (KYB+KYC), documents are required instead.
curl --request POST \
--url https://app.sphinxhq.com/api/cases/{id}/start/ \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"allow_restart": false
}
'import requests
url = "https://app.sphinxhq.com/api/cases/{id}/start/"
payload = { "allow_restart": False }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({allow_restart: false})
};
fetch('https://app.sphinxhq.com/api/cases/{id}/start/', 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://app.sphinxhq.com/api/cases/{id}/start/",
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([
'allow_restart' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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://app.sphinxhq.com/api/cases/{id}/start/"
payload := strings.NewReader("{\n \"allow_restart\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://app.sphinxhq.com/api/cases/{id}/start/")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"allow_restart\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.sphinxhq.com/api/cases/{id}/start/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"allow_restart\": false\n}"
response = http.request(request)
puts response.read_body{
"id": 123,
"external_id": "<string>",
"origin_url": "<string>",
"customer": {
"id": 123,
"full_name": "<string>",
"external_id": "<string>",
"customer_type": "INDIVIDUAL"
},
"note": "<string>",
"risk_score": 123,
"outcome": "ACCEPTED",
"is_started": true,
"is_complete": true,
"failed": true,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"checks": [
{
"id": 123,
"risk_score": 123,
"title": "<string>",
"note": "<string>",
"reasoning": [
"<string>"
],
"outcome": "ACCEPTED",
"status": "PENDING",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"input_details": {},
"check_type": "UBO_RESOLUTION",
"delete_after": -1
}
],
"rfi": {
"body": "<string>",
"title": "<string>",
"details": {}
},
"webhook_url": "<string>",
"delete_after": -1,
"metadata": {},
"sync_platforms": {}
}{
"id": 123,
"external_id": "<string>",
"origin_url": "<string>",
"customer": {
"id": 123,
"full_name": "<string>",
"external_id": "<string>",
"customer_type": "INDIVIDUAL"
},
"note": "<string>",
"risk_score": 123,
"outcome": "ACCEPTED",
"is_started": true,
"is_complete": true,
"failed": true,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"checks": [
{
"id": 123,
"risk_score": 123,
"title": "<string>",
"note": "<string>",
"reasoning": [
"<string>"
],
"outcome": "ACCEPTED",
"status": "PENDING",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"input_details": {},
"check_type": "UBO_RESOLUTION",
"delete_after": -1
}
],
"rfi": {
"body": "<string>",
"title": "<string>",
"details": {}
},
"action_taken": "noop_already_running",
"message": "<string>",
"webhook_url": "<string>",
"delete_after": -1,
"metadata": {},
"sync_platforms": {}
}"<unknown>"Authorizations
OAuth2 access token obtained from POST /api/oauth/token/ using client credentials.
Path Parameters
A unique integer value identifying this generic case.
Body
Response
Read-only serializer for GenericCase with related objects.
External ID for the case. Auto-generated UUID if not provided. Stable across reruns.
Deprecated alias for external_id.
Nested customer serializer for GenericCase responses.
Show child attributes
Show child attributes
Risk score (max of check risk scores for the case).
ACCEPTED- AcceptedREJECTED- RejectedPENDING- Pending
ACCEPTED, REJECTED, PENDING, null Show child attributes
Show child attributes
Show child attributes
Show child attributes
Webhook sent on case completion.
511Days until deletion. -1 means never delete.
-2147483648 <= x <= 2147483647Case-specific metadata in JSON format.
External platform references for outbound sync. List of dicts, e.g. [{"domain": "bofi--dev.sandbox.my.salesforce.com", "id": "500WA..."}]
Was this page helpful?

