Feedback and learning
Every decision can take feedback. It is how Ward adapts to your customers without anyone writing rules.
curl https://api.mandatelabs.ai/api/v1/decide/dec_01JC4Z.../feedback \
-H "X-API-Key: $WARD_API_KEY" -H "Content-Type: application/json" \
-d '{"correct": false, "right_decision": "DECLINE", "label": "money_laundering", "threshold": "too_loose"}'
client.feedback("dec_01JC4Z...", correct=False, right_decision="DECLINE", label="money_laundering", threshold="too_loose")
await client.feedback("dec_01JC4Z...", { correct: false, right_decision: "DECLINE", label: "money_laundering", threshold: "too_loose" });
| Field | Values |
|---|---|
correct (required) |
Was the decision right? |
right_decision |
APPROVE, STEP_UP, DECLINE |
label |
fraud, scam, mule, money_laundering, sanctions, first_party_misuse, document_altered, account_takeover, genuine, false_positive, defaulted, delinquent, repaid, performing, other |
threshold |
ok, too_strict, too_loose: feeds GET /api/v1/thresholds/suggestions |
note |
Free text for your team |
KYC applicants take outcomes through POST /api/v1/kyc/outcomes.
The outcome loop
- Snapshot. Every answer keeps the numbers it saw (scores, signal weights, totals), never the input.
- Labels. Your reviewers' feedback, or bulk outcomes (up to 5,000 per call to
POST /api/v1/learning/outcomes). - Train. Per decision type, on your own labelled cases only (at least 200, with 30 of each class).
- Gate. The new model is tested on your newer cases against the current champion. It is promoted only if its AUC is at least 0.01 higher with a 95% interval above zero; otherwise it stays in shadow.
- Serve. The champion's probability comes back as
client_model, advisory: it never changes Ward's decision until you approve it to decide.
Sandbox decisions never train. Models are per client; your data never trains another client's model. GET /api/v1/learning/models shows each model, its drift (PSI) and its report; retire one with POST /api/v1/learning/models/{id}/retire.
Selection bias
Reviewers mostly see what Ward flagged. With review sampling on, a random share of APPROVE decisions is marked review_sample: true so they get labelled too.