Classifications
Each classification below includes a Result Code and Reason text. These correspond to the resultCode and reason fields in the API response.
Note: Integrate against the numeric
resultCoderather than thereasontext: result codes are stable, whereas thereasonstring is descriptive text intended for display and may be reworded. Thereasontext and some result codes changed on 1 October 2026 — if you integrated before then, see Changes from the previous result reasons for the old→new mapping.
AUTHENTIC
Identifiers are consistent, and the captured properties match a valid variant of the identified device.
| Result Code - Reason |
|---|
101 - Device has passed all verification checks
|
INDETERMINATE
Unable to match any identifiers to any known device, hence a determination is not possible.
| Result Code - Reason |
|---|
201 - Masking Proxy Detected
|
202 - User-agent string contains no device identifiers
|
203 - Device Match not Found
|
204 - Device properties required for verification not available
|
206 - OS version has not yet been validated (Deprecated)
|
207 - Browser masks the device identifying information
|
208 - Device identifying information not supplied by browser
|
209 - OS version has not yet been validated (Deprecated)
|
210 - Unidentified Apple device
|
211 - Apple model is not yet fully profiled
|
212 - Support for newly detected OS version under review
|
INCONSISTENT
Identifiers point to different devices, but at least one of the devices identified is consistent with the actual properties returned (risk of compromised/modified device).
The identifiers compared are the User-Agent, the TAC and the Make-Model. Each reason below names which of those identifiers agreed with the measured hardware. The web library uses the User-Agent and the TAC only, so it returns 305 or 306; the Android library uses all three.
| Result Code - Reason |
|---|
301 - Properties match at least one of multiple reference devices (Deprecated)
|
302 - Device matched available data but insufficient sources for full verification
|
303 - Browser and TAC reflect different devices
|
304 - TAC aligns with the device hardware but this recent Apple model is not yet fully profiled
|
305 - User-Agent's expected hardware doesn't match device
|
306 - TAC's expected hardware doesn't match device
|
307 - Make-Model's expected hardware doesn't match device
|
308 - User-Agent and Make-Model indicate a different device; Only TAC matched expected hardware
|
309 - TAC and Make-Model indicate a different device; Only User-Agent matched expected hardware
|
310 - TAC and User-Agent indicate a different device; Only Make-Model matched expected hardware
|
NON-COMPLIANT
The TAC is invalid (The reported TAC is not a valid TAC issued by the GSMA).
| Result Code - Reason |
|---|
401 - Invalid TAC
|
NON-AUTHENTIC
The device makes at least one technical claim to be a specific device, but the captured properties do not match the identified device.
| Result Code - Reason |
|---|
501 - Device claiming to be iOS but is Android
|
502 - Device has known counterfeit identifier
|
503 - Device properties do not match any expected device profile
|
504 - Emulator Detected
|
505 - Device properties match a known non-authentic profile
|
506 - Desktop device with non-desktop properties (Deprecated)
|
507 - Misalignment between device properties
|
508 - Invalid TAC
|
BOT (JS client only)
Automated traffic, either self-identifying as bot, or masquerading as different device but originating from server or desktop hardware. Could also encompass device emulators.
| Result Code - Reason |
|---|
601 - Bot (non-human traffic)
|
602 - User-agent is controlled by automation
|
Changes from the previous result reasons
On 1 October 2026 the reason text and, in a few cases, the resultCode returned within each classification changed. The top-level classifications (AUTHENTIC, INDETERMINATE, INCONSISTENT, NON-COMPLIANT, NON-AUTHENTIC, BOT) did not change.
If your integration branches on the numeric resultCode and the top-level result, most changes needed no action - but codes 206, 209 and 301 have been retired. If you match on the reason text, review the tables below, as several strings changed. We recommend branching on the numeric resultCode, which is stable, rather than the descriptive reason text.
Reworded reasons - same code, new text
| Classification | Code | Previous reason | New reason |
|---|---|---|---|
| INDETERMINATE | 201 | Masking proxy | Masking Proxy Detected |
| INDETERMINATE | 202 | No reference device | User-agent string contains no device identifiers |
| INDETERMINATE | 203 | No reference device | Device Match not Found |
| INDETERMINATE | 204 | Insufficient measured data | Device properties required for verification not available |
| INDETERMINATE | 207 | The browser used does not provide information identifying the model | Browser masks the device identifying information |
| INCONSISTENT | 302 | Insufficient corroboration of its identity | Device matched available data but insufficient sources for full verification |
| INCONSISTENT | 303 | HTTP headers and TAC are misaligned | Browser and TAC reflect different devices |
| NON-AUTHENTIC | 501 | Android as iOS | Device claiming to be iOS but is Android |
| NON-AUTHENTIC | 502 | Device blacklisted | Device has known counterfeit identifier |
| NON-AUTHENTIC | 503 | Properties don't match any reference devices | Device properties do not match any expected device profile |
| NON-AUTHENTIC | 504 | Emulator | Emulator Detected |
| NON-AUTHENTIC | 505 | Matches profile of known non-standard devices | Device properties match a known non-authentic profile |
Codes
202and203both previously returned "No reference device"; the new wording distinguishes the two situations.
Merged reason - codes 206 and 209 retired
The two "OS version has not yet been validated" reasons (Android 206 and iOS 209) have been combined into a single new code 212.
| Previous | New | |
|---|---|---|
| Code | 206 (Android) and 209 (iOS) | 212 |
| Reason | OS version has not yet been validated | Support for newly detected OS version under review |
Split reason - code 301 retired
The single INCONSISTENT reason 301 has been replaced by six more specific reasons that name which identifier (TAC, User-Agent or Make-Model) did not match.
| Situation | New code | New reason |
|---|---|---|
| User-Agent doesn't match, others do | 305 | User-Agent's expected hardware doesn't match device |
| TAC doesn't match, others do | 306 | TAC's expected hardware doesn't match device |
| Make-Model doesn't match, others do | 307 | Make-Model's expected hardware doesn't match device |
| Only TAC matched | 308 | User-Agent and Make-Model indicate a different device; Only TAC matched expected hardware |
| Only User-Agent matched | 309 | TAC and Make-Model indicate a different device; Only User-Agent matched expected hardware |
| Only Make-Model matched | 310 | TAC and User-Agent indicate a different device; Only Make-Model matched expected hardware |
The web library uses two identifiers (TAC and User-Agent), so only 305 and 306 apply there; the Android library uses all three, so any of 305-310 can occur. Situations that previously returned 301 now return one of 305-310, or 302/303 where those better describe the result.
See Also
- API Response - Response format, field definitions, and sample responses
- Error Codes - HTTP error codes returned by the API
- Understanding Results - What each classification means and how to handle it