Factorizer/Cluster ERP WikiCluster ERP Türkçe
Home / API reference

API

Design engineering API (design_engineering)

HTTP endpoints of the design_engineering module under /api/v1/design_engineering: 20 routes with permissions, schemas, status codes, and error codes.

The design_engineering module serves designs with their review lifecycle and files, and engineering change notes (ECNs). All 20 endpoints sit under /api/v1/design_engineering. For business meaning see the Design engineering module page.

Group facts

Item Value Source
Base path /api/v1/design_engineering src/cluster_erp/core/module_base.py:37-38, src/cluster_erp/modules/design_engineering/module.py:43
Routers 2 router objects in 2 files; listed in the section Endpoint summary src/cluster_erp/modules/design_engineering/module.py:32
Endpoints 20, counted from the route decorators and add_api_route calls of the routers that register_routes mounts src/cluster_erp/modules/design_engineering/designs/routes.py, src/cluster_erp/modules/design_engineering/ecns/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 20 of 20 routes declare require_permission src/cluster_erp/modules/auth/guards.py:205-240
App entitlement gate require_app("design_engineering") on every mounted router src/cluster_erp/modules/design_engineering/module.py:47
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
designs router (/designs) 11 src/cluster_erp/modules/design_engineering/designs/routes.py:31
ecns router (/ecns) 9 src/cluster_erp/modules/design_engineering/ecns/routes.py:30

Designs endpoints

Design records, submit for review, approve, reject, files, and the ECNs of a design.

Method Path Handler Permission Request Query Response Status Source
GET /api/v1/design_engineering/designs/ list_designs design.read none search, status, project_id, design_type, limit, offset dict 200 (default) src/cluster_erp/modules/design_engineering/designs/routes.py:43
GET /api/v1/design_engineering/designs/{design_id} get_design design.read none none DesignRead 200 (default) src/cluster_erp/modules/design_engineering/designs/routes.py:79
POST /api/v1/design_engineering/designs/ create_design design.create DesignCreate none DesignRead 201 src/cluster_erp/modules/design_engineering/designs/routes.py:93
PUT /api/v1/design_engineering/designs/{design_id} update_design design.create DesignUpdate none DesignRead 200 (default) src/cluster_erp/modules/design_engineering/designs/routes.py:105
DELETE /api/v1/design_engineering/designs/{design_id} delete_design design.create none none none 204 src/cluster_erp/modules/design_engineering/designs/routes.py:120
POST /api/v1/design_engineering/designs/bulk-delete bulk_delete_designs design.create BulkDeleteRequest none BulkDeleteResponse 200 (default) src/cluster_erp/modules/design_engineering/designs/routes.py:132
POST /api/v1/design_engineering/designs/{design_id}/submit-review submit_review design.create none none DesignRead 200 (default) src/cluster_erp/modules/design_engineering/designs/routes.py:144
POST /api/v1/design_engineering/designs/{design_id}/approve approve_design design.approve none none DesignRead 200 (default) src/cluster_erp/modules/design_engineering/designs/routes.py:156
POST /api/v1/design_engineering/designs/{design_id}/reject reject_design design.approve none none DesignRead 200 (default) src/cluster_erp/modules/design_engineering/designs/routes.py:168
GET /api/v1/design_engineering/designs/{design_id}/files get_design_files design.read none none dict 200 (default) src/cluster_erp/modules/design_engineering/designs/routes.py:180
GET /api/v1/design_engineering/designs/{design_id}/ecns list_design_ecns design.read none limit, offset dict 200 (default) src/cluster_erp/modules/design_engineering/designs/routes.py:191

Engineering change notes endpoints

ECN records, approve, reject, and implement.

Method Path Handler Permission Request Query Response Status Source
GET /api/v1/design_engineering/ecns/ list_ecns design.read none search, status, design_id, limit, offset dict 200 (default) src/cluster_erp/modules/design_engineering/ecns/routes.py:42
GET /api/v1/design_engineering/ecns/{ecn_id} get_ecn design.read none none EcnRead 200 (default) src/cluster_erp/modules/design_engineering/ecns/routes.py:76
POST /api/v1/design_engineering/ecns/ create_ecn ecn.propose EcnCreate none EcnRead 201 src/cluster_erp/modules/design_engineering/ecns/routes.py:90
PUT /api/v1/design_engineering/ecns/{ecn_id} update_ecn ecn.propose EcnUpdate none EcnRead 200 (default) src/cluster_erp/modules/design_engineering/ecns/routes.py:102
DELETE /api/v1/design_engineering/ecns/{ecn_id} delete_ecn ecn.propose none none none 204 src/cluster_erp/modules/design_engineering/ecns/routes.py:117
POST /api/v1/design_engineering/ecns/bulk-delete bulk_delete_ecns ecn.propose BulkDeleteRequest none BulkDeleteResponse 200 (default) src/cluster_erp/modules/design_engineering/ecns/routes.py:129
POST /api/v1/design_engineering/ecns/{ecn_id}/approve approve_ecn ecn.approve none none EcnRead 200 (default) src/cluster_erp/modules/design_engineering/ecns/routes.py:141
POST /api/v1/design_engineering/ecns/{ecn_id}/reject reject_ecn ecn.approve none none EcnRead 200 (default) src/cluster_erp/modules/design_engineering/ecns/routes.py:153
POST /api/v1/design_engineering/ecns/{ecn_id}/implement implement_ecn ecn.approve none none EcnRead 200 (default) src/cluster_erp/modules/design_engineering/ecns/routes.py:165

Error codes

The table lists the error codes that code under src/cluster_erp/modules/design_engineering/ 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
DESIGN_CONCEPT_NO_APPROVAL 400 designs src/cluster_erp/modules/design_engineering/designs/services.py:284
DESIGN_INVALID_STATUS 400 designs src/cluster_erp/modules/design_engineering/designs/services.py:230
DESIGN_LOCKED_APPROVED 400 designs src/cluster_erp/modules/design_engineering/designs/services.py:191
ECN_DESIGN_NOT_APPROVED 400 ecns src/cluster_erp/modules/design_engineering/ecns/services.py:107
ECN_INVALID_STATUS 400 ecns src/cluster_erp/modules/design_engineering/ecns/services.py:151
RESOURCE_NOT_FOUND 404 designs, ecns src/cluster_erp/modules/design_engineering/designs/routes.py:89

Events emitted

The table lists the contract classes that code under src/cluster_erp/modules/design_engineering/ 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
DesignApproved 1 src/cluster_erp/modules/design_engineering/designs/services.py:307
DesignCreated 1 src/cluster_erp/modules/design_engineering/designs/services.py:167
DesignSuperseded 1 src/cluster_erp/modules/design_engineering/designs/services.py:348
EcnApproved 1 src/cluster_erp/modules/design_engineering/ecns/services.py:228
EcnImplemented 1 src/cluster_erp/modules/design_engineering/ecns/services.py:304
EcnProposed 1 src/cluster_erp/modules/design_engineering/ecns/services.py:128

Verified against commit 92f8051 on 2026-11-13.

Verified against commit 92f8051 · 2026-11-13