SearchConfigDto Schema
SearchConfigDto captures per-search policy overrides. Omitted fields fall back to tenant policy, then system defaults. All top-level sections are optional, with one conditional requirement: research.skipResearch=true requires at least one outbound.contactHints[] entry with email, phone, or fax.
It can be supplied in two places on a create-order request:
searchTypes[i].searchConfig— per-search overrides. When present (even as an empty{}), it fully replaces any request-leveldefaultSearchConfigfor that search.defaultSearchConfig— order-level default applied to every created search whose per-searchsearchConfigis absent.
Merge semantics are whole-object replace, not section-wise merge. If you set
searchTypes[0].searchConfig = { channels: { email: true } }, only the channels override is applied for that search; timing, outbound, etc. revert to tenant/system defaults — they are not inherited from defaultSearchConfig.Fields
Most integrations only need one or two sections at a time. Common starting points:- Use
channelsto prefer or disable outbound channels. - Use
timingto tune SLA and business-hours behavior. - Use
outbound.contactHintswithresearch.skipResearch=truewhen you already know the right verification contact and want to bypass automated research. - Use
notificationswhen a specific search needs different webhook routing from the rest of the order.
Complete Example
ASearchConfigDto combining most sections, as you might attach to a single search:
- The
EMPLOYMENTsearch gets its per-search overrides —defaultSearchConfigis not merged in (e.g.outboundWindowMinutesfalls back to tenant policy, not to120). - The
EDUCATIONsearch has no per-searchsearchConfig, so it usesdefaultSearchConfig(outboundWindowMinutes: 120on top of tenant policy).
Validation Highlights
channels.blockedDestinationsandchannels.allowedDestinationsare mutually exclusive; each is capped at 100 entries.- Each
outbound.contactHints[]entry must include at least one ofemail,phone, orfax; max 50 hints. timing.businessHours.startTimemust be strictly earlier thantiming.businessHours.endTime;allowedDaysvalues must be in0–6.timing.businessHours.timezonemust be a valid IANA timezone (validated viaIntl.DateTimeFormat).inbound.requireManualReview: truecombined withinbound.autoCompleteOnVerification: falseis rejected at validation time — omitautoCompleteOnVerificationor set it totrue.escalation.escalationWebhookUrland any URL fields insidenotifications.webhookOverrideare validated as URLs.research.skipResearch: truerequiresoutbound.contactHintswith at least one reachable contact (email,phone, orfax) and bypasses the research agent at runtime. Channel-disabled contact methods are auto-suppressed.- Unknown fields on
searchConfigare not part of the public contract and may be ignored by runtime policy resolution; send only the fields documented above.
Behavior Precedence
Once a search is created, the runtime resolves its effective policy by layering tenant defaults under the per-search overrides. These precedence rules apply at runtime:- Escalation gating:
escalation.disableAutoEscalation=truewins over tenant-levelhumanEscalation.enabledForSource. WhendisableAutoEscalation=false(or omitted), the per-source tenant flag is consulted. - Escalation webhook routing:
notifications.webhookOverride>escalation.escalationWebhookUrl> tenant webhook config. Set one or the other, not both. - Inbound terminal routing:
inbound.requireManualReview=trueroutes verified inbounds toACTION_REQUIREDregardless ofautoCompleteOnVerification. WhenrequireManualReview=false,autoCompleteOnVerification=falseholds the search for QA asACTION_REQUIRED;autoCompleteOnVerification=true(default) auto-completes. - Outbound cancel on terminal inbound: a pending third-party task always cancels outbound, regardless of
outbound.cancelOutboundOnTerminalInbound. - Organization preferences: applied after per-search channel overrides. An org-level channel block still suppresses a channel that
searchConfig.channels.*enables — this is a safety rail. - Notification suppression:
notifications.suppressNotificationsonly affects intermediateverification.notificationevents. Terminalverification.completedandverification.action_requiredalways fire. - Raw inbound stripping: only applied when
notifications.includeRawInboundInWebhookis explicitlyfalse. Tenants that have not set the flag retain current behavior.
Merge Semantics
- When
searchTypes[i].searchConfigisundefinedornull,defaultSearchConfigapplies for that search. - When
searchTypes[i].searchConfigis present — including{}— it fully replacesdefaultSearchConfigfor that search. Section-wise merging is not performed.
Related Schemas
- VerificationRequestDto — where
defaultSearchConfigis attached. - SearchTypeDto — where per-search
searchConfigis attached. - WebhookConfigDto — shape of
notifications.webhookOverride.