Skip to main content
Policies define the thresholds that determine whether contact data is accepted, flagged for review, or rejected. Every verify call evaluates results against a policy to produce an actionable recommendation.

Built-in policies

Reach ships with four policies covering common use cases:
PolicyAddress ConfidenceMatch LevelEmail ConfidencePhone RequiredUse case
strict0.90premise0.85yesKYC, fraud prevention, compliance
shipping0.70street0.50noPhysical delivery, e-commerce
standard0.55street0.45noGeneral verification (default)
permissive0.30locality0.30noLead capture, marketing

Choosing a policy

Requires premise-level address matching (0.90 confidence), high email confidence (0.85), and phone verification. Use for financial services, identity verification, and any flow where false positives are costly.
Requires street-level matching (0.70 confidence) and moderate email confidence (0.50). Phone is optional. Use for e-commerce checkout, delivery address validation, and logistics.
The default policy. Requires street-level matching (0.55 confidence) and basic email confidence (0.45). Suitable for most use cases where you want verification without being overly restrictive.
Accepts locality-level matching (0.30 confidence) with minimal thresholds. Use for lead forms, newsletter signups, and scenarios where you want to capture data even if it’s imprecise.

Using a policy

CLI

lqt verify -a "10 Downing St, London, GB" --policy shipping -o json

Environment variable

export LOQATE_POLICY=shipping
lqt verify -a "10 Downing St, London, GB" -o json

Policy resolution order

When multiple policy sources are present, Reach resolves in this order:
  1. --policy-file flag (custom policy JSON file)
  2. --policy flag (named built-in policy)
  3. LOQATE_POLICY environment variable
  4. .loqate-policy.json file in the current directory
  5. standard (default)

Custom policies

Create a JSON file to define your own thresholds:
custom-policy.json
{
  "name": "my-ecommerce-policy",
  "description": "Balanced policy for e-commerce checkout",
  "address": {
    "min_confidence": 0.65,
    "min_match_level": "street",
    "reject_verification_status": ["U", "R"]
  },
  "email": {
    "min_confidence": 0.50,
    "allow_catch_all": true,
    "reject_disposable": true
  },
  "phone": {
    "min_confidence": 0.40,
    "required": false
  }
}

Custom policy fields

Address

FieldTypeDescription
min_confidencenumberMinimum confidence score (0–1) to accept
min_match_levelstringMinimum match level: premise, street, locality, administrative_area, country
reject_verification_statusarrayVerification statuses to auto-reject (e.g., ["U", "R"])

Email

FieldTypeDescription
min_confidencenumberMinimum confidence score (0–1) to accept
allow_catch_allbooleanWhether to accept catch-all email domains
reject_disposablebooleanWhether to reject disposable/temporary email domains

Phone

FieldTypeDescription
min_confidencenumberMinimum confidence score (0–1) to accept
requiredbooleanWhether phone verification is mandatory

Validate a custom policy

lqt policy validate custom-policy.json

Use a custom policy

lqt verify -a "10 Downing St, London, GB" --policy-file custom-policy.json -o json

Register via MCP

In an MCP session, use the set_policy tool to register a custom policy for the current session. This is useful when your agent needs to switch policies based on context.