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

# Standortverifizierungsbericht: geolocation_checks-Felder

> Didits geolocation_checks in Entscheidungen auswerten: Details zu Position, Genauigkeit, Geofencing, Distanzen, Anonymisierern und Warnungen.

## Übersicht

Die Sitzungsentscheidung gibt das Ergebnis jedes Standortverifizierungsschritts in zwei Listen zurück: `geolocation_checks[]` enthält den akzeptierten Versuch jedes Schritts und `geolocation_attempts[]` führt jeden Versuch in chronologischer Reihenfolge auf.
Beide befinden sich unter `GET /v3/session/{sessionId}/decision/` (siehe [Sitzung abrufen](https://docs.didit.me/de/sessions-api/retrieve-session.md)) sowie im Webhook `status.updated`.
Ein Workflow ohne Standortschritt gibt für beide `null` oder eine leere Liste zurück.

```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[]`

Ein Element pro Standortschritt (`node_id`), basierend auf dessen neuestem Versuch.

```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"
    }
  ]
}
```

| Feld | Typ | Beschreibung |
| - | - | - |
| `node_id` | string | Der Workflow-Knoten, der das Ergebnis erzeugt hat, damit ein Workflow mit zwei Standortschritten übersichtlich bleibt. |
| `status` | string | `Approved`, `In Review`, `Declined` oder `Not Finished`, ermittelt aus den Warnungen. |
| `outcome` | string | Was beim akzeptierten Versuch geschehen ist. Siehe [Ergebnisse](https://docs.didit.me/de/core-technology/location-verification/overview.md#ergebnisse). |
| `permission` | string | Was das System gewährt hat: `granted_precise`, `granted_approximate`, `denied`, `restricted`, `unavailable`, `timeout`, `dismissed` oder `not_requested` (reiner IP-Schritt). |
| `latitude`, `longitude` | number oder null | WGS84-Position. `null`, wenn keine Position vorliegt. |
| `accuracy_m` | number oder null | Unsicherheitsradius in Metern. |
| `accuracy_confidence` | string oder null | Konfidenzniveau des Radius: `p95` (Web), `p68` (Android) oder `unspecified` (iOS). Plattformen unterscheiden sich, daher wird der Wert erfasst und nicht normalisiert. |
| `measured_at` | datetime oder null | Zeitpunkt, zu dem das Gerät die Position gemessen hat (laut Geräteuhr). |
| `age_seconds` | integer oder null | Zeitspanne zwischen der Messung und dem Eingang bei Didit. |
| `source` | string oder null | `gps`, `fused`, `network`, `wifi`, `cell`, `browser`, `unknown` oder `ip` bei einem reinen IP-Schritt. |
| `platform` | string oder null | `web`, `ios`, `android`, `react_native` oder `flutter`. |
| `sdk_version` | string oder null | Die SDK-Version, die die Position ermittelt hat. |
| `is_mock` | boolean oder null | Das System hat eine simulierte Position gemeldet. `null` bedeutet, dass die Plattform dies nicht feststellen kann (Web), nicht `false`. |
| `produced_by_accessory` | boolean oder null | Nur iOS: Die Position stammt von einem externen Zubehörteil. |
| `integrity` | string | Geräte-Attestierung: `attested`, `not_attested`, `failed`, `unsupported` (Web) oder `not_determined`. |
| `country_code`, `region_code`, `city` | string oder null | Der Ort, dem die Position zugeordnet wird, offline ermittelt: ISO 3166-1 alpha-2, ISO 3166-2 und der nächstgelegene bewohnte Ort. Die Stadt dient als Kennzeichnung für Prüfer und niemals als Regeleingabe. |
| `geofence` | object | `enabled` und `result`: `inside`, `outside` oder `undetermined`. `result` ist `null`, wenn Geofencing deaktiviert ist. |
| `inside_geofence` | boolean oder null | `true` oder `false` und `null`, wenn Geofencing deaktiviert ist oder der Genauigkeitskreis eine Grenze überschneidet. |
| `geofence_basis` | string oder null | Welche Position für die Bereichsentscheidung verwendet wurde: `device` oder `ip`. |
| `inside_areas`, `blocked_areas` | array | `id`s der erlaubten Bereiche, innerhalb derer sich der gesamte Genauigkeitskreis befindet, sowie der blockierten Bereiche, in denen er liegt. |
| `position_source` | string oder null | Die `geolocation_position_source` des Knotens zum Zeitpunkt des Versuchs. |
| `anonymizers` | object oder null | `vpn`, `proxy`, `tor`, `spoofing` und `emulator`, jeweils `true`, `false` oder `null`, wenn die Quelle dies nicht bestimmen kann. |
| `ip_distance_km` | number oder null | Distanz zum IP-Standort, nachdem beide Unsicherheitsradien abgezogen wurden. 0 bedeutet, dass sie sich überschneiden. |
| `ip_distance_uncertainty_km` | number oder null | Der kombinierte Radius, der abgezogen wurde. |
| `ip_consistent` | boolean oder null | `ip_distance_km` liegt innerhalb von `geolocation_ip_distance_km`. `null`, wenn eine der beiden Seiten unbekannt ist. |
| `document_distance_km` | number oder null | Distanz zur geokodierten Dokumentadresse. `null`, wenn keine Adresse vorliegt. |
| `travel_excused` | boolean oder null | Die Reisetoleranz hat die Distanz als zulässig behandelt. `null`, wenn die Toleranz deaktiviert ist. |
| `consecutive_mismatches` | integer oder null | Bei einem finalen Versuch: diese Nicht-Übereinstimmung plus die früheren aufeinanderfolgenden Nicht-Übereinstimmungen derselben Person. |
| `attempts` | integer | Nummer des Versuchs. |
| `consent` | object oder null | `accepted_at`, `version` und `locale` des Standort-Hinweises, den die Person akzeptiert hat. |
| `warnings` | array | Die [Warnungen](https://docs.didit.me/de/core-technology/location-verification/warnings-location-verification.md) des Schritts. |

## `geolocation_attempts[]`

Jeder Versuch jedes Standortschritts, der älteste zuerst, mit denselben Feldern für Messung, Unsicherheit, Bereich und Distanz wie in `geolocation_checks[]` mit Ausnahme von `warnings`, plus:

| Feld | Typ | Beschreibung |
| - | - | - |
| `received_at` | datetime | Wann Didit den Versuch empfangen hat. |
| `created_at` | datetime | Wann der Versuch erfasst wurde. |

Versuche, die durch eine erneute Einreichung hinfällig wurden, werden weggelassen.
Die rohe Client-Einreichung und die Challenge werden niemals zurückgegeben.

## Felder für Statusregeln und Verzweigungen

Benutzerdefinierte `status_rules` und Verzweigungsregeln können die folgenden Felder auslesen:
`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`) und `geolocation.consecutive_mismatches`.
Ein fehlender Wert entspricht nur `is_empty`, sodass eine für ein Betrugssignal definierte Regel niemals bei fehlenden Daten auslöst.

## Verwandte Themen

* [Standortverifizierung](https://docs.didit.me/de/core-technology/location-verification/overview.md) - wie der Schritt funktioniert und was er kostet.
* [Warnungen zur Standortverifizierung](https://docs.didit.me/de/core-technology/location-verification/warnings-location-verification.md) - alle `LOCATION_*`-Codes.
* [Webhooks](https://docs.didit.me/de/integration/webhooks.md) - `status.updated` enthält die Listen.
* [Datenmodelle - Warnungsobjekt](https://docs.didit.me/de/reference/data-models.md#warnungsobjekt) - der Aufbau jedes Eintrags in `warnings[]`.


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