The documents module serves document types, documents linked to entities, document versions with file download, and the version approval lifecycle. All 23 endpoints sit under /api/v1/documents. For business meaning see the Documents module page.
Group facts¶
| Item | Value | Source |
|---|---|---|
| Base path | /api/v1/documents |
src/cluster_erp/core/module_base.py:37-38, src/cluster_erp/modules/documents/module.py:59 |
| Routers | 2 router objects in 2 files; listed in the section Endpoint summary | src/cluster_erp/modules/documents/module.py:48 |
| Endpoints | 23, counted from the route decorators and add_api_route calls of the routers that register_routes mounts |
src/cluster_erp/modules/documents/documents/routes.py, src/cluster_erp/modules/documents/settings/routes.py |
| Authentication | Bearer header or session cookie, resolved by get_current_user; see Authentication and headers |
src/cluster_erp/modules/auth/guards.py:85-167 |
| Permission guard | 23 of 23 routes declare require_permission |
src/cluster_erp/modules/auth/guards.py:205-240 |
| App entitlement gate | require_app("documents") on every mounted router |
src/cluster_erp/modules/documents/module.py:63 |
| Error format | JSON body {"error": {...}}; see Errors |
src/cluster_erp/server/error_handler.py:33-46 |
Endpoint summary¶
One row per sub-module folder. The router prefix is added to the base path.
| Sub-module | Routers | Endpoints | Router source |
|---|---|---|---|
settings |
router (/settings) |
7 | src/cluster_erp/modules/documents/settings/routes.py:20 |
documents |
router |
16 | src/cluster_erp/modules/documents/documents/routes.py:38 |
Document types endpoints¶
Document type records and a seed of defaults.
| Method | Path | Handler | Permission | Request | Query | Response | Status | Source |
|---|---|---|---|---|---|---|---|---|
GET |
/api/v1/documents/settings/document-types/ |
list_document_types |
document_type.read |
none | active_only, search |
list[DocumentTypeRead] |
200 (default) | src/cluster_erp/modules/documents/settings/routes.py:23 |
POST |
/api/v1/documents/settings/document-types/ |
create_document_type |
document_type.create |
DocumentTypeCreate |
none | DocumentTypeRead |
201 |
src/cluster_erp/modules/documents/settings/routes.py:41 |
POST |
/api/v1/documents/settings/document-types/seed-defaults |
seed_document_type_defaults |
document_type.seed |
none | none | dict[str, int] |
200 (default) | src/cluster_erp/modules/documents/settings/routes.py:52 |
GET |
/api/v1/documents/settings/document-types/{type_id} |
get_document_type |
document_type.read |
none | none | DocumentTypeRead |
200 (default) | src/cluster_erp/modules/documents/settings/routes.py:61 |
PUT |
/api/v1/documents/settings/document-types/{type_id} |
update_document_type |
document_type.update |
DocumentTypeUpdate |
none | DocumentTypeRead |
200 (default) | src/cluster_erp/modules/documents/settings/routes.py:74 |
POST |
/api/v1/documents/settings/document-types/bulk-delete |
bulk_delete_document_types |
document_type.bulk_delete |
BulkDeleteRequest |
none | BulkDeleteResponse |
200 (default) | src/cluster_erp/modules/documents/settings/routes.py:88 |
DELETE |
/api/v1/documents/settings/document-types/{type_id} |
delete_document_type |
document_type.delete |
none | none | none | 204 |
src/cluster_erp/modules/documents/settings/routes.py:99 |
Documents and versions endpoints¶
Document records, the list of entity types, versions per document, version file download, submit for approval, activate, and withdraw.
| Method | Path | Handler | Permission | Request | Query | Response | Status | Source |
|---|---|---|---|---|---|---|---|---|
GET |
/api/v1/documents/documents/ |
list_documents |
document.read |
none | search, active_only, document_type_id, entity_type, entity_id, limit, offset |
dict |
200 (default) | src/cluster_erp/modules/documents/documents/routes.py:59 |
GET |
/api/v1/documents/documents/entity-types |
list_document_entity_types |
document.read |
none | none | list |
200 (default) | src/cluster_erp/modules/documents/documents/routes.py:98 |
POST |
/api/v1/documents/documents/ |
create_document |
document.create |
DocumentCreate |
none | DocumentRead |
201 |
src/cluster_erp/modules/documents/documents/routes.py:124 |
GET |
/api/v1/documents/documents/{document_id} |
get_document |
document.read |
none | none | DocumentRead |
200 (default) | src/cluster_erp/modules/documents/documents/routes.py:136 |
PUT |
/api/v1/documents/documents/{document_id} |
update_document |
document.update |
DocumentUpdate |
none | DocumentRead |
200 (default) | src/cluster_erp/modules/documents/documents/routes.py:150 |
POST |
/api/v1/documents/documents/bulk-delete |
bulk_delete_documents |
document.bulk_delete |
BulkDeleteRequest |
none | BulkDeleteResponse |
200 (default) | src/cluster_erp/modules/documents/documents/routes.py:165 |
DELETE |
/api/v1/documents/documents/{document_id} |
delete_document |
document.delete |
none | none | none | 204 |
src/cluster_erp/modules/documents/documents/routes.py:177 |
GET |
/api/v1/documents/documents/{document_id}/versions |
list_versions |
document_version.read |
none | none | list[DocumentVersionRead] |
200 (default) | src/cluster_erp/modules/documents/documents/routes.py:194 |
POST |
/api/v1/documents/documents/{document_id}/versions |
create_version |
document_version.create |
DocumentVersionCreate |
none | DocumentVersionRead |
201 |
src/cluster_erp/modules/documents/documents/routes.py:209 |
GET |
/api/v1/documents/versions/{version_id} |
get_version |
document_version.read |
none | none | DocumentVersionRead |
200 (default) | src/cluster_erp/modules/documents/documents/routes.py:226 |
GET |
/api/v1/documents/versions/{version_id}/file |
download_version_file |
document_version.read |
none | none | Response |
200 (default) | src/cluster_erp/modules/documents/documents/routes.py:240 |
PUT |
/api/v1/documents/versions/{version_id} |
update_version |
document_version.update |
DocumentVersionUpdate |
none | DocumentVersionRead |
200 (default) | src/cluster_erp/modules/documents/documents/routes.py:270 |
DELETE |
/api/v1/documents/versions/{version_id} |
delete_version |
document_version.delete |
none | none | none | 204 |
src/cluster_erp/modules/documents/documents/routes.py:285 |
POST |
/api/v1/documents/versions/{version_id}/submit-approval |
submit_for_approval |
document_version.submit_approval |
none | none | DocumentVersionRead |
200 (default) | src/cluster_erp/modules/documents/documents/routes.py:302 |
POST |
/api/v1/documents/versions/{version_id}/activate |
activate_version |
document_version.activate |
none | none | DocumentVersionRead |
200 (default) | src/cluster_erp/modules/documents/documents/routes.py:354 |
POST |
/api/v1/documents/versions/{version_id}/withdraw |
withdraw_version |
document_version.withdraw |
none | none | DocumentVersionRead |
200 (default) | src/cluster_erp/modules/documents/documents/routes.py:371 |
Error codes¶
The table lists the error codes that code under src/cluster_erp/modules/documents/ raises, found by a syntax-tree scan for AppError(...), the factories in src/cluster_erp/core/errors.py (not_found, conflict, protected, permission_denied, privilege_escalation, check_version), and HTTPException(...). A status of 400 is the AppError default (src/cluster_erp/core/errors.py:23). Guard errors (401, 403), the entitlement codes, and validation errors (422) apply to every route and are listed on Errors.
| Code | HTTP status | Raised in | First site |
|---|---|---|---|
APPROVAL_INVALID_STATE |
400 |
documents |
src/cluster_erp/modules/documents/documents/routes.py:319 |
DOCUMENT_NO_ATTACHMENT |
400 |
documents |
src/cluster_erp/modules/documents/documents/services.py:270 |
DOCUMENT_VERSION_INVALID_STATUS |
400, 404 |
documents |
src/cluster_erp/modules/documents/documents/services.py:230 |
RESOURCE_NOT_FOUND |
404 |
documents, settings |
src/cluster_erp/modules/documents/documents/routes.py:146 |
Events emitted¶
The table lists the contract classes that code under src/cluster_erp/modules/documents/ passes directly to EventBus.emit, found by a syntax-tree scan. Events built in a variable first are not counted. The contracts are described in Contracts reference.
| Contract | Sites | First site |
|---|---|---|
DocumentCreated |
1 | src/cluster_erp/modules/documents/documents/services.py:121 |
DocumentVersionActivated |
1 | src/cluster_erp/modules/documents/documents/services.py:286 |
DocumentVersionSuperseded |
1 | src/cluster_erp/modules/documents/documents/services.py:330 |
Related pages¶
Verified against commit 92f8051 on 2026-11-13.