> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# Codes d'avertissement : empreinte d'appareil et risque IP

> Tous les codes d'avertissement d'analyse d'appareil et d'IP de Didit : VPN, Tor, listes de blocage, appareils dupliqués et incohérences d'IP.

## Vue d'ensemble

L'analyse de l'appareil et de l'IP émet des tags d'avertissement dans `ip_analyses[].warnings[]` dès qu'elle détecte un comportement suspect lié à l'appareil, au réseau ou à la localisation. Neuf tags disposent d'une action configurable (Refuser / Examen / Aucune action) par nœud de workflow ; les deux tags de liste de blocage imposent systématiquement `Declined`, et les deux tags de liste d'autorisation sont toujours informatifs. Le champ `log_type` de chaque avertissement reflète l'action appliquée : `error` (Refuser), `warning` (Examen) ou `information` (Aucune action). Chaque risque ne se déclenche au maximum qu'une seule fois par session.

Chaque risque ci-dessous est vérifié par rapport au pipeline de décision en production ; les avertissements portent le tag de fonctionnalité `LOCATION` et la structure standard de l'[objet d'avertissement](https://docs.didit.me/fr/reference/data-models.md#objet-d’avertissement).

Les avertissements relatifs à l'empreinte de l'appareil sont intentionnellement répartis entre les signaux exacts et les signaux récupérés :

* `DUPLICATED_DEVICE_FINGERPRINT` signifie que la même identité déterministe d'appareil (`match_source` `persistent_id` ou `legacy_fp`) a été réutilisée sur plusieurs sessions avec des valeurs `vendor_data` différentes.
* `DEVICE_RECOVERED_HIGH_CONFIDENCE` signifie que la récupération d'empreinte v2 a associé la session à un appareil déjà observé **après** modification de l'identifiant persistant (stockage effacé, navigation privée, réinstallation de l'application). L'avertissement n'apparaît que lorsque la correspondance atteint le seuil de similarité requis pour une forte confiance et satisfait aux conditions strictes.

![Exemple d'avertissement d'analyse de l'appareil et de l'IP Didit avec alertes d'appareil, de VPN, de proxy et de non-concordance de localisation](https://mintcdn.com/didit-0f962782/z6T2GHM4Zh-iSj-K/images/ip-analysis-warning-example.png?fit=max\&auto=format\&n=z6T2GHM4Zh-iSj-K\&q=85\&s=370f87af45a6138ebd7454abe9131665)

## Avertissements générés

| Risque | Cause | `log_type` | Impact sur le statut | Mesure recommandée |
| - | - | - | - | - |
| `PRIVATE_NETWORK_DETECTED` | `is_vpn_or_tor` était à `true` — la session a été ouverte via un VPN, un proxy ou un nœud de sortie Tor. `additional_data` est `null`. | reflète l'action configurée | Configurable : Refuser / Examen / Aucune action (par défaut : Aucune action). | Déterminez si votre tolérance au risque autorise le trafic masqué. Si vous l'acceptez, laissez l'option sur Aucune action. |
| `COUNTRY_FROM_DOCUMENT_DOES_NOT_MATCH_COUNTRY_FROM_IP` | Le pays ISO de la pièce d'identité diffère du pays déterminé à partir de l'adresse IP. `additional_data` contient les deux codes ISO-3 : `document_country_code`, `ip_country_code`. | reflète l'action configurée | Configurable : Refuser / Examen / Aucune action (par défaut : Aucune action). | Passez en examen lorsque l'utilisateur voyage légitimement. Refusez lorsque ce signal est associé à un VPN ou à des signaux d'appareil dupliqué. |
| `EXPECTED_IP_ADDRESS_MISMATCH` | La session a été créée avec une adresse IP attendue, et l'adresse IP réelle diffère. `additional_data` contient `expected_ip_address` et `actual_ip_address`. | reflète l'action configurée | Configurable : Refuser / Examen / Aucune action (par défaut : Aucune action). | À utiliser lorsque vous pré-associez l'adresse IP lors de la création de la session. Refusez la session ou renforcez l'authentification en cas de non-concordance. |
| `IP_ADDRESS_IN_BLOCKLIST` | L'adresse IP de la session correspond à une entrée de la liste de blocage d'IP de l'application. `additional_data` : `ip_address`. | toujours `error` | Force le statut à `Declined`. | Rejetez la session. Auditez la source de la liste de blocage pour vérifier les faux positifs si nécessaire. |
| `DEVICE_FINGERPRINT_IN_BLOCKLIST` | L'empreinte d'appareil de la session correspond à une entrée de la liste de blocage d'appareils. `additional_data` : `device_fingerprint`. | toujours `error` | Force le statut à `Declined`. | Rejetez la session. |
| `IP_ADDRESS_IN_ALLOWLIST` | L'adresse IP de la session correspondait à plusieurs entrées mais figure sur la liste d'autorisation d'IP de l'application ; l'avertissement d'IP en double a donc été ignoré. `additional_data` : `ip_address`. | toujours `information` | Aucun. | À utiliser pour les NAT d'entreprise de confiance, les réseaux QA ou les points d'accès partagés connus. |
| `DEVICE_FINGERPRINT_IN_ALLOWLIST` | L'empreinte d'appareil de la session correspondait de manière déterministe à plusieurs entrées mais figure sur la liste d'autorisation d'appareils ; l'avertissement d'appareil dupliqué a donc été ignoré. `additional_data` : `device_fingerprint`. | toujours `information` | Aucun. | À utiliser uniquement pour les appareils partagés de confiance. Les listes de blocage restent prioritaires. |
| `DUPLICATED_IP_ADDRESS` | La même adresse IP a été utilisée dans une autre session avec un `vendor_data` différent. `additional_data` : `duplicated_session_id`, `duplicated_session_number`, `api_service`. Ignoré lorsque l'adresse IP figure sur la liste d'autorisation. | reflète l'action configurée | Configurable : Refuser / Examen / Aucune action (par défaut : Aucune action). | Fréquent sur les NAT d'entreprise ou partagés. Associez ce signal à d'autres indicateurs (appareil dupliqué, non-concordance de pays) avant de refuser. |
| `DUPLICATED_DEVICE_FINGERPRINT` | La même identité déterministe d'appareil a été réutilisée sur plusieurs sessions avec des `vendor_data` différents. `additional_data` : `duplicated_session_id`, `duplicated_session_number`, `api_service`, `match_source` (`persistent_id` ou `legacy_fp`). Ignoré lorsque l'empreinte figure sur la liste d'autorisation. | reflète l'action configurée | Configurable : Refuser / Examen / Aucune action (par défaut : Aucune action). | Preuve solide d'abus multi-comptes. Passez en examen ou refusez selon votre tolérance à la fraude. |
| `DEVICE_RECOVERED_HIGH_CONFIDENCE` | Le modèle de récupération d'appareil v2 a associé la session à un appareil déjà observé avec un niveau de confiance élevé, même après la modification de l'identifiant persistant. `additional_data` : `duplicated_session_id`, `duplicated_session_number`, `api_service`, `match_source` (`recovered_high`), `recovery_similarity`, `recovery_match_device_uuid`. Non supprimé par la liste d'autorisation d'appareils. | reflète l'action configurée | Configurable : Refuser / Examen / Aucune action (par défaut : Aucune action). | Commencez par Examen, mesurez votre taux de faux positifs, puis durcissez l'action. Signal fort pour les tentatives de réinitialisation du stockage ou d'utilisation du mode navigation privée. |
| `DEVICE_LINKED_TO_LIVENESS_ATTACK` | Le même appareil (mis en correspondance selon son identifiant d'appareil persistant) a été utilisé dans une session antérieure d'un autre utilisateur dont la capture de détection du vivant a été considérée comme une attaque. Un appareil déjà utilisé pour attaquer le contrôle de détection du vivant est un indicateur fort que cette capture provient du même attaquant. `additional_data` : `liveness_attack_session_id`, `liveness_attack_session_number`, `liveness_attack_sessions_count`, `match_source` (`persistent_id`). | reflète l'action configurée | Configurable : Refuser / Examen / Aucune action (par défaut : Aucune action). | Commencez par Examen et mesurez votre taux de faux positifs avant de passer à Refuser. |
| `DEVICE_MODEL_INCONSISTENT` | Le même appareil (mis en correspondance selon son identifiant d'appareil persistant) a été signalé sous un modèle d'appareil différent lors d'une session antérieure. Un appareil physique ne changeant pas de modèle, le modèle signalé est probablement usurpé, ou l'identifiant d'appareil a été copié vers un autre appareil. Les chaînes de modèle génériques ne sont jamais comparées. `additional_data` : `device_model`, `earlier_device_model`, `earlier_session_id`, `earlier_session_number`, `match_source`. | reflète l'action configurée | Configurable : Refuser / Examen / Aucune action (par défaut : Aucune action). | Comparez les deux modèles signalés et examinez la session antérieure avant d'agir. |
| `IP_LOCATION_NOT_ALLOWED` | Le géorepérage IP est activé et l'IP de la session est située dans un pays ou un État/région marqué comme non autorisé. `additional_data` : `ip_country_code` (ISO-3), `ip_country`, `ip_state`, `restricted_by` (`country` ou `state`). | reflète l'action configurée | Configurable : Refuser / Examen / Aucune action (par défaut : Refuser). | À utiliser pour appliquer des restrictions juridictionnelles. Combinez cette option avec `vpn_detection_action` pour que le trafic masqué ne puisse pas contourner la restriction géographique. |

Lorsque l'appareil récupéré n'a pas encore de sessions sœurs éligibles (rien ne figure donc dans `matches[]`), `DEVICE_RECOVERED_HIGH_CONFIDENCE` se déclenche tout de même avec une structure de `additional_data` de secours : `recovery_match_device_uuid`, `recovery_match_similarity`, `recovery_match_band`, `recovery_gate_reason`.

`IP_LOCATION_NOT_ALLOWED` se déclenche lorsque le géorepérage IP est activé (`is_ip_geofencing_enabled`) et que l'IP de la session est située dans un pays ou un État/région marqué comme non autorisé dans `ip_geofencing_by_country`. `additional_data` contient `ip_country_code` (ISO-3), `ip_country`, `ip_state` et `restricted_by` (`country` ou `state`). Les entrées d'État/région prévalent sur le paramètre du pays et sont comparées au nom de région du fournisseur IP sans tenir compte de la casse (par ex. `"California"`) ; les pays non répertoriés dans la configuration sont autorisés.

## Intégrité de l'appareil et de l'environnement d'exécution

Signaux rapportés par les SDK natifs et le client web décrivant l'état de l'appareil sur lequel la vérification a été exécutée. Ils existent pour détecter les attaques par injection : un attaquant capable d'obtenir un accès root à un appareil ou d'intercepter le processus de l'application peut remplacer le flux de la caméra avant même qu'il n'atteigne les contrôles biométriques.

Chacun est configurable par workflow et est défini par défaut sur **Aucune action**, de sorte que l'activation de la fonctionnalité ne modifie aucune décision tant que vous n'avez pas choisi de l'activer.

| Risque | Cause | Clé de configuration | Valeur par défaut |
| - | - | - | - |
| `DEVICE_APP_TAMPERED` | L'attestation de la plateforme n'a pas pu vérifier que la requête provenait d'une version authentique et non modifiée de l'application sur un appareil authentique. | `device_app_tampered_action` | `NO_ACTION` |
| `DEVICE_RUNTIME_HOOKING_DETECTED` | Un framework d'instrumentation ou d'interception lors de l'exécution (Frida, Xposed, LSPosed, Substrate) a été détecté dans le processus de l'application. | `device_hooking_action` | `NO_ACTION` |
| `DEVICE_ROOTED_OR_JAILBROKEN` | L'appareil présente des indicateurs de root ou de jailbreak, ce qui supprime les protections du système d'exploitation empêchant l'interception de la caméra. | `device_rooted_action` | `NO_ACTION` |
| `DEVICE_EMULATOR_DETECTED` | La session provenait d'un émulateur ou d'un simulateur plutôt que d'un appareil physique. | `device_emulator_action` | `NO_ACTION` |
| `DEVICE_DEBUGGER_ATTACHED` | Un débogueur ou un traceur de processus était attaché à l'application pendant la vérification. | `device_debugger_action` | `NO_ACTION` |
| `AUTOMATION_FRAMEWORK_DETECTED` | La session était pilotée par un framework d'automatisation de navigateur ou un navigateur sans interface plutôt que par une personne. | `automation_detected_action` | `NO_ACTION` |
| `DEVICE_INTEGRITY_SIGNALS_MISSING` | Le client a signalé une version du SDK qui prend en charge les rapports d'intégrité, mais aucun signal d'intégrité n'est parvenu — ce qui peut indiquer que les signaux ont été supprimés pendant le transit. | `device_integrity_missing_action` | `NO_ACTION` |

> [!NOTE]
>
> Chaque sonde fonctionne au mieux. Lorsqu'un contrôle ne peut pas s'exécuter, il signale **non déterminé** plutôt qu'un résultat sans anomalie, de sorte qu'une sonde défaillante ne produit jamais de faux positif à l'encontre d'un utilisateur légitime. Les signaux sont rapportés à partir de la version **4.4.0** du SDK natif ; les sessions provenant de SDK antérieurs n'envoient légitimement rien et ne déclenchent jamais `DEVICE_INTEGRITY_SIGNALS_MISSING`.

> [!WARNING]
>
> Les signaux de root et d'émulateur sont fréquents chez les utilisateurs légitimes sur des appareils modifiés mais non frauduleux. Commencez par l'action « Examiner » plutôt que par « Refuser » et surveillez votre propre taux de refus avant d'adopter une action plus stricte.

## Paramètres configurables

Contrôles de workflow par nœud (également configurables globalement dans les paramètres de vérification de l'application ; chaque action est définie par défaut sur **Aucune action**, sauf indication contraire) :

| Paramètre | Déclenche | Valeur par défaut |
| - | - | - |
| `vpn_detection_action` | `PRIVATE_NETWORK_DETECTED` | Aucune action |
| `ip_mismatch_action` | `COUNTRY_FROM_DOCUMENT_DOES_NOT_MATCH_COUNTRY_FROM_IP` | Aucune action |
| `expected_ip_mismatch_action` | `EXPECTED_IP_ADDRESS_MISMATCH` | Aucune action |
| `duplicated_ip_action` | `DUPLICATED_IP_ADDRESS` | Aucune action |
| `duplicated_device_action` | `DUPLICATED_DEVICE_FINGERPRINT` | Aucune action |
| `recovered_device_action` | `DEVICE_RECOVERED_HIGH_CONFIDENCE` | Aucune action |
| `device_liveness_attack_history_action` | `DEVICE_LINKED_TO_LIVENESS_ATTACK` | Aucune action |
| `device_model_inconsistency_action` | `DEVICE_MODEL_INCONSISTENT` | Aucune action |
| `ip_geofencing_action` | `IP_LOCATION_NOT_ALLOWED` | Refuser |

Les listes d'autorisation d'IP et d'appareils suppriment uniquement l'avertissement de doublon exact d'adresse IP ou de doublon déterministe d'appareil pour la valeur autorisée. Elles ne suppriment pas les avertissements de VPN/proxy, de non-concordance de pays, de non-concordance d'IP attendue, d'appareil récupéré ou de liste de blocage.

Les avertissements d'appareil récupéré sont utiles pour détecter les réseaux de fraude qui alternent les comptes et les sessions depuis le même matériel, mais Didit est conservateur par conception — le système préfère manquer certains utilisateurs dupliqués plutôt que de fusionner des appareils sans lien lorsque les preuves ne sont pas assez solides. **Déploiement recommandé** : commencez par Examiner, observez le volume pendant deux semaines, puis adoptez une action plus stricte si votre taux de faux positifs est faible.

## Appareil dupliqué vs appareil récupéré

Traitez les deux avertissements différemment — ils se déclenchent sur des éléments de preuve distincts :

| Avertissement | Déclencheur | Signification typique | Première action recommandée |
| - | - | - | - |
| `DUPLICATED_DEVICE_FINGERPRINT` | Correspondance exacte d'identité d'appareil persistante (`persistent_id`) ou de hachage d'empreinte hérité (`legacy_fp`). | Forte preuve que le même appareil apparaît chez différents utilisateurs. | Examiner ou refuser, selon votre tolérance à la fraude. |
| `DEVICE_RECOVERED_HIGH_CONFIDENCE` | Récupération v2 à haute confiance (`recovered_high`) après modification du stockage, de la session ou de l'identité de l'application. | Signal fort de tentatives de navigation privée / réinitialisation du stockage / réinstallation de l'application. Volontairement séparé pour que vous puissiez le surveiller de manière indépendante. | Examiner d'abord, puis adoptez une action plus stricte après avoir mesuré votre taux de faux positifs. |

## Correspondances entre sessions

Lorsque la même adresse IP, l'identité exacte de l'appareil ou un appareil récupéré sont détectés sur plusieurs sessions appartenant à **différents utilisateurs**, Didit les enregistre sous forme de `matches[]` dans `ip_analyses[]`. Les sessions sont regroupées par `vendor_data` : les sessions ayant le même `vendor_data` sont traitées comme étant le même utilisateur et exclues des correspondances. Sans `vendor_data`, chaque session est considérée comme un utilisateur unique et tous les doublons potentiels sont signalés — nous vous recommandons vivement de toujours fournir `vendor_data` pour réduire le bruit.

Chaque correspondance comprend :

* `session_id`, `session_number`, `vendor_data` et `verification_date` de la session correspondante, ainsi que son `status` de cycle de vie et `api_service` (`null` pour les sessions de workflow) ; `source` vaut toujours `session`
* `match_type` — `ip_address` ou `device_fingerprint`
* `match_source` — `ip_address`, `persistent_id`, `legacy_fp` ou `recovered_high`
* `matched_value` — l'IP partagée, l'identifiant de l'appareil ou (pour les correspondances récupérées) l'UUID de l'appareil récupéré
* `confidence` (0–1, `1 - P(false positive)`) et `match_mode` (`deterministic` / `probabilistic` / `co_occurrence`)
* `device_info` — `device_brand`, `device_model`, `browser_family`, `os_family`, `platform`, `device_fingerprint`
* `location_info` — `ip_address`, `ip_country`, `ip_country_code`, `ip_state`, `ip_city`, `is_vpn_or_tor`, `is_data_center`
* Informations supplémentaires sur l'appareil récupéré lorsque `match_source` est `recovered_high` : `recovery_similarity`, `tls_ja4_corroborated`, `recovery_gate_reason`

Les correspondances IP et les correspondances d'appareils sont limitées à 5 chacune (au maximum 10 entrées). Consultez la [page du rapport](https://docs.didit.me/fr/core-technology/ip-analysis/report-ip-analysis.md#sémantique-des-correspondances) pour obtenir le schéma complet des correspondances et le modèle de confiance.

## Exemples

### VPN + incohérence de pays (configuré sur Examen)

```json theme={null}
{
  "warnings": [
    {
      "feature": "LOCATION",
      "risk": "PRIVATE_NETWORK_DETECTED",
      "additional_data": null,
      "log_type": "warning",
      "short_description": "Private network (VPN/Tor) detected",
      "long_description": "The system detected that the user tried to use a private network (VPN/TOR) to complete the verification process.",
      "node_id": "ip-1"
    },
    {
      "feature": "LOCATION",
      "risk": "COUNTRY_FROM_DOCUMENT_DOES_NOT_MATCH_COUNTRY_FROM_IP",
      "additional_data": { "document_country_code": "ESP", "ip_country_code": "NLD" },
      "log_type": "warning",
      "short_description": "Document country does not match IP country",
      "long_description": "The country from the document does not match the country from the IP address, suggesting a potential mismatch between the document and the user's location.",
      "node_id": "ip-1"
    }
  ]
}
```

### Détection dans la liste de blocage (force le refus)

```json theme={null}
{
  "warnings": [
    {
      "feature": "LOCATION",
      "risk": "IP_ADDRESS_IN_BLOCKLIST",
      "additional_data": { "ip_address": "45.61.20.5" },
      "log_type": "error",
      "short_description": "IP address in blocklist",
      "long_description": "The IP address used for this session was found in the application's IP blocklist, indicating a known suspicious or forbidden origin.",
      "node_id": "ip-1"
    }
  ]
}
```

### Appareil récupéré avec un niveau de confiance élevé (configuré sur Examen)

```json theme={null}
{
  "warnings": [
    {
      "feature": "LOCATION",
      "risk": "DEVICE_RECOVERED_HIGH_CONFIDENCE",
      "additional_data": {
        "duplicated_session_id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
        "duplicated_session_number": 5101,
        "api_service": null,
        "match_source": "recovered_high",
        "recovery_similarity": 0.9874,
        "recovery_match_device_uuid": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
      },
      "log_type": "warning",
      "short_description": "Device matches a previously seen device with high confidence",
      "long_description": "A previously seen device matched this session with high confidence through v2 fuzzy fingerprint recovery after passing strict hard gates, indicating the same physical device under a fresh persistent_id.",
      "node_id": "ip-1"
    }
  ]
}
```

## Liens associés

* [Rapport d'analyse de l'appareil et de l'IP](https://docs.didit.me/fr/core-technology/ip-analysis/report-ip-analysis.md) — structure complète de la réponse et sémantique des statuts
* [Vue d'ensemble de l'analyse de l'appareil et de l'IP](https://docs.didit.me/fr/core-technology/ip-analysis/overview.md) — ce que chaque bloc mesure
* [Modèles de données — Analyse IP](https://docs.didit.me/fr/reference/data-models.md#analyse-de-l’ip) — schéma canonique
* [Webhooks](https://docs.didit.me/fr/integration/webhooks.md) — `status.updated` transmet les avertissements d'analyse IP

### Types d'avertissements


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.