# API для работы с файлами, логотипами и аватарками

В данном разделе вы можете найти методы для работы с файлами, логотипами и аватарками фирм и контактов

Максимальный разрешенный размер - 20 Мб

Поддерживаемые форматы: .png, .jpeg, .jpg, .jpe, .jif, .jfif, .rtf, .tif, .tiff, .bmp, .doc, .docx, .gif, .odt, .pdf, .xls, .xlsx, .csv, .heic, .txt

Для загрузки логотипов фирм и аватарок контактов: .png, .jpeg, .jpg, .jpe, .jif, .jfif.

## Методы для работы с файлами

#### Добавление файлов

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

Загружает файл в хранилище.

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

```bash
curl 'https://api.ati.su/v1/filer/' \
  -X 'POST' \
  -H 'Authorization: Bearer {authorizationToken}' \
  -H 'Content-Type: multipart/form-data; boundary=boundary'
```

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

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

```json
{
  "file_key": "firm_100500_logo",
  "file_key2": "contact_42_avatar_copy",
  "file_name": "logo.png",
  "content_type": "image/png",
  "access_type": "Public",
  "file_business_type": "Logo",
  "add_date": "2026-03-31T09:00:00Z",
  "delete_on": "2026-12-31T00:00:00Z",
  "firm_id": 100500,
  "contact_id": 42,
  "with_watermark": true,
  "binding_tag": "order-999"
}
```

**Описание полей ответа**
- `file_key` — Уникальный ключ файла, генерируется сам. Ключ файла будет начинаться с его типа business_type.
- `file_key2` — Дополнительный ключ файла (связь с другим ключом или дубликат).
- `file_name` — Имя файла.
- `content_type` — MIME-тип содержимого.
- `access_type` — Тип доступа к файлу. - Public - Доступ всем без ограничений - Firm - Доступ в рамках фирмы - Contact - Доступ в рамках контакта - Authorized - Доступ для авторизованных пользователей
- `file_business_type` — Бизнес-тип файла (аватар, лого и т.д.), влияет на access_type и ограничения. - FirmDocument - Avatar - Logo - Load - Orders - CatalogsTrucks - CatalogsDrivers
- `add_date` — Дата и время добавления записи.
- `delete_on` — Планируемая дата удаления (отложенное удаление).
- `firm_id` — Идентификатор фирмы-владельца.
- `contact_id` — Идентификатор контакта-владельца.
- `with_watermark` — Признак необходимости водяного знака при отдаче.
- `binding_tag` — Тег привязки (контекст использования файла).

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

```json
{
  "error": "invalid_input_data",
  "reason": "Неверные входные данные."
}
```

**Описание полей ответа**
- `error` — Код ошибки
- `reason` — Описание ошибки


Для некоторых **business_type** файлов можно указать только определенные **access_type**:

- для Avatar/Logo можно указать только **access_type** = Public;
- для FirmDocument, CatalogsTrucks/CatalogsDrivers, Orders и Load можно указать только **access_type** = Authorized.

#### Получение файлов

<a id="get-v1-{fileKey}"></a>

Получает файл по ключу.

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

```bash
curl 'https://api.ati.su/v1/filer/string?height=0&width=0&biggest-side=0' \
  -X 'GET' \
  -H 'Authorization: Bearer {authorizationToken}' \
  -H 'Content-Type: application/json'
```

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

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

```json
{}
```

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

```json
{
  "error": "invalid_input_data",
  "reason": "Неверные входные данные."
}
```

**Описание полей ответа**
- `error` — Код ошибки
- `reason` — Описание ошибки


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

Получает список метаданных файлов по критериям.

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

```bash
curl 'https://api.ati.su/v1/filer/info' \
  -X 'POST' \
  -H 'Authorization: Bearer {authorizationToken}' \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "ati_id": "100500",
  "contact_id": 42,
  "business_type": "Avatar",
  "keys": [
    "firm_100500_logo",
    "contact_42_avatar"
  ],
  "keys2": [
    "firm_100500_logo_thumb"
  ]
}'
```

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

**Описание полей запроса**
- `ati_id` — Идентификатор пользователя ATI.
- `contact_id` — Идентификатор контакта для фильтрации файлов.
- `business_type` — Бизнес-тип запрашиваемых файлов. - FirmDocument - Avatar - Logo - Load - Orders - CatalogsTrucks - CatalogsDrivers
- `keys` — Список ключей файлов (основной набор).
- `keys2` — Дополнительный список ключей файлов.

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

```json
[
  {
    "file_key": "firm_100500_logo",
    "file_key2": "contact_42_avatar_copy",
    "file_name": "logo.png",
    "content_type": "image/png",
    "access_type": "Public",
    "file_business_type": "Logo",
    "add_date": "2026-03-31T09:00:00Z",
    "delete_on": "2026-12-31T00:00:00Z",
    "firm_id": 100500,
    "contact_id": 42,
    "with_watermark": true,
    "binding_tag": "order-999"
  }
]
```

**Описание полей ответа**
- `[].file_key` — Уникальный ключ файла, генерируется сам. Ключ файла будет начинаться с его типа business_type.
- `[].file_key2` — Дополнительный ключ файла (связь с другим ключом или дубликат).
- `[].file_name` — Имя файла.
- `[].content_type` — MIME-тип содержимого.
- `[].access_type` — Тип доступа к файлу. - Public - Доступ всем без ограничений - Firm - Доступ в рамках фирмы - Contact - Доступ в рамках контакта - Authorized - Доступ для авторизованных пользователей
- `[].file_business_type` — Бизнес-тип файла (аватар, лого и т.д.), влияет на access_type и ограничения. - FirmDocument - Avatar - Logo - Load - Orders - CatalogsTrucks - CatalogsDrivers
- `[].add_date` — Дата и время добавления записи.
- `[].delete_on` — Планируемая дата удаления (отложенное удаление).
- `[].firm_id` — Идентификатор фирмы-владельца.
- `[].contact_id` — Идентификатор контакта-владельца.
- `[].with_watermark` — Признак необходимости водяного знака при отдаче.
- `[].binding_tag` — Тег привязки (контекст использования файла).

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

```json
{
  "error": "invalid_input_data",
  "reason": "Неверные входные данные."
}
```

**Описание полей ответа**
- `error` — Код ошибки
- `reason` — Описание ошибки


Метод возвращает массив информации о файлах этого типа у пользователя, без самих файлов.

Для получения информации о файлах нужно передавать в теле параметры (или):

- "ati_id" и "business_type";
- "keys"/"keys2".

Проверка прав на просмотр файла осуществляется через авторизационный хэдер. Чтобы получить информацию о том, кто создал файл, нужно передать в тело запроса параметр "ati_id"или "ati_id" и "contact_id".

<a id="get-v1-{businessType}-{atiId}-{contactId}"></a>

Получает аватар или логотип по идентификатору atiId и опционально contactId.

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

```bash
curl 'https://api.ati.su/v1/filer/Common/string/0?height=0&width=0&biggest-side=0&not-found-type=Status&fallback-img=Common' \
  -X 'GET' \
  -H 'Authorization: Bearer {authorizationToken}' \
  -H 'Content-Type: application/json'
```

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

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

```json
{}
```

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

```json
{
  "error": "invalid_input_data",
  "reason": "Неверные входные данные."
}
```

**Описание полей ответа**
- `error` — Код ошибки
- `reason` — Описание ошибки


<a id="get-v1-{businessType}-default"></a>

Получает файл по умолчанию для аватара или логотипа.

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

```bash
curl 'https://api.ati.su/v1/filer/Common/default' \
  -X 'GET' \
  -H 'Authorization: Bearer {authorizationToken}' \
  -H 'Content-Type: application/json'
```

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

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

```json
{}
```

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

```json
{
  "error": "invalid_input_data",
  "reason": "Неверные входные данные."
}
```

**Описание полей ответа**
- `error` — Код ошибки
- `reason` — Описание ошибки


#### Удаление файлов

<a id="delete-v1-{fileKey}"></a>

Удаляет файл или привязку по ключу файла.

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

```bash
curl 'https://api.ati.su/v1/filer/string?binding-tag=string' \
  -X 'DELETE' \
  -H 'Authorization: Bearer {authorizationToken}' \
  -H 'Content-Type: application/json'
```

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

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

```json
{
  "error": "invalid_input_data",
  "reason": "Неверные входные данные."
}
```

**Описание полей ответа**
- `error` — Код ошибки
- `reason` — Описание ошибки


Файлы FirmDocument, CatalogsTrucks/CatalogsDrivers, Orders и Load можно удалять независимо от прав и расположения в подразделениях.

<a id="delete-v1-type-{businessType}"></a>

Удаляет аватар или логотип по бизнес-типу.

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

```bash
curl 'https://api.ati.su/v1/filer/type/Common?contact-id=0' \
  -X 'DELETE' \
  -H 'Authorization: Bearer {authorizationToken}' \
  -H 'Content-Type: application/json'
```

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

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

```json
{
  "error": "invalid_input_data",
  "reason": "Неверные входные данные."
}
```

**Описание полей ответа**
- `error` — Код ошибки
- `reason` — Описание ошибки


Права на удаление зависят от того, что именно удаляется:

- Логотип фирмы: нужно быть в Головном подразделении и иметь право "Администрировать контакты и подразделения".
- Свой аватар: нужно иметь права "Редактировать и удалять свою контактную информацию" и "Администрировать контакты и подразделения".
- Чужой аватар: нужно быть в одном подразделении с контактом и иметь право "Администрировать контакты и подразделения".
