Главная › Настройка объекта › Документы объекта

5 Документы объекта

Прикрепляйте договоры, техническую документацию, планы этажей и другие файлы к объектам с контролем доступа по ролям.

Зачем прикреплять документы?

Документы объекта хранят все важные файлы организованно и доступно в одном месте — договоры, техническую документацию, планы этажей, пароли и прочее.

Преимущества

  • Все файлы объекта в одном организованном месте
  • Видимость по ролям — контролируйте, кто видит каждый документ
  • Категоризация по типам: договоры, технические документы, планы, пароли
  • Безопасное облачное хранилище с доступом через подписанные URL

Как добавить документы

Вы можете загружать документы через веб-интерфейс или через API. Каждому документу присваивается тип, и при желании можно ограничить доступ для определённых ролей.

В веб-интерфейсе: откройте страницу объекта, затем нажмите "Документы" в меню объекта.

Смотрите полную документацию в Библиотеке: Документы объектов.

Типы документов

Каждый документ принадлежит к одной из пяти категорий. Выбирайте правильный тип для надлежащей организации.

OFFICIAL_DOCUMENT Договоры, соглашения, акты (PDF, DOC, макс 20 МБ)
TECHNICAL_DOCUMENT Технические спецификации, чертежи (PDF, DWG, XLS, макс 50 МБ)
INFORMATIONAL_DOCUMENT Инструкции, заметки, памятки (PDF, TXT, макс 10 МБ)
SCHEMA_IMAGE Планы этажей, схемы (JPG, PNG, PDF, макс 20 МБ)
PASSWORD_FILE Коды доступа, пароли WiFi (TXT, PDF, макс 1 МБ)

Контроль доступа

По умолчанию документы доступны всем участникам объекта. Вы можете ограничить видимость для определённых ролей. Владелец и агент всегда видят все документы.

PROPERTY_TENANT PROPERTY_TENANT_AGENT PROPERTY_MAINTENANCE
Пустой visible_to или null означает, что документ доступен всем. Укажите конкретные роли для ограничения доступа.

Для разработчиков: REST API

Вы можете управлять документами объекта через REST API. Файлы загружаются как контент в кодировке base64.

POST Загрузить документ

▶

Загрузите документ, отправив содержимое файла как строку в кодировке base64. Укажите тип документа для категоризации.

POST /api/v1/properties/{id}/documents

Заголовки:

Authorization: Bearer {token} Content-Type: application/json

Обязательные поля:

document_type_id ID типа документа (1-5)
file_content Содержимое файла в кодировке base64
file_name Оригинальное имя файла с расширением
mime_type MIME тип (application/pdf, image/png...)

Необязательные поля:

comment Описание или комментарий к документу

Тело запроса:

{ "document_type_id": 1, "file_content": "base64-encoded-file-content...", "file_name": "rental-agreement.pdf", "mime_type": "application/pdf", "comment": "Rental agreement 2026" }
ID типов документов: 1 = OFFICIAL_DOCUMENT, 2 = TECHNICAL_DOCUMENT, 3 = INFORMATIONAL_DOCUMENT, 4 = SCHEMA_IMAGE, 5 = PASSWORD_FILE. Используйте GET /api/document-types для полного списка.

Ответ (201 Created):

{ "message": "Document uploaded successfully", "data": { "id": 50, "property_id": "019a1b2c-3d4e-7f5a-8b9c-0123456789ab", "document_type": { "id": 1, "code": "OFFICIAL_DOCUMENT", "name_key": "document_type.official.name" }, "file_url": "https://landlordkeeper.com/file/cG1mOjUwOjA6...", "original_name": "rental-agreement.pdf", "file_size": 45678, "file_size_formatted": "44.61 KB", "mime_type": "application/pdf", "extension": "pdf", "is_image": false, "is_video": false, "is_pdf": true, "comment": "Rental agreement 2026", "visible_to_roles": null, "created_at": "2026-02-20T12:00:00+00:00" } }

GET Список документов

▶

Получить все документы объекта. Используйте фильтр type_id для показа только определённых типов.

GET /api/v1/properties/{id}/documents

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

type_id Фильтр по ID типа документа (например, 1 для официальных документов)

Ответ (200 OK):

{ "data": [ { "id": 50, "property_id": "019a1b2c-3d4e-7f5a-8b9c-0123456789ab", "document_type": {"id": 1, "code": "OFFICIAL_DOCUMENT"}, "file_url": "https://landlordkeeper.com/file/cG1mOjUwOjA6...", "original_name": "rental-agreement.pdf", "file_size": 45678, "file_size_formatted": "44.61 KB", "is_pdf": true, "comment": "Rental agreement 2026", "visible_to_roles": null, "created_at": "2026-02-20T12:00:00+00:00" } ], "total": 3, "stats": { "total_count": 3, "total_size": 137034, "total_size_formatted": "133.82 KB" } }

PUT Обновить документ

▶

Обновите комментарий и/или видимость документа. Заменить сам файл нельзя — удалите и загрузите заново.

PUT /api/v1/documents/{documentId}

Используйте ID документа из ответа на запрос списка (GET) или загрузки (POST).

Тело запроса:

{ "comment": "Updated rental agreement", "visible_to": ["PROPERTY_TENANT", "PROPERTY_MAINTENANCE"] }

Доступные роли для visible_to:

PROPERTY_TENANT PROPERTY_TENANT_AGENT PROPERTY_MAINTENANCE
Владелец и агент всегда видят все документы независимо от настроек visible_to.

Ответ (200 OK):

{ "message": "Document updated successfully", "data": { "id": 50, "comment": "Updated rental agreement", "visible_to_roles": ["PROPERTY_TENANT", "PROPERTY_MAINTENANCE"] } }

DELETE Удалить документ

▶

Окончательно удалить документ по его ID.

DELETE /api/v1/documents/{documentId}

Ответ (200 OK):

{"message": "Document deleted successfully"}

Примеры cURL

▶

1. Загрузить документ

curl -X POST https://landlordkeeper.com/api/v1/properties/019a1b2c-3d4e-7f5a-8b9c-0123456789ab/documents \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_TOKEN_HERE" \ -d '{ "document_type_id": 1, "file_content": "'$(base64 -w 0 contract.pdf)'", "file_name": "contract.pdf", "mime_type": "application/pdf", "comment": "Rental agreement 2026" }'

2. Список документов

curl https://landlordkeeper.com/api/v1/properties/019a1b2c-3d4e-7f5a-8b9c-0123456789ab/documents?type_id=1 \ -H "Authorization: Bearer YOUR_TOKEN_HERE"

3. Обновить документ

curl -X PUT https://landlordkeeper.com/api/v1/documents/50 \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_TOKEN_HERE" \ -d '{ "visible_to": ["PROPERTY_TENANT"], "comment": "Visible to tenant" }'

4. Удалить документ

curl -X DELETE https://landlordkeeper.com/api/v1/documents/50 \ -H "Authorization: Bearer YOUR_TOKEN_HERE"
Замените YOUR_TOKEN_HERE на JWT-токен из шага аутентификации.