Use case guide

Fraud review routing

Control fraud losses and review cost by routing high‑uncertainty cases to manual review or deeper checks.

Overview

Problem

Fraud systems are expensive when you over‑review, and catastrophic when you under‑review. Raw scores drift and miscalibrate over time.

Reality Signal

Convert a score into prob_est + uncertainty and a boolean decision.

Policy

Auto‑approve only when decision=true and uncertainty is low. If uncertainty is high or decision=false, send to manual review or deeper checks.

Architecture

  1. Base model produces a score for the decision you care about.
  2. Send the score to /decide.
  3. Use prob_est + uncertainty to route safely.
  4. When the true outcome is known, call /feedback to improve calibration.
Routing actions: automate, reroute, reprompt, or escalate.

1) Decide + route fraud cases

Call /decide with your model’s score. Route based on calibrated probability and uncertainty.

Request
bash
curl -X POST https://onprem-api-sowl.jollysand-1b9ed42e.swedencentral.azurecontainerapps.io/decide \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "features": { "score": 0.82 }
  }'
Response
json
{
  "decision_id": 123,
  "prob_est": 0.62,
  "uncertainty": 0.08,
  "decision": false
}
Use prob_est + uncertainty as routing signals.

2) Feedback from investigation

When ground truth is known, send /feedback with the decision_id so calibration improves over time.

Feedback (cURL)
bash
curl -X POST https://onprem-api-sowl.jollysand-1b9ed42e.swedencentral.azurecontainerapps.io/feedback \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "decision_id": 123,
    "feedback": 1,
    "force_retrain": false
  }'

Reference implementation

Python
python
import requests

API_URL = "https://onprem-api-sowl.jollysand-1b9ed42e.swedencentral.azurecontainerapps.io"
HEADERS = {"x-api-key": "YOUR_API_KEY"}

def rc_decide(score: float):
    r = requests.post(f"{API_URL}/decide", json={"features": {"score": score}, headers=HEADERS)
    r.raise_for_status()
    return r.json()

fraud_score = 0.78
rc = rc_decide(fraud_score)

if rc["decision"] and rc["uncertainty"] <= 0.12:
    approve_transaction()
else:
    send_to_fraud_review()
Tune uncertainty guardrails to match review capacity; Reality Signal helps keep your policy stable as score distributions drift.