SLA and escalation
Searches run asynchronously. When automation cannot finish, or when time limits are exceeded, SNH AI escalates withverification.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_requiredwithHUMAN_ESCALATION - Third-party record detected:
verification.action_requiredwithTHIRD_PARTY_RECORD(structured contact details) - Banned third-party vendor: When
searchConfig.thirdPartyBancontains the detected vendor code, theTHIRD_PARTY_RECORDwebhook is suppressed, an audit notation is recorded, and the search continues with manual/outbound handling. Inbound redirects to a banned vendor emitHUMAN_ESCALATIONwithmetadata.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, orSLA_REACHED.SLA_REACHEDcorresponds to theworkflow_failure_sla_timeoutsource 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_ESCALATIONwith metadata - Contact plan: Optionally included when
policy.global.includeContactPlanInEscalationistrue(defaultfalse)
Configuring SLA settings
These settings are configured at the organization level via unified policy (not per API request unless you usesearchConfig.timing):
Per-search overrides: see Search-level configuration (
timing.searchSlaMinutes).
Per-source human escalation (optional)
Disable escalation for specific reasons viapolicy.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.
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)