Status
Public API: not yet exposed. Internal HTTP surface: live at /bom/* (HelloBooks frontend only). gRPC layer: HelloBooks-Backend-Accounting-V3/controllers/bom.grpc.controller.js.
The shape below is extracted from the internal surface and previews what the public-API curated subset will look like.
Planned endpoints
| Method | Planned path | Action | Planned scope |
|---|---|---|---|
GET | /orgs/:o/entities/:e/boms | List BOMs (filterable by status, item, search) | bom:read |
GET | /orgs/:o/entities/:e/boms/:id | Read one BOM | bom:read |
GET | /orgs/:o/entities/:e/items/:itemId/active-bom | Get active BOM for an item (used by Work Order creation) | bom:read |
GET | /orgs/:o/entities/:e/items/:itemId/where-used | Find all BOMs that consume this item | bom:read |
POST | /orgs/:o/entities/:e/boms | Create BOM | bom:create |
PUT | /orgs/:o/entities/:e/boms/:id | Update BOM | bom:update |
DELETE | /orgs/:o/entities/:e/boms | Soft-archive (bulk; body { ids: [...] }) | bom:delete |
PUT | /orgs/:o/entities/:e/boms/restore | Un-archive (bulk; body { ids: [...] }) | bom:update |
GET | /orgs/:o/entities/:e/bom-reports/cost-analysis | BOM cost analysis report | bom:read |
GET | /orgs/:o/entities/:e/bom-reports/component-usage | Components ranked by reuse | bom:read |
GET | /orgs/:o/entities/:e/boms/:id/material-requirements | Explode BOM × plannedQty into component needs | bom:read |
URL paths are illustrative — the curated subset may consolidate or rename routes.
Planned response shape — BOM
Single-BOM response (extracted from bom.repository.js include block):
{
"id": "string",
"EntityRefId": "string",
"OrgRefId": "string",
"Name": "string",
"ItemRefId": "string | null",
"ItemName": "string | null",
"ItemCode": "string | null",
"Version": "string | null",
"Status": "Draft | Active | Archived",
"Notes": "string | null",
"IsArchived": false,
"TotalCost": 0.0,
"CreatedAt": "ISO-8601",
"UpdatedAt": "ISO-8601",
"Lines": [
{
"id": "string",
"ItemRefId": "string",
"ItemCode": "string | null",
"ItemName": "string | null",
"Quantity": 0.0,
"UnitRefId": "string | null",
"UnitCost": 0.0,
"WastePercentage": 0.0,
"Notes": "string | null",
"Unit": { "id": "string", "Name": "string" },
"ComputedLineCost": 0.0,
"ComputedUnitCost": 0.0
}
]
}TotalCost and ComputedLineCost are server-rolled-up values — do not compute them client-side.
Planned webhook events
bom.created— fired on successful POSTbom.updated— fired on successful PUTbom.archived— fired on successful DELETE (soft-archive)bom.restored— fired on successful restore