jaz-clio 5.68.0 → 5.69.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/skills/api/SKILL.md +3 -3
- package/assets/skills/api/references/endpoints.md +19 -8
- package/assets/skills/api/references/feature-glossary.md +2 -2
- package/assets/skills/api/references/full-api-surface.md +2 -1
- package/assets/skills/api/references/orders.md +2 -0
- package/assets/skills/cli/SKILL.md +1 -1
- package/assets/skills/cli/references/command-catalog.md +1 -1
- package/assets/skills/conversion/SKILL.md +1 -1
- package/assets/skills/jaz-kit/SKILL.md +1 -1
- package/assets/skills/jaz-pseudo-sql/SKILL.md +1 -1
- package/assets/skills/jobs/SKILL.md +1 -1
- package/assets/skills/transaction-recipes/SKILL.md +1 -1
- package/cli.mjs +417 -413
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: jaz-api
|
|
3
|
-
version: 5.
|
|
3
|
+
version: 5.69.0
|
|
4
4
|
description: >-
|
|
5
5
|
Use this skill whenever you call, debug, or review code that touches the Jaz
|
|
6
6
|
REST API. Covers field names, response shapes, 159 production gotchas, error
|
|
@@ -138,7 +138,7 @@ The rest of this skill — field names, gotchas, error catalog, dependency order
|
|
|
138
138
|
35d. **Tags are `tags: string[]`** on ALL transaction create/update: invoices, bills, customer CNs, supplier CNs, journals, cash-in, cash-out, cash transfers. CLI uses `--tag <name>` (singular, wrapped to array). API accepts the array directly.
|
|
139
139
|
|
|
140
140
|
### Nano Classifiers
|
|
141
|
-
35e. **ClassifierConfig on line items**: `classifierConfig: [{ resourceId: "<capsuleTypeId>", type: "invoice"|"bill", selectedClasses: [{ className: "Class A", resourceId: "<classId>" }], printable: true }]`. Applies to line items on invoices, bills, credit notes, journal entries, and cash entry details. Create capsule types first via `POST /capsule-types`, then reference them in classifierConfig.
|
|
141
|
+
35e. **ClassifierConfig on line items**: `classifierConfig: [{ resourceId: "<capsuleTypeId>", type: "invoice"|"bill", selectedClasses: [{ className: "Class A", resourceId: "<classId>" }], printable: true }]`. Applies to line items on invoices, bills, credit notes, journal entries, and cash entry details. Create capsule types first via `POST /capsule-types`, then reference them in classifierConfig. A selected class needs `resourceId` unless it sends `entityResourceId` instead (a classifier whose options are customers, suppliers, contacts, employees or users). Quick fix and Ledger Find & Fix add `{ resourceId, deleted: true }` to remove one classifier and leave unnamed ones as they are (rule 107).
|
|
142
142
|
|
|
143
143
|
### Reports
|
|
144
144
|
36. **Report field names differ by type** — this is the most error-prone area:
|
|
@@ -358,7 +358,7 @@ Bills, invoices, and credit notes share identical mandatory field specs. Adding
|
|
|
358
358
|
106. **Contact PUT uses `email` (string), not `emails` (array)** — GET returns `emails: [{email, label}]` (array) but PUT accepts `email: "user@example.com"` (string). Sending the `emails` array in PUT body causes 400 "Invalid request body". The CLI and tool executor handle this automatically via read-modify-write with the correct field.
|
|
359
359
|
|
|
360
360
|
### Quick Fix (Bulk Update)
|
|
361
|
-
107. **
|
|
361
|
+
107. **24 Quick Fix endpoints for bulk-updating transactions and line items**: `POST /api/v1/quick-fix/{entity}` with `{ resourceIds: [...], attributes: {...} }`. Only included fields are changed; omitted fields are left unchanged. Response: `{ updated: string[], failed: [{ resourceId, error, errorCode }] }`. **HTTP status codes**: 200 = complete success (`failed` always empty). **207 Multi-Status** = partial or total failure with per-item detail (same response shape as 200, so check the `failed` array). 422 = total failure with no per-item breakdown (rare). On 207, retry only `failed` resourceIds. Entities: **ARAP**: invoices, bills, customer-credit-notes, supplier-credit-notes. **Accounting**: journals, cash-entries. **Schedulers**: sale-schedules, purchase-schedules, subscription-schedules, journal-schedules. **Orders (line items only, no transaction-level route)**: sale-orders, sale-quotes, purchase-orders, purchase-requests. **Line-item request patterns**: ARAP, accounting and orders use `{ lineItemResourceIds, attributes }` (purchase side adds `withholdingTax`). **Line-item `discount` and `withholdingTax` use the quick fix shapes, not the create/update ones**: `discount: { rateType: "PERCENTAGE"|"FLAT", rateValue }` (not a bare number) and `withholdingTax: { code, rate, rateType, type, description? }` (code, rate, rateType and type all required), on bills, supplier CNs and purchase orders/requests alike. Schedulers (sale/purchase/subscription) use Pattern C: `{ schedulerUpdates: [{ schedulerResourceId, lineItemUpdates: [{ arrayIndex, ...attrs }] }] }`. **Journal-schedules use Pattern D**: `lineItemResourceId` (UUID) instead of `arrayIndex`. **Field gotchas**: cash entries use `currencySetting` (singular: `{ rateFunctionalToSource, exchangeToken }`), NOT `currencySettings`. Journal schedules have `startDate` in addition to `endDate`/`interval`. Tags: string array, max 50 items, max 50 chars each; on invoices, bills and credit notes they total at most 1000 characters joined with `|`, else 422. **Line-item `classifierConfig`** sets or removes one classifier per entry: set = `{ resourceId, type, printable, selectedClasses }` with at least one class; remove = `{ resourceId, deleted: true }`; classifiers not named stay; `[]` changes nothing. A 207 `failed` entry can carry an empty `resourceId` when the failure matched no record.
|
|
362
362
|
107a. **Ledger Find & Fix: find and fix (recode) records across types with one filter, preview one change, apply it once.** Use it when a user asks to find & fix, recode, reclassify, retag, re-date or move records to another account across many records or several types. `POST /api/v1/ledger/find-fix/transactions/preview` (sets contact, date, capsule, tags) or `POST /api/v1/ledger/find-fix/line-items/preview` (sets account, classifiers), each with `{ filter, change }`, then `POST /api/v1/ledger/find-fix/apply` with `{ previewId }`; conditions, bodies and every code are in endpoints.md section 17a. `JOURNAL` covers manual and cashflow journals only: transfer and trial-balance journals and cash transfers never match, so their ids come back `NOT_FOUND`. **A filter with no condition besides `types` is a 422, and a condition with no operator is ignored.** **The API refuses a key it does not take, at any level, with 400 `invalid_filter` naming the key**; the tools and the CLI refuse a field of the other level before the request, naming the level that takes it. `tags` `{ add, remove }` keeps the record's other tags, so setting tags to X means removing the current ones and adding X. A classifier removal needs only `{ resourceId, deleted: true }`, even for a classifier the organization no longer has. **Preview** writes nothing, matches at most 500 records, and returns `previewId` (valid 30 minutes; absent when nothing is eligible). **A blocked field is left as it is while the record's other fields still change.** **Apply** is single use and saves the preview-time values, so a field edited between preview and apply, tags included, is overwritten. Once it has taken the preview it runs to the end even if the caller leaves, and starts no new call 3 minutes after the request arrived. 207 lists the `failed` records with an `errorCode`; `OUTCOME_UNKNOWN` means that record may have changed. 404 `PREVIEW_NOT_FOUND` (expired, used, being applied, or another caller's): preview again, never resend. **Any other 5xx, or a timeout, on apply means the outcome is unknown: if the connection drops, the apply keeps running for up to 4 minutes. Wait that long before previewing or applying again on the same records, then preview again or re-read them. Never apply this previewId again.** Several applies can run at the same time. When two applies change records on one document at once, the one saved last can undo the other's changes, including fields and line items it did not set. Preview again to check the result. Lock dates, filed tax periods and claims-backed documents fail per record, and e-invoice filings may be re-submitted. Rule 107's per-type routes stay for one document, for fields this does not change (due date, tax profile, notes, amounts, custom fields) and for scheduled transactions.
|
|
363
363
|
|
|
364
364
|
### Transfer Trial Balance
|
|
@@ -1937,7 +1937,7 @@ Middleware on payment, credit, and refund endpoints automatically wraps a flat J
|
|
|
1937
1937
|
|
|
1938
1938
|
## 17. Quick Fix (Bulk Update)
|
|
1939
1939
|
|
|
1940
|
-
|
|
1940
|
+
24 endpoints for bulk-updating transactions and line items in a single API call: 10 entities with both routes, plus 4 order entities with a line-items route only.
|
|
1941
1941
|
|
|
1942
1942
|
### Pattern
|
|
1943
1943
|
|
|
@@ -1951,6 +1951,7 @@ POST /api/v1/quick-fix/{entity}/line-items
|
|
|
1951
1951
|
**ARAP**: `invoices`, `bills`, `customer-credit-notes`, `supplier-credit-notes`
|
|
1952
1952
|
**Accounting**: `journals`, `cash-entries`
|
|
1953
1953
|
**Schedulers**: `sale-schedules`, `purchase-schedules`, `subscription-schedules`, `journal-schedules`
|
|
1954
|
+
**Orders (line items only)**: `sale-orders`, `sale-quotes`, `purchase-orders`, `purchase-requests`. There is no `POST /api/v1/quick-fix/{order-entity}` route.
|
|
1954
1955
|
|
|
1955
1956
|
### Transaction-Level Request
|
|
1956
1957
|
|
|
@@ -1967,7 +1968,7 @@ POST /api/v1/quick-fix/bills
|
|
|
1967
1968
|
}
|
|
1968
1969
|
```
|
|
1969
1970
|
|
|
1970
|
-
### Line-Item-Level Request (ARAP
|
|
1971
|
+
### Line-Item-Level Request (ARAP, Accounting, Orders)
|
|
1971
1972
|
|
|
1972
1973
|
```json
|
|
1973
1974
|
POST /api/v1/quick-fix/invoices/line-items
|
|
@@ -1999,9 +2000,9 @@ POST /api/v1/quick-fix/sale-schedules/line-items
|
|
|
1999
2000
|
}
|
|
2000
2001
|
```
|
|
2001
2002
|
|
|
2002
|
-
### Response (all
|
|
2003
|
+
### Response (all 24 endpoints)
|
|
2003
2004
|
|
|
2004
|
-
**HTTP status codes**: 200 = complete success (`failed` always `[]`). **207 Multi-Status** = partial or total failure with per-item detail (same body shape as 200). 422/500 = total failure, standard error shape (no per-item data). On 207, retry only `failed` resourceIds
|
|
2005
|
+
**HTTP status codes**: 200 = complete success (`failed` always `[]`). **207 Multi-Status** = partial or total failure with per-item detail (same body shape as 200). 422/500 = total failure, standard error shape (no per-item data). On 207, retry only `failed` resourceIds (`updated` ones are done). A `failed` entry's `resourceId` is empty when the failure could not be matched to a record.
|
|
2005
2006
|
|
|
2006
2007
|
```json
|
|
2007
2008
|
{
|
|
@@ -2027,7 +2028,16 @@ Only included fields are changed — omitted fields are left unchanged.
|
|
|
2027
2028
|
- **Purchase schedules**: endDate, interval, contactResourceId, currencySettings, taxCurrencySettings, tags, customFields, capsuleResourceId
|
|
2028
2029
|
- **Journal schedules**: startDate, endDate, interval, contactResourceId, tags, internalNotes, capsuleResourceId
|
|
2029
2030
|
|
|
2030
|
-
**Line items
|
|
2031
|
+
**Line items, ARAP and orders (Pattern B)**: name, quantity, unit, unitPrice, discount, itemResourceId, organizationAccountResourceId, taxProfileResourceId, classifierConfig, withholdingTax (purchase side only: bills, supplier CNs, purchase orders, purchase requests).
|
|
2032
|
+
|
|
2033
|
+
**Quick fix line-item shapes differ from create/update** (every Pattern B route, orders included):
|
|
2034
|
+
|
|
2035
|
+
| Field | Quick fix shape | Create / update shape |
|
|
2036
|
+
|-------|-----------------|-----------------------|
|
|
2037
|
+
| `discount` | `{ "rateType": "PERCENTAGE" \| "FLAT", "rateValue": 10 }` (rateValue ≥ 0; a percentage is 0-100) | a number |
|
|
2038
|
+
| `withholdingTax` | `{ "code", "rate", "rateType", "type", "description"? }`: code, rate, rateType and type required | `{ "code", "rate" }` |
|
|
2039
|
+
|
|
2040
|
+
**Line item `classifierConfig`** (every line-item route): each entry sets or removes ONE classifier; classifiers the request does not name are left as they are, and `[]` changes nothing. Set: `{ resourceId, type, printable, selectedClasses }` with at least one class. Remove: `{ resourceId, deleted: true }` (type, printable and selectedClasses not needed). Each selected class needs `className` plus `resourceId`, or `entityResourceId` instead when the classifier draws its options from customers, suppliers, contacts, employees or users.
|
|
2031
2041
|
|
|
2032
2042
|
**Line items — journal/cash-entry (Pattern B)**: organizationAccountResourceId, amount, description, taxProfileResourceId, classifierConfig.
|
|
2033
2043
|
|
|
@@ -2057,7 +2067,7 @@ POST /api/v1/quick-fix/journal-schedules/line-items
|
|
|
2057
2067
|
|
|
2058
2068
|
Note: journal-schedules use `lineItemResourceId` (UUID), NOT `arrayIndex`.
|
|
2059
2069
|
|
|
2060
|
-
**Tags**: string array, max 50 items, max 50 chars each.
|
|
2070
|
+
**Tags**: string array, max 50 items, max 50 chars each. On invoices, bills and both credit notes the tags, joined with `|`, total at most 1000 characters, else 422.
|
|
2061
2071
|
|
|
2062
2072
|
---
|
|
2063
2073
|
|
|
@@ -2069,7 +2079,7 @@ Find and fix (recode) records across invoices, bills, both credit notes, journal
|
|
|
2069
2079
|
|------------------|-----------|
|
|
2070
2080
|
| `types` (required) | `INVOICE`, `BILL`, `CUSTOMER_CREDIT_NOTE`, `SUPPLIER_CREDIT_NOTE`, `JOURNAL` (manual and cashflow journals only), `CASH_ENTRY` |
|
|
2071
2081
|
| `resourceIds` | Up to 500; line item ids at line level |
|
|
2072
|
-
| `reference` | `eq`, `in
|
|
2082
|
+
| `reference` | `eq`, `in` (up to 100 values, as for every `in`), `contains`, `startWith` |
|
|
2073
2083
|
| `valueDate` | `eq`, `gte`, `lte`, `between: [from, to]` |
|
|
2074
2084
|
| `contactResourceId` | `eq`, `in` |
|
|
2075
2085
|
| `organizationAccountResourceId` | `eq`, `in`; line level only |
|
|
@@ -2145,6 +2155,7 @@ A blocked field is left as it is while the record's other fields still change, a
|
|
|
2145
2155
|
| `FOREIGN_CURRENCY_VALUE_DATE` | date | A new date on a foreign currency record would take a new exchange rate |
|
|
2146
2156
|
| `VALUE_DATE_AFTER_DUE_DATE` | date | The new date is after the document's due date |
|
|
2147
2157
|
| `TOO_MANY_TAGS` | tags | The record would end with more than 50 tags |
|
|
2158
|
+
| `TAGS_TOO_LONG` | tags | Invoices, bills and credit notes: the record's tags, joined with `\|`, would total more than 1000 characters |
|
|
2148
2159
|
| `CONTROL_LINE` | account | A journal line on a bank, cash or control account |
|
|
2149
2160
|
|
|
2150
2161
|
### POST /api/v1/ledger/find-fix/apply
|
|
@@ -2180,7 +2191,7 @@ Several applies can run at the same time. When two applies change records on one
|
|
|
2180
2191
|
| 422 | `CLASSIFIER_NOT_FOUND`, `CLASS_NOT_FOUND` | Line items preview, set entries only: a classifier the change sets does not exist, or a class it selects is not a current class of that classifier; `resourceId` names the classifier or class. A removal and a record-list selection (`entityResourceId`) are not checked |
|
|
2181
2192
|
| 422 | `TOO_MANY_RECORDS` | Either preview: at least `count` records or line items match, more than `limit` |
|
|
2182
2193
|
| 422 | `TOO_MANY_CALLS` | Transactions preview: the change needs `count` separate updates, more than `limit`, because records whose resulting values differ need separate updates. A line items preview never answers it |
|
|
2183
|
-
| 503 | `PREVIEW_STORE_UNAVAILABLE` |
|
|
2194
|
+
| 503 | `PREVIEW_STORE_UNAVAILABLE` | On apply: nothing applied, and the preview may be used up (preview again if a retry answers `PREVIEW_NOT_FOUND`). On preview: no previewId was issued; run the preview again |
|
|
2184
2195
|
|
|
2185
2196
|
Any other 5xx, or a timeout, on apply: the outcome is unknown. If the connection drops, apply keeps running for up to 4 minutes. Wait that long before previewing or applying again on the same records, then preview again or re-read them. Never apply this previewId again. A service restart can stop an apply; preview again to check.
|
|
2186
2197
|
|
|
@@ -251,9 +251,9 @@ Bank statement import supports CSV and PDF with configurable column mapping. Sta
|
|
|
251
251
|
|
|
252
252
|
### Quick Fix (Bulk Update)
|
|
253
253
|
|
|
254
|
-
Mass-edit transactions and line items in a single operation. Replaces the need to open and update each transaction individually. Supports all transaction types (invoices, bills, credit notes, journals, cash entries) and their scheduled/subscription variants. Common use cases: batch date corrections, reassigning contacts, bulk-tagging for reporting, changing accounts/tax profiles across multiple line items.
|
|
254
|
+
Mass-edit transactions and line items in a single operation. Replaces the need to open and update each transaction individually. Supports all transaction types (invoices, bills, credit notes, journals, cash entries) and their scheduled/subscription variants, plus line items on sale orders, sale quotes, purchase orders and purchase requests. Common use cases: batch date corrections, reassigning contacts, bulk-tagging for reporting, changing accounts/tax profiles across multiple line items.
|
|
255
255
|
|
|
256
|
-
**API**: `POST /api/v1/quick-fix/{entity}` (transaction-level) + `POST /api/v1/quick-fix/{entity}/line-items` (line-item-level).
|
|
256
|
+
**API**: `POST /api/v1/quick-fix/{entity}` (transaction-level) + `POST /api/v1/quick-fix/{entity}/line-items` (line-item-level). 24 endpoints total (orders: line items only).
|
|
257
257
|
|
|
258
258
|
### Ledger Find & Fix
|
|
259
259
|
|
|
@@ -733,13 +733,14 @@ These features exist in the Jaz platform and may affect API responses or cause u
|
|
|
733
733
|
- Move transactions between capsules via `POST /api/v1/moveTransactionCapsules`
|
|
734
734
|
- Search transactions within capsules
|
|
735
735
|
|
|
736
|
-
### Quick Fix (Bulk Update)
|
|
736
|
+
### Quick Fix (Bulk Update): 24 Endpoints
|
|
737
737
|
|
|
738
738
|
Bulk-update transactions or line items in a single call. Pattern: `POST /api/v1/quick-fix/{entity}` + `POST /api/v1/quick-fix/{entity}/line-items`.
|
|
739
739
|
|
|
740
740
|
**ARAP**: `invoices`, `bills`, `customer-credit-notes`, `supplier-credit-notes` (× 2 = 8)
|
|
741
741
|
**Accounting**: `journals`, `cash-entries` (× 2 = 4)
|
|
742
742
|
**Schedulers**: `sale-schedules`, `purchase-schedules`, `subscription-schedules`, `journal-schedules` (× 2 = 8)
|
|
743
|
+
**Orders**: `sale-orders`, `sale-quotes`, `purchase-orders`, `purchase-requests` (line items only = 4)
|
|
743
744
|
|
|
744
745
|
Request: `{ resourceIds: [...], attributes: {...} }` (transactions) or `{ lineItemResourceIds: [...], attributes: {...} }` (line items) or `{ schedulerUpdates: [...] }` (scheduler line items).
|
|
745
746
|
Response: `{ updated: [...], failed: [{ resourceId, error, errorCode }] }`. HTTP 200 = all succeeded. **207 Multi-Status** = partial failure (check both arrays). 422/500 = total failure (standard error shape).
|
|
@@ -81,6 +81,8 @@ To change lines:
|
|
|
81
81
|
|
|
82
82
|
The update tools (and `clio … update --lines`) pre-flight this against the stored document: lines with no `resourceId` at all on a document that already has lines are refused locally (nothing is written) unless `appendLines: true` (CLI `--append-lines`) says adding is the intent; naming some stored lines but not all is refused locally with the missing ids.
|
|
83
83
|
|
|
84
|
+
To change a few fields on some lines without resending the document, use `quick_fix_line_items` (`clio quick-fix <entity> --line-items`) with entity `sale-orders`, `sale-quotes`, `purchase-orders` or `purchase-requests`: `{ lineItemResourceIds, attributes }`, only the fields sent change, and the lines not named are untouched. Attributes: name, quantity, unit, unitPrice, discount, itemResourceId, organizationAccountResourceId, taxProfileResourceId, classifierConfig, plus withholdingTax on purchase orders and requests. `discount` and `withholdingTax` take the quick fix shapes, not the ones this page's create/update use (`discount: { rateType, rateValue }`, `withholdingTax: { code, rate, rateType, type }`): see endpoints.md section 17. Orders have line-item quick fix only: `quick_fix_transactions` refuses them.
|
|
85
|
+
|
|
84
86
|
## Delete vs Void
|
|
85
87
|
|
|
86
88
|
- **DELETE is draft-only** (422 on anything non-draft). `transition_* action:DELETE` pre-flights status and returns a `repair` hint to use `VOID` for non-draft records.
|
|
@@ -539,7 +539,7 @@ Also: `clio reports pdf` — generate PDF from a message/document.
|
|
|
539
539
|
| `status <workflowIds>` | Comma-separated workflow IDs |
|
|
540
540
|
|
|
541
541
|
### `clio quick-fix <entity>` — Bulk-update transactions
|
|
542
|
-
Entities: `invoices`, `bills`, `customer-credit-notes`, `supplier-credit-notes`, `journals`, `cash-entries`, `sale-schedules`, `purchase-schedules`, `subscription-schedules`, `journal-schedules`
|
|
542
|
+
Entities: `invoices`, `bills`, `customer-credit-notes`, `supplier-credit-notes`, `journals`, `cash-entries`, `sale-schedules`, `purchase-schedules`, `subscription-schedules`, `journal-schedules`, and with `--line-items` only: `sale-orders`, `sale-quotes`, `purchase-orders`, `purchase-requests`
|
|
543
543
|
|
|
544
544
|
| Flag | Purpose |
|
|
545
545
|
|------|---------|
|