@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 +16 -1
- package/dist/import.yml +44 -6
- package/dist/tool.yml +60 -7
- package/package.json +1 -1
- package/schemas.json +1 -1
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
|
|
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:
|
|
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
|
|
2078
|
-
|
|
2079
|
-
|
|
2080
|
-
|
|
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:
|
|
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
|
|
12598
|
-
|
|
12599
|
-
|
|
12600
|
-
|
|
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
|
|
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