---
title: "Сохранить вложение письма в «Файлы»"
method: POST
path: "/api/v1/mail/attachments/{id}/save-to-files"
tags: ["Mail messages"]
---

# Сохранить вложение письма в «Файлы»

`POST /api/v1/mail/attachments/{id}/save-to-files`

## Request

- Base URL: `https://erp.akeda.ru`
- URL: `https://erp.akeda.ru/api/v1/mail/attachments/{id}/save-to-files`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://erp.akeda.ru/oauth2/authorize`, token URL `https://erp.akeda.ru/oauth2/token`, scopes: `akeda:delegate`)

Копия вложения письма в выбранную папку хранилища кабинета (ERP-2633) без скачивания на компьютер: почта отдаёт байты с видимостью ящиков человека (файл, который ещё не открывали, сначала забирается с почтового сервера и проверяется антивирусом), «Файлы» кладут его своим путём загрузки — с правом на запись в папку, квотой кабинета и свободным именем: занятое получает « (1)», прежний файл не затирается. name — имя файла в папке, по умолчанию имя вложения. Заражённое вложение не сохраняется — 403 mail.attachment_infected, ещё проверяемое — 409 mail.attachment_pending; нет права на папку — 403 files.forbidden, место кончилось — 507 files.quota_exceeded. Кабинетный API-ключ в хранилище не пускается — 403 files.service_principal_denied, как у дверей «Файлов».

## Request body

- MailSaveToFilesInput: Куда сохранить вложение письма в «Файлах».
  - `folder_id` string, uuid, required
  - `name` string: Имя файла в папке; пусто — имя вложения

## Response `201`

Файл в папке хранилища

- FilesFile
  - `id` string, uuid, required
  - `folder_id` string, uuid, required
  - `root_id` string, uuid, required
  - `name` string, required
  - `external_url` string, uri: HTTP(S)-адрес внешнего ярлыка; отсутствует у обычных файлов
  - `extension` string, required
  - `mime_type` string, required
  - `size_bytes` integer, required
  - `version_no` integer, required
  - `version_id` string, uuid
  - `owner_id` integer, required
  - `created_by` integer, required
  - `updated_by` integer
  - `trashed_at` string, date-time
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required
  - `scan_status` 'pending' | 'scanning' | 'clean' | 'infected' | 'skipped' | 'error', required: skipped — содержимое крупнее порога проверки: оно выдаётся, но честно помечено непроверенным
  - `scan_verdict` string
  - `preview_status` 'pending' | 'processing' | 'ready' | 'unsupported' | 'error', required
  - `has_thumbnail` boolean, required
  - `is_favorite` boolean, required
  - `folder_name` string
  - `path` FilesBreadcrumb[]
    - `id` string, uuid, required
    - `name` string, required

## Other responses

- `400`: Некорректный запрос или нарушение бизнес-правила
- `401`: Сессия, ключ или кабинет не подтверждены
- `403`: Текущая роль не имеет требуемого права
- `404`: Запись не найдена или не видима текущему пользователю
- `409`: Конфликт версии, идемпотентности или бизнес-состояния

## Changes

- **2026-10-20** `408f7294f7a9`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/akeda/apis/akeda-erp-client-api/changes/api/v1/mail/attachments/:id/save-to-files/post.md)

---

[API](https://skmtc.dev/akeda/apis/akeda-erp-client-api.md) · [All operations](https://skmtc.dev/akeda/apis/akeda-erp-client-api/llms.txt) · [OpenAPI document](https://skmtc.dev/akeda/apis/akeda-erp-client-api/revisions/7a6b75f272ee?raw)
