API-first decision intelligence.

Integrate Thalra into investment workflows with a clear evaluation contract. Core remains the source of truth for decisions.

At a glance

REST evaluate
Implemented
Official SDKs
Planned
MCP support
Planned

What the API does

  • Accept customer, portfolio, behaviour and action context for a proposed investment action.
  • Return a governed decision: ALLOW, SUPPORT, WARN, CONFIRM or REVIEW.
  • Include signals, policy results and an evidence object with pack, engine and fingerprint fields suitable for your audit logging.

Authentication is provided at the Core host with a server-side bearer token in production environments. Website proxies never expose Core credentials to the browser.

Evaluate examples

Primary Core route: POST /evaluate. Examples below use verified synthetic scenario A (ALLOW / D00).

Request

Request JSON

{
  "customer": {
    "customer_id": "cust_a",
    "risk_profile": "HIGH",
    "liquid_assets": "200000"
  },
  "portfolio": {
    "portfolio_value": "100000",
    "current_high_risk_exposure_pct": 0.25
  },
  "behaviour": {
    "high_risk_trades_last_30_days": 2,
    "high_risk_trades_previous_30_days": 2,
    "recent_portfolio_loss_pct": 0.02
  },
  "action": {
    "action_id": "act_a",
    "action_type": "BUY",
    "asset_id": "asset_hr_1",
    "asset_category": "HIGH_RISK_EQUITY",
    "asset_risk": "HIGH",
    "amount": "8000",
    "asset_exposure_pct_before_action": 0.08,
    "asset_exposure_pct_after_action": 0.15,
    "high_risk_exposure_pct_after_action": 0.3
  }
}

Response highlight

Response JSON

{
  "decision": "ALLOW",
  "decision_rule_id": "D00",
  "decision_reason": "Rule D00: no policy triggered; proceed normally.",
  "signals": [
    {
      "signal": "CONCENTRATION_INCREASE",
      "status": "NOT_TRIGGERED",
      "severity": null
    },
    {
      "signal": "HIGH_RISK_EXPOSURE_INCREASE",
      "status": "NOT_TRIGGERED",
      "severity": null
    },
    {
      "signal": "RISK_PROFILE_MISMATCH",
      "status": "NOT_TRIGGERED",
      "severity": null
    },
    {
      "signal": "RECENT_RISK_ESCALATION",
      "status": "NOT_TRIGGERED",
      "severity": null
    },
    {
      "signal": "RECENT_LOSS_CONTEXT",
      "status": "NOT_TRIGGERED",
      "severity": null
    },
    {
      "signal": "LIQUIDITY_IMPACT",
      "status": "NOT_TRIGGERED",
      "severity": null
    }
  ],
  "policy_results": [
    {
      "policy_id": "severe_concentration_policy",
      "status": "NOT_TRIGGERED"
    },
    {
      "policy_id": "severe_liquidity_impact_policy",
      "status": "NOT_TRIGGERED"
    },
    {
      "policy_id": "material_multi_factor_review",
      "status": "NOT_TRIGGERED"
    },
    {
      "policy_id": "multiple_material_context_signals",
      "status": "NOT_TRIGGERED"
    },
    {
      "policy_id": "single_material_context_signal",
      "status": "NOT_TRIGGERED"
    },
    {
      "policy_id": "single_low_context_signal",
      "status": "NOT_TRIGGERED"
    }
  ],
  "evidence": {
    "evaluation_id": "eval_example_scenario_a",
    "policy_pack_id": "default-investment-v0",
    "policy_version": "0.1.0",
    "engine_version": "0.2.0",
    "policy_config_fingerprint": "fba0a8449fba1c13938f0193e96bb7ada5e541335167ca5d649d82d9a8b1b126",
    "policies_triggered": []
  }
}