Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## Unreleased

- Scored webhook 2026-10-08 removes browser_vpn_proxy, datacenter_ip, abuser and suspicious_paid_click flags. vpn includes Browser VPN/Proxy in flags, connection type and signals; site_id remains. Legacy schemas remain readable.

# Changelog

## Unreleased
Expand Down
109 changes: 100 additions & 9 deletions dist/schemas/identification-scored-event.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,10 @@
],
"properties": {
"schema_version": {
"const": "2026-10-07"
"enum": [
"2026-10-07",
"2026-10-08"
]
}
},
"additionalProperties": true
Expand Down Expand Up @@ -194,6 +197,92 @@
},
"additionalProperties": true
}
},
{
"if": {
"type": "object",
"properties": {
"schema_version": {
"const": "2026-10-08"
}
},
"required": [
"schema_version"
]
},
"then": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"connection_type": {
"type": "string",
"not": {
"const": "browser_vpn_proxy"
}
},
"signals": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"not": {
"const": "browser_vpn_proxy"
}
}
}
}
},
"detection_flags": {
"type": "object",
"not": {
"anyOf": [
{
"type": "object",
"required": [
"browser_vpn_proxy"
],
"properties": {
"browser_vpn_proxy": {}
}
},
{
"type": "object",
"required": [
"datacenter_ip"
],
"properties": {
"datacenter_ip": {}
}
},
{
"type": "object",
"required": [
"abuser"
],
"properties": {
"abuser": {}
}
},
{
"type": "object",
"required": [
"suspicious_paid_click"
],
"properties": {
"suspicious_paid_click": {}
}
}
]
}
}
}
}
}
}
}
],
"$defs": {
Expand Down Expand Up @@ -429,15 +518,12 @@
},
"DetectionFlags": {
"type": "object",
"description": "Stable yes/no verdicts for the identification. Legacy 19 keys are always present; the extension flags depend on the scoring release. Task 204 adds optional ai_bot and ai_browser flags; older payloads omit them. Branch on these flags and on\nthe Risk Score; signal names are for display and logging.\n\nWhen `search_bot` is `true`, `incognito`, `check_incomplete`, `ip_mismatch` and\n`javascript_disabled` are always `false`.",
"description": "Stable yes/no verdicts for the identification. The extension flags depend on the scoring release. Task 204 adds optional ai_bot and ai_browser flags; older payloads omit them. Branch on these flags and on\nthe Risk Score; signal names are for display and logging.\n\nWhen `search_bot` is `true`, `incognito`, `check_incomplete`, `ip_mismatch` and\n`javascript_disabled` are always `false`.",
"required": [
"vpn",
"privacy_relay",
"browser_vpn_proxy",
"tor",
"proxy",
"datacenter_ip",
"abuser",
"os_mismatch",
"os_not_detected",
"timezone_mismatch",
Expand All @@ -446,22 +532,22 @@
"ip_mismatch",
"incognito",
"search_bot",
"suspicious_paid_click",
"javascript_disabled",
"stun_not_checked",
"check_incomplete"
],
"properties": {
"vpn": {
"type": "boolean",
"description": "A VPN was detected (scored `vpn` signal)."
"description": "A VPN or Browser VPN/Proxy was detected."
},
"privacy_relay": {
"type": "boolean",
"description": "A privacy relay such as iCloud Private Relay was detected."
},
"browser_vpn_proxy": {
"type": "boolean",
"deprecated": true,
"description": "A VPN or proxy built into the browser or one of its extensions. `true` exactly when `connection_type` is `browser_vpn_proxy`."
},
"tor": {
Expand All @@ -474,10 +560,12 @@
},
"datacenter_ip": {
"type": "boolean",
"deprecated": true,
"description": "The public IP belongs to a datacenter or hosting range."
},
"abuser": {
"type": "boolean",
"deprecated": true,
"description": "The public IP has a record of abuse in IP intelligence."
},
"os_mismatch": {
Expand Down Expand Up @@ -514,6 +602,7 @@
},
"suspicious_paid_click": {
"type": "boolean",
"deprecated": true,
"description": "The visit came from a paid ad click (Google Ads, Meta, TikTok, Microsoft Ads, LinkedIn, Pinterest or X) and the Risk Score is 60 or more (the 999 marker included)."
},
"javascript_disabled": {
Expand Down Expand Up @@ -640,7 +729,7 @@
},
"IdentificationScoredData": {
"type": "object",
"description": "Final identification. risk_score is this scan only. Version 2026-10-07 uses signals for score contributions, detection_flags for final decisions, and hre for account results. Older bodies remain accepted.",
"description": "Final identification. risk_score is this scan only. Version 2026-10-08 uses signals for score contributions, detection_flags for final decisions, and hre for account results. Older bodies remain accepted.",
"required": [
"request_id",
"visitor_id",
Expand Down Expand Up @@ -870,8 +959,10 @@
"SchemaVersion": {
"type": "string",
"minLength": 1,
"description": "Webhook contract version. Scored release 2026-10-06; multi-account group release 2026-10-07; parsers also accept legacy 2026-06-01.",
"description": "Webhook contract version. Scored release 2026-10-08; multi-account group release 2026-10-07; parsers also accept legacy 2026-06-01.",
"examples": [
"2026-10-08",
"2026-10-07",
"2026-10-06",
"2026-06-01"
]
Expand Down
12 changes: 6 additions & 6 deletions dist/schemas/identification.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -382,15 +382,12 @@
},
"DetectionFlags": {
"type": "object",
"description": "Stable yes/no verdicts for the identification. Legacy 19 keys are always present; the extension flags depend on the scoring release. Task 204 adds optional ai_bot and ai_browser flags; older payloads omit them. Branch on these flags and on\nthe Risk Score; signal names are for display and logging.\n\nWhen `search_bot` is `true`, `incognito`, `check_incomplete`, `ip_mismatch` and\n`javascript_disabled` are always `false`.",
"description": "Stable yes/no verdicts for the identification. The extension flags depend on the scoring release. Task 204 adds optional ai_bot and ai_browser flags; older payloads omit them. Branch on these flags and on\nthe Risk Score; signal names are for display and logging.\n\nWhen `search_bot` is `true`, `incognito`, `check_incomplete`, `ip_mismatch` and\n`javascript_disabled` are always `false`.",
"required": [
"vpn",
"privacy_relay",
"browser_vpn_proxy",
"tor",
"proxy",
"datacenter_ip",
"abuser",
"os_mismatch",
"os_not_detected",
"timezone_mismatch",
Expand All @@ -399,22 +396,22 @@
"ip_mismatch",
"incognito",
"search_bot",
"suspicious_paid_click",
"javascript_disabled",
"stun_not_checked",
"check_incomplete"
],
"properties": {
"vpn": {
"type": "boolean",
"description": "A VPN was detected (scored `vpn` signal)."
"description": "A VPN or Browser VPN/Proxy was detected."
},
"privacy_relay": {
"type": "boolean",
"description": "A privacy relay such as iCloud Private Relay was detected."
},
"browser_vpn_proxy": {
"type": "boolean",
"deprecated": true,
"description": "A VPN or proxy built into the browser or one of its extensions. `true` exactly when `connection_type` is `browser_vpn_proxy`."
},
"tor": {
Expand All @@ -427,10 +424,12 @@
},
"datacenter_ip": {
"type": "boolean",
"deprecated": true,
"description": "The public IP belongs to a datacenter or hosting range."
},
"abuser": {
"type": "boolean",
"deprecated": true,
"description": "The public IP has a record of abuse in IP intelligence."
},
"os_mismatch": {
Expand Down Expand Up @@ -467,6 +466,7 @@
},
"suspicious_paid_click": {
"type": "boolean",
"deprecated": true,
"description": "The visit came from a paid ad click (Google Ads, Meta, TikTok, Microsoft Ads, LinkedIn, Pinterest or X) and the Risk Score is 60 or more (the 999 marker included)."
},
"javascript_disabled": {
Expand Down
Loading
Loading