@celigo/api-specs 0.2.51 → 0.2.53

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/dist/export.yml CHANGED
@@ -920,7 +920,17 @@ components:
920
920
  When grouping is used, the export's page size determines the maximum number of groups per page, not individual
921
921
  records. Note that effective grouping typically requires that records with the same group field values appear
922
922
  together in the export data.
923
+
924
+ Not a webhook listener feature: on a `webhook` export the platform applies it only within each page, after
925
+ the request has been paged, and only to adjacent rows — the field is not offered for listeners in the UI.
923
926
  x-celigo-ai-guidance:
927
+ - |-
928
+ Never set this on a webhook listener to keep a request's rows together —
929
+ the listener pages the request's records at ``pageSize`` FIRST and then
930
+ merges only adjacent same-key rows inside each page, so rows that cross a
931
+ page boundary still arrive as separate records and unsorted rows are not
932
+ grouped at all. Keep a listener's request together by having the sender
933
+ post an object (one record) or by raising the listener's ``pageSize``.
924
934
  - |-
925
935
  A grouped record's wire shape is a BARE ARRAY of the grouped rows
926
936
  (``[{row}, {row}]``) — there is no ``rows`` key on the record
@@ -2045,7 +2055,10 @@ components:
2045
2055
  - csv
2046
2056
  pathToRecords:
2047
2057
  type: string
2048
- description: JSON path into the incoming payload to the array of records to emit; when omitted, the whole payload is emitted as a single record.
2058
+ description: JSON path into an object payload to the array whose elements become the records. When omitted, a top-level JSON array is emitted as one record per element and an object payload is emitted as a single record.
2059
+ x-celigo-ai-guidance:
2060
+ - 'Set this only when the records sit inside an object (`{"data": {"items": [...]}}` → `data.items`). A sender that already posts a top-level array needs nothing here; a sender that posts an object with no path configured delivers exactly one record per request — the whole object — which is also the way to make one request one record on purpose.'
2061
+ - 'Records are paged per request at the export''s `pageSize` (default 20) before any hook, filter, or downstream step runs: a 25-element array is a page of 20 records followed by a page of 5, and a `preSavePage` hook receives one page (up to `pageSize` records) per call. A hook that groups rows by order therefore groups only the rows on the same page — an order whose rows span two pages comes out as two grouped records, the second after the first was already processed. To keep a request''s rows together, have the sender wrap them in an object (one record, rows under `record.<path>`) or raise `pageSize` above the largest request — never `groupByFields`, which the listener applies per page after paging.'
2049
2062
  examples:
2050
2063
  - events
2051
2064
  - data.items
@@ -16242,6 +16255,8 @@ components:
16242
16255
  record as one response, capped at 5 MB in total, so the value does not change how many
16243
16256
  results a lookup returns; a result set larger than that belongs in a standalone export
16244
16257
  step. In a test run or preview the value also caps the records fetched (default 20).
16258
+ On a webhook listener the records of each incoming request are paged separately, before
16259
+ any hook or downstream step runs.
16245
16260
  default: 20
16246
16261
  examples:
16247
16262
  - 100
package/dist/import.yml CHANGED
@@ -1605,7 +1605,17 @@ components:
1605
1605
  description: Internal flag indicating the import was built with the legacy REST form rather than the unified HTTP framework. Set by the form; not configured directly.
1606
1606
  strictHandlebarEvaluation:
1607
1607
  type: boolean
1608
- description: When true, handlebars expressions that reference a missing field raise an error instead of rendering an empty string, surfacing mapping mistakes early rather than sending blank values.
1608
+ description: Intended to make handlebars expressions that reference a missing field raise an error instead of rendering an empty string. In live runs on an HTTP import it does not have that effect on `http.body` templates or mapping expressions — an undefined path still renders empty and the record succeeds with the flag true — and `relativeURI` / `headers[].value` templates already fail on an undefined path regardless of this flag. Not a safeguard against a wrong template root or a misspelled path.
1609
+ x-celigo-ai-guidance:
1610
+ - |-
1611
+ Do not rely on this flag to catch a mis-rooted or misspelled path. Live-verified
1612
+ 2026-09-24 on an HTTP import in real flow runs with the flag ``true``: an undefined
1613
+ ``{{record.<field>}}`` in ``http.body`` and an undefined ``{{<field>}}`` in a mapping
1614
+ expression both rendered empty and the record succeeded — the same outcome as with
1615
+ the flag ``false`` or unset. Relative URI and header templates fail on an undefined
1616
+ path regardless of this flag. To catch a wrong root, check the template against the
1617
+ record's shape (``record`` for an object, ``rows`` for a grouped record,
1618
+ ``batch_of_records`` when ``batchSize`` exceeds 1) before saving.
1609
1619
  formType:
1610
1620
  type: string
1611
1621
  enum:
@@ -1734,8 +1744,17 @@ components:
1734
1744
  description: |-
1735
1745
  Maximum number of records submitted per HTTP request, which affects throughput and API rate limiting.
1736
1746
  REST services typically send one record per request; raise it only for batch endpoints or RPC/XML services that accept multiple records, consulting the target API documentation for the optimal value.
1747
+ Above 1, the body, relative URI, and header templates render once per request against `batch_of_records` — each entry carrying that record as `record` (or `rows` for a grouped record) — and a root-level `record` or `rows` is undefined.
1737
1748
 
1738
1749
  The default varies by API.
1750
+ x-celigo-ai-guidance:
1751
+ - |-
1752
+ A batched import's templates iterate ``{{#each batch_of_records}}`` and address
1753
+ ``this.record.<field>`` (``this.rows.0.<field>`` for grouped records), or iterate
1754
+ the bare records as ``{{#each data}}``; a ``{{record.<field>}}`` left at the root
1755
+ renders empty in the body and fails the request in a relative URI or header. With
1756
+ the default batch size the shape root is ``record`` / ``rows``, ``data`` holds that
1757
+ one record, and ``batch_of_records`` is undefined.
1739
1758
  examples:
1740
1759
  - 1
1741
1760
  - 10
@@ -1830,6 +1849,7 @@ components:
1830
1849
  For composite (upsert) imports, the array is positionally aligned with method and requestType, and existingExtract decides the index used at runtime: the UPDATE index when its field has a value, the CREATE index when it is empty or missing.
1831
1850
  Reference the existing record ID in the UPDATE URI with `{{{data.0.fieldName}}}` (triple braces with the data.0 prefix).
1832
1851
  Use separate array elements per operation rather than `{{#if}}` conditionals inside a single URI.
1852
+ URI templates render strictly: a path that is undefined on the record — such as `record.<field>` on a grouped record, whose root is `rows` — fails the request instead of rendering empty.
1833
1853
  x-celigo-ai-guidance:
1834
1854
  - '**CRITICAL: This MUST be an array of strings, NOT an object.**'
1835
1855
  - |-
@@ -1999,6 +2019,23 @@ components:
1999
2019
  Avoid bare ``{{{jsonSerialize record}}}`` with no wrapper — leave the field undefined instead.
2000
2020
  Also avoid wrapping a single post-mapped scalar field in ``jsonSerialize`` (e.g.
2001
2021
  ``{{{jsonSerialize record.<scalar>}}}``) — that pattern is brittle.
2022
+ - |-
2023
+ Every request context carries two data roots: ``data`` — the list of records in
2024
+ the request, always present (Pattern B) — and ONE shape-specific root that follows
2025
+ the record entering the step. An object record is ``record``; a GROUPED record (an
2026
+ array of rows — a ``groupByFields`` export, file key columns, a NetSuite grouped
2027
+ saved search) is ``rows`` (``{{rows.0.<field>}}``, ``{{#each rows}}``,
2028
+ ``{{{jsonSerialize rows}}}``) and ``record.*`` is undefined on it; when
2029
+ ``batchSize`` exceeds 1 the shape root is ``batch_of_records`` and neither ``record``
2030
+ nor ``rows`` exists at the top level. Inside ``data`` a grouped record is itself an
2031
+ array element (``{{#each data}}{{#each this}}…{{/each}}{{/each}}``). An object record
2032
+ that carries its own ``rows`` field is still ``record`` — ``{{#each record.rows}}``.
2033
+ Here an undefined path renders empty — and ``strictHandlebarEvaluation: true`` does
2034
+ not change that (live-verified 2026-09-24 in real flow runs: an undefined
2035
+ ``{{record.<field>}}`` in the body rendered empty and the record succeeded); in
2036
+ ``relativeURI`` and ``headers[].value`` templates an undefined path always fails the
2037
+ request — a wrong root there is a runtime failure, not a blank. Verify the body's
2038
+ root against the record shape; no flag will catch it.
2002
2039
  - |-
2003
2040
  ## LEAVE UNDEFINED for the most common case
2004
2041
 
@@ -2074,10 +2111,11 @@ components:
2074
2111
  (the default) the root carries ``record`` (an object record —
2075
2112
  or the fanned-out child on a ``oneToMany`` import) or ``rows``
2076
2113
  (a grouped/array record), and ``data`` is the one-element list
2077
- of records in the request; with ``batchSize`` > 1 the root
2078
- carries ``batch_of_records`` (one ``{record: …}`` item per
2079
- record in the request) and ``data`` (the bare records), and
2080
- ``record`` / ``rows`` are ABSENT. ``oneToMany`` does not make
2114
+ of records in the request (a grouped record is that element,
2115
+ itself an array); with ``batchSize`` > 1 the root carries
2116
+ ``batch_of_records`` (one ``{record: …}`` item per object
2117
+ record, ``{rows: […]}`` for a grouped record) and ``data`` (the
2118
+ bare records), and ``record`` / ``rows`` are ABSENT. ``oneToMany`` does not make
2081
2119
  ``batch_of_records`` appear — children are batched after
2082
2120
  fan-out under the same rule.
2083
2121
 
@@ -2359,7 +2397,7 @@ components:
2359
2397
  description: Name of the HTTP header to include with each import request.
2360
2398
  value:
2361
2399
  type: string
2362
- description: Value sent for the header. Supports handlebars expressions rendered against the pre-mapped record.
2400
+ description: Value sent for the header. Supports handlebars expressions rendered against the pre-mapped record, with the same data roots as the body (`record` / `rows` / `batch_of_records`, plus `data`); an undefined path fails the request rather than rendering empty.
2363
2401
  x-celigo-agent:
2364
2402
  - handlebars
2365
2403
  x-celigo-handlebars-context: pre-mapped
package/dist/tool.yml CHANGED
@@ -12125,7 +12125,17 @@ components:
12125
12125
  description: Internal flag indicating the import was built with the legacy REST form rather than the unified HTTP framework. Set by the form; not configured directly.
12126
12126
  strictHandlebarEvaluation:
12127
12127
  type: boolean
12128
- description: When true, handlebars expressions that reference a missing field raise an error instead of rendering an empty string, surfacing mapping mistakes early rather than sending blank values.
12128
+ description: Intended to make handlebars expressions that reference a missing field raise an error instead of rendering an empty string. In live runs on an HTTP import it does not have that effect on `http.body` templates or mapping expressions — an undefined path still renders empty and the record succeeds with the flag true — and `relativeURI` / `headers[].value` templates already fail on an undefined path regardless of this flag. Not a safeguard against a wrong template root or a misspelled path.
12129
+ x-celigo-ai-guidance:
12130
+ - |-
12131
+ Do not rely on this flag to catch a mis-rooted or misspelled path. Live-verified
12132
+ 2026-09-24 on an HTTP import in real flow runs with the flag ``true``: an undefined
12133
+ ``{{record.<field>}}`` in ``http.body`` and an undefined ``{{<field>}}`` in a mapping
12134
+ expression both rendered empty and the record succeeded — the same outcome as with
12135
+ the flag ``false`` or unset. Relative URI and header templates fail on an undefined
12136
+ path regardless of this flag. To catch a wrong root, check the template against the
12137
+ record's shape (``record`` for an object, ``rows`` for a grouped record,
12138
+ ``batch_of_records`` when ``batchSize`` exceeds 1) before saving.
12129
12139
  formType:
12130
12140
  type: string
12131
12141
  enum:
@@ -12254,8 +12264,17 @@ components:
12254
12264
  description: |-
12255
12265
  Maximum number of records submitted per HTTP request, which affects throughput and API rate limiting.
12256
12266
  REST services typically send one record per request; raise it only for batch endpoints or RPC/XML services that accept multiple records, consulting the target API documentation for the optimal value.
12267
+ Above 1, the body, relative URI, and header templates render once per request against `batch_of_records` — each entry carrying that record as `record` (or `rows` for a grouped record) — and a root-level `record` or `rows` is undefined.
12257
12268
 
12258
12269
  The default varies by API.
12270
+ x-celigo-ai-guidance:
12271
+ - |-
12272
+ A batched import's templates iterate ``{{#each batch_of_records}}`` and address
12273
+ ``this.record.<field>`` (``this.rows.0.<field>`` for grouped records), or iterate
12274
+ the bare records as ``{{#each data}}``; a ``{{record.<field>}}`` left at the root
12275
+ renders empty in the body and fails the request in a relative URI or header. With
12276
+ the default batch size the shape root is ``record`` / ``rows``, ``data`` holds that
12277
+ one record, and ``batch_of_records`` is undefined.
12259
12278
  examples:
12260
12279
  - 1
12261
12280
  - 10
@@ -12350,6 +12369,7 @@ components:
12350
12369
  For composite (upsert) imports, the array is positionally aligned with method and requestType, and existingExtract decides the index used at runtime: the UPDATE index when its field has a value, the CREATE index when it is empty or missing.
12351
12370
  Reference the existing record ID in the UPDATE URI with `{{{data.0.fieldName}}}` (triple braces with the data.0 prefix).
12352
12371
  Use separate array elements per operation rather than `{{#if}}` conditionals inside a single URI.
12372
+ URI templates render strictly: a path that is undefined on the record — such as `record.<field>` on a grouped record, whose root is `rows` — fails the request instead of rendering empty.
12353
12373
  x-celigo-ai-guidance:
12354
12374
  - '**CRITICAL: This MUST be an array of strings, NOT an object.**'
12355
12375
  - |-
@@ -12519,6 +12539,23 @@ components:
12519
12539
  Avoid bare ``{{{jsonSerialize record}}}`` with no wrapper — leave the field undefined instead.
12520
12540
  Also avoid wrapping a single post-mapped scalar field in ``jsonSerialize`` (e.g.
12521
12541
  ``{{{jsonSerialize record.<scalar>}}}``) — that pattern is brittle.
12542
+ - |-
12543
+ Every request context carries two data roots: ``data`` — the list of records in
12544
+ the request, always present (Pattern B) — and ONE shape-specific root that follows
12545
+ the record entering the step. An object record is ``record``; a GROUPED record (an
12546
+ array of rows — a ``groupByFields`` export, file key columns, a NetSuite grouped
12547
+ saved search) is ``rows`` (``{{rows.0.<field>}}``, ``{{#each rows}}``,
12548
+ ``{{{jsonSerialize rows}}}``) and ``record.*`` is undefined on it; when
12549
+ ``batchSize`` exceeds 1 the shape root is ``batch_of_records`` and neither ``record``
12550
+ nor ``rows`` exists at the top level. Inside ``data`` a grouped record is itself an
12551
+ array element (``{{#each data}}{{#each this}}…{{/each}}{{/each}}``). An object record
12552
+ that carries its own ``rows`` field is still ``record`` — ``{{#each record.rows}}``.
12553
+ Here an undefined path renders empty — and ``strictHandlebarEvaluation: true`` does
12554
+ not change that (live-verified 2026-09-24 in real flow runs: an undefined
12555
+ ``{{record.<field>}}`` in the body rendered empty and the record succeeded); in
12556
+ ``relativeURI`` and ``headers[].value`` templates an undefined path always fails the
12557
+ request — a wrong root there is a runtime failure, not a blank. Verify the body's
12558
+ root against the record shape; no flag will catch it.
12522
12559
  - |-
12523
12560
  ## LEAVE UNDEFINED for the most common case
12524
12561
 
@@ -12594,10 +12631,11 @@ components:
12594
12631
  (the default) the root carries ``record`` (an object record —
12595
12632
  or the fanned-out child on a ``oneToMany`` import) or ``rows``
12596
12633
  (a grouped/array record), and ``data`` is the one-element list
12597
- of records in the request; with ``batchSize`` > 1 the root
12598
- carries ``batch_of_records`` (one ``{record: …}`` item per
12599
- record in the request) and ``data`` (the bare records), and
12600
- ``record`` / ``rows`` are ABSENT. ``oneToMany`` does not make
12634
+ of records in the request (a grouped record is that element,
12635
+ itself an array); with ``batchSize`` > 1 the root carries
12636
+ ``batch_of_records`` (one ``{record: …}`` item per object
12637
+ record, ``{rows: […]}`` for a grouped record) and ``data`` (the
12638
+ bare records), and ``record`` / ``rows`` are ABSENT. ``oneToMany`` does not make
12601
12639
  ``batch_of_records`` appear — children are batched after
12602
12640
  fan-out under the same rule.
12603
12641
 
@@ -12879,7 +12917,7 @@ components:
12879
12917
  description: Name of the HTTP header to include with each import request.
12880
12918
  value:
12881
12919
  type: string
12882
- description: Value sent for the header. Supports handlebars expressions rendered against the pre-mapped record.
12920
+ description: Value sent for the header. Supports handlebars expressions rendered against the pre-mapped record, with the same data roots as the body (`record` / `rows` / `batch_of_records`, plus `data`); an undefined path fails the request rather than rendering empty.
12883
12921
  x-celigo-agent:
12884
12922
  - handlebars
12885
12923
  x-celigo-handlebars-context: pre-mapped
@@ -24293,7 +24331,17 @@ components:
24293
24331
  When grouping is used, the export's page size determines the maximum number of groups per page, not individual
24294
24332
  records. Note that effective grouping typically requires that records with the same group field values appear
24295
24333
  together in the export data.
24334
+
24335
+ Not a webhook listener feature: on a `webhook` export the platform applies it only within each page, after
24336
+ the request has been paged, and only to adjacent rows — the field is not offered for listeners in the UI.
24296
24337
  x-celigo-ai-guidance:
24338
+ - |-
24339
+ Never set this on a webhook listener to keep a request's rows together —
24340
+ the listener pages the request's records at ``pageSize`` FIRST and then
24341
+ merges only adjacent same-key rows inside each page, so rows that cross a
24342
+ page boundary still arrive as separate records and unsorted rows are not
24343
+ grouped at all. Keep a listener's request together by having the sender
24344
+ post an object (one record) or by raising the listener's ``pageSize``.
24297
24345
  - |-
24298
24346
  A grouped record's wire shape is a BARE ARRAY of the grouped rows
24299
24347
  (``[{row}, {row}]``) — there is no ``rows`` key on the record
@@ -25418,7 +25466,10 @@ components:
25418
25466
  - csv
25419
25467
  pathToRecords:
25420
25468
  type: string
25421
- description: JSON path into the incoming payload to the array of records to emit; when omitted, the whole payload is emitted as a single record.
25469
+ description: JSON path into an object payload to the array whose elements become the records. When omitted, a top-level JSON array is emitted as one record per element and an object payload is emitted as a single record.
25470
+ x-celigo-ai-guidance:
25471
+ - 'Set this only when the records sit inside an object (`{"data": {"items": [...]}}` → `data.items`). A sender that already posts a top-level array needs nothing here; a sender that posts an object with no path configured delivers exactly one record per request — the whole object — which is also the way to make one request one record on purpose.'
25472
+ - 'Records are paged per request at the export''s `pageSize` (default 20) before any hook, filter, or downstream step runs: a 25-element array is a page of 20 records followed by a page of 5, and a `preSavePage` hook receives one page (up to `pageSize` records) per call. A hook that groups rows by order therefore groups only the rows on the same page — an order whose rows span two pages comes out as two grouped records, the second after the first was already processed. To keep a request''s rows together, have the sender wrap them in an object (one record, rows under `record.<path>`) or raise `pageSize` above the largest request — never `groupByFields`, which the listener applies per page after paging.'
25422
25473
  examples:
25423
25474
  - events
25424
25475
  - data.items
@@ -36136,6 +36187,8 @@ components:
36136
36187
  record as one response, capped at 5 MB in total, so the value does not change how many
36137
36188
  results a lookup returns; a result set larger than that belongs in a standalone export
36138
36189
  step. In a test run or preview the value also caps the records fetched (default 20).
36190
+ On a webhook listener the records of each incoming request are paged separately, before
36191
+ any hook or downstream step runs.
36139
36192
  default: 20
36140
36193
  examples:
36141
36194
  - 100
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@celigo/api-specs",
3
- "version": "0.2.51",
3
+ "version": "0.2.53",
4
4
  "private": false,
5
5
  "description": "Public OpenAPI bundles (dist/) and the celigo-cli lint schema pack (schemas.json).",
6
6
  "keywords": [
package/schemas.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "provenance": {
3
3
  "repo": "celigo/integrator-api-specs",
4
- "iasCommit": "f59fb30",
4
+ "iasCommit": "5cccadb",
5
5
  "generatedAt": "2026-09-24"
6
6
  },
7
7
  "roots": {