Перейти к содержимому
Войти Запросить демо

Документы

Группа методов /api/v1/documents даёт доступ к хранилищу документов Skailer: папкам, метаданным документов и самим файлам.

Каждый документ лежит в папке, а тип папки определяет, кому принадлежит документ:

Тип папкиЗначение
organizationДокументы организации (политики, регламенты, шаблоны)
employeeДокументы конкретного сотрудника (договоры, справки, сканы)

Для документа в папке типа employee поле employee_id содержит id сотрудника, которому он принадлежит. Для документа организации employee_id равен null.

GET /api/v1/documents/folders/{folder_type}

folder_type - organization или employee.

Поля ответа (каждая папка):

ПолеТипОписание
idintegerID папки
titlestringНазвание папки
typestringТип папки: organization, employee
document_countintegerКоличество документов в папке

Права: для type=organization в ответ попадают папки, доступ к которым выдан правилами просмотра/редактирования папок, либо все папки при settings_document_folders=edit. Для type=employee требуется settings_document_folders=edit.

Пример ответа:

[
{
"id": 12,
"title": "Политики компании",
"type": "organization",
"document_count": 8
}
]

GET /api/v1/documents/employees/{employee_id}/folders

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

Права: settings_document_folders=edit, settings_roles_permissions=edit или employee_folder_permissions=view на папку.


POST /api/v1/documents/search

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

Параметры запроса:

ПолеТипОписание
folder_idintegerПоиск внутри одной конкретной папки
folder_typestringПоиск по всем доступным папкам типа: organization, employee
employee_idintegerФильтр по сотруднику, которому принадлежат документы
titlestringФильтр по названию документа
page_numberintegerНомер страницы, начинается с 1

Важно: должен быть задан ровно один из параметров folder_id или folder_type. Если передать оба или ни одного, метод вернёт 422.

Поля ответа (каждый документ):

ПолеТипОписание
idintegerID документа
titlestringНазвание документа
employee_idinteger | nullСотрудник, которому принадлежит документ; null для документа организации
uploaded_by_employee_idintegerСотрудник, загрузивший документ
folderobjectПапка: id, title, type
fileobjectФайл: name, file_type, size, mime_type, uuid, url
datetime_created_atstringДата и время создания
datetime_updated_atstringДата и время последнего изменения

Права: для папки type=organization требуется settings_document_folders=edit либо доступ, выданный правилами просмотра/редактирования папки. Для папки type=employee требуется employee_folder_permissions=view; для поиска с folder_type=employee дополнительно нужен settings_document_folders=edit.

Пример запроса:

{
"folder_id": 12,
"title": "договор",
"page_number": 1
}

Пример ответа:

{
"items": [
{
"id": 4501,
"title": "Трудовой договор",
"employee_id": 123,
"uploaded_by_employee_id": 7,
"folder": {
"id": 12,
"title": "Договоры",
"type": "employee"
},
"file": {
"name": "employment_contract.pdf",
"file_type": "employee_documents",
"size": 148213,
"mime_type": "application/pdf",
"uuid": "3f1c2b90-5d1a-4c8e-9a77-0b2d61f4e8aa",
"url": null
},
"datetime_created_at": "2026-05-14 09:12:00",
"datetime_updated_at": "2026-05-14 09:12:00"
}
],
"metadata": {
"page_number": 1,
"total_pages": 1,
"items": 1,
"items_per_page": 20,
"total_items": 1
}
}

POST /api/v1/documents/upload

Загружает файл и сразу создаёт из него документ одним запросом. Тело запроса - multipart/form-data.

Параметры запроса:

ПолеТипОписание
filefileЗагружаемый файл (обязательно)
folder_idintegerID папки, в которую загружается документ (обязательно)
employee_idintegerСотрудник, которому принадлежит документ; не указывается для документа организации

Название документа берётся из имени файла без расширения и позже может быть изменено через PUT /api/v1/documents/{document_id}.

Права: для папки type=organization требуется settings_document_folders=edit либо доступ, выданный правилами редактирования папки. Для папки type=employee требуется employee_folder_permissions=edit.

Пример запроса:

Окно терминала
curl -X POST 'https://<api-domain>/api/v1/documents/upload' \
-H 'Authorization: Bearer <your_access_token>' \
-F 'folder_id=12' \
-F 'employee_id=123' \
-F 'file=@employment_contract.pdf'

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


GET /api/v1/documents/{document_id}

Возвращает метаданные документа.

Права: для папки type=organization требуется settings_document_folders=edit либо доступ, выданный правилами просмотра/редактирования папки. Для папки type=employee требуется employee_folder_permissions=view.


GET /api/v1/documents/{document_id}/download

Возвращает исходный файл бинарным ответом. Имя файла передаётся в заголовке Content-Disposition.

Права: те же, что и для просмотра документа.


PUT /api/v1/documents/{document_id}

Меняет название документа. Сам файл при этом не заменяется.

Параметры запроса:

ПолеТипОписание
titlestringНовое название документа (обязательно)

Права: для папки type=organization требуется settings_document_folders=edit либо доступ, выданный правилами редактирования папки. Для папки type=employee требуется employee_folder_permissions=edit.

Пример запроса:

{
"title": "Трудовой договор 2026"
}

DELETE /api/v1/documents/{document_id}

Удаляет документ. Возвращает {"success": true}.

Права: для папки type=organization требуется settings_document_folders=edit либо доступ, выданный правилами редактирования папки. Для папки type=employee требуется employee_folder_permissions=edit.


Задача: складывать подписанные договоры из внешнего документооборота в папку сотрудника.

  1. Найти папку сотрудника (один раз на сотрудника, результат можно кэшировать):

    GET /api/v1/documents/employees/{employee_id}/folders
  2. Проверить, что документа ещё нет, чтобы не создавать дубликаты:

    POST /api/v1/documents/search

    Передайте folder_id и title.

  3. Загрузить файл:

    POST /api/v1/documents/upload

    Передайте folder_id, employee_id и file.

  4. Задать итоговое название, если имя файла отличается от нужного названия:

    PUT /api/v1/documents/{document_id}

Совет: для синхронизации в обратную сторону - выгрузки документов из Skailer - проходите по страницам POST /api/v1/documents/search с параметром folder_type, а затем скачивайте каждый файл через GET /api/v1/documents/{document_id}/download.