diff --git a/.claude/commands/syncro.md b/.claude/commands/syncro.md index ee82a951..8145d822 100644 --- a/.claude/commands/syncro.md +++ b/.claude/commands/syncro.md @@ -590,6 +590,12 @@ Every endpoint's response shape, verified against the live API. Parse exactly as | Create contract | POST `/contracts` | write OK but body does NOT echo the object | GET `/contracts` + match; never retry on null | | Email invoice | POST `/invoices/{id}/email` | `{"message": "Email sent."}` | **200 even with NO recipient** — verify `customer.email` first | | Email estimate | POST `/estimates/{id}/email` | `{"message": "Email sent"}` | **200 even with NO recipient** — verify `customer.email` first | +| Create lead | POST `/leads` | `{"lead": {...}}` | `.lead.id` | +| Create vendor | POST `/vendors` | `{"vendor": {...}}` | `.vendor.id` — no DELETE (persists) | +| Create/Update product | POST/PUT `/products/{id}` | `{"product": {...}}` | `.product.id` — `name`+`description` required; no DELETE | +| Create PO | POST `/purchase_orders` | `{"purchase_order": {...}}` | `.purchase_order.id` — no DELETE | +| Add PO line | POST `/purchase_orders/{id}/create_po_line_item` | `{"po_line_item": {...}}` | needs product `maintain_stock:true` | +| Create worksheet | POST `/tickets/{id}/worksheet_results` | `{"worksheet_result": {...}}` | `.worksheet_result.id` — template ids in `GET /tickets/settings` | **Invoice GET line_items field names differ from ticket line_items:** `item` = product name, `name` = description, `price` = unit rate. Do not use `price_retail` when reading invoice line items. diff --git a/.claude/standards/syncro/test-findings.md b/.claude/standards/syncro/test-findings.md index 4648da23..250afc61 100644 --- a/.claude/standards/syncro/test-findings.md +++ b/.claude/standards/syncro/test-findings.md @@ -29,6 +29,33 @@ policy-folder objects). Host is `rmm.syncromsp.com` (Kabuto/RMM), separate from - The token embeds an enrollment secret → it is a **credential**: vault it (per client), never commit plaintext. `policy_folder_id` comes from `GET /policy_folders?customer_id=N`. +## 2026-07-10 — Phase 1b (breadth: leads / vendors / products / PO / worksheets) + +**Response shapes — these are all WRAPPED (unlike contacts/contracts):** `POST /leads` → +`{"lead":{...}}` (`.lead.id`); `POST /vendors` → `{"vendor":{...}}`; `POST`/`PUT /products` → +`{"product":{...}}`; `POST /purchase_orders` → `{"purchase_order":{...}}`; +`POST /purchase_orders/{id}/create_po_line_item` → `{"po_line_item":{...}}`; +`POST /tickets/{id}/worksheet_results` → `{"worksheet_result":{...}}`; +`DELETE .../worksheet_results/{id}` → `{"message":"N: We deleted