# Расчёт расстояний

Сервис «Расчёт расстояний» помогает построить точные маршруты с учётом особенностей грузового транспорта, а также актуальных дорожных условий и ограничений: паромы, зимники и платные дороги.
Сервис позволяет определять расстояния между населёнными пунктами и координатами, а также исключать из маршрута определённые регионы и страны.

## Доступ к сервису

Доступ к API Расчёта расстояний платный, предоставляется по запросу.

Чтобы узнать условия использования, свяжитесь с отделом продаж по телефону +7&nbsp;812&nbsp;602-01-06.

## Методы получения расстояния и маршрута

Расчёт расстояний и построение маршрутов осуществляются от/до точки, которые можно указать как `node_id` (идентификатор населённого пункта), `geo_point` (координата). Если указано оба варианта, используется только координата.

<a id="post-v1-distance"></a>

**Версия: Bearer token**

Получение расстояния (платный)

**Пример запроса (curl):**

```bash
curl 'https://api.ati.su/gw/gis-rm/v1/distance' \
  -X 'POST' \
  -H 'Authorization: Bearer {authorizationToken}' \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "nodes": [
    {
      "node_id": 1,
      "geo_point": {
        "lat": 59.8913,
        "lon": 30.3727
      }
    }
  ],
  "options": {
    "within_country": false,
    "exclude_mkad": false,
    "exclude_ukraine": false,
    "allow_ferry": false,
    "allow_winter_road": false,
    "allow_toll_road": false,
    "strategy": 1,
    "customs_delay": 120,
    "ferry_delay": 120,
    "max_speed": 110,
    "weight": 10000
  }
}'
```

**OpenAPI схема:** [JSON](https://ati.su/developers/raw/paid-api/route.openapi.json)

**Описание полей запроса**
- `nodes` — Точки маршрута в порядке следования
- `nodes[].node_id` — Идентификатор населённого пункта
- `nodes[].geo_point` — Координаты точки
- `nodes[].geo_point.lat` — Широта
- `nodes[].geo_point.lon` — Долгота
- `options` — Ограничения маршрута
- `options.within_country` — Строить маршрут внутри одной страны Значение по умолчанию: `true`
- `options.exclude_mkad` — Не заезжать на МКАД Значение по умолчанию: `false`
- `options.exclude_ukraine` — Не заезжать в Украину Значение по умолчанию: `true`
- `options.allow_ferry` — Разрешить проезд по паромам При передаче значения по умолчанию будет учитываться расписание (пока расписания нет, поэтому всегда разрешены) Значение по умолчанию: `null`
- `options.allow_winter_road` — Разрешить проезд по зимникам При передаче значения по умолчанию будет учитываться расписание (декабрь, январь, февраль - зимники разрешены, остальные месяцы - запрещены) Значение по умолчанию: `null`
- `options.allow_toll_road` — Разрешить проезд по платным трассам Значение по умолчанию: `true`
- `options.strategy` — Тип маршрута для поиска Значение по умолчанию: `2` Members: 1 - Самый короткий 2 - Самый быстрый Members:
- `options.customs_delay` — Задержка при пересечении границы в минутах Значение по умолчанию: `120`
- `options.ferry_delay` — Задержка при использовании паромов в минутах Значение по умолчанию: `120`
- `options.max_speed` — Максимальная скорость транспортного средства в км/ч Значение по умолчанию: `110`
- `options.weight` — Полная масса транспортного средства в килограммах Значение по умолчанию: `10 000`

**Пример ответа (200)**

```json
{
  "status": "string",
  "platon_distance": 0,
  "toll_distance": 0,
  "travel_time": 0
}
```

**Описание полей ответа**
- `status` — success - нашли маршрут по всем параметрам фильтра. without_restrictions - не нашли маршрут по всем параметрам фильтра, но нашли маршрут без ограничений
- `platon_distance` — Общее расстояние, преодоленное по Платону в метрах
- `toll_distance` — Общее расстояние платных дорог в метрах
- `travel_time` — Время в пути в секундах с учетом параметров и задержек

**Пример ответа (400)**

```json
{
  "error_list": [
    {
      "error": "string",
      "reason": "string",
      "details": {
        "any-key": null
      }
    }
  ],
  "details": {
    "any-key": null
  }
}
```

**Описание полей ответа**
- `error_list[].error` — Текстовый код ошибки
- `error_list[].reason` — Человекочитаемое описание ошибки
- `error_list[].details` — Дополнительная информация об ошибке

<a id="post-v1-distance"></a>

**Версия: OAuth2.0**

Получение расстояния (платный)

**Пример запроса (curl):**

```bash
curl 'https://api.ati.su/gw/oauth2/gis-rm/v1/distance' \
  -X 'POST' \
  -H 'Authorization: Bearer {authorizationToken}' \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "nodes": [
    {
      "node_id": 1,
      "geo_point": {
        "lat": 59.8913,
        "lon": 30.3727
      }
    }
  ],
  "options": {
    "within_country": false,
    "exclude_mkad": false,
    "exclude_ukraine": false,
    "allow_ferry": false,
    "allow_winter_road": false,
    "allow_toll_road": false,
    "strategy": 1,
    "customs_delay": 120,
    "ferry_delay": 120,
    "max_speed": 110,
    "weight": 10000
  }
}'
```

**OpenAPI схема:** [JSON](https://ati.su/developers/raw/paid-api/route.openapi.json)

**Описание полей запроса**
- `nodes` — Точки маршрута в порядке следования
- `nodes[].node_id` — Идентификатор населённого пункта
- `nodes[].geo_point` — Координаты точки
- `nodes[].geo_point.lat` — Широта
- `nodes[].geo_point.lon` — Долгота
- `options` — Ограничения маршрута
- `options.within_country` — Строить маршрут внутри одной страны Значение по умолчанию: `true`
- `options.exclude_mkad` — Не заезжать на МКАД Значение по умолчанию: `false`
- `options.exclude_ukraine` — Не заезжать в Украину Значение по умолчанию: `true`
- `options.allow_ferry` — Разрешить проезд по паромам При передаче значения по умолчанию будет учитываться расписание (пока расписания нет, поэтому всегда разрешены) Значение по умолчанию: `null`
- `options.allow_winter_road` — Разрешить проезд по зимникам При передаче значения по умолчанию будет учитываться расписание (декабрь, январь, февраль - зимники разрешены, остальные месяцы - запрещены) Значение по умолчанию: `null`
- `options.allow_toll_road` — Разрешить проезд по платным трассам Значение по умолчанию: `true`
- `options.strategy` — Тип маршрута для поиска Значение по умолчанию: `2` Members: 1 - Самый короткий 2 - Самый быстрый Members:
- `options.customs_delay` — Задержка при пересечении границы в минутах Значение по умолчанию: `120`
- `options.ferry_delay` — Задержка при использовании паромов в минутах Значение по умолчанию: `120`
- `options.max_speed` — Максимальная скорость транспортного средства в км/ч Значение по умолчанию: `110`
- `options.weight` — Полная масса транспортного средства в килограммах Значение по умолчанию: `10 000`

**Пример ответа (200)**

```json
{
  "status": "string",
  "platon_distance": 0,
  "toll_distance": 0,
  "travel_time": 0
}
```

**Описание полей ответа**
- `status` — success - нашли маршрут по всем параметрам фильтра. without_restrictions - не нашли маршрут по всем параметрам фильтра, но нашли маршрут без ограничений
- `platon_distance` — Общее расстояние, преодоленное по Платону в метрах
- `toll_distance` — Общее расстояние платных дорог в метрах
- `travel_time` — Время в пути в секундах с учетом параметров и задержек

**Пример ответа (400)**

```json
{
  "error_list": [
    {
      "error": "string",
      "reason": "string",
      "details": {
        "any-key": null
      }
    }
  ],
  "details": {
    "any-key": null
  }
}
```

**Описание полей ответа**
- `error_list[].error` — Текстовый код ошибки
- `error_list[].reason` — Человекочитаемое описание ошибки
- `error_list[].details` — Дополнительная информация об ошибке


<a id="post-v1-route-info"></a>

**Версия: Bearer token**

Получение маршрута (платный)

**Пример запроса (curl):**

```bash
curl 'https://api.ati.su/gw/gis-rm/v1/route-info?visual-route=false&route-info=false' \
  -X 'POST' \
  -H 'Authorization: Bearer {authorizationToken}' \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "options": {
    "within_country": false,
    "exclude_mkad": false,
    "exclude_ukraine": false,
    "allow_ferry": false,
    "allow_winter_road": false,
    "allow_toll_road": false,
    "strategy": 1,
    "customs_delay": 120,
    "ferry_delay": 120,
    "max_speed": 110,
    "weight": 10000
  },
  "map_bounds": {
    "north_east": {
      "lat": 60.86631,
      "lon": 44.121094
    },
    "south_west": {
      "lat": 54.591164,
      "lon": 23.192139
    }
  },
  "nodes": [
    {
      "node_id": 1,
      "geo_point": {
        "lat": 59.8913,
        "lon": 30.3727
      },
      "type": 0
    }
  ],
  "exclude_regions": [
    0
  ],
  "exclude_countries": [
    0
  ]
}'
```

**OpenAPI схема:** [JSON](https://ati.su/developers/raw/paid-api/route.openapi.json)

**Описание полей запроса**
- `options` — Ограничения маршрута
- `options.within_country` — Строить маршрут внутри одной страны Значение по умолчанию: `true`
- `options.exclude_mkad` — Не заезжать на МКАД Значение по умолчанию: `false`
- `options.exclude_ukraine` — Не заезжать в Украину Значение по умолчанию: `true`
- `options.allow_ferry` — Разрешить проезд по паромам При передаче значения по умолчанию будет учитываться расписание (пока расписания нет, поэтому всегда разрешены) Значение по умолчанию: `null`
- `options.allow_winter_road` — Разрешить проезд по зимникам При передаче значения по умолчанию будет учитываться расписание (декабрь, январь, февраль - зимники разрешены, остальные месяцы - запрещены) Значение по умолчанию: `null`
- `options.allow_toll_road` — Разрешить проезд по платным трассам Значение по умолчанию: `true`
- `options.strategy` — Тип маршрута для поиска Значение по умолчанию: `2` Members: 1 - Самый короткий 2 - Самый быстрый Members:
- `options.customs_delay` — Задержка при пересечении границы в минутах Значение по умолчанию: `120`
- `options.ferry_delay` — Задержка при использовании паромов в минутах Значение по умолчанию: `120`
- `options.max_speed` — Максимальная скорость транспортного средства в км/ч Значение по умолчанию: `110`
- `options.weight` — Полная масса транспортного средства в килограммах Значение по умолчанию: `10 000`
- `map_bounds` — Границы видимой части карты
- `map_bounds.north_east` — Координаты точки
- `map_bounds.north_east.lat` — Широта
- `map_bounds.north_east.lon` — Долгота
- `map_bounds.south_west` — Координаты точки
- `map_bounds.south_west.lat` — Широта
- `map_bounds.south_west.lon` — Долгота
- `nodes` — Точки маршрута в порядке следования
- `nodes[].node_id` — Идентификатор населённого пункта
- `nodes[].geo_point` — Координаты точки
- `nodes[].geo_point.lat` — Широта
- `nodes[].geo_point.lon` — Долгота
- `nodes[].type` — Тип точки маршрута. Может быть маской. Members: 0 - Просто город, который проезжаем мимо не заезжая в него. 1 - Начало маршрута 2 - Конец маршрута 4 - Точка загрузки 8 - Точка разгрузки 16 - Промежуточная точка 32 - Таможня 64 - На следующем отрезке в машине есть груз
- `exclude_regions` — Не заезжать в указанные регионы
- `exclude_countries` — Не заезжать в указанные страны

**Пример ответа (200)**

```json
{
  "route_info": {},
  "visual_route": {
    "segments": [
      {
        "fare_visualization_type": 0,
        "geo_points": [
          [
            {
              "lat": 0.5,
              "lon": 0.5
            }
          ]
        ],
        "distance": 0
      }
    ]
  },
  "status": "string",
  "platon_rate": 0.5,
  "platon_distance": 0,
  "toll_distance": 0,
  "total_distance": 0,
  "travel_time": 0
}
```

**Описание полей ответа**
- `route_info` — Информация о попутных городах маршрута и названиях дорог
- `visual_route` — Координаты точек маршрута
- `visual_route.segments` — Координаты отрезка маршрута
- `visual_route.segments[].fare_visualization_type` — Тип платности дороги для визуализации (раскраска дорог) Members: 1 - Платон 2 - Платная 4 - Просто дорога 8 - Машина без груза Members:
- `visual_route.segments[].geo_points` — Координаты точек отрезка маршрута
- `visual_route.segments[].geo_points[][].lat` — Широта
- `visual_route.segments[].geo_points[][].lon` — Долгота
- `visual_route.segments[].distance` — Расстояние в метрах
- `status` — success - нашли маршрут по всем параметрам фильтра. without_restrictions - не нашли маршрут по всем параметрам фильтра, но нашли маршрут без ограничений
- `platon_rate` — Стоимость проезда по Платону в рублях РФ
- `platon_distance` — Общее расстояние, преодоленное по Платону в метрах
- `toll_distance` — Общее расстояние платных дорог в метрах
- `total_distance` — Общее расстояние в метрах
- `travel_time` — Время в пути в секундах с учетом параметров и задержек

**Пример ответа (400)**

```json
{
  "error_list": [
    {
      "error": "string",
      "reason": "string",
      "details": {
        "any-key": null
      }
    }
  ],
  "details": {
    "any-key": null
  }
}
```

**Описание полей ответа**
- `error_list[].error` — Текстовый код ошибки
- `error_list[].reason` — Человекочитаемое описание ошибки
- `error_list[].details` — Дополнительная информация об ошибке

<a id="post-v1-route-info"></a>

**Версия: OAuth2.0**

Получение маршрута (платный)

**Пример запроса (curl):**

```bash
curl 'https://api.ati.su/gw/oauth2/gis-rm/v1/route-info?visual-route=false&route-info=false' \
  -X 'POST' \
  -H 'Authorization: Bearer {authorizationToken}' \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "options": {
    "within_country": false,
    "exclude_mkad": false,
    "exclude_ukraine": false,
    "allow_ferry": false,
    "allow_winter_road": false,
    "allow_toll_road": false,
    "strategy": 1,
    "customs_delay": 120,
    "ferry_delay": 120,
    "max_speed": 110,
    "weight": 10000
  },
  "map_bounds": {
    "north_east": {
      "lat": 60.86631,
      "lon": 44.121094
    },
    "south_west": {
      "lat": 54.591164,
      "lon": 23.192139
    }
  },
  "nodes": [
    {
      "node_id": 1,
      "geo_point": {
        "lat": 59.8913,
        "lon": 30.3727
      },
      "type": 0
    }
  ],
  "exclude_regions": [
    0
  ],
  "exclude_countries": [
    0
  ]
}'
```

**OpenAPI схема:** [JSON](https://ati.su/developers/raw/paid-api/route.openapi.json)

**Описание полей запроса**
- `options` — Ограничения маршрута
- `options.within_country` — Строить маршрут внутри одной страны Значение по умолчанию: `true`
- `options.exclude_mkad` — Не заезжать на МКАД Значение по умолчанию: `false`
- `options.exclude_ukraine` — Не заезжать в Украину Значение по умолчанию: `true`
- `options.allow_ferry` — Разрешить проезд по паромам При передаче значения по умолчанию будет учитываться расписание (пока расписания нет, поэтому всегда разрешены) Значение по умолчанию: `null`
- `options.allow_winter_road` — Разрешить проезд по зимникам При передаче значения по умолчанию будет учитываться расписание (декабрь, январь, февраль - зимники разрешены, остальные месяцы - запрещены) Значение по умолчанию: `null`
- `options.allow_toll_road` — Разрешить проезд по платным трассам Значение по умолчанию: `true`
- `options.strategy` — Тип маршрута для поиска Значение по умолчанию: `2` Members: 1 - Самый короткий 2 - Самый быстрый Members:
- `options.customs_delay` — Задержка при пересечении границы в минутах Значение по умолчанию: `120`
- `options.ferry_delay` — Задержка при использовании паромов в минутах Значение по умолчанию: `120`
- `options.max_speed` — Максимальная скорость транспортного средства в км/ч Значение по умолчанию: `110`
- `options.weight` — Полная масса транспортного средства в килограммах Значение по умолчанию: `10 000`
- `map_bounds` — Границы видимой части карты
- `map_bounds.north_east` — Координаты точки
- `map_bounds.north_east.lat` — Широта
- `map_bounds.north_east.lon` — Долгота
- `map_bounds.south_west` — Координаты точки
- `map_bounds.south_west.lat` — Широта
- `map_bounds.south_west.lon` — Долгота
- `nodes` — Точки маршрута в порядке следования
- `nodes[].node_id` — Идентификатор населённого пункта
- `nodes[].geo_point` — Координаты точки
- `nodes[].geo_point.lat` — Широта
- `nodes[].geo_point.lon` — Долгота
- `nodes[].type` — Тип точки маршрута. Может быть маской. Members: 0 - Просто город, который проезжаем мимо не заезжая в него. 1 - Начало маршрута 2 - Конец маршрута 4 - Точка загрузки 8 - Точка разгрузки 16 - Промежуточная точка 32 - Таможня 64 - На следующем отрезке в машине есть груз
- `exclude_regions` — Не заезжать в указанные регионы
- `exclude_countries` — Не заезжать в указанные страны

**Пример ответа (200)**

```json
{
  "route_info": {},
  "visual_route": {
    "segments": [
      {
        "fare_visualization_type": 0,
        "geo_points": [
          [
            {
              "lat": 0.5,
              "lon": 0.5
            }
          ]
        ],
        "distance": 0
      }
    ]
  },
  "status": "string",
  "platon_rate": 0.5,
  "platon_distance": 0,
  "toll_distance": 0,
  "total_distance": 0,
  "travel_time": 0
}
```

**Описание полей ответа**
- `route_info` — Информация о попутных городах маршрута и названиях дорог
- `visual_route` — Координаты точек маршрута
- `visual_route.segments` — Координаты отрезка маршрута
- `visual_route.segments[].fare_visualization_type` — Тип платности дороги для визуализации (раскраска дорог) Members: 1 - Платон 2 - Платная 4 - Просто дорога 8 - Машина без груза Members:
- `visual_route.segments[].geo_points` — Координаты точек отрезка маршрута
- `visual_route.segments[].geo_points[][].lat` — Широта
- `visual_route.segments[].geo_points[][].lon` — Долгота
- `visual_route.segments[].distance` — Расстояние в метрах
- `status` — success - нашли маршрут по всем параметрам фильтра. without_restrictions - не нашли маршрут по всем параметрам фильтра, но нашли маршрут без ограничений
- `platon_rate` — Стоимость проезда по Платону в рублях РФ
- `platon_distance` — Общее расстояние, преодоленное по Платону в метрах
- `toll_distance` — Общее расстояние платных дорог в метрах
- `total_distance` — Общее расстояние в метрах
- `travel_time` — Время в пути в секундах с учетом параметров и задержек

**Пример ответа (400)**

```json
{
  "error_list": [
    {
      "error": "string",
      "reason": "string",
      "details": {
        "any-key": null
      }
    }
  ],
  "details": {
    "any-key": null
  }
}
```

**Описание полей ответа**
- `error_list[].error` — Текстовый код ошибки
- `error_list[].reason` — Человекочитаемое описание ошибки
- `error_list[].details` — Дополнительная информация об ошибке


## Методы получения ближайших населённых пунктов с расстоянием по дорогам

<a id="post-v1-nearest-cities-with-roads-distance"></a>

**Версия: Bearer token**

Получение ближайших населённых пунктов с расстоянием по дорогам (платный)

**Пример запроса (curl):**

```bash
curl 'https://api.ati.su/gw/gis-rm/v1/nearest-cities/with-roads-distance' \
  -X 'POST' \
  -H 'Authorization: Bearer {authorizationToken}' \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "start_point": {
    "node_id": 1,
    "geo_point": {
      "lat": 59.8913,
      "lon": 30.3727
    }
  },
  "radius": 200000,
  "cities_count": 5,
  "large_cities_count": 3
}'
```

**OpenAPI схема:** [JSON](https://ati.su/developers/raw/paid-api/route.openapi.json)

**Описание полей запроса**
- `start_point` — Точка
- `start_point.node_id` — Идентификатор населённого пункта
- `start_point.geo_point` — Координаты точки
- `start_point.geo_point.lat` — Широта
- `start_point.geo_point.lon` — Долгота
- `radius` — Радиус поиска в метрах Значение по умолчанию: `200000` Максимальное значение: `300000`
- `cities_count` — Количество населённых пунктов в выдаче Значение по умолчанию: `5` Максимальное значение: `20`
- `large_cities_count` — Количество крупных населённых пунктов в выдаче (население от 100 000 человек) Значение по умолчанию: `3` Максимальное значение: `20`

**Пример ответа (200)**

```json
[
  {
    "city_id": 0,
    "distance": 0,
    "time": 0
  }
]
```

**Описание полей ответа**
- `[].city_id` — Идентификатор населённого пункта
- `[].distance` — Расстояние до населённого пункта по дорогам в метрах
- `[].time` — Время в пути до населённого пункта в секундах

**Пример ответа (400)**

```json
{
  "error_list": [
    {
      "error": "string",
      "reason": "string",
      "details": {
        "any-key": null
      }
    }
  ],
  "details": {
    "any-key": null
  }
}
```

**Описание полей ответа**
- `error_list[].error` — Текстовый код ошибки
- `error_list[].reason` — Человекочитаемое описание ошибки
- `error_list[].details` — Дополнительная информация об ошибке

<a id="post-v1-nearest-cities-with-roads-distance"></a>

**Версия: OAuth2.0**

Получение ближайших населённых пунктов с расстоянием по дорогам (платный)

**Пример запроса (curl):**

```bash
curl 'https://api.ati.su/gw/oauth2/gis-rm/v1/nearest-cities/with-roads-distance' \
  -X 'POST' \
  -H 'Authorization: Bearer {authorizationToken}' \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "start_point": {
    "node_id": 1,
    "geo_point": {
      "lat": 59.8913,
      "lon": 30.3727
    }
  },
  "radius": 200000,
  "cities_count": 5,
  "large_cities_count": 3
}'
```

**OpenAPI схема:** [JSON](https://ati.su/developers/raw/paid-api/route.openapi.json)

**Описание полей запроса**
- `start_point` — Точка
- `start_point.node_id` — Идентификатор населённого пункта
- `start_point.geo_point` — Координаты точки
- `start_point.geo_point.lat` — Широта
- `start_point.geo_point.lon` — Долгота
- `radius` — Радиус поиска в метрах Значение по умолчанию: `200000` Максимальное значение: `300000`
- `cities_count` — Количество населённых пунктов в выдаче Значение по умолчанию: `5` Максимальное значение: `20`
- `large_cities_count` — Количество крупных населённых пунктов в выдаче (население от 100 000 человек) Значение по умолчанию: `3` Максимальное значение: `20`

**Пример ответа (200)**

```json
[
  {
    "city_id": 0,
    "distance": 0,
    "time": 0
  }
]
```

**Описание полей ответа**
- `[].city_id` — Идентификатор населённого пункта
- `[].distance` — Расстояние до населённого пункта по дорогам в метрах
- `[].time` — Время в пути до населённого пункта в секундах

**Пример ответа (400)**

```json
{
  "error_list": [
    {
      "error": "string",
      "reason": "string",
      "details": {
        "any-key": null
      }
    }
  ],
  "details": {
    "any-key": null
  }
}
```

**Описание полей ответа**
- `error_list[].error` — Текстовый код ошибки
- `error_list[].reason` — Человекочитаемое описание ошибки
- `error_list[].details` — Дополнительная информация об ошибке


## Метод получения всех населённых пунктов, до которых можно доехать по дорогам, не превышая заданное расстояние

<a id="post-v1-cities-in-radius"></a>

**Версия: Bearer token**

Поиск в радиусе. Получение всех населённых пунктов, до которых можно доехать по дорогам, не превышая заданное расстояние (платный)

**Пример запроса (curl):**

```bash
curl 'https://api.ati.su/gw/gis-rm/v1/cities-in-radius' \
  -X 'POST' \
  -H 'Authorization: Bearer {authorizationToken}' \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "city_id": 1,
  "cities_key": "active-cities",
  "within_country": true,
  "limit": 10,
  "radius": 300000
}'
```

**OpenAPI схема:** [JSON](https://ati.su/developers/raw/paid-api/route.openapi.json)

**Описание полей запроса**
- `city_id` — Идентификатор населённого пункта
- `cities_key` — Ключ списка населённых пунктов для дополнительной фильтрации
- `within_country` — Искать населённые пункты только внутри страны Значение по умолчанию: `true`
- `limit` — Максимальное количество результатов Минимальное значение: `0` Максимальное значение: `10000` Значение по умолчанию: `0` без лимита
- `radius` — Максимальное расстояние в метрах Минимальное значение: `1 000` Максимальное значение: `300 000`

**Пример ответа (200)**

```json
[
  {
    "c": 0,
    "d": 0
  }
]
```

**Описание полей ответа**
- `[].c` — Идентификатор населённого пункта
- `[].d` — Расстояние до населённого пункта в метрах

**Пример ответа (400)**

```json
{
  "error": "string",
  "reason": "string",
  "details": {
    "any-key": null
  }
}
```

**Описание полей ответа**
- `error` — Текстовый код ошибки
- `reason` — Человекочитаемое описание ошибки
- `details` — Дополнительная информация об ошибке

<a id="post-v1-cities-in-radius"></a>

**Версия: OAuth2.0**

Поиск в радиусе. Получение всех населённых пунктов, до которых можно доехать по дорогам, не превышая заданное расстояние (платный)

**Пример запроса (curl):**

```bash
curl 'https://api.ati.su/gw/oauth2/gis-rm/v1/cities-in-radius' \
  -X 'POST' \
  -H 'Authorization: Bearer {authorizationToken}' \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "city_id": 1,
  "cities_key": "active-cities",
  "within_country": true,
  "limit": 10,
  "radius": 300000
}'
```

**OpenAPI схема:** [JSON](https://ati.su/developers/raw/paid-api/route.openapi.json)

**Описание полей запроса**
- `city_id` — Идентификатор населённого пункта
- `cities_key` — Ключ списка населённых пунктов для дополнительной фильтрации
- `within_country` — Искать населённые пункты только внутри страны Значение по умолчанию: `true`
- `limit` — Максимальное количество результатов Минимальное значение: `0` Максимальное значение: `10000` Значение по умолчанию: `0` без лимита
- `radius` — Максимальное расстояние в метрах Минимальное значение: `1 000` Максимальное значение: `300 000`

**Пример ответа (200)**

```json
[
  {
    "c": 0,
    "d": 0
  }
]
```

**Описание полей ответа**
- `[].c` — Идентификатор населённого пункта
- `[].d` — Расстояние до населённого пункта в метрах

**Пример ответа (400)**

```json
{
  "error": "string",
  "reason": "string",
  "details": {
    "any-key": null
  }
}
```

**Описание полей ответа**
- `error` — Текстовый код ошибки
- `reason` — Человекочитаемое описание ошибки
- `details` — Дополнительная информация об ошибке


## Устаревший веб сервис

:::danger
Веб сервис будет доступен до 1 апреля 2026 года — после этого он будет отключен.
:::

* <a href="https://ati.su/landings/RoutesServiceAPI/" target="_blank">Веб сервис</a>
---

## llms.txt

Индекс ключевых страниц документации для LLM и AI-агентов доступен в [основном llms.txt](https://ati.su/developers/llms.txt).
