diff --git a/CHANGELOG.md b/CHANGELOG.md
index 82e7dcad..9a6b96e9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,15 @@
CHANGELOG
=========
+4.4.0 (unreleased)
+------------------
+
+* Added `residential` field to the `Anonymizer` response record. This is
+ an `AnonymizerFeed` record containing `confidence`, `networkLastSeen`,
+ and `providerName` fields with residential proxy data for the network.
+ `residential` may be populated even when none of the other fields on
+ `Anonymizer` are set.
+
4.3.0 (2026-05-12)
------------------
diff --git a/lychee.toml b/lychee.toml
index f51c4df8..93e066a0 100644
--- a/lychee.toml
+++ b/lychee.toml
@@ -4,8 +4,10 @@
# Run locally with:
# lychee './**/*.md' './src/**/*.java' './pom.xml'
-# Include URL fragments in checks
-include_fragments = true
+# Include URL fragments in checks. lychee 0.24 replaced the boolean flag with
+# an enum; "full" checks both anchor fragments (`#section`) and text fragments
+# (`#:~:text=`).
+include_fragments = "full"
# Don't allow any redirects, so links that have moved are surfaced and updated
# to their canonical destination.
diff --git a/mise.lock b/mise.lock
index 3f5ac0ff..67873b7a 100644
--- a/mise.lock
+++ b/mise.lock
@@ -1,41 +1,51 @@
# @generated - this file is auto-generated by `mise lock` https://mise.en.dev/dev-tools/mise-lock.html
[[tools.hugo]]
-version = "0.161.1"
+version = "0.164.0"
backend = "aqua:gohugoio/hugo"
[tools.hugo."platforms.linux-arm64"]
-checksum = "sha256:382371ec3208236fb854ced51781f859b6c27a7d066b8fe90594eba14ba76d00"
-url = "https://github.com/gohugoio/hugo/releases/download/v0.161.1/hugo_0.161.1_linux-arm64.tar.gz"
+checksum = "sha256:948ee5f0ed30175f31937d592d63a2712f0761a69f1cbe812f780eb918a08b8e"
+url = "https://github.com/gohugoio/hugo/releases/download/v0.164.0/hugo_0.164.0_linux-arm64.tar.gz"
+url_api = "https://api.github.com/repos/gohugoio/hugo/releases/assets/468320173"
[tools.hugo."platforms.linux-arm64-musl"]
-checksum = "sha256:382371ec3208236fb854ced51781f859b6c27a7d066b8fe90594eba14ba76d00"
-url = "https://github.com/gohugoio/hugo/releases/download/v0.161.1/hugo_0.161.1_linux-arm64.tar.gz"
+checksum = "sha256:948ee5f0ed30175f31937d592d63a2712f0761a69f1cbe812f780eb918a08b8e"
+url = "https://github.com/gohugoio/hugo/releases/download/v0.164.0/hugo_0.164.0_linux-arm64.tar.gz"
+url_api = "https://api.github.com/repos/gohugoio/hugo/releases/assets/468320173"
[tools.hugo."platforms.linux-x64"]
-checksum = "sha256:fae28bf7909c1a42d1365b89d2e9e3d4194fbe5968ae0dd5504f562381018a1d"
-url = "https://github.com/gohugoio/hugo/releases/download/v0.161.1/hugo_0.161.1_linux-amd64.tar.gz"
+checksum = "sha256:d9c8b17285ea4ec004d9f814273ea910f2051ce02c284993fd1f91ba455ae50d"
+url = "https://github.com/gohugoio/hugo/releases/download/v0.164.0/hugo_0.164.0_linux-amd64.tar.gz"
+url_api = "https://api.github.com/repos/gohugoio/hugo/releases/assets/468320170"
[tools.hugo."platforms.linux-x64-musl"]
-checksum = "sha256:fae28bf7909c1a42d1365b89d2e9e3d4194fbe5968ae0dd5504f562381018a1d"
-url = "https://github.com/gohugoio/hugo/releases/download/v0.161.1/hugo_0.161.1_linux-amd64.tar.gz"
+checksum = "sha256:d9c8b17285ea4ec004d9f814273ea910f2051ce02c284993fd1f91ba455ae50d"
+url = "https://github.com/gohugoio/hugo/releases/download/v0.164.0/hugo_0.164.0_linux-amd64.tar.gz"
+url_api = "https://api.github.com/repos/gohugoio/hugo/releases/assets/468320170"
[tools.hugo."platforms.macos-arm64"]
-checksum = "sha256:b12e1cbebacf61f9cf67e0046c835142e70c829da7c16b05c1ec64a68885ee80"
-url = "https://github.com/gohugoio/hugo/releases/download/v0.161.1/hugo_0.161.1_darwin-universal.pkg"
+checksum = "sha256:c994e2cc6946838bb76521039509a7ce71282827e7035e344b6c225a83a5d0d3"
+url = "https://github.com/gohugoio/hugo/releases/download/v0.164.0/hugo_0.164.0_darwin-universal.pkg"
+url_api = "https://api.github.com/repos/gohugoio/hugo/releases/assets/468320272"
[tools.hugo."platforms.macos-x64"]
-checksum = "sha256:b12e1cbebacf61f9cf67e0046c835142e70c829da7c16b05c1ec64a68885ee80"
-url = "https://github.com/gohugoio/hugo/releases/download/v0.161.1/hugo_0.161.1_darwin-universal.pkg"
+checksum = "sha256:c994e2cc6946838bb76521039509a7ce71282827e7035e344b6c225a83a5d0d3"
+url = "https://github.com/gohugoio/hugo/releases/download/v0.164.0/hugo_0.164.0_darwin-universal.pkg"
+url_api = "https://api.github.com/repos/gohugoio/hugo/releases/assets/468320272"
[tools.hugo."platforms.windows-x64"]
-checksum = "sha256:7f8d030b37600c60bf2a782611257e6a768934fbe7724c1f3a1a501e6724cf0d"
-url = "https://github.com/gohugoio/hugo/releases/download/v0.161.1/hugo_0.161.1_windows-amd64.zip"
+checksum = "sha256:dadf3499d4c6a27f6bc9d56d5a992ba62d82a74a3771fcc165c364ec1eeaac1c"
+url = "https://github.com/gohugoio/hugo/releases/download/v0.164.0/hugo_0.164.0_windows-amd64.zip"
+url_api = "https://api.github.com/repos/gohugoio/hugo/releases/assets/468320283"
[[tools.java]]
version = "26.0.1"
backend = "core:java"
+[tools.java.options]
+shorthand_vendor = "openjdk"
+
[tools.java."platforms.linux-arm64"]
checksum = "sha256:12a3649b2f4a0c9f6491d220bdd04b4fff07cae502b435aaff46eac0e36f4df1"
url = "https://download.java.net/java/GA/jdk26.0.1/458fda22e4c54d5ba572ab8d2b22eb83/8/GPL/openjdk-26.0.1_linux-aarch64_bin.tar.gz"
@@ -57,54 +67,72 @@ checksum = "sha256:b381d30647aed9ff440abed5ab61af01d8578c290cd407c57e064ebc4b015
url = "https://download.java.net/java/GA/jdk26.0.1/458fda22e4c54d5ba572ab8d2b22eb83/8/GPL/openjdk-26.0.1_windows-x64_bin.zip"
[[tools.lychee]]
-version = "0.23.0"
+version = "0.24.2"
backend = "aqua:lycheeverse/lychee"
[tools.lychee."platforms.linux-arm64"]
-checksum = "sha256:97eb93b02a7d78a752fc33e5b0983439ccaadbf3db952b68a0a4401acd92e6e0"
-url = "https://github.com/lycheeverse/lychee/releases/download/lychee-v0.23.0/lychee-aarch64-unknown-linux-gnu.tar.gz"
+checksum = "sha256:5d0b0e3aeab240f41920c633a6eaf97599be6eedda034b36e858ede7dba5e535"
+url = "https://github.com/lycheeverse/lychee/releases/download/lychee-v0.24.2/lychee-aarch64-unknown-linux-musl.tar.gz"
+url_api = "https://api.github.com/repos/lycheeverse/lychee/releases/assets/409958602"
[tools.lychee."platforms.linux-arm64-musl"]
-checksum = "sha256:4eb6ff3ccd40dbb71843c41429683d3c60fe3b33b2042ffbbff9bb21cedacb39"
-url = "https://github.com/lycheeverse/lychee/releases/download/lychee-v0.23.0/lychee-aarch64-unknown-linux-musl.tar.gz"
+checksum = "sha256:5d0b0e3aeab240f41920c633a6eaf97599be6eedda034b36e858ede7dba5e535"
+url = "https://github.com/lycheeverse/lychee/releases/download/lychee-v0.24.2/lychee-aarch64-unknown-linux-musl.tar.gz"
+url_api = "https://api.github.com/repos/lycheeverse/lychee/releases/assets/409958602"
[tools.lychee."platforms.linux-x64"]
-checksum = "sha256:5538440d2c69a45a0a09983271e5dee0c2fe7137d8035d25b2632e10a66a090a"
-url = "https://github.com/lycheeverse/lychee/releases/download/lychee-v0.23.0/lychee-x86_64-unknown-linux-musl.tar.gz"
+checksum = "sha256:73657a111819a30c47c08352896796f23d64e4eb2b3ed39b6d32149241566fc5"
+url = "https://github.com/lycheeverse/lychee/releases/download/lychee-v0.24.2/lychee-x86_64-unknown-linux-musl.tar.gz"
+url_api = "https://api.github.com/repos/lycheeverse/lychee/releases/assets/409959271"
[tools.lychee."platforms.linux-x64-musl"]
-checksum = "sha256:5538440d2c69a45a0a09983271e5dee0c2fe7137d8035d25b2632e10a66a090a"
-url = "https://github.com/lycheeverse/lychee/releases/download/lychee-v0.23.0/lychee-x86_64-unknown-linux-musl.tar.gz"
+checksum = "sha256:73657a111819a30c47c08352896796f23d64e4eb2b3ed39b6d32149241566fc5"
+url = "https://github.com/lycheeverse/lychee/releases/download/lychee-v0.24.2/lychee-x86_64-unknown-linux-musl.tar.gz"
+url_api = "https://api.github.com/repos/lycheeverse/lychee/releases/assets/409959271"
[tools.lychee."platforms.macos-arm64"]
-checksum = "sha256:1953bb425486e1b887757201e54e8fdf866c9cada6c270d8f6ed21ffbed4145a"
-url = "https://github.com/lycheeverse/lychee/releases/download/lychee-v0.23.0/lychee-arm64-macos.tar.gz"
+checksum = "sha256:c9d3740ea2d891854d37116c9fba840f37b6e7c89d330e7db84ac333631c4977"
+url = "https://github.com/lycheeverse/lychee/releases/download/lychee-v0.24.2/lychee-aarch64-apple-darwin.tar.gz"
+url_api = "https://api.github.com/repos/lycheeverse/lychee/releases/assets/409957951"
+
+[tools.lychee."platforms.macos-x64"]
+checksum = "sha256:887503a9cff667d322b8d0892b40bf49976eb9507af8483220a3706cdad55978"
+url = "https://github.com/lycheeverse/lychee/releases/download/lychee-v0.24.2/lychee-x86_64-apple-darwin.tar.gz"
+url_api = "https://api.github.com/repos/lycheeverse/lychee/releases/assets/409957687"
[tools.lychee."platforms.windows-x64"]
-checksum = "sha256:0fda7ff0a60c0250939fc25361c2d4e6e7853c31c996733fdd5a1dd760bcb824"
-url = "https://github.com/lycheeverse/lychee/releases/download/lychee-v0.23.0/lychee-x86_64-windows.exe"
+checksum = "sha256:32975d1493ee1a975d6bb41e4fb56fe419cb442ded628bb772ba2e614acfacad"
+url = "https://github.com/lycheeverse/lychee/releases/download/lychee-v0.24.2/lychee-x86_64-pc-windows-msvc.zip"
+url_api = "https://api.github.com/repos/lycheeverse/lychee/releases/assets/409959491"
[[tools.maven]]
-version = "3.9.15"
+version = "3.9.16"
backend = "aqua:apache/maven"
[tools.maven."platforms.linux-arm64"]
-url = "https://archive.apache.org/dist/maven/maven-3/3.9.15/binaries/apache-maven-3.9.15-bin.tar.gz"
+checksum = "sha512:831a8591fe20c8243b1dbe7d71e3244f31d1665b0804b2e825e38cbbe5ce0cafb8338851f90780735568773e0a6cd07bbec107cda0b896b008b861075358b6f6"
+url = "https://archive.apache.org/dist/maven/maven-3/3.9.16/binaries/apache-maven-3.9.16-bin.tar.gz"
[tools.maven."platforms.linux-arm64-musl"]
-url = "https://archive.apache.org/dist/maven/maven-3/3.9.15/binaries/apache-maven-3.9.15-bin.tar.gz"
+checksum = "sha512:831a8591fe20c8243b1dbe7d71e3244f31d1665b0804b2e825e38cbbe5ce0cafb8338851f90780735568773e0a6cd07bbec107cda0b896b008b861075358b6f6"
+url = "https://archive.apache.org/dist/maven/maven-3/3.9.16/binaries/apache-maven-3.9.16-bin.tar.gz"
[tools.maven."platforms.linux-x64"]
-url = "https://archive.apache.org/dist/maven/maven-3/3.9.15/binaries/apache-maven-3.9.15-bin.tar.gz"
+checksum = "sha512:831a8591fe20c8243b1dbe7d71e3244f31d1665b0804b2e825e38cbbe5ce0cafb8338851f90780735568773e0a6cd07bbec107cda0b896b008b861075358b6f6"
+url = "https://archive.apache.org/dist/maven/maven-3/3.9.16/binaries/apache-maven-3.9.16-bin.tar.gz"
[tools.maven."platforms.linux-x64-musl"]
-url = "https://archive.apache.org/dist/maven/maven-3/3.9.15/binaries/apache-maven-3.9.15-bin.tar.gz"
+checksum = "sha512:831a8591fe20c8243b1dbe7d71e3244f31d1665b0804b2e825e38cbbe5ce0cafb8338851f90780735568773e0a6cd07bbec107cda0b896b008b861075358b6f6"
+url = "https://archive.apache.org/dist/maven/maven-3/3.9.16/binaries/apache-maven-3.9.16-bin.tar.gz"
[tools.maven."platforms.macos-arm64"]
-url = "https://archive.apache.org/dist/maven/maven-3/3.9.15/binaries/apache-maven-3.9.15-bin.tar.gz"
+checksum = "sha512:831a8591fe20c8243b1dbe7d71e3244f31d1665b0804b2e825e38cbbe5ce0cafb8338851f90780735568773e0a6cd07bbec107cda0b896b008b861075358b6f6"
+url = "https://archive.apache.org/dist/maven/maven-3/3.9.16/binaries/apache-maven-3.9.16-bin.tar.gz"
[tools.maven."platforms.macos-x64"]
-url = "https://archive.apache.org/dist/maven/maven-3/3.9.15/binaries/apache-maven-3.9.15-bin.tar.gz"
+checksum = "sha512:831a8591fe20c8243b1dbe7d71e3244f31d1665b0804b2e825e38cbbe5ce0cafb8338851f90780735568773e0a6cd07bbec107cda0b896b008b861075358b6f6"
+url = "https://archive.apache.org/dist/maven/maven-3/3.9.16/binaries/apache-maven-3.9.16-bin.tar.gz"
[tools.maven."platforms.windows-x64"]
-url = "https://archive.apache.org/dist/maven/maven-3/3.9.15/binaries/apache-maven-3.9.15-bin.tar.gz"
+checksum = "sha512:831a8591fe20c8243b1dbe7d71e3244f31d1665b0804b2e825e38cbbe5ce0cafb8338851f90780735568773e0a6cd07bbec107cda0b896b008b861075358b6f6"
+url = "https://archive.apache.org/dist/maven/maven-3/3.9.16/binaries/apache-maven-3.9.16-bin.tar.gz"
diff --git a/pom.xml b/pom.xml
index 21f83b00..819f9a54 100644
--- a/pom.xml
+++ b/pom.xml
@@ -73,7 +73,7 @@
com.maxmind.geoip2
geoip2
- 5.1.0
+ 5.2.0
org.junit.jupiter
diff --git a/src/test/java/com/maxmind/minfraud/response/InsightsResponseTest.java b/src/test/java/com/maxmind/minfraud/response/InsightsResponseTest.java
index fd4f71e5..af3f8b98 100644
--- a/src/test/java/com/maxmind/minfraud/response/InsightsResponseTest.java
+++ b/src/test/java/com/maxmind/minfraud/response/InsightsResponseTest.java
@@ -6,6 +6,7 @@
import static org.junit.jupiter.api.Assertions.assertTrue;
import com.fasterxml.jackson.jr.ob.JSON;
+import com.maxmind.geoip2.record.AnonymizerFeed;
import java.time.LocalDate;
import java.util.UUID;
import org.junit.jupiter.api.Test;
@@ -39,6 +40,11 @@ public void testInsights() throws Exception {
.put("is_tor_exit_node", true)
.put("network_last_seen", "2025-01-15")
.put("provider_name", "TestVPN")
+ .startObjectField("residential")
+ .put("confidence", 82)
+ .put("network_last_seen", "2026-05-11")
+ .put("provider_name", "quickshift")
+ .end()
.end()
.startObjectField("country")
.put("iso_code", "US")
@@ -152,5 +158,24 @@ public void testInsights() throws Exception {
"correct networkLastSeen"
);
assertEquals("TestVPN", insights.ipAddress().anonymizer().providerName(), "correct providerName");
+
+ AnonymizerFeed residential = insights.ipAddress().anonymizer().residential();
+
+ assertNotNull(residential, "anonymizer.residential() returns null");
+ assertEquals(
+ Integer.valueOf(82),
+ residential.confidence(),
+ "correct anonymizer.residential().confidence()"
+ );
+ assertEquals(
+ LocalDate.parse("2026-05-11"),
+ residential.networkLastSeen(),
+ "correct anonymizer.residential().networkLastSeen()"
+ );
+ assertEquals(
+ "quickshift",
+ residential.providerName(),
+ "correct anonymizer.residential().providerName()"
+ );
}
}
diff --git a/src/test/resources/test-data/factors-response.json b/src/test/resources/test-data/factors-response.json
index 1e8b789b..75a64e82 100644
--- a/src/test/resources/test-data/factors-response.json
+++ b/src/test/resources/test-data/factors-response.json
@@ -24,7 +24,12 @@
"is_residential_proxy": true,
"is_tor_exit_node": true,
"network_last_seen": "2025-01-15",
- "provider_name": "TestVPN"
+ "provider_name": "TestVPN",
+ "residential": {
+ "confidence": 82,
+ "network_last_seen": "2026-05-11",
+ "provider_name": "quickshift"
+ }
},
"city": {
"confidence": 42,
diff --git a/src/test/resources/test-data/insights-response.json b/src/test/resources/test-data/insights-response.json
index 643f09ab..a052cf20 100644
--- a/src/test/resources/test-data/insights-response.json
+++ b/src/test/resources/test-data/insights-response.json
@@ -24,7 +24,12 @@
"is_residential_proxy": true,
"is_tor_exit_node": true,
"network_last_seen": "2025-01-15",
- "provider_name": "TestVPN"
+ "provider_name": "TestVPN",
+ "residential": {
+ "confidence": 82,
+ "network_last_seen": "2026-05-11",
+ "provider_name": "quickshift"
+ }
},
"city": {
"confidence": 42,