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

API

Procurement API: Purchase contracts endpoints (purchase_contracts)

HTTP endpoints of the purchase_contracts sub-module of procurement: 16 routes with permissions, schemas, status codes, and error codes.

This page lists the 16 endpoints of the purchase_contracts sub-module of the procurement module, under /api/v1/procurement. Scope: Contract records, completeness, activate, close, expire, cancel, reopen, and contract items. The module entry page is Procurement API.

Group facts

Item Value Source
Base path /api/v1/procurement src/cluster_erp/core/module_base.py:37-38, src/cluster_erp/modules/procurement/module.py:70
Routers 1 router objects in 1 files; listed in the section Endpoints src/cluster_erp/modules/procurement/module.py:35
Endpoints 16, counted from the route decorators and add_api_route calls of the routers that register_routes mounts src/cluster_erp/modules/procurement/purchase_contracts/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 16 of 16 routes declare require_permission src/cluster_erp/modules/auth/guards.py:205-240
App entitlement gate require_app("procurement") on every mounted router src/cluster_erp/modules/procurement/module.py:82
Error format JSON body {"error": {...}}; see Errors src/cluster_erp/server/error_handler.py:33-46

Endpoints

Method Path Handler Permission Request Query Response Status Source
GET /api/v1/procurement/purchase-contracts/ list_contracts purchase_contract.read none search, status, contract_type, limit, offset dict 200 (default) src/cluster_erp/modules/procurement/purchase_contracts/routes.py:55
POST /api/v1/procurement/purchase-contracts/ create_contract purchase_contract.create PurchaseContractCreate none PurchaseContractRead 201 src/cluster_erp/modules/procurement/purchase_contracts/routes.py:91
GET /api/v1/procurement/purchase-contracts/{contract_id} get_contract purchase_contract.read none none PurchaseContractRead 200 (default) src/cluster_erp/modules/procurement/purchase_contracts/routes.py:102
PUT /api/v1/procurement/purchase-contracts/{contract_id} update_contract purchase_contract.update PurchaseContractUpdate none PurchaseContractRead 200 (default) src/cluster_erp/modules/procurement/purchase_contracts/routes.py:115
DELETE /api/v1/procurement/purchase-contracts/{contract_id} delete_contract purchase_contract.delete none none none 204 src/cluster_erp/modules/procurement/purchase_contracts/routes.py:129
POST /api/v1/procurement/purchase-contracts/bulk-delete bulk_delete purchase_contract.delete BulkDeleteRequest none BulkDeleteResponse 200 (default) src/cluster_erp/modules/procurement/purchase_contracts/routes.py:140
GET /api/v1/procurement/purchase-contracts/{contract_id}/completeness get_completeness purchase_contract.read none none dict 200 (default) src/cluster_erp/modules/procurement/purchase_contracts/routes.py:155
POST /api/v1/procurement/purchase-contracts/{contract_id}/activate activate purchase_contract.activate PconTransition none PurchaseContractRead 200 (default) src/cluster_erp/modules/procurement/purchase_contracts/routes.py:170
POST /api/v1/procurement/purchase-contracts/{contract_id}/close close purchase_contract.update PconTransition none PurchaseContractRead 200 (default) src/cluster_erp/modules/procurement/purchase_contracts/routes.py:184
POST /api/v1/procurement/purchase-contracts/{contract_id}/expire expire purchase_contract.update PconTransition none PurchaseContractRead 200 (default) src/cluster_erp/modules/procurement/purchase_contracts/routes.py:196
POST /api/v1/procurement/purchase-contracts/{contract_id}/cancel cancel purchase_contract.cancel PconReasonTransition none PurchaseContractRead 200 (default) src/cluster_erp/modules/procurement/purchase_contracts/routes.py:210
POST /api/v1/procurement/purchase-contracts/{contract_id}/reopen reopen purchase_contract.update PconTransition none PurchaseContractRead 200 (default) src/cluster_erp/modules/procurement/purchase_contracts/routes.py:227
GET /api/v1/procurement/purchase-contracts/{contract_id}/items list_items purchase_contract.read none search list[PurchaseContractItemRead] 200 (default) src/cluster_erp/modules/procurement/purchase_contracts/routes.py:242
POST /api/v1/procurement/purchase-contracts/{contract_id}/items add_item purchase_contract.update PurchaseContractItemCreate none PurchaseContractItemRead 201 src/cluster_erp/modules/procurement/purchase_contracts/routes.py:257
PUT /api/v1/procurement/purchase-contract-items/{item_id} update_item purchase_contract.update PurchaseContractItemUpdate none PurchaseContractItemRead 200 (default) src/cluster_erp/modules/procurement/purchase_contracts/routes.py:273
DELETE /api/v1/procurement/purchase-contract-items/{item_id} delete_item purchase_contract.update none none none 204 src/cluster_erp/modules/procurement/purchase_contracts/routes.py:290

Error codes

The table lists the error codes that code under src/cluster_erp/modules/procurement/purchase_contracts/ 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
CONCURRENCY_VERSION_CONFLICT 409 services src/cluster_erp/modules/procurement/purchase_contracts/services.py:175
PCON_INCOMPLETE 409 services src/cluster_erp/modules/procurement/purchase_contracts/services.py:246
PCON_INVALID_STATUS 409 services src/cluster_erp/modules/procurement/purchase_contracts/services.py:203
RESOURCE_NOT_FOUND 404 routes, services src/cluster_erp/modules/procurement/purchase_contracts/routes.py:111

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

Verified against commit 92f8051 · 2026-11-13