---
title: "Открыть сессию загрузки вложения чата"
method: POST
path: "/api/v1/chat/conversations/{id}/upload-sessions"
tags: ["Chat"]
---

# Открыть сессию загрузки вложения чата

`POST /api/v1/chat/conversations/{id}/upload-sessions`

## Request

- Base URL: `https://erp.akeda.ru`
- URL: `https://erp.akeda.ru/api/v1/chat/conversations/{id}/upload-sessions`
- 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`)

Проверяет право прикреплять файл и квоту кабинета до выдачи адреса. Байты идут напрямую в хранилище: post — один multipart POST, parts — PUT частей, api — запасной авторизованный путь только для клиента. После отправки байтов вызовите finish. Порог 100 MiB снят. Файлы свыше 500 MiB получают статус skipped и открываются ссылкой с явной пометкой «не проверен антивирусом»; заражённый файл и сбой сканера этим не обходятся.

## Request body

- ChatUploadSessionCreate
  - `name` string, required
  - `mime_type` string
  - `size_bytes` integer, required
  - `sha256` string: Необязательная lowercase SHA-256 сумма файла.

## Response `201`

Сессия и инструкции загрузки

- ChatUploadSession
  - `id` string, uuid, required
  - `owner_type` 'conversation', required
  - `owner_id` string, uuid
  - `name` string, required
  - `mime_type` string, required
  - `size_bytes` integer, required
  - `sha256` string
  - `status` 'pending' | 'processing' | 'attached' | 'failed' | 'expired', required
  - `failure` string
  - `failure_detail` string
  - `scan_status` 'clean' | 'infected' | 'skipped'
  - `scan_verdict` string
  - `published_ref` string, uuid
  - `expires_at` string, date-time, required
  - `created_at` string, date-time, required
  - `completed_at` string, date-time
  - `upload` ChatUploadInstructions
    - `mode` 'post' | 'parts' | 'api', required
    - `url` string
    - `method` string
    - `fields` object
    - `file_field` string
    - `part_bytes` integer
    - `part_count` integer
    - `direct_urls` object
    - `requires_authorization` boolean
    - `max_bytes` integer, required: 0 означает отсутствие ограничения размера со стороны чата. Квота кабинета и технические ограничения хранилища сохраняются.
    - `expires_at` string, date-time, required

## Other responses

- `400`: Некорректный запрос или нарушение бизнес-правила
- `401`: Сессия, ключ или кабинет не подтверждены
- `403`: Текущая роль не имеет требуемого права
- `413`: Размер превышает технические возможности хранилища
- `503`: Прямая загрузка временно не подключена

---

[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/3c60ded179f2?raw)
