Skip to main content

SLA and escalation

Download this guide

Searches run asynchronously. When automation cannot finish, or when time limits are exceeded, SNH AI escalates with verification.action_required (typically HUMAN_ESCALATION). Organization-level policy controls SLA windows and which escalation sources are enabled. Related: Errors · Webhook events · Third-party ban

Workflow terminal conditions

Research phase

  • No contacts found: verification.action_required with HUMAN_ESCALATION
  • Third-party record detected: verification.action_required with THIRD_PARTY_RECORD (structured contact details)
  • Banned third-party vendor: When searchConfig.thirdPartyBan contains the detected vendor code, the THIRD_PARTY_RECORD webhook is suppressed, an audit notation is recorded, and the search continues with manual/outbound handling. Inbound redirects to a banned vendor emit HUMAN_ESCALATION with metadata.escalationSubtype: "THIRD_PARTY_BAN". See Third-party ban.

Outbound phase

  • Transient retry cap reached: After 3 transient retries per channel (voice/email/fax), the search is reassigned with HUMAN_ESCALATION
  • Workflow failure: After max retries, the workflow terminalizes with SYSTEM_FAILURE, UPSTREAM_ISSUE, or SLA_REACHED. SLA_REACHED corresponds to the workflow_failure_sla_timeout source in the per-source table below.

SLA and automatic reassignment

  • Frequency: Checks run every 4 hours (system-level, not configurable)
  • Search SLA: Default 24 hours (organization-configurable via policy.global.searchSlaMinutes)
  • Reassignment window: Default 48 hours (organization-configurable via policy.global.reassignmentWindowMinutes)
  • Weekend adjustment: Deadlines that fall on Saturday/Sunday move to the next Monday (system behavior)
  • Trigger: Whichever of SLA or reassignment window is reached first
  • Reason code: HUMAN_ESCALATION with metadata
  • Contact plan: Optionally included when policy.global.includeContactPlanInEscalation is true (default false)
Example weekend adjustment: search created Friday 5 PM with a 24-hour SLA → Saturday 5 PM is extended to Monday 5 PM.

Configuring SLA settings

These settings are configured at the organization level via unified policy (not per API request unless you use searchConfig.timing):
Per-search overrides: see Search-level configuration (timing.searchSlaMinutes).

Per-source human escalation (optional)

Disable escalation for specific reasons via policy.global.humanEscalation.enabledForSource. Set a source to false to prevent reassignment for that reason. Omitted sources remain enabled. searchConfig.escalation.disableAutoEscalation=true on a search always suppresses escalation for that search, regardless of this tenant-level setting.
Important: Disabling a source means the system will not escalate for that reason. Some searches may remain IN_PROGRESS until another condition is met. Use only when you accept that behavior. Existing organizations are unchanged if they do not set this config.

Important notes

  • When a workflow is terminalized, no further outbound attempts are made
  • Terminal conditions and automatic reassignment are idempotent (no duplicate escalation webhooks)
  • Contact plan data in escalation webhooks is opt-in per organization (includeContactPlanInEscalation)