Skip to content
RateStack
Capability · Exception Inbox

Lock exceptions, triaged — with AI suggestions and a permanent audit trail.

A dedicated inbox for lock exceptions (pricing anomalies, pullthrough drift, missed fills). Streams via SSE, surfaces AI-suggested resolutions, supports resolve / dismiss / embed / recompute actions, and writes every step to the platform-wide audit chain.

Overview

What it is, in one paragraph

The Exception Inbox surfaces lock-level anomalies that the platform detects across pricing, locks, and ratesheets. Each exception carries a kind (pricing drift, pullthrough drift, missed fill, sell-side mismatch), a severity, a summary of what changed, an AI-suggested resolution, and a link to the source events. Operators triage via resolve / dismiss / embed-for-context / recompute actions — every action writes to the audit chain. The Inbox pushes new exceptions via SSE; no client-side polling, no missed minute.

  • Streaming exceptions via SSE

    lock-service emits exception.* events as anomalies are detected; the Inbox subscribes via SSE for live updates.

  • AI-suggested resolution

    Each exception ships with a draft resolution from ai-service — accept, edit, dismiss, or recompute. Suggestion is grounded on the exception payload + source events.

  • Four canonical actions

    Resolve (apply the fix) · Dismiss (acknowledge as known) · Embed (attach as context for a future exception) · Recompute (rerun the underlying pricing or scoring).

  • Severity-aware routing

    warn vs error vs critical drives placement in the Inbox and the alerting policy (email, Slack on Business and above).

  • Audit-chained workflow

    Every action — open, suggest, resolve, dismiss, embed, recompute — writes to common_audit_log. The full lifecycle is replayable for compliance.

  • Cockpit anomaly callouts

    The Hedge Cockpit surfaces high-severity exceptions inline; one click drops you straight into the Inbox with the exception focused.

How it works

The pipeline, end to end.

Numbered steps from input to output. Each step maps to a specific subsystem you can inspect via OpenTelemetry.

  1. 1

    Detector fires

    lock-service runs detectors on pricing.computed, locks.*, and ratesheets.activated events. When a detector trips, an exception row is created with kind + severity + payload.

  2. 2

    AI suggester runs

    ai-service receives the exception payload, retrieves related lock + ratesheet + pricing trace, and drafts a resolution with citations. Suggester is rate-limited and audit-chained.

  3. 3

    Exception streams to the Inbox

    lock-service emits exception.* on the SSE channel and HMAC-signed webhooks. The Inbox subscribes; alerting policies fire on warn+.

  4. 4

    Operator triages

    From the Inbox: read the summary, inspect citations, pick an action. Accept the AI suggestion as-is, edit it, or override.

  5. 5

    Action applies + audits

    The chosen action runs (recompute reprices the lock; resolve marks the exception closed with the fix applied; embed attaches as context for the next detector run).

  6. 6

    Replay for compliance

    Auditors can walk the exception's full lifecycle from the audit chain — detector fire, AI suggestion, operator action, downstream effects.

Hands on

Subscribe to the SSE exception stream

Live cURL sample — copy, paste, ship.

# Subscribe to the SSE exception stream
curl -N "https://api.ratestack.com/v1/locks/exceptions/stream?desk=primary" \
  -H "X-API-Key: $RATESTACK_KEY"

# Each event looks like:
# event: lock.exception
# data: {
#   "id":           "exc_4f7a",
#   "lockId":       "lck_8a7c",
#   "kind":         "PULLTHROUGH_DRIFT",
#   "severity":     "warn",
#   "openedAt":     "2026-05-26T13:42:11Z",
#   "summary":      "Pullthrough confidence fell 0.18 vs prior session",
#   "suggestion":   { "action": "RECOMPUTE", "reason": "fresh ratesheet at 14:00 ..." },
#   "auditChainId": "audit_9b1a"
# }

Why this matters

The pain it removes.

Exceptions stop hiding in inboxes

Email is not a triage queue. The Exception Inbox is a single named surface for the desk, with SSE push and audit-chained closure.

AI accelerates triage

Suggested resolutions cut median time-to-resolve. Operators stay in control; nothing applies without explicit acceptance.

Compliance gets the whole story

Every detector fire, AI suggestion, and operator action lands in the audit chain. The exception's lifecycle replays deterministically.

Frequently asked

Direct answers, no marketing spin.

What kinds of exceptions does the platform detect?

Pricing drift (price changed >X between Stage 1 and Stage 2), pullthrough drift (confidence drop), missed fills (lock expired with no fund), sell-side mismatch (sell-side completion doesn't reconcile to lock), and ratesheet anomalies (column count change, unexpected null surge). New detectors ship continuously.

Can we add custom detectors?

On Enterprise, yes. Custom detectors are JVM functions registered against the event stream; they run alongside built-ins. Talk to sales for the SDK pattern.

Does dismissing an exception affect future detection?

Optionally. The 'embed' action attaches the dismissed exception as context — the next detector run can read it as a known acknowledged drift. Plain 'dismiss' is acknowledgement only.

How does this differ from a generic alerting tool?

Exceptions are platform-native — the detectors live next to the rule engine, the AI suggester reads the actual lock and pricing trace, and the audit chain spans detection through resolution. A generic alerter is a notification layer; the Inbox is the workflow.

Can I export exception history?

Yes. The list endpoint paginates with filters; CSV / NDJSON export is available on Business and above.

Ready to see it on your data?

Wire lock exceptions, triaged — with ai suggestions and a permanent audit trail. up to your real workflow.

We'll spin you a sandbox, load your actual ratesheets, and walk you through this capability against your top scenarios.

Exception Inbox — AI-assisted lock exception triage | RateStack