sync: auto-sync from DESKTOP-0O8A1RL at 2026-05-22 12:08:26

Author: Mike Swanson
Machine: DESKTOP-0O8A1RL
Timestamp: 2026-05-22 12:08:26
This commit is contained in:
2026-05-22 12:08:31 -07:00
parent aa5f15340c
commit ec51a06a0d
3 changed files with 31 additions and 0 deletions

View File

@@ -636,6 +636,24 @@ curl -s -X DELETE "${BASE}/estimates/${ESTIMATE_ID}?api_key=${API_KEY}"
**GET /estimates line_items vs POST response:** GET returns `line_items` as an array on `.estimate.line_items[]`. POST `/line_items` returns the line item under `.line_item` (singular, not nested under estimate).
**Hardware on estimates:** All hardware line items use a single generic product — `product_id: 32252` ("Hardware", `price_retail: 0.0`). The specific item name and price are set per-line-item via the `name` and `price_retail` fields on each line. Never look up a separate product ID for hardware items on estimates — always use `32252` and vary the description and price per item.
```bash
# Example hardware line item on an estimate
curl -s -X POST "${BASE}/estimates/${ESTIMATE_ID}/line_items?api_key=${API_KEY}" \
-H "Content-Type: application/json" \
--data-binary @- <<JSON
{
"product_id": 32252,
"name": "Dell OptiPlex 7010 SFF",
"description": "Refurbished desktop, 16GB RAM, 512GB SSD",
"quantity": 1.0,
"price_retail": 649.00,
"taxable": true
}
JSON
```
### Display formatting
When showing ticket lists, format as: