Network Northwest

Integration · Webhooks

Nothing is dropped because your endpoint had a bad afternoon.

Delivery is attempted five times with growing gaps. After the last one the event waits in the journal, and a missed webhook becomes a pull rather than a loss.

  • 5attempts
  • 2 hlongest gap
  • 30 daysjournal retention

Payload

What a decision looks like on your endpoint

check.decided

POST https://your-endpoint.example/hooks
X-NNW-Signature: t=1792…,v1=4f3a…

{
  "event": "check.decided",
  "check_id": "chk_3Qv8ks2mPb",
  "reference": "signup-55218",
  "verdict": "review",
  "reasons": [
    { "code": "name_match_soft", "signal": "identity", "score": 0.81 },
    { "code": "pep_tier_3",      "signal": "sanctions" }
  ],
  "evidence_bundle_id": "evb_7t2Kd9",
  "policy_version": "2026-09-01",
  "occurred_at": "2026-10-20T09:14:48Z"
}

Signatures are HMAC over the timestamp and body. Reject anything whose timestamp is more than five minutes from your clock, which is the whole replay defence.

Events

What is emitted

EventWhenCarries
check.decidedA verdict is reachedverdict, reasons, evidence bundle id
check.expiredCollection was never completedlast state, reason
monitoring.hitA list or register change affects an existing playersignal, original check id
evidence.sealedA bundle is closed and immutablebundle id, retention clock start
policy.publishedA new policy version takes effectmarket, version, effective from

Every event carries your own reference, so correlation never depends on storing our identifiers.