Use case guide

KYC / compliance triage

Approve obvious passes automatically, route borderline cases to stricter checks, and send high‑uncertainty decisions to compliance review.

Overview

Problem

Compliance pipelines often suffer hidden costs: either you over‑escalate (too many manual reviews) or you under‑escalate (miss risky cases).

Reality Signal

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

Policy

Auto‑pass when prob_est is high and uncertainty is low. If uncertainty is high, escalate to compliance. Otherwise run additional checks or reroute to a stronger model.

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 + triage

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 final decision

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()

kyc_score = 0.86
rc = rc_decide(kyc_score)

if rc["prob_est"] >= 0.90 and rc["uncertainty"] <= 0.10:
    approve()
elif rc["uncertainty"] > 0.20:
    send_to_compliance_review()
else:
    run_additional_checks()
Policy knobs: raise the pass threshold for stricter regimes; lower it for faster onboarding with more downstream checks.