# API раздела «Ваши машины»

API позволяет управлять вашими машинами — добавлять, изменять и удалять их.

## Терминология

**Машина** — объявление о свободном транспорте. Содержит в себе информацию о машине, датах, в которые машина свободна, направлениях перевозки и комфортной ставке.

**Ваши машины** — раздел на сайте ATI.SU, в котором пользователь может добавлять, удалять и редактировать машины.

**Архив ваших машин** — информация об удаленной машине помещается в архив. Объявление из архива можно восстановить.

**Приоритетный показ** — услуга, закрепляющая объявление вверху поиска машин. [Cтатья про приоритетный показ.](https://help.ati.su/prioritetnyj-pokaz-gruzov-i-transporta)

**Атисы** — валюта виртуального счета в ATI.SU. 1 атис равен 1 российскому рублю. Используется для приоритетного показа и других услуг. [Статья про атисы.](https://help.ati.su/chto-takoe-atisy-i-na-chto-ikh-mozhno-potratit)

**Комментарий к машине** — дополнительная информация, которая может быть добавлена к машине сотрудниками вашей фирмы. Видна только сотрудникам вашей фирмы.

## Пользовательские ошибки в API машин

В API машин может произойти достаточно много пользовательских ошибок, и для идентификации конкретной ошибки не всегда достаточно http кода ошибки. Поэтому при возникновении ошибки в теле ответа всегда будет присутствовать объект ошибки, содержащий 2 поля: error с кодом ошибки в виде строки и reason с пояснением. В групповых операциях поля error и reason будут указаны для каждой машины, с которой произошла ошибка во время выполнения операции.

### Примеры ошибок

#### Ошибка при одиночной операции (на примере добавления машины)

Ошибка при одиночной операции (не обновилась машина, так как уже была обновлена менее 60 минут назад).

```
{
    "error": "truck_duplicate",
    "reason": "Машина имеет дубликат в системе. Операция невозможна.",
    "duplicate_truck_id": "2fb37893-3587-eb11-bb9f-0cc47af30c1b"
}
```

#### Ошибка при групповой операции (на примере группового обновления)

```
{
    "2fb37893-3587-eb11-bb9f-0cc47af30c1b": {
        "error": "truck_renew_delay_not_elapsed_error",
        "reason": "Машина была обновлена менее 60 минут назад. Следующее обновление возможно через 57 минут.",
        "remaining_minutes": 57
    },
    "89d8e0db-3587-eb11-bb9f-0cc47af30c1b": {
        "error": "truck_renew_delay_not_elapsed_error",
        "reason": "Машина была обновлена менее 60 минут назад. Следующее обновление возможно через 59 минут.",
        "remaining_minutes": 59
    }
}
```

#### Ошибка валидации (на примере добавления машины)

В случае ошибки валидации json в теле запроса возникает ошибка _json_validation_error_. В теле ответа будут поля `error` и `reason`, и, кроме того, поле `error_list`, содержащее массив объектов вида `{property;reason}`, где:
`property` – название поля, в котором произошла ошибка;
`reason` – причина ошибки.

```
{
    "error": "json_validation_error",
    "reason": "Одна или несколько машин не прошли проверку. Отредактируйте машину, чтобы исправить ошибки.",
    "details": [
        {
            "property": "priority.view_rate",
            "reason": "Параметр  \"Ставка за просмотр\" должен должен принимать значения от  0.60 атисов до значения вашего баланса включительно"
        },
        {
            "property": "first_date",
            "reason": "Если значение параметра date_type равно 1, допустимое значение параметра first_date - от текущей даты до 60 дней вперед"
        }
    ]
}
```

#### Ошибка доступа (на примере добавления машины)

```
{
    "error": "contact_access_denied_error",
    "reason": "У данного контакта имеются ограничения на данную операцию"
}
```

### Список возможных 4хх ошибок

| **Код ошибки**                      | **Пояснение**                                                                                                            |
| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |
| deserialization_error               | Ошибка десериализации json                                                                                               |
| json_validation_error               | Ошибка валидации json из тела запроса                                                                                    |
| validation_error                    | Ошибка валидации. Возникает в случае любой ошибки валидации, кроме ошибки валидации тела запроса (json_validation_error) |
| contact_access_denied_error         | Отказано в доступе                                                                                                       |
| truck_renew_delay_not_elapsed_error | Машина была обновлена менее 60 минут назад                                                                               |
| dictionary_element_not_found_error  | Элемент словаря не найден                                                                                                |
| truck_not_found_error               | Машина не найдена                                                                                                        |

## Список методов

### Работа с машинами

- [Получение одной машины](http://api.ati.su/help/34739958.html)
- [Получение всех машин](http://api.ati.su/help/34739950.html)
- [Получение машин контакта](http://api.ati.su/help/34739952.html)
- [Получение количества машин](http://api.ati.su/help/34740026.html)
- [Получение доступа на добавление машины](http://api.ati.su/help/34741728.html)
- [Добавление машины](http://api.ati.su/help/34739938.html)
- [Обновление машины](http://api.ati.su/help/34739941.html)
- [Редактирование машины](http://api.ati.su/help/34739961.html)
- [Удаление машины](http://api.ati.su/help/34739967.html)

### Работа с архивом ваших машин

- [Получение одной архивной машины](http://api.ati.su/help/34739955.html)
- [Получение всех архивных машин](http://api.ati.su/help/34739948.html)
- [Получение архивных машин для определенного контакта](http://api.ati.su/help/34739944.html)
- [Восстановление архивной машины](http://api.ati.su/help/34739904.html)
- [Удаление машины из архива](http://api.ati.su/help/34739969.html)

### Групповые методы

- [Групповое обновление машин (POST)](http://api.ati.su/help/34740013.html)
- [Групповое обновление машин (PUT)](http://api.ati.su/help/34739932.html)
- [Групповое удаление машин](http://api.ati.su/help/34739934.html)
- [Групповое удаление машин из архива](http://api.ati.su/help/34739969.html)

### Работа с комментариями к машинам

- [Получение комментариев ко всем машинам](http://api.ati.su/help/34739921.html)
- [Получение комментариев к машине](http://api.ati.su/help/34739909.html)
- [Добавление/редактирование комментария к машине (POST)](http://api.ati.su/help/34739981.html)
- [Добавление/редактирование комментария к машине (PUT)](http://api.ati.su/help/34739972.html)
- [Удаление комментария к машине (DELETE)](http://api.ati.su/help/34739964.html)
- [Удаление комментария к машине (POST)](http://api.ati.su/help/34739984.html)
- [Получение комментариев к архивной машине](http://api.ati.su/help/34739977.html)
- [Получение комментариев ко всем архивным машинам](http://api.ati.su/help/34739979.html)
- [Добавление/редактирование комментария к архивной машине (POST)](http://api.ati.su/help/34740016.html)
- [Добавление/редактирование комментария к архивной машине (PUT)](http://api.ati.su/help/34740021.html)
- [Удаление комментария к архивной машине (DELETE)](http://api.ati.su/help/34740024.html)
- [Удаление комментария к архивной машине (POST)](http://api.ati.su/help/34740018.html)

### Работа с приоритетным показом

- [Изменение приоритетного показа в актуальной машине](http://api.ati.su/help/34740006.html)
- [Удаление приоритетного показа в актуальной машине](http://api.ati.su/help/34740010.html)

## API отзывов на машины

API позволяет оставить встречное предложение на машину, а также запросить все встречные предложения на ваши машины.

## Терминология

**Машина** — объявление о свободном транспорте. Содержит в себе информацию о машине, датах, в которые машина свободна, направлениях перевозки и комфортной ставке.

**Ваши машины** — раздел на сайте ATI.SU, в котором пользователь может добавлять, удалять и редактировать машины.

**Встречное предложение** — отзыв с предложением перевезти груз.

## Список методов

- [Изменение встречного предложения на машину](#trucks-change-counter-offer)
- [Получение встречных предложений на машины для адресата](#trucks-get-received-counter-offers)
- [Получение встречных предложений на машины по списку машин](#trucks-get-counter-offers-by-truck-ids)
- [Получение своих встречных предложений на машины](#trucks-get-my-counter-offers)
- [Удаление встречных предложений на машину](#trucks-delete-counter-offers)
- [Удаление встречного предложения на машину по ID](#trucks-delete-counter-offer-by-id)
- [Получение количества непросмотренных встречных предложений по машинам](#trucks-get-unviewed-counts)
- [Получение счетчиков встречных предложений на опубликованные машины](#trucks-get-published-counts)
- [Получение счетчиков встречных предложений на архивные машины](#trucks-get-archive-counts)

<a id="trucks-change-counter-offer"></a>

#### Изменение встречного предложения на машину

Метод работает по семантике create-or-update: если предложение уже существует — обновляет его, иначе создает. 
Отдельно проверять существование перед вызовом не нужно.
В обоих случаях метод возвращает `HTTP 201`.
<a id="put-v1.1-trucks-{truckId}-counter_offers"></a>

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

```bash
curl 'https://api.ati.su/v1.1/trucks/3fa85f64-5717-4562-b3fc-2c963f66afa6/counter_offers' \
  -X 'PUT' \
  -H 'Authorization: Bearer {authorizationToken}' \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "offerer_contact_id": 0,
  "cash_sum": 65000,
  "currency_id": 1,
  "sum_with_nds": 0,
  "nds_currency_id": 0,
  "sum_without_nds": 0,
  "not_nds_currency_id": 0,
  "note": "Готовы забрать сегодня",
  "prepay_percent": 30,
  "delay_payment_days": 5,
  "loading_city_id": 146,
  "unloading_city_id": 2,
  "weight": 20,
  "volume": 82,
  "car_delivery_date": "2026-04-24T00:00:00Z",
  "unload_payment": false,
  "coloading": false
}'
```

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

**Описание параметров запроса**
- `truckId (path, обязательный, тип: string)` — ID машины

**Описание полей запроса**
- `offerer_contact_id` — ID контакта автора предложения (если не передан, подставляется текущий контакт)
- `cash_sum` — Сумма наличными
- `currency_id` — Валюта для наличной суммы. Значение из [словаря валют АТИ](https://ati.su/developers/api/dictionaries/trucks/)
- `sum_with_nds` — Сумма с НДС
- `nds_currency_id` — Валюта суммы с НДС. Значение из [словаря валют АТИ](https://ati.su/developers/api/dictionaries/trucks/)
- `sum_without_nds` — Сумма без НДС
- `not_nds_currency_id` — Валюта суммы без НДС. Значение из [словаря валют АТИ](https://ati.su/developers/api/dictionaries/trucks/)
- `note` — Комментарий к предложению. Максимальное количество символов 512
- `prepay_percent` — Процент предоплаты
- `delay_payment_days` — Отсрочка оплаты в банковских днях
- `loading_city_id` — ID города погрузки. Значение из [словаря городов АТИ](https://ati.su/developers/api/dictionaries/geo/)
- `unloading_city_id` — ID города выгрузки. Значение из [словаря городов АТИ](https://ati.su/developers/api/dictionaries/geo/)
- `weight` — Максимальная грузоподъемность, т
- `volume` — Максимальный объем, м3
- `car_delivery_date` — Дата подачи машины. При передаче времени учитывается только дата.
- `unload_payment` — Оплата на выгрузке
- `coloading` — Разрешена догрузка

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

```json
{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "truck_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "addition_date": "1970-01-01T00:00:00.000Z",
  "change_date": "1970-01-01T00:00:00.000Z",
  "viewed_at": "1970-01-01T00:00:00.000Z",
  "cash_sum": 0.5,
  "currency_id": 0,
  "sum_with_nds": 0.5,
  "nds_currency_id": 0,
  "sum_without_nds": 0.5,
  "not_nds_currency_id": 0,
  "note": "string",
  "prepay_percent": 0,
  "delay_payment_days": 0,
  "loading_city_id": 0,
  "unloading_city_id": 0,
  "weight": 0.5,
  "volume": 0.5,
  "car_delivery_date": "1970-01-01T00:00:00.000Z",
  "is_actual": false,
  "unload_payment": false,
  "coloading": false,
  "sender_firm_info": {
    "ati_id": "string",
    "contact_id": 0,
    "firm_id": 0,
    "contact": {
      "firm_id": 0,
      "ati_id": "string",
      "contact_id": 0,
      "name": "string",
      "phone": "string",
      "mobile_phone": "string",
      "claims_count": 0,
      "recommendations_count": 0,
      "bad_partner_mentions_count": 0,
      "city": "string",
      "firm_type": "string",
      "firm_name": "string",
      "ownership": "string",
      "score": 0.5,
      "status": 0,
      "skype_name": "string",
      "fax": "string",
      "email": "string"
    },
    "name": "string",
    "score": 0.5,
    "status": 0
  }
}
```

**Описание полей ответа**
- `id` — Id встречного предложения
- `truck_id` — Id машины
- `addition_date` — Дата добавления встречного предложения
- `change_date` — Дата изменения встречного предложения
- `viewed_at` — Дата и время просмотра встречного предложения
- `cash_sum` — Ставка наличными
- `currency_id` — Валюта ставки наличными. Значение из [словаря валют АТИ](https://ati.su/developers/api/dictionaries/trucks/)
- `sum_with_nds` — Ставка с НДС
- `nds_currency_id` — Валюта ставки с НДС. Значение из [словаря валют АТИ](https://ati.su/developers/api/dictionaries/trucks/)
- `sum_without_nds` — Ставка без НДС
- `not_nds_currency_id` — Валюта ставки без НДС. Значение из [словаря валют АТИ](https://ati.su/developers/api/dictionaries/trucks/)
- `note` — Комментарий к предложению. Максимальное количество символов 512
- `prepay_percent` — Предоплата в процентах
- `delay_payment_days` — Оплата через банковских дней
- `loading_city_id` — Id города загрузки. Значение из [словаря городов АТИ](https://ati.su/developers/api/dictionaries/geo/)
- `unloading_city_id` — Id города разгрузки. Значение из [словаря городов АТИ](https://ati.su/developers/api/dictionaries/geo/)
- `weight` — Максимальная грузоподъемность, т
- `volume` — Максимальный объем, м3
- `car_delivery_date` — Дата подачи транспорта
- `is_actual` — Актуальность встречного предложения
- `unload_payment` — Оплата на выгрузке
- `coloading` — Догруз
- `sender_firm_info` — Информация о фирме, оставившей встречное предложение
- `sender_firm_info.ati_id` — ATI ID контакта
- `sender_firm_info.contact_id` — Id контакта
- `sender_firm_info.firm_id` — Id фирмы
- `sender_firm_info.contact` — Краткая информация о контакте
- `sender_firm_info.contact.firm_id` — Id фирмы
- `sender_firm_info.contact.ati_id` — ATI ID контакта
- `sender_firm_info.contact.contact_id` — Id контакта
- `sender_firm_info.contact.name` — Имя контакта
- `sender_firm_info.contact.phone` — Телефон
- `sender_firm_info.contact.mobile_phone` — Мобильный телефон
- `sender_firm_info.contact.claims_count` — Количество претензий
- `sender_firm_info.contact.recommendations_count` — Количество рекомендаций
- `sender_firm_info.contact.bad_partner_mentions_count` — Количество упоминаний в НП
- `sender_firm_info.contact.city` — Город
- `sender_firm_info.contact.firm_type` — Тип фирмы
- `sender_firm_info.contact.firm_name` — Название фирмы
- `sender_firm_info.contact.ownership` — Форма собственности
- `sender_firm_info.contact.score` — Рейтинг контакта
- `sender_firm_info.contact.status` — Статус контакта
- `sender_firm_info.contact.skype_name` — Skype
- `sender_firm_info.contact.fax` — Факс
- `sender_firm_info.contact.email` — E-mail
- `sender_firm_info.name` — Название фирмы
- `sender_firm_info.score` — Рейтинг фирмы
- `sender_firm_info.status` — Статус фирмы

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

```json
{
  "error": "string",
  "reason": "string",
  "details": [
    {
      "property": "string",
      "reason": "string"
    }
  ]
}
```

**Описание полей ответа**
- `error` — Ключ ошибки (идентификатор сценария отказа или типа сбоя).
- `reason` — Пояснение: что не так с запросом и при валидации — какие ограничения нарушены.
- `details` — Ошибки валидации по полям: каждый элемент соответствует одному полю JSON-тела.
- `details[].property` — Имя поля в теле запроса, к которому относится ошибка.
- `details[].reason` — Текстовое описание нарушения для этого поля (например, неверный формат или диапазон).


<a id="trucks-get-received-counter-offers"></a>

#### Получение встречных предложений на машины для адресата

Возвращает встречные предложения, полученные на ваши машины.  
Для регулярной синхронизации передавайте `newerThan`, а для учета архивных машин используйте `includeArchived=true`.

<a id="get-v1.1-trucks-counter_offers-received"></a>

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

```bash
curl 'https://api.ati.su/v1.1/trucks/counter_offers/received?newerThan=1970-01-01T00%3A00%3A00.000Z&includeArchived=false' \
  -X 'GET' \
  -H 'Authorization: Bearer {authorizationToken}' \
  -H 'Content-Type: application/json'
```

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

**Описание параметров запроса**
- `newerThan (query, тип: string)` — Вернуть отзывы, измененные после указанной даты. Если модификатора часового пояса нет, дата отправляется в формате UTC+3 (Москва)
- `includeArchived (query, тип: boolean, по умолчанию: `false`)` — Включать архивные машины

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

```json
[
  {
    "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "truck_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "addition_date": "1970-01-01T00:00:00.000Z",
    "change_date": "1970-01-01T00:00:00.000Z",
    "viewed_at": "1970-01-01T00:00:00.000Z",
    "cash_sum": 0.5,
    "currency_id": 0,
    "sum_with_nds": 0.5,
    "nds_currency_id": 0,
    "sum_without_nds": 0.5,
    "not_nds_currency_id": 0,
    "note": "string",
    "prepay_percent": 0,
    "delay_payment_days": 0,
    "loading_city_id": 0,
    "unloading_city_id": 0,
    "weight": 0.5,
    "volume": 0.5,
    "car_delivery_date": "1970-01-01T00:00:00.000Z",
    "is_actual": false,
    "unload_payment": false,
    "coloading": false,
    "sender_firm_info": {
      "ati_id": "string",
      "contact_id": 0,
      "firm_id": 0,
      "contact": {
        "firm_id": 0,
        "ati_id": "string",
        "contact_id": 0,
        "name": "string",
        "phone": "string",
        "mobile_phone": "string",
        "claims_count": 0,
        "recommendations_count": 0,
        "bad_partner_mentions_count": 0,
        "city": "string",
        "firm_type": "string",
        "firm_name": "string",
        "ownership": "string",
        "score": 0.5,
        "status": 0,
        "skype_name": "string",
        "fax": "string",
        "email": "string"
      },
      "name": "string",
      "score": 0.5,
      "status": 0
    }
  }
]
```

**Описание полей ответа**
- `[].id` — Id встречного предложения
- `[].truck_id` — Id машины
- `[].addition_date` — Дата добавления встречного предложения
- `[].change_date` — Дата изменения встречного предложения
- `[].viewed_at` — Дата и время просмотра встречного предложения
- `[].cash_sum` — Ставка наличными
- `[].currency_id` — Валюта ставки наличными. Значение из [словаря валют АТИ](https://ati.su/developers/api/dictionaries/trucks/)
- `[].sum_with_nds` — Ставка с НДС
- `[].nds_currency_id` — Валюта ставки с НДС. Значение из [словаря валют АТИ](https://ati.su/developers/api/dictionaries/trucks/)
- `[].sum_without_nds` — Ставка без НДС
- `[].not_nds_currency_id` — Валюта ставки без НДС. Значение из [словаря валют АТИ](https://ati.su/developers/api/dictionaries/trucks/)
- `[].note` — Комментарий к предложению. Максимальное количество символов 512
- `[].prepay_percent` — Предоплата в процентах
- `[].delay_payment_days` — Оплата через банковских дней
- `[].loading_city_id` — Id города загрузки. Значение из [словаря городов АТИ](https://ati.su/developers/api/dictionaries/geo/)
- `[].unloading_city_id` — Id города разгрузки. Значение из [словаря городов АТИ](https://ati.su/developers/api/dictionaries/geo/)
- `[].weight` — Максимальная грузоподъемность, т
- `[].volume` — Максимальный объем, м3
- `[].car_delivery_date` — Дата подачи транспорта
- `[].is_actual` — Актуальность встречного предложения
- `[].unload_payment` — Оплата на выгрузке
- `[].coloading` — Догруз
- `[].sender_firm_info` — Информация о фирме, оставившей встречное предложение
- `[].sender_firm_info.ati_id` — ATI ID контакта
- `[].sender_firm_info.contact_id` — Id контакта
- `[].sender_firm_info.firm_id` — Id фирмы
- `[].sender_firm_info.contact` — Краткая информация о контакте
- `[].sender_firm_info.contact.firm_id` — Id фирмы
- `[].sender_firm_info.contact.ati_id` — ATI ID контакта
- `[].sender_firm_info.contact.contact_id` — Id контакта
- `[].sender_firm_info.contact.name` — Имя контакта
- `[].sender_firm_info.contact.phone` — Телефон
- `[].sender_firm_info.contact.mobile_phone` — Мобильный телефон
- `[].sender_firm_info.contact.claims_count` — Количество претензий
- `[].sender_firm_info.contact.recommendations_count` — Количество рекомендаций
- `[].sender_firm_info.contact.bad_partner_mentions_count` — Количество упоминаний в НП
- `[].sender_firm_info.contact.city` — Город
- `[].sender_firm_info.contact.firm_type` — Тип фирмы
- `[].sender_firm_info.contact.firm_name` — Название фирмы
- `[].sender_firm_info.contact.ownership` — Форма собственности
- `[].sender_firm_info.contact.score` — Рейтинг контакта
- `[].sender_firm_info.contact.status` — Статус контакта
- `[].sender_firm_info.contact.skype_name` — Skype
- `[].sender_firm_info.contact.fax` — Факс
- `[].sender_firm_info.contact.email` — E-mail
- `[].sender_firm_info.name` — Название фирмы
- `[].sender_firm_info.score` — Рейтинг фирмы
- `[].sender_firm_info.status` — Статус фирмы

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

```json
{
  "error": "string",
  "reason": "string",
  "details": [
    {
      "property": "string",
      "reason": "string"
    }
  ]
}
```

**Описание полей ответа**
- `error` — Ключ ошибки (идентификатор сценария отказа или типа сбоя).
- `reason` — Пояснение: что не так с запросом и при валидации — какие ограничения нарушены.
- `details` — Ошибки валидации по полям: каждый элемент соответствует одному полю JSON-тела.
- `details[].property` — Имя поля в теле запроса, к которому относится ошибка.
- `details[].reason` — Текстовое описание нарушения для этого поля (например, неверный формат или диапазон).


<a id="trucks-get-counter-offers-by-truck-ids"></a>

#### Получение встречных предложений на машины по списку машин

Возвращает встречные предложения по списку ID машин: передайте массив ID, в ответе получите словарь `truck_id -> список встречных предложений`.

<a id="post-v1.1-trucks-counter_offers-by_truck_ids"></a>

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

```bash
curl 'https://api.ati.su/v1.1/trucks/counter_offers/by_truck_ids?includeArchived=false' \
  -X 'POST' \
  -H 'Authorization: Bearer {authorizationToken}' \
  -H 'Content-Type: application/json' \
  --data-raw '[
  "ce303e3c-210b-ec11-bb9f-0cc47af30c1b",
  "80f2f0f4-89a9-4ff5-95eb-6cf7b4a577c1"
]'
```

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

**Описание параметров запроса**
- `includeArchived (query, тип: boolean, по умолчанию: `false`)` — Включать архивные машины

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

```json
{
  "any-key": [
    {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "truck_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "addition_date": "1970-01-01T00:00:00.000Z",
      "change_date": "1970-01-01T00:00:00.000Z",
      "viewed_at": "1970-01-01T00:00:00.000Z",
      "cash_sum": 0.5,
      "currency_id": 0,
      "sum_with_nds": 0.5,
      "nds_currency_id": 0,
      "sum_without_nds": 0.5,
      "not_nds_currency_id": 0,
      "note": "string",
      "prepay_percent": 0,
      "delay_payment_days": 0,
      "loading_city_id": 0,
      "unloading_city_id": 0,
      "weight": 0.5,
      "volume": 0.5,
      "car_delivery_date": "1970-01-01T00:00:00.000Z",
      "is_actual": false,
      "unload_payment": false,
      "coloading": false,
      "sender_firm_info": {
        "ati_id": "string",
        "contact_id": 0,
        "firm_id": 0,
        "contact": {
          "firm_id": 0,
          "ati_id": "string",
          "contact_id": 0,
          "name": "string",
          "phone": "string",
          "mobile_phone": "string",
          "claims_count": 0,
          "recommendations_count": 0,
          "bad_partner_mentions_count": 0,
          "city": "string",
          "firm_type": "string",
          "firm_name": "string",
          "ownership": "string",
          "score": 0.5,
          "status": 0,
          "skype_name": "string",
          "fax": "string",
          "email": "string"
        },
        "name": "string",
        "score": 0.5,
        "status": 0
      }
    }
  ]
}
```

**Описание полей ответа**
- `any-key[].id` — Id встречного предложения
- `any-key[].truck_id` — Id машины
- `any-key[].addition_date` — Дата добавления встречного предложения
- `any-key[].change_date` — Дата изменения встречного предложения
- `any-key[].viewed_at` — Дата и время просмотра встречного предложения
- `any-key[].cash_sum` — Ставка наличными
- `any-key[].currency_id` — Валюта ставки наличными. Значение из [словаря валют АТИ](https://ati.su/developers/api/dictionaries/trucks/)
- `any-key[].sum_with_nds` — Ставка с НДС
- `any-key[].nds_currency_id` — Валюта ставки с НДС. Значение из [словаря валют АТИ](https://ati.su/developers/api/dictionaries/trucks/)
- `any-key[].sum_without_nds` — Ставка без НДС
- `any-key[].not_nds_currency_id` — Валюта ставки без НДС. Значение из [словаря валют АТИ](https://ati.su/developers/api/dictionaries/trucks/)
- `any-key[].note` — Комментарий к предложению. Максимальное количество символов 512
- `any-key[].prepay_percent` — Предоплата в процентах
- `any-key[].delay_payment_days` — Оплата через банковских дней
- `any-key[].loading_city_id` — Id города загрузки. Значение из [словаря городов АТИ](https://ati.su/developers/api/dictionaries/geo/)
- `any-key[].unloading_city_id` — Id города разгрузки. Значение из [словаря городов АТИ](https://ati.su/developers/api/dictionaries/geo/)
- `any-key[].weight` — Максимальная грузоподъемность, т
- `any-key[].volume` — Максимальный объем, м3
- `any-key[].car_delivery_date` — Дата подачи транспорта
- `any-key[].is_actual` — Актуальность встречного предложения
- `any-key[].unload_payment` — Оплата на выгрузке
- `any-key[].coloading` — Догруз
- `any-key[].sender_firm_info` — Информация о фирме, оставившей встречное предложение
- `any-key[].sender_firm_info.ati_id` — ATI ID контакта
- `any-key[].sender_firm_info.contact_id` — Id контакта
- `any-key[].sender_firm_info.firm_id` — Id фирмы
- `any-key[].sender_firm_info.contact` — Краткая информация о контакте
- `any-key[].sender_firm_info.contact.firm_id` — Id фирмы
- `any-key[].sender_firm_info.contact.ati_id` — ATI ID контакта
- `any-key[].sender_firm_info.contact.contact_id` — Id контакта
- `any-key[].sender_firm_info.contact.name` — Имя контакта
- `any-key[].sender_firm_info.contact.phone` — Телефон
- `any-key[].sender_firm_info.contact.mobile_phone` — Мобильный телефон
- `any-key[].sender_firm_info.contact.claims_count` — Количество претензий
- `any-key[].sender_firm_info.contact.recommendations_count` — Количество рекомендаций
- `any-key[].sender_firm_info.contact.bad_partner_mentions_count` — Количество упоминаний в НП
- `any-key[].sender_firm_info.contact.city` — Город
- `any-key[].sender_firm_info.contact.firm_type` — Тип фирмы
- `any-key[].sender_firm_info.contact.firm_name` — Название фирмы
- `any-key[].sender_firm_info.contact.ownership` — Форма собственности
- `any-key[].sender_firm_info.contact.score` — Рейтинг контакта
- `any-key[].sender_firm_info.contact.status` — Статус контакта
- `any-key[].sender_firm_info.contact.skype_name` — Skype
- `any-key[].sender_firm_info.contact.fax` — Факс
- `any-key[].sender_firm_info.contact.email` — E-mail
- `any-key[].sender_firm_info.name` — Название фирмы
- `any-key[].sender_firm_info.score` — Рейтинг фирмы
- `any-key[].sender_firm_info.status` — Статус фирмы

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

```json
{
  "error": "string",
  "reason": "string",
  "details": [
    {
      "property": "string",
      "reason": "string"
    }
  ]
}
```

**Описание полей ответа**
- `error` — Ключ ошибки (идентификатор сценария отказа или типа сбоя).
- `reason` — Пояснение: что не так с запросом и при валидации — какие ограничения нарушены.
- `details` — Ошибки валидации по полям: каждый элемент соответствует одному полю JSON-тела.
- `details[].property` — Имя поля в теле запроса, к которому относится ошибка.
- `details[].reason` — Текстовое описание нарушения для этого поля (например, неверный формат или диапазон).


<a id="trucks-get-my-counter-offers"></a>

#### Получение своих встречных предложений на машины

Возвращает встречные предложения, которые ваша фирма оставила на чужие машины.

<a id="get-v1.1-trucks-counter_offers-my"></a>

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

```bash
curl 'https://api.ati.su/v1.1/trucks/counter_offers/my?newerThan=1970-01-01T00%3A00%3A00.000Z&includeArchived=false' \
  -X 'GET' \
  -H 'Authorization: Bearer {authorizationToken}' \
  -H 'Content-Type: application/json'
```

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

**Описание параметров запроса**
- `newerThan (query, тип: string)` — Вернуть отзывы, измененные после указанной даты. Если модификатора часового пояса нет, дата отправляется в формате UTC+3 (Москва)
- `includeArchived (query, тип: boolean, по умолчанию: `false`)` — Включать архивные машины

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

```json
[
  {
    "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "truck_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "addition_date": "1970-01-01T00:00:00.000Z",
    "change_date": "1970-01-01T00:00:00.000Z",
    "viewed_at": "1970-01-01T00:00:00.000Z",
    "cash_sum": 0.5,
    "currency_id": 0,
    "sum_with_nds": 0.5,
    "nds_currency_id": 0,
    "sum_without_nds": 0.5,
    "not_nds_currency_id": 0,
    "note": "string",
    "prepay_percent": 0,
    "delay_payment_days": 0,
    "loading_city_id": 0,
    "unloading_city_id": 0,
    "weight": 0.5,
    "volume": 0.5,
    "car_delivery_date": "1970-01-01T00:00:00.000Z",
    "is_actual": false,
    "unload_payment": false,
    "coloading": false,
    "sender_firm_info": {
      "ati_id": "string",
      "contact_id": 0,
      "firm_id": 0,
      "contact": {
        "firm_id": 0,
        "ati_id": "string",
        "contact_id": 0,
        "name": "string",
        "phone": "string",
        "mobile_phone": "string",
        "claims_count": 0,
        "recommendations_count": 0,
        "bad_partner_mentions_count": 0,
        "city": "string",
        "firm_type": "string",
        "firm_name": "string",
        "ownership": "string",
        "score": 0.5,
        "status": 0,
        "skype_name": "string",
        "fax": "string",
        "email": "string"
      },
      "name": "string",
      "score": 0.5,
      "status": 0
    }
  }
]
```

**Описание полей ответа**
- `[].id` — Id встречного предложения
- `[].truck_id` — Id машины
- `[].addition_date` — Дата добавления встречного предложения
- `[].change_date` — Дата изменения встречного предложения
- `[].viewed_at` — Дата и время просмотра встречного предложения
- `[].cash_sum` — Ставка наличными
- `[].currency_id` — Валюта ставки наличными. Значение из [словаря валют АТИ](https://ati.su/developers/api/dictionaries/trucks/)
- `[].sum_with_nds` — Ставка с НДС
- `[].nds_currency_id` — Валюта ставки с НДС. Значение из [словаря валют АТИ](https://ati.su/developers/api/dictionaries/trucks/)
- `[].sum_without_nds` — Ставка без НДС
- `[].not_nds_currency_id` — Валюта ставки без НДС. Значение из [словаря валют АТИ](https://ati.su/developers/api/dictionaries/trucks/)
- `[].note` — Комментарий к предложению. Максимальное количество символов 512
- `[].prepay_percent` — Предоплата в процентах
- `[].delay_payment_days` — Оплата через банковских дней
- `[].loading_city_id` — Id города загрузки. Значение из [словаря городов АТИ](https://ati.su/developers/api/dictionaries/geo/)
- `[].unloading_city_id` — Id города разгрузки. Значение из [словаря городов АТИ](https://ati.su/developers/api/dictionaries/geo/)
- `[].weight` — Максимальная грузоподъемность, т
- `[].volume` — Максимальный объем, м3
- `[].car_delivery_date` — Дата подачи транспорта
- `[].is_actual` — Актуальность встречного предложения
- `[].unload_payment` — Оплата на выгрузке
- `[].coloading` — Догруз
- `[].sender_firm_info` — Информация о фирме, оставившей встречное предложение
- `[].sender_firm_info.ati_id` — ATI ID контакта
- `[].sender_firm_info.contact_id` — Id контакта
- `[].sender_firm_info.firm_id` — Id фирмы
- `[].sender_firm_info.contact` — Краткая информация о контакте
- `[].sender_firm_info.contact.firm_id` — Id фирмы
- `[].sender_firm_info.contact.ati_id` — ATI ID контакта
- `[].sender_firm_info.contact.contact_id` — Id контакта
- `[].sender_firm_info.contact.name` — Имя контакта
- `[].sender_firm_info.contact.phone` — Телефон
- `[].sender_firm_info.contact.mobile_phone` — Мобильный телефон
- `[].sender_firm_info.contact.claims_count` — Количество претензий
- `[].sender_firm_info.contact.recommendations_count` — Количество рекомендаций
- `[].sender_firm_info.contact.bad_partner_mentions_count` — Количество упоминаний в НП
- `[].sender_firm_info.contact.city` — Город
- `[].sender_firm_info.contact.firm_type` — Тип фирмы
- `[].sender_firm_info.contact.firm_name` — Название фирмы
- `[].sender_firm_info.contact.ownership` — Форма собственности
- `[].sender_firm_info.contact.score` — Рейтинг контакта
- `[].sender_firm_info.contact.status` — Статус контакта
- `[].sender_firm_info.contact.skype_name` — Skype
- `[].sender_firm_info.contact.fax` — Факс
- `[].sender_firm_info.contact.email` — E-mail
- `[].sender_firm_info.name` — Название фирмы
- `[].sender_firm_info.score` — Рейтинг фирмы
- `[].sender_firm_info.status` — Статус фирмы

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

```json
{
  "error": "string",
  "reason": "string",
  "details": [
    {
      "property": "string",
      "reason": "string"
    }
  ]
}
```

**Описание полей ответа**
- `error` — Ключ ошибки (идентификатор сценария отказа или типа сбоя).
- `reason` — Пояснение: что не так с запросом и при валидации — какие ограничения нарушены.
- `details` — Ошибки валидации по полям: каждый элемент соответствует одному полю JSON-тела.
- `details[].property` — Имя поля в теле запроса, к которому относится ошибка.
- `details[].reason` — Текстовое описание нарушения для этого поля (например, неверный формат или диапазон).


<a id="trucks-delete-counter-offers"></a>

#### Удаление встречных предложений на машину

Удаляет ваши встречные предложения по конкретной машине.
Если встречных предложений уже нет, сервис вернет `204 No Content`.

<a id="delete-v1.1-trucks-{truckId}-counter_offers"></a>

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

```bash
curl 'https://api.ati.su/v1.1/trucks/3fa85f64-5717-4562-b3fc-2c963f66afa6/counter_offers' \
  -X 'DELETE' \
  -H 'Authorization: Bearer {authorizationToken}' \
  -H 'Content-Type: application/json'
```

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

**Описание параметров запроса**
- `truckId (path, обязательный, тип: string)` — ID машины

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

```json
[
  {
    "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "truck_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "addition_date": "1970-01-01T00:00:00.000Z",
    "change_date": "1970-01-01T00:00:00.000Z",
    "viewed_at": "1970-01-01T00:00:00.000Z",
    "cash_sum": 0.5,
    "currency_id": 0,
    "sum_with_nds": 0.5,
    "nds_currency_id": 0,
    "sum_without_nds": 0.5,
    "not_nds_currency_id": 0,
    "note": "string",
    "prepay_percent": 0,
    "delay_payment_days": 0,
    "loading_city_id": 0,
    "unloading_city_id": 0,
    "weight": 0.5,
    "volume": 0.5,
    "car_delivery_date": "1970-01-01T00:00:00.000Z",
    "is_actual": false,
    "unload_payment": false,
    "coloading": false,
    "sender_firm_info": {
      "ati_id": "string",
      "contact_id": 0,
      "firm_id": 0,
      "contact": {
        "firm_id": 0,
        "ati_id": "string",
        "contact_id": 0,
        "name": "string",
        "phone": "string",
        "mobile_phone": "string",
        "claims_count": 0,
        "recommendations_count": 0,
        "bad_partner_mentions_count": 0,
        "city": "string",
        "firm_type": "string",
        "firm_name": "string",
        "ownership": "string",
        "score": 0.5,
        "status": 0,
        "skype_name": "string",
        "fax": "string",
        "email": "string"
      },
      "name": "string",
      "score": 0.5,
      "status": 0
    }
  }
]
```

**Описание полей ответа**
- `[].id` — Id встречного предложения
- `[].truck_id` — Id машины
- `[].addition_date` — Дата добавления встречного предложения
- `[].change_date` — Дата изменения встречного предложения
- `[].viewed_at` — Дата и время просмотра встречного предложения
- `[].cash_sum` — Ставка наличными
- `[].currency_id` — Валюта ставки наличными. Значение из [словаря валют АТИ](https://ati.su/developers/api/dictionaries/trucks/)
- `[].sum_with_nds` — Ставка с НДС
- `[].nds_currency_id` — Валюта ставки с НДС. Значение из [словаря валют АТИ](https://ati.su/developers/api/dictionaries/trucks/)
- `[].sum_without_nds` — Ставка без НДС
- `[].not_nds_currency_id` — Валюта ставки без НДС. Значение из [словаря валют АТИ](https://ati.su/developers/api/dictionaries/trucks/)
- `[].note` — Комментарий к предложению. Максимальное количество символов 512
- `[].prepay_percent` — Предоплата в процентах
- `[].delay_payment_days` — Оплата через банковских дней
- `[].loading_city_id` — Id города загрузки. Значение из [словаря городов АТИ](https://ati.su/developers/api/dictionaries/geo/)
- `[].unloading_city_id` — Id города разгрузки. Значение из [словаря городов АТИ](https://ati.su/developers/api/dictionaries/geo/)
- `[].weight` — Максимальная грузоподъемность, т
- `[].volume` — Максимальный объем, м3
- `[].car_delivery_date` — Дата подачи транспорта
- `[].is_actual` — Актуальность встречного предложения
- `[].unload_payment` — Оплата на выгрузке
- `[].coloading` — Догруз
- `[].sender_firm_info` — Информация о фирме, оставившей встречное предложение
- `[].sender_firm_info.ati_id` — ATI ID контакта
- `[].sender_firm_info.contact_id` — Id контакта
- `[].sender_firm_info.firm_id` — Id фирмы
- `[].sender_firm_info.contact` — Краткая информация о контакте
- `[].sender_firm_info.contact.firm_id` — Id фирмы
- `[].sender_firm_info.contact.ati_id` — ATI ID контакта
- `[].sender_firm_info.contact.contact_id` — Id контакта
- `[].sender_firm_info.contact.name` — Имя контакта
- `[].sender_firm_info.contact.phone` — Телефон
- `[].sender_firm_info.contact.mobile_phone` — Мобильный телефон
- `[].sender_firm_info.contact.claims_count` — Количество претензий
- `[].sender_firm_info.contact.recommendations_count` — Количество рекомендаций
- `[].sender_firm_info.contact.bad_partner_mentions_count` — Количество упоминаний в НП
- `[].sender_firm_info.contact.city` — Город
- `[].sender_firm_info.contact.firm_type` — Тип фирмы
- `[].sender_firm_info.contact.firm_name` — Название фирмы
- `[].sender_firm_info.contact.ownership` — Форма собственности
- `[].sender_firm_info.contact.score` — Рейтинг контакта
- `[].sender_firm_info.contact.status` — Статус контакта
- `[].sender_firm_info.contact.skype_name` — Skype
- `[].sender_firm_info.contact.fax` — Факс
- `[].sender_firm_info.contact.email` — E-mail
- `[].sender_firm_info.name` — Название фирмы
- `[].sender_firm_info.score` — Рейтинг фирмы
- `[].sender_firm_info.status` — Статус фирмы

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

```json
{
  "error": "string",
  "reason": "string",
  "details": [
    {
      "property": "string",
      "reason": "string"
    }
  ]
}
```

**Описание полей ответа**
- `error` — Ключ ошибки (идентификатор сценария отказа или типа сбоя).
- `reason` — Пояснение: что не так с запросом и при валидации — какие ограничения нарушены.
- `details` — Ошибки валидации по полям: каждый элемент соответствует одному полю JSON-тела.
- `details[].property` — Имя поля в теле запроса, к которому относится ошибка.
- `details[].reason` — Текстовое описание нарушения для этого поля (например, неверный формат или диапазон).


<a id="trucks-delete-counter-offer-by-id"></a>

#### Удаление встречного предложения на машину по ID

Удаляет конкретное встречное предложение по `offerId`, когда нужно точечное удаление без очистки всех предложений по машине.

<a id="delete-public-v1.1-trucks-counter_offers-{offerId}"></a>

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

```bash
curl 'https://api.ati.su/gw/truck_responses/public/v1.1/trucks/counter_offers/3fa85f64-5717-4562-b3fc-2c963f66afa6' \
  -X 'DELETE' \
  -H 'Authorization: Bearer {authorizationToken}' \
  -H 'Content-Type: application/json'
```

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

**Описание параметров запроса**
- `offerId (path, обязательный, тип: string)` — ID отзыва

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

```json
{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "truck_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "addition_date": "1970-01-01T00:00:00.000Z",
  "change_date": "1970-01-01T00:00:00.000Z",
  "viewed_at": "1970-01-01T00:00:00.000Z",
  "cash_sum": 0.5,
  "currency_id": 0,
  "sum_with_nds": 0.5,
  "nds_currency_id": 0,
  "sum_without_nds": 0.5,
  "not_nds_currency_id": 0,
  "note": "string",
  "prepay_percent": 0,
  "delay_payment_days": 0,
  "loading_city_id": 0,
  "unloading_city_id": 0,
  "weight": 0.5,
  "volume": 0.5,
  "car_delivery_date": "1970-01-01T00:00:00.000Z",
  "is_actual": false,
  "unload_payment": false,
  "coloading": false,
  "sender_firm_info": {
    "ati_id": "string",
    "contact_id": 0,
    "firm_id": 0,
    "contact": {
      "firm_id": 0,
      "ati_id": "string",
      "contact_id": 0,
      "name": "string",
      "phone": "string",
      "mobile_phone": "string",
      "claims_count": 0,
      "recommendations_count": 0,
      "bad_partner_mentions_count": 0,
      "city": "string",
      "firm_type": "string",
      "firm_name": "string",
      "ownership": "string",
      "score": 0.5,
      "status": 0,
      "skype_name": "string",
      "fax": "string",
      "email": "string"
    },
    "name": "string",
    "score": 0.5,
    "status": 0
  }
}
```

**Описание полей ответа**
- `id` — Id встречного предложения
- `truck_id` — Id машины
- `addition_date` — Дата добавления встречного предложения
- `change_date` — Дата изменения встречного предложения
- `viewed_at` — Дата и время просмотра встречного предложения
- `cash_sum` — Ставка наличными
- `currency_id` — Валюта ставки наличными. Значение из [словаря валют АТИ](https://ati.su/developers/api/dictionaries/trucks/)
- `sum_with_nds` — Ставка с НДС
- `nds_currency_id` — Валюта ставки с НДС. Значение из [словаря валют АТИ](https://ati.su/developers/api/dictionaries/trucks/)
- `sum_without_nds` — Ставка без НДС
- `not_nds_currency_id` — Валюта ставки без НДС. Значение из [словаря валют АТИ](https://ati.su/developers/api/dictionaries/trucks/)
- `note` — Комментарий к предложению. Максимальное количество символов 512
- `prepay_percent` — Предоплата в процентах
- `delay_payment_days` — Оплата через банковских дней
- `loading_city_id` — Id города загрузки. Значение из [словаря городов АТИ](https://ati.su/developers/api/dictionaries/geo/)
- `unloading_city_id` — Id города разгрузки. Значение из [словаря городов АТИ](https://ati.su/developers/api/dictionaries/geo/)
- `weight` — Максимальная грузоподъемность, т
- `volume` — Максимальный объем, м3
- `car_delivery_date` — Дата подачи транспорта
- `is_actual` — Актуальность встречного предложения
- `unload_payment` — Оплата на выгрузке
- `coloading` — Догруз
- `sender_firm_info` — Информация о фирме, оставившей встречное предложение
- `sender_firm_info.ati_id` — ATI ID контакта
- `sender_firm_info.contact_id` — Id контакта
- `sender_firm_info.firm_id` — Id фирмы
- `sender_firm_info.contact` — Краткая информация о контакте
- `sender_firm_info.contact.firm_id` — Id фирмы
- `sender_firm_info.contact.ati_id` — ATI ID контакта
- `sender_firm_info.contact.contact_id` — Id контакта
- `sender_firm_info.contact.name` — Имя контакта
- `sender_firm_info.contact.phone` — Телефон
- `sender_firm_info.contact.mobile_phone` — Мобильный телефон
- `sender_firm_info.contact.claims_count` — Количество претензий
- `sender_firm_info.contact.recommendations_count` — Количество рекомендаций
- `sender_firm_info.contact.bad_partner_mentions_count` — Количество упоминаний в НП
- `sender_firm_info.contact.city` — Город
- `sender_firm_info.contact.firm_type` — Тип фирмы
- `sender_firm_info.contact.firm_name` — Название фирмы
- `sender_firm_info.contact.ownership` — Форма собственности
- `sender_firm_info.contact.score` — Рейтинг контакта
- `sender_firm_info.contact.status` — Статус контакта
- `sender_firm_info.contact.skype_name` — Skype
- `sender_firm_info.contact.fax` — Факс
- `sender_firm_info.contact.email` — E-mail
- `sender_firm_info.name` — Название фирмы
- `sender_firm_info.score` — Рейтинг фирмы
- `sender_firm_info.status` — Статус фирмы

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

```json
{
  "error": "string",
  "reason": "string",
  "details": [
    {
      "property": "string",
      "reason": "string"
    }
  ]
}
```

**Описание полей ответа**
- `error` — Ключ ошибки (идентификатор сценария отказа или типа сбоя).
- `reason` — Пояснение: что не так с запросом и при валидации — какие ограничения нарушены.
- `details` — Ошибки валидации по полям: каждый элемент соответствует одному полю JSON-тела.
- `details[].property` — Имя поля в теле запроса, к которому относится ошибка.
- `details[].reason` — Текстовое описание нарушения для этого поля (например, неверный формат или диапазон).


<a id="trucks-get-unviewed-counts"></a>

#### Получение количества непросмотренных встречных предложений по машинам

Возвращает количество непросмотренных встречных предложений по каждой машине из списка.

<a id="post-public-v1.1-trucks-counter_offers-unviewed_count-by_truck_ids"></a>

**Версия: v1.1**

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

```bash
curl 'https://api.ati.su/gw/truck_responses/public/v1.1/trucks/counter_offers/unviewed_count/by_truck_ids' \
  -X 'POST' \
  -H 'Authorization: Bearer {authorizationToken}' \
  -H 'Content-Type: application/json' \
  --data-raw '[
  "ce303e3c-210b-ec11-bb9f-0cc47af30c1b",
  "80f2f0f4-89a9-4ff5-95eb-6cf7b4a577c1"
]'
```

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

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

```json
{
  "any-key": 0
}
```

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

```json
{
  "error": "string",
  "reason": "string",
  "details": [
    {
      "property": "string",
      "reason": "string"
    }
  ]
}
```

**Описание полей ответа**
- `error` — Ключ ошибки (идентификатор сценария отказа или типа сбоя).
- `reason` — Пояснение: что не так с запросом и при валидации — какие ограничения нарушены.
- `details` — Ошибки валидации по полям: каждый элемент соответствует одному полю JSON-тела.
- `details[].property` — Имя поля в теле запроса, к которому относится ошибка.
- `details[].reason` — Текстовое описание нарушения для этого поля (например, неверный формат или диапазон).

<a id="post-v2-trucks-counter-offers-unviewed-count-by-truck-ids"></a>

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

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

```bash
curl 'https://api.ati.su/gw/truck_responses/v2/trucks/counter-offers/unviewed-count/by-truck-ids' \
  -X 'POST' \
  -H 'Authorization: Bearer {authorizationToken}' \
  -H 'Content-Type: application/json' \
  --data-raw '[
  "ce303e3c-210b-ec11-bb9f-0cc47af30c1b",
  "80f2f0f4-89a9-4ff5-95eb-6cf7b4a577c1"
]'
```

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

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

```json
{
  "any-key": 0
}
```

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

```json
{
  "error": "string",
  "reason": "string",
  "details": [
    {
      "property": "string",
      "reason": "string"
    }
  ]
}
```

**Описание полей ответа**
- `error` — Ключ ошибки (идентификатор сценария отказа или типа сбоя).
- `reason` — Пояснение: что не так с запросом и при валидации — какие ограничения нарушены.
- `details` — Ошибки валидации по полям: каждый элемент соответствует одному полю JSON-тела.
- `details[].property` — Имя поля в теле запроса, к которому относится ошибка.
- `details[].reason` — Текстовое описание нарушения для этого поля (например, неверный формат или диапазон).


<a id="trucks-get-published-counts"></a>

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

Возвращает словарь счетчиков встречных предложений по указанным ID опубликованных машин.

<a id="post-v1-trucks-published-counter_offers-count"></a>

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

```bash
curl 'https://api.ati.su/gw/truck_responses/v1/trucks/published/counter_offers/count' \
  -X 'POST' \
  -H 'Authorization: Bearer {authorizationToken}' \
  -H 'Content-Type: application/json' \
  --data-raw '[
  "ce303e3c-210b-ec11-bb9f-0cc47af30c1b",
  "80f2f0f4-89a9-4ff5-95eb-6cf7b4a577c1"
]'
```

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

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

```json
{
  "any-key": {
    "active_count": 0,
    "has_counter_offers": false,
    "unviewed_count": 0
  }
}
```

**Описание полей ответа**
- `any-key.active_count` — Количество активных встречных предложений
- `any-key.has_counter_offers` — Есть ли встречные предложения по машине
- `any-key.unviewed_count` — Количество непросмотренных встречных предложений

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

```json
{
  "error": "string",
  "reason": "string",
  "details": [
    {
      "property": "string",
      "reason": "string"
    }
  ]
}
```

**Описание полей ответа**
- `error` — Ключ ошибки (идентификатор сценария отказа или типа сбоя).
- `reason` — Пояснение: что не так с запросом и при валидации — какие ограничения нарушены.
- `details` — Ошибки валидации по полям: каждый элемент соответствует одному полю JSON-тела.
- `details[].property` — Имя поля в теле запроса, к которому относится ошибка.
- `details[].reason` — Текстовое описание нарушения для этого поля (например, неверный формат или диапазон).


<a id="trucks-get-archive-counts"></a>

#### Получение счетчиков встречных предложений на архивные машины

Возвращает наличие встречных предложений для машин из архива по их ID.

<a id="post-public-v1.1-trucks-archive-counter_offers-count"></a>

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

```bash
curl 'https://api.ati.su/gw/truck_responses/v1/trucks/archive/counter_offers/count' \
  -X 'POST' \
  -H 'Authorization: Bearer {authorizationToken}' \
  -H 'Content-Type: application/json' \
  --data-raw '[
  "ce303e3c-210b-ec11-bb9f-0cc47af30c1b",
  "80f2f0f4-89a9-4ff5-95eb-6cf7b4a577c1"
]'
```

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

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

```json
{
  "any-key": {
    "has_counter_offers": false
  }
}
```

**Описание полей ответа**
- `any-key.has_counter_offers` — Есть ли встречные предложения по архивной машине

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

```json
{
  "error": "string",
  "reason": "string",
  "details": [
    {
      "property": "string",
      "reason": "string"
    }
  ]
}
```

**Описание полей ответа**
- `error` — Ключ ошибки (идентификатор сценария отказа или типа сбоя).
- `reason` — Пояснение: что не так с запросом и при валидации — какие ограничения нарушены.
- `details` — Ошибки валидации по полям: каждый элемент соответствует одному полю JSON-тела.
- `details[].property` — Имя поля в теле запроса, к которому относится ошибка.
- `details[].reason` — Текстовое описание нарушения для этого поля (например, неверный формат или диапазон).
---

## llms.txt

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