Warddocs
Concepts

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

  1. Snapshot. Every answer keeps the numbers it saw (scores, signal weights, totals), never the input.
  2. Labels. Your reviewers' feedback, or bulk outcomes (up to 5,000 per call to POST /api/v1/learning/outcomes).
  3. Train. Per decision type, on your own labelled cases only (at least 200, with 30 of each class).
  4. 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.
  5. 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.