When enrichment runs
Inline during transaction creation:- You submit
POST /v3/transactions/withapplicant.device.ip(or any party’s device IP). - Didit looks up the IP in an in-memory cache (24-hour TTL).
- If not cached, checks the shared IP-enrichment table (~30-day freshness).
- If stale or missing, resolves the IP through Didit’s enrichment pipeline with multi-provider failover.
- Enriched fields are written back to the transaction record and made available to rules.
Enriched fields
| Field | Description |
|---|---|
ip_country | Country name |
ip_country_code | ISO 3166-1 alpha-3 |
ip_state | Subdivision (state, region) |
ip_city | City name |
latitude, longitude | Geographic coordinates |
isp | Internet service provider name |
organization | Registering organization name |
is_vpn_or_tor | Boolean — the IP is a known VPN or Tor exit |
is_data_center | Boolean — the IP belongs to a hosting/data-center range |
time_zone | IANA time zone (e.g. America/New_York) |
time_zone_offset | Offset from UTC |
asn_number | Autonomous System Number |
asn_organization | ASN’s registered organization |
connection_type | mobile, broadband, dialup, corporate, … |
carrier | Mobile carrier (for mobile IPs) |
proxy_type | VPN, TOR, PUBLIC_PROXY, or null |
Using enriched fields in rules
Any of the enriched fields can be a rule condition. Common patterns: High-risk jurisdiction by IPCache layers
| Layer | TTL | Purpose |
|---|---|---|
| In-memory cache | 24 hours | Sub-millisecond lookup for hot IPs |
| Shared IP-enrichment table | ~30 days | Shared across instances; cheaper than re-resolving |
| Enrichment pipeline | n/a | Fresh data when nothing else has it |
Failure behavior
- Transaction creation never fails because enrichment failed.
- Missing enrichment fields simply don’t match any rule conditions that reference them.
- Alerts about stuck enrichment are surfaced to your ops team via internal monitoring; no customer-facing impact.
Validity filtering
Non-routable IPs are skipped before enrichment:- Private (10/8, 172.16/12, 192.168/16)
- Loopback (127/8)
- Link-local (169.254/16)
- Multicast, unspecified
Inspecting enrichment for a transaction
Via API. The transaction response includes anip_enrichment block:
Privacy considerations
- Raw IPs are stored with the transaction.
- Enrichment data lives on a shared IP-keyed table — not per user.
- Right-to-be-forgotten deletion removes IPs from the transaction; the shared cache entry remains (it’s not personally identifying).
Next steps
Rules
Use enriched fields in conditions.
Rule library
Preset IP-based rules.
Response schema
Where IP enrichment appears.