> ## 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.

# Vérification de localisation : champs geolocation_checks

> Analysez geolocation_checks et geolocation_attempts dans Didit : position, précision, zones, distances, anonymiseurs, consentement et alertes.

## Vue d'ensemble

La décision de session renvoie le résultat de chaque étape de vérification de localisation dans deux listes : `geolocation_checks[]` contient la tentative acceptée de chaque étape, et `geolocation_attempts[]` répertorie toutes les tentatives dans l'ordre.
Les deux sont présentes dans `GET /v3/session/{sessionId}/decision/` (voir [Récupérer la session](https://docs.didit.me/fr/sessions-api/retrieve-session.md)) et dans le webhook `status.updated`.
Un workflow sans étape de localisation renvoie `null` ou une liste vide pour les deux.

```text theme={null}
GET /v3/session/{sessionId}/decision/
  --> { "geolocation_checks": [ { node_id, status, outcome, permission, latitude, longitude, accuracy_m, ... } ],
        "geolocation_attempts": [ { node_id, outcome, attempts, received_at, ... } ] }
```

## `geolocation_checks[]`

Un élément par étape de localisation (`node_id`), extrait de sa tentative la plus récente.

```json theme={null}
{
  "node_id": "geolocation_1",
  "status": "Declined",
  "outcome": "outside_geofence",
  "permission": "granted_precise",
  "latitude": 48.8566,
  "longitude": 2.3522,
  "accuracy_m": 35.0,
  "accuracy_confidence": "p95",
  "measured_at": "2026-11-03T10:15:02Z",
  "age_seconds": 2,
  "source": "browser",
  "platform": "web",
  "sdk_version": null,
  "is_mock": null,
  "produced_by_accessory": null,
  "integrity": "unsupported",
  "country_code": "FR",
  "region_code": "FR-IDF",
  "city": "Paris",
  "geofence": { "enabled": true, "result": "outside" },
  "inside_geofence": false,
  "geofence_basis": "device",
  "inside_areas": [],
  "blocked_areas": [],
  "position_source": "device_and_ip",
  "anonymizers": { "vpn": false, "proxy": false, "tor": false, "spoofing": null, "emulator": null },
  "ip_distance_km": 0,
  "ip_distance_uncertainty_km": 12.4,
  "ip_consistent": true,
  "document_distance_km": null,
  "travel_excused": null,
  "consecutive_mismatches": 1,
  "attempts": 3,
  "consent": { "accepted_at": "2026-11-03T10:14:55Z", "version": "hosted-web-1", "locale": "en" },
  "warnings": [
    {
      "risk": "LOCATION_OUTSIDE_GEOFENCE",
      "log_type": "error",
      "short_description": "Device location outside the allowed area",
      "node_id": "geolocation_1"
    }
  ]
}
```

| Champ | Type | Description |
| - | - | - |
| `node_id` | string | Le nœud du workflow qui a produit le résultat, afin qu'un workflow comportant deux étapes de localisation reste lisible. |
| `status` | string | `Approved`, `In Review`, `Declined` ou `Not Finished`, résolu à partir des avertissements. |
| `outcome` | string | Ce qui s'est produit lors de la tentative acceptée. Voir les [résultats](https://docs.didit.me/fr/core-technology/location-verification/overview.md#résultats). |
| `permission` | string | Ce que le système a accordé : `granted_precise`, `granted_approximate`, `denied`, `restricted`, `unavailable`, `timeout`, `dismissed` ou `not_requested` (étape IP uniquement). |
| `latitude`, `longitude` | number ou null | Position WGS84. `null` en l'absence de position. |
| `accuracy_m` | number ou null | Rayon d'incertitude en mètres. |
| `accuracy_confidence` | string ou null | Niveau de confiance du rayon : `p95` (web), `p68` (Android) ou `unspecified` (iOS). Les plateformes diffèrent, il est donc enregistré plutôt que normalisé. |
| `measured_at` | datetime ou null | Date et heure auxquelles l'appareil a mesuré la position, selon l'horloge de l'appareil. |
| `age_seconds` | integer ou null | Temps écoulé entre la mesure et le moment où Didit l'a reçue. |
| `source` | string ou null | `gps`, `fused`, `network`, `wifi`, `cell`, `browser`, `unknown`, ou `ip` pour une étape IP uniquement. |
| `platform` | string ou null | `web`, `ios`, `android`, `react_native` ou `flutter`. |
| `sdk_version` | string ou null | La version du SDK ayant produit la position. |
| `is_mock` | boolean ou null | Le système a signalé une position simulée. `null` signifie que la plateforme ne peut pas le déterminer (web), et non `false`. |
| `produced_by_accessory` | boolean ou null | iOS uniquement : la position provient d'un accessoire externe. |
| `integrity` | string | Attestation de l'appareil : `attested`, `not_attested`, `failed`, `unsupported` (web) ou `not_determined`. |
| `country_code`, `region_code`, `city` | string ou null | Le lieu auquel la position correspond, calculé hors ligne : ISO 3166-1 alpha-2, ISO 3166-2 et la localité habitée la plus proche. La ville est un libellé destiné aux réviseurs, jamais une entrée de règle. |
| `geofence` | object | `enabled`, et `result` : `inside`, `outside` ou `undetermined`. `result` est `null` lorsque le géorepérage est désactivé. |
| `inside_geofence` | boolean ou null | `true` ou `false`, et `null` lorsque le géorepérage est désactivé ou que le cercle de précision chevauche une limite. |
| `geofence_basis` | string ou null | La position sur laquelle repose le verdict de zone : `device` ou `ip`. |
| `inside_areas`, `blocked_areas` | array | `id` des zones autorisées dans lesquelles l'intégralité du cercle de précision se trouve, et des zones bloquées dans lesquelles il se trouve. |
| `position_source` | string ou null | Le `geolocation_position_source` du nœud lors de l'exécution de la tentative. |
| `anonymizers` | object ou null | `vpn`, `proxy`, `tor`, `spoofing` et `emulator`, chacun valant `true`, `false` ou `null` lorsque la source ne peut pas le déterminer. |
| `ip_distance_km` | number ou null | Distance jusqu'à la localisation IP après soustraction des deux rayons d'incertitude. 0 signifie qu'ils se chevauchent. |
| `ip_distance_uncertainty_km` | number ou null | Le rayon combiné qui a été soustrait. |
| `ip_consistent` | boolean ou null | `ip_distance_km` est inférieur ou égal à `geolocation_ip_distance_km`. `null` si l'un des côtés est inconnu. |
| `document_distance_km` | number ou null | Distance jusqu'à l'adresse géocodée du document. `null` lorsqu'aucune adresse n'est enregistrée. |
| `travel_excused` | boolean ou null | La tolérance de déplacement a excusé la distance. `null` lorsque la tolérance est désactivée. |
| `consecutive_mismatches` | integer ou null | Lors d'une tentative finale, cette vérification plus les non-concordances antérieures consécutives de la même personne. |
| `attempts` | integer | Le numéro de la tentative. |
| `consent` | object ou null | `accepted_at`, `version` et `locale` de la notice de localisation acceptée par la personne. |
| `warnings` | array | Les [avertissements](https://docs.didit.me/fr/core-technology/location-verification/warnings-location-verification.md) de l'étape. |

## `geolocation_attempts[]`

Chaque tentative de chaque étape de localisation, de la plus ancienne à la plus récente, avec les mêmes champs de mesure, d'incertitude, de zone et de distance que `geolocation_checks[]` à l'exception de `warnings`, plus :

| Champ | Type | Description |
| - | - | - |
| `received_at` | datetime | Quand Didit a reçu la tentative. |
| `created_at` | datetime | Quand la tentative a été enregistrée. |

Les tentatives écartées par une nouvelle soumission sont exclues.
La soumission brute du client et le défi ne sont jamais renvoyés.

## Champs pour les règles de statut et les branches

Les `status_rules` personnalisées et les règles de branche peuvent lire ces champs :
`geolocation.status`, `geolocation.outcome`, `geolocation.permission`, `geolocation.latitude`, `geolocation.longitude`, `geolocation.accuracy_m`, `geolocation.accuracy_confidence`, `geolocation.age_seconds`, `geolocation.measured_at`, `geolocation.source`, `geolocation.platform`, `geolocation.country` (ISO 3166-1 alpha-3), `geolocation.region`, `geolocation.city`, `geolocation.is_mock`, `geolocation.integrity`, `geolocation.inside_geofence`, `geolocation.ip_distance_km`, `geolocation.ip_consistent`, `geolocation.document_distance_km`, `geolocation.attempts`, `geolocation.consent_at`, `geolocation.inside_areas`, `geolocation.blocked_areas`, `geolocation.anonymizers` (`vpn`, `proxy`, `tor`, `spoofing`, `emulator`) et `geolocation.consecutive_mismatches`.
Une valeur manquante ne correspond qu'à `is_empty`, de sorte qu'une règle conçue pour un signal de fraude ne se déclenche jamais sur des données manquantes.

## Voir aussi

* [Vérification de localisation](https://docs.didit.me/fr/core-technology/location-verification/overview.md) - fonctionnement de l'étape et tarifs.
* [Avertissements de vérification de localisation](https://docs.didit.me/fr/core-technology/location-verification/warnings-location-verification.md) - l'ensemble des codes `LOCATION_*`.
* [Webhooks](https://docs.didit.me/fr/integration/webhooks.md) - `status.updated` contient ces listes.
* [Modèles de données - Objet d'avertissement](https://docs.didit.me/fr/reference/data-models.md#objet-d’avertissement) - la structure de chaque entrée dans `warnings[]`.


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