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

# Верификация местоположения: поля geolocation_checks

> Разбор geolocation_checks и geolocation_attempts в решении сессии Didit: координаты, точность, зоны, анонимайзеры и предупреждения.

## Обзор

Решение по сессии возвращает результат каждого шага верификации местоположения в двух списках: `geolocation_checks[]` содержит принятую попытку каждого шага, а `geolocation_attempts[]` перечисляет каждую попытку по порядку.
Оба списка возвращаются в `GET /v3/session/{sessionId}/decision/` (см. [Получение сессии](https://docs.didit.me/ru/sessions-api/retrieve-session.md)) и в webhook `status.updated`.
Сценарий без шага местоположения возвращает `null` или пустой список для обоих полей.

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

По одному элементу на каждый шаг местоположения (`node_id`), взятому из его самой последней попытки.

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

| Поле | Тип | Описание |
| - | - | - |
| `node_id` | string | Узел сценария, сформировавший результат, благодаря чему сценарий с двумя шагами местоположения остаётся наглядным. |
| `status` | string | `Approved`, `In Review`, `Declined` или `Not Finished`, определяется на основе предупреждений. |
| `outcome` | string | Что произошло при принятой попытке. См. [результаты](https://docs.didit.me/ru/core-technology/location-verification/overview.md#результаты). |
| `permission` | string | Что предоставила система: `granted_precise`, `granted_approximate`, `denied`, `restricted`, `unavailable`, `timeout`, `dismissed` или `not_requested` (шаг только по IP). |
| `latitude`, `longitude` | number or null | Координаты WGS84. `null`, если местоположение отсутствует. |
| `accuracy_m` | number or null | Радиус погрешности в метрах. |
| `accuracy_confidence` | string or null | Уровень доверия к радиусу: `p95` (веб), `p68` (Android) или `unspecified` (iOS). Платформы различаются, поэтому значение записывается как есть, а не нормализуется. |
| `measured_at` | datetime or null | Время фиксации местоположения по часам устройства. |
| `age_seconds` | integer or null | Время между измерением и моментом, когда Didit его получил. |
| `source` | string or null | `gps`, `fused`, `network`, `wifi`, `cell`, `browser`, `unknown` или `ip` на шаге только по IP. |
| `platform` | string or null | `web`, `ios`, `android`, `react_native` или `flutter`. |
| `sdk_version` | string or null | Версия SDK, передавшая координаты. |
| `is_mock` | boolean or null | Система сообщила об имитации местоположения. `null` означает, что платформа не может это определить (веб), а не `false`. |
| `produced_by_accessory` | boolean or null | Только для iOS: местоположение получено от внешнего аксессуара. |
| `integrity` | string | Аттестация устройства: `attested`, `not_attested`, `failed`, `unsupported` (веб) или `not_determined`. |
| `country_code`, `region_code`, `city` | string or null | Место, которому соответствуют координаты, определённое в офлайн-режиме: ISO 3166-1 alpha-2, ISO 3166-2 и ближайший населённый пункт. Город служит меткой для проверяющих и никогда не используется во входных данных правил. |
| `geofence` | object | `enabled` и `result`: `inside`, `outside` или `undetermined`. Поле `result` равно `null`, если геозонирование выключено. |
| `inside_geofence` | boolean or null | `true` или `false`, либо `null`, если геозонирование выключено или окружность погрешности пересекает границу. |
| `geofence_basis` | string or null | По какому местоположению вынесен вердикт по зоне: `device` или `ip`. |
| `inside_areas`, `blocked_areas` | array | Идентификаторы `id` разрешённых зон, внутри которых целиком находится окружность погрешности, и заблокированных зон, внутри которых она находится. |
| `position_source` | string or null | Значение `geolocation_position_source` узла на момент выполнения попытки. |
| `anonymizers` | object or null | `vpn`, `proxy`, `tor`, `spoofing` и `emulator`, каждое из которых имеет значение `true`, `false` или `null`, если источник не может это определить. |
| `ip_distance_km` | number or null | Расстояние до местоположения по IP после вычитания обоих радиусов погрешности. 0 означает их перекрытие. |
| `ip_distance_uncertainty_km` | number or null | Суммарный радиус, который был вычтен. |
| `ip_consistent` | boolean or null | Находится ли `ip_distance_km` в пределах `geolocation_ip_distance_km`. `null`, если хотя бы одна из сторон неизвестна. |
| `document_distance_km` | number or null | Расстояние до геокодированного адреса документа. `null`, если адрес отсутствует. |
| `travel_excused` | boolean or null | Допуск на поездки освобождает от учёта расстояния. `null`, если допуск отключён. |
| `consecutive_mismatches` | integer or null | В финальной попытке: эта проверка плюс предыдущие несовпадения подряд для того же человека. |
| `attempts` | integer | Номер попытки. |
| `consent` | object or null | `accepted_at`, `version` и `locale` уведомления о местоположении, принятого человеком. |
| `warnings` | array | [Предупреждения](https://docs.didit.me/ru/core-technology/location-verification/warnings-location-verification.md) шага. |

## `geolocation_attempts[]`

Каждая попытка каждого шага местоположения, начиная с самых ранних, с теми же полями, относящимися к измерениям, неопределённости, зонам и расстояниям, что и в `geolocation_checks[]`, за исключением `warnings`, а также:

| Поле | Тип | Описание |
| - | - | - |
| `received_at` | datetime | Когда Didit получил попытку. |
| `created_at` | datetime | Когда попытка была записана. |

Попытки, аннулированные повторной отправкой, исключаются.
Необработанные данные, отправленные клиентом, и challenge никогда не возвращаются.

## Поля для правил статуса и ветвей

Пользовательские `status_rules` и правила ветвления могут читать следующие поля:
`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`) и `geolocation.consecutive_mismatches`.
Отсутствующее значение соответствует только `is_empty`, поэтому правило, настроенное на сигнал о мошенничестве, никогда не сработает при отсутствии данных.

## Связанные материалы

* [Верификация местоположения](https://docs.didit.me/ru/core-technology/location-verification/overview.md) - как работает этот шаг и сколько он стоит.
* [Предупреждения при верификации местоположения](https://docs.didit.me/ru/core-technology/location-verification/warnings-location-verification.md) - все коды `LOCATION_*`.
* [Webhook](https://docs.didit.me/ru/integration/webhooks.md) - событие `status.updated` содержит эти списки.
* [Модели данных - объект предупреждения](https://docs.didit.me/ru/reference/data-models.md#объект-предупреждения) - структура каждого элемента в `warnings[]`.


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