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

API

BOM API (bom)

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

The bom module serves bills of materials, BOM versions with their lifecycle and read models (tree, explosion, where-used, purchase coverage), BOM items, and BOM templates. All 39 endpoints sit under /api/v1/bom. For business meaning see the BOM module page.

Group facts

Item Value Source
Base path /api/v1/bom src/cluster_erp/core/module_base.py:37-38, src/cluster_erp/modules/bom/module.py:53
Routers 4 router objects in 4 files; listed in the section Endpoint summary src/cluster_erp/modules/bom/module.py:36
Endpoints 39, counted from the route decorators and add_api_route calls of the routers that register_routes mounts src/cluster_erp/modules/bom/bom_items/routes.py, src/cluster_erp/modules/bom/bom_templates/routes.py, src/cluster_erp/modules/bom/bom_versions/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 39 of 39 routes declare require_permission src/cluster_erp/modules/auth/guards.py:205-240
App entitlement gate require_app("bom") on every mounted router src/cluster_erp/modules/bom/module.py:59
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
boms router (/boms) 6 src/cluster_erp/modules/bom/boms/routes.py:31
bom_versions router (/bom-versions) 15 src/cluster_erp/modules/bom/bom_versions/routes.py:26
bom_items router (/bom-items) 8 src/cluster_erp/modules/bom/bom_items/routes.py:31
bom_templates router (/bom-templates) 10 src/cluster_erp/modules/bom/bom_templates/routes.py:29

BOM headers endpoints

BOM header records.

Method Path Handler Permission Request Query Response Status Source
GET /api/v1/bom/boms/ list_boms bom.read none search, status, product_id, limit, offset dict 200 (default) src/cluster_erp/modules/bom/boms/routes.py:43
GET /api/v1/bom/boms/{bom_id} get_bom bom.read none none dict 200 (default) src/cluster_erp/modules/bom/boms/routes.py:96
POST /api/v1/bom/boms/ create_bom bom.create BomCreate none BomRead 201 src/cluster_erp/modules/bom/boms/routes.py:128
PUT /api/v1/bom/boms/{bom_id} update_bom bom.create BomUpdate none BomRead 200 (default) src/cluster_erp/modules/bom/boms/routes.py:140
DELETE /api/v1/bom/boms/{bom_id} delete_bom bom.create none none none 204 src/cluster_erp/modules/bom/boms/routes.py:155
POST /api/v1/bom/boms/bulk-delete bulk_delete_boms bom.create BulkDeleteRequest none BulkDeleteResponse 200 (default) src/cluster_erp/modules/bom/boms/routes.py:167

BOM versions endpoints

Version records, activation, clone, supersede, copy from a template, recalculation, and read models: tree, purchase coverage, explosion, where-used, and the active version of a product.

Method Path Handler Permission Request Query Response Status Source
GET /api/v1/bom/bom-versions/ list_bom_versions bom.read none bom_id, status, limit, offset dict 200 (default) src/cluster_erp/modules/bom/bom_versions/routes.py:29
GET /api/v1/bom/bom-versions/active-for-product/{product_id} active_bom_version_for_product bom.read none none dict 200 (default) src/cluster_erp/modules/bom/bom_versions/routes.py:72
GET /api/v1/bom/bom-versions/{version_id} get_bom_version bom.read none none BomVersionRead 200 (default) src/cluster_erp/modules/bom/bom_versions/routes.py:92
POST /api/v1/bom/bom-versions/ create_bom_version bom.create BomVersionCreate none BomVersionRead 201 src/cluster_erp/modules/bom/bom_versions/routes.py:106
PUT /api/v1/bom/bom-versions/{version_id} update_bom_version bom.create BomVersionUpdate none BomVersionRead 200 (default) src/cluster_erp/modules/bom/bom_versions/routes.py:118
DELETE /api/v1/bom/bom-versions/{version_id} delete_bom_version bom.create none none none 204 src/cluster_erp/modules/bom/bom_versions/routes.py:133
POST /api/v1/bom/bom-versions/{version_id}/activate activate_bom_version bom.activate none none BomVersionRead 200 (default) src/cluster_erp/modules/bom/bom_versions/routes.py:145
POST /api/v1/bom/bom-versions/{version_id}/clone clone_bom_version bom.create none none BomVersionRead 201 src/cluster_erp/modules/bom/bom_versions/routes.py:157
POST /api/v1/bom/bom-versions/{version_id}/supersede supersede_bom_version bom.activate BomVersionSupersedeRequest none BomVersionRead 200 (default) src/cluster_erp/modules/bom/bom_versions/routes.py:170
POST /api/v1/bom/bom-versions/{version_id}/copy-from-template copy_from_template bom.create BomVersionCopyFromTemplateRequest none BomVersionRead 200 (default) src/cluster_erp/modules/bom/bom_versions/routes.py:187
POST /api/v1/bom/bom-versions/{version_id}/recalculate recalculate_bom_version bom.create none none BomVersionRead 200 (default) src/cluster_erp/modules/bom/bom_versions/routes.py:204
GET /api/v1/bom/bom-versions/{version_id}/tree bom_version_tree bom.read none none BomTreeResponse 200 (default) src/cluster_erp/modules/bom/bom_versions/routes.py:216
GET /api/v1/bom/bom-versions/{version_id}/purchase-coverage purchase_coverage_bom_version bom.read none lot_qty, need_date dict 200 (default) src/cluster_erp/modules/bom/bom_versions/routes.py:227
GET /api/v1/bom/bom-versions/{version_id}/explosion explosion_bom_version bom.read none none dict 200 (default) src/cluster_erp/modules/bom/bom_versions/routes.py:244
GET /api/v1/bom/bom-versions/{version_id}/where-used where_used_bom_version bom.read none none dict 200 (default) src/cluster_erp/modules/bom/bom_versions/routes.py:292

BOM items endpoints

Item records, item move within the tree, and where-used for a part.

Method Path Handler Permission Request Query Response Status Source
GET /api/v1/bom/bom-items/ list_bom_items bom.read none bom_version_id, parent_item_id, part_id, limit, offset dict 200 (default) src/cluster_erp/modules/bom/bom_items/routes.py:54
GET /api/v1/bom/bom-items/where-used/{part_id} where_used_part bom.read none limit WhereUsedResponse 200 (default) src/cluster_erp/modules/bom/bom_items/routes.py:121
GET /api/v1/bom/bom-items/{item_id} get_bom_item bom.read none none BomItemRead 200 (default) src/cluster_erp/modules/bom/bom_items/routes.py:216
POST /api/v1/bom/bom-items/ create_bom_item bom.create BomItemCreate none BomItemRead 201 src/cluster_erp/modules/bom/bom_items/routes.py:230
PUT /api/v1/bom/bom-items/{item_id} update_bom_item bom.create BomItemUpdate none BomItemRead 200 (default) src/cluster_erp/modules/bom/bom_items/routes.py:242
POST /api/v1/bom/bom-items/{item_id}/move move_bom_item bom.create BomItemMove none BomItemRead 200 (default) src/cluster_erp/modules/bom/bom_items/routes.py:257
DELETE /api/v1/bom/bom-items/{item_id} delete_bom_item bom.create none none none 204 src/cluster_erp/modules/bom/bom_items/routes.py:278
POST /api/v1/bom/bom-items/bulk-delete bulk_delete_bom_items bom.create BulkDeleteRequest none BulkDeleteResponse 200 (default) src/cluster_erp/modules/bom/bom_items/routes.py:290

BOM templates endpoints

Template records and template items.

Method Path Handler Permission Request Query Response Status Source
GET /api/v1/bom/bom-templates/ list_bom_templates bom.read none search, family, limit, offset dict 200 (default) src/cluster_erp/modules/bom/bom_templates/routes.py:32
GET /api/v1/bom/bom-templates/items/ list_bom_template_items bom.read none template_id, limit, offset dict 200 (default) src/cluster_erp/modules/bom/bom_templates/routes.py:62
POST /api/v1/bom/bom-templates/items/ create_bom_template_item bom.create BomTemplateItemCreate none BomTemplateItemRead 201 src/cluster_erp/modules/bom/bom_templates/routes.py:104
PUT /api/v1/bom/bom-templates/items/{item_id} update_bom_template_item bom.create BomTemplateItemUpdate none BomTemplateItemRead 200 (default) src/cluster_erp/modules/bom/bom_templates/routes.py:116
DELETE /api/v1/bom/bom-templates/items/{item_id} delete_bom_template_item bom.create none none none 204 src/cluster_erp/modules/bom/bom_templates/routes.py:131
GET /api/v1/bom/bom-templates/{template_id} get_bom_template bom.read none none BomTemplateRead 200 (default) src/cluster_erp/modules/bom/bom_templates/routes.py:143
POST /api/v1/bom/bom-templates/ create_bom_template bom.create BomTemplateCreate none BomTemplateRead 201 src/cluster_erp/modules/bom/bom_templates/routes.py:157
PUT /api/v1/bom/bom-templates/{template_id} update_bom_template bom.create BomTemplateUpdate none BomTemplateRead 200 (default) src/cluster_erp/modules/bom/bom_templates/routes.py:169
DELETE /api/v1/bom/bom-templates/{template_id} delete_bom_template bom.create none none none 204 src/cluster_erp/modules/bom/bom_templates/routes.py:184
POST /api/v1/bom/bom-templates/bulk-delete bulk_delete_bom_templates bom.create BulkDeleteRequest none BulkDeleteResponse 200 (default) src/cluster_erp/modules/bom/bom_templates/routes.py:196

Error codes

The table lists the error codes that code under src/cluster_erp/modules/bom/ 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
BOM_ACTIVE_VERSION_EXISTS 400 bom_versions src/cluster_erp/modules/bom/bom_versions/services.py:439
BOM_ACTIVE_VERSION_LOCKED 400 bom_items, bom_versions src/cluster_erp/modules/bom/bom_items/services.py:415
BOM_INVALID_QTY 400 bom_items, bom_templates src/cluster_erp/modules/bom/bom_items/services.py:142
BOM_INVALID_STATUS 400 bom_versions, boms src/cluster_erp/modules/bom/bom_versions/services.py:314
BOM_MAX_DEPTH_EXCEEDED 400 bom_items src/cluster_erp/modules/bom/bom_items/services.py:174
BOM_TEMPLATE_EMPTY 400 bom_versions src/cluster_erp/modules/bom/bom_versions/services.py:569
BOM_VERSION_EMPTY 422 bom_versions src/cluster_erp/modules/bom/bom_versions/services.py:664
CONCURRENCY_VERSION_CONFLICT 409 bom_items, bom_templates, bom_versions, boms src/cluster_erp/modules/bom/bom_items/services.py:251
RESOURCE_NOT_FOUND 404 bom_items, bom_templates, bom_versions, boms src/cluster_erp/modules/bom/bom_items/routes.py:226
VALIDATION_ERROR 422 bom_items src/cluster_erp/modules/bom/bom_items/services.py:118

Events emitted

The table lists the contract classes that code under src/cluster_erp/modules/bom/ 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
BomActivated 2 src/cluster_erp/modules/bom/bom_versions/services.py:455
BomDraftCreated 3 src/cluster_erp/modules/bom/bom_versions/services.py:256
BomItemChanged 3 src/cluster_erp/modules/bom/bom_items/services.py:226
BomSuperseded 1 src/cluster_erp/modules/bom/bom_versions/services.py:515
BomVersionActivated 2 src/cluster_erp/modules/bom/bom_versions/services.py:464

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

Verified against commit 92f8051 · 2026-11-13