# API Средних ставок

API позволяет получить цены и количество грузов [из сервиса «Средние ставки»](https://ati.su/analytics/price/).

## API предоставляет средние ставки:

- по направлениям внутри России и за рубеж;
- для полностью загруженного транспорта со следующим тоннажем: 1,5 т, 3 т, 5 т, 10 т, 20 т;
- за интересующий вас период;
- для следующих типов кузовов: рефрижератор, тент, трал, контейнер, открытый и закрытый кузов.

[Подробнее об API Средних ставок и методах получения данных](https://help.ati.su/average-rate-api).

## Ограничения при работе с API

Время ответа API зависит от объёма данных, который вы запрашиваете.

Например: чтобы получить данные за 1 день потребуется 150 мс, за полгода по дням — 400 мс, за год по месяцам — 15 сек. и так далее.

Количество запросов к API — 10 000 в месяц.

Увеличить лимит можно по индивидуальному запросу: обратитесь в отдел продаж boards@ati.su.

## Как получить доступ к API

Чтобы получить доступ к API – подключите лицензию «API Средних ставок» [на странице оплаты](https://billing.ati.su/addinvoice?option=1&services=569&priceperiod=1).

Если у вас остались вопросы — напишите в техническую поддержку на [api@ati.su](mailto:api@ati.su).

## Методы

### Доступные направления для средних ставок

<a id="get-license-v2-all_directions"></a>

**Версия: 2**

Возвращает список всех доступных направлений и доступные типы кузова для направления

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

```bash
curl 'https://api.ati.su/priceline/license/v2/all_directions?demo=%7Bdemo%7D' \
  -X 'GET' \
  -H 'Authorization: Bearer {authorizationToken}' \
  -H 'Content-Type: application/json'
```

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

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

```json
{
  "AllDirections": [
    {
      "FromCityId": 0,
      "FromCity": "string",
      "ToCityId": 0,
      "ToCity": "string",
      "FromRegionId": 0,
      "FromRegion": "string",
      "ToRegionId": 0,
      "ToRegion": "string",
      "DirectionInfo": {
        "CartypeTonnage": {},
        "TonnageCartype": {}
      },
      "RoundTripsInfo": {
        "CartypeTonnage": {},
        "TonnageCartype": {}
      }
    }
  ]
}
```

**Описание полей ответа**
- `AllDirections` — Все направления для средних ставок
- `AllDirections[].FromCityId` — ID города загрузки
- `AllDirections[].FromCity` — Название города загрузки
- `AllDirections[].ToCityId` — ID города разгрузки
- `AllDirections[].ToCity` — Название города разгрузки
- `AllDirections[].FromRegionId` — ID региона загрузки
- `AllDirections[].FromRegion` — Название региона загрузки
- `AllDirections[].ToRegionId` — ID региона разгрузки
- `AllDirections[].ToRegion` — Название региона разгрузки
- `AllDirections[].DirectionInfo` — Структура информации о направлении - доступные сочетания тоннажа и типов кузова
- `AllDirections[].DirectionInfo.CartypeTonnage` — Словарь доступных сочетаний тип кузова - тоннаж
- `AllDirections[].DirectionInfo.TonnageCartype` — Словарь сочетаний тоннаж - тип кузова
- `AllDirections[].RoundTripsInfo` — Структура информации о кругорейсе - доступные сочетания тоннажа и типов кузова
- `AllDirections[].RoundTripsInfo.CartypeTonnage` — Словарь доступных сочетаний тип кузова - тоннаж
- `AllDirections[].RoundTripsInfo.TonnageCartype` — Словарь сочетаний тоннаж - тип кузова


### Запрос средних ставок

<a id="post-license-v1-average_prices"></a>

Метод получения средних цен

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

```bash
curl 'https://api.ati.su/priceline/license/v1/average_prices?demo=%7Bdemo%7D' \
  -X 'POST' \
  -H 'Authorization: Bearer {authorizationToken}' \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "CarType": "close",
  "DateFrom": "2022-03-01",
  "DateTo": "2022-03-02",
  "Frequency": "day",
  "From": {
    "CityId": 1
  },
  "RoundTrip": false,
  "To": {
    "CityId": 3611
  },
  "Tonnage": 5,
  "WithNds": false
}'
```

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

**Описание полей запроса**
- `CarType` — Тип кузова. * `ref` - рефрижераторы. * `close` - закрытые. Значение по умолчанию. * `open` - открытые. * `tent` - тентованный. * `tral` - трал. * `docker` - контейнер.
- `DateFrom` — Начало периода. Формат ISO-8601. Если интересует только одна дата, то передавать ее здесь. По умолчанию - последний день, за который есть данные.
- `DateTo` — Конец периода. Формат ISO-8601. Если интересует только одна дата, то данное поле не заполнять.
- `Frequency` — Дискретность выдачи данных. * `day` - для каждого дня будут выданы данные. Значение по умолчанию. Опция `day` доступна только в том случае, если общий временной период составляет меньше 6 месяцев. * `week` - будут выданы усредненные данные по неделе. * `month`- будут выданы усредненные данные по месяцу.
- `From` — Город или регион откуда
- `From.CityId` — ID города. Значение поля `id` в структуре `city` из [словаря ATI.SU](https://ati.su/developers/api/dictionaries/geo/#post-v1-autocomplete-suggestions)
- `RoundTrip` — Параметр позволяет получить цену кругорейса, то есть ставку для маршрута «туда и обратно». * `false` - для прямого рейса. Значение по умолчанию. * `true` - для кругового рейса (если доступен).
- `To` — Город или регион куда
- `To.CityId` — ID города. Значение поля `id` в структуре `city` из [словаря ATI.SU](https://ati.su/developers/api/dictionaries/geo/#post-v1-autocomplete-suggestions)
- `Tonnage` — Тоннаж. Одно из: * `1.5` * `3` * `5` * `10` * `20` - значение по умолчанию.
- `WithNds` — Учитывать ли НДС в цене. * `false` - не учитывать. Значение по умолчанию. * `true` - учитывать.

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

```json
{
  "Data": [
    {
      "DateFrom": "2022-03-01",
      "DateTo": "2022-03-02",
      "Prices": {
        "UpperPrice": 30,
        "BottomPrice": 10,
        "AveragePrice": 20
      },
      "PricesInRub": {
        "UpperPrice": 30,
        "BottomPrice": 10,
        "AveragePrice": 20
      },
      "LoadsCount": 121
    }
  ],
  "Distance": 750,
  "WithNDS": false
}
```

**Описание полей ответа**
- `Data` — Данные по запрошенному интервалу
- `Data[].DateFrom` — Начало периода. Формат ISO-8601.
- `Data[].DateTo` — Конец периода. Формат ISO-8601.
- `Data[].Prices` — Данные по ставкам в руб/км
- `Data[].Prices.UpperPrice` — Верхняя граница ставок в руб или в руб/км
- `Data[].Prices.BottomPrice` — Нижняя граница ставок в руб или в руб/км
- `Data[].Prices.AveragePrice` — Средняя ставка в руб или в руб/км
- `Data[].PricesInRub` — Данные по ставкам в руб
- `Data[].PricesInRub.UpperPrice` — Верхняя граница ставок в руб или в руб/км
- `Data[].PricesInRub.BottomPrice` — Нижняя граница ставок в руб или в руб/км
- `Data[].PricesInRub.AveragePrice` — Средняя ставка в руб или в руб/км
- `Data[].LoadsCount` — Количество грузов
- `Distance` — Расстояние маршрута в километрах
- `WithNDS` — Являются ли данные ставки ставками с учётом НДС

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

```json
{
  "error": "string",
  "reason": "string",
  "details": {}
}
```

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

