@celigo/api-specs 0.2.169 → 0.2.170

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.
@@ -10113,9 +10113,12 @@ components:
10113
10113
  type: array
10114
10114
  description: |-
10115
10115
  Errors recorded for the record. `source: application` with
10116
- `stage: apiCall` means the request reached the destination and its
10117
- answer was the failure; the destination's response body rides in
10118
- `message`.
10116
+ `stage: apiCall` marks the import's call to the destination. Usually
10117
+ the destination's answer was the failure, and its response body rides
10118
+ in `message`; but a request the import couldn't build carries the same
10119
+ pair and was never sent, such as a URL template that failed to render
10120
+ (`code: handlebars_template_parse_error`, "Failed to generate request
10121
+ url from template ...").
10119
10122
  items:
10120
10123
  type: object
10121
10124
  properties:
package/dist/export.yml CHANGED
@@ -6273,9 +6273,12 @@ components:
6273
6273
  request fields are interpreted. When omitted, the standard HTTP form is used.
6274
6274
  x-celigo-ai-guidance:
6275
6275
  - |-
6276
- The value changes only the editor, never the request: the same `http.body` is sent
6277
- identically under `http` and `graph_ql`, and the value can be changed on an existing
6278
- export without touching the body.
6276
+ The value picks the editor and changes one thing in a GraphQL request: under `graph_ql`
6277
+ and `assistant_graphql`, a `variables` member stored as a JSON string is parsed and sent
6278
+ as an object, while under `http` it is sent as the string. A body whose `variables` is
6279
+ already an object goes out unchanged under `graph_ql` and `http`. Live-verified 2026-10-22 with
6280
+ export previews against an echo endpoint: a string `variables` under `graph_ql`,
6281
+ `assistant_graphql` and `http`, and an object `variables` under `graph_ql` and `http`.
6279
6282
  - |-
6280
6283
  The GraphQL form reads `http.body` as the JSON envelope `{"query", "operationName",
6281
6284
  "variables"}` and shows each member in its own editor, recompiling the envelope on save
@@ -6492,9 +6495,15 @@ components:
6492
6495
  XML, etc.).
6493
6496
  - |-
6494
6497
  A GraphQL request is this field holding the stringified JSON envelope `{"query":
6495
- "<document>", "operationName": "...", "variables": ...}` whatever `formType` says;
6496
- `variables` may be an object or a JSON-encoded string, and a templated variables value
6497
- must stay inside a string so the body remains parseable JSON at rest (see `formType`).
6498
+ "<document>", "operationName": "...", "variables": ...}`. `variables` may be an object
6499
+ or a JSON-encoded string, and a string is sent as an object only under the GraphQL
6500
+ form types (see `formType`). Variables with unquoted Handlebars (a number, `null`, an
6501
+ `{{#if}}` block) must be a string so the body remains parseable JSON at rest; string
6502
+ values inside that string sit two JSON levels deep, so write them as
6503
+ `\"{{jsonEncode record.x}}\"` with double braces: a plain `{{record.x}}`, or a
6504
+ triple-brace `jsonEncode`, fails a value holding a quote with 422 `invalid_json`.
6505
+ An object or array there is `{{jsonSerialize record.x}}`, also with double braces;
6506
+ triple braces fail the same way.
6498
6507
  - |-
6499
6508
  You can use handlebars expressions to create dynamic content:
6500
6509
  ```
@@ -7318,7 +7327,7 @@ components:
7318
7327
  - response.records
7319
7328
  lastPageStatusCode:
7320
7329
  type: integer
7321
- description: HTTP status code that signals the last page, replacing the default behavior of treating 404 as the end of pagination. When this status is received, paging stops and the response is not treated as an error. Set only when the API uses a non-404 code (such as 204 or 400) to indicate no more pages.
7330
+ description: 'HTTP status code that signals the last page, replacing the default behavior of treating 404 as the end of pagination. When this status is received (any code but `200` paired with `lastPagePath`), paging stops and the response is not treated as an error. Set it when the API uses a non-404 code (such as 204 or 400) to indicate no more pages, or to `200` together with `lastPagePath` when the last page is an ordinary 200 response: then the response is parsed, its records are kept, and paging stops only when `lastPagePath` matches `lastPageValues`.'
7322
7331
  x-celigo-ai-guidance:
7323
7332
  - Specifies a custom HTTP status code that indicates the last page of results.
7324
7333
  - |-
@@ -7353,36 +7362,45 @@ components:
7353
7362
  - |-
7354
7363
  ## TECHNICAL DETAILS
7355
7364
 
7356
- When this status code is received, the system:
7365
+ When this status code is received (any code but `200` paired with
7366
+ `lastPagePath`), the system:
7357
7367
  - Stops the pagination process
7358
7368
  - Considers the data collection complete
7359
7369
  - Does not treat the response as an error
7360
7370
  - Does not attempt to process any response body
7361
7371
 
7362
7372
  IMPORTANT: Only set this if your API explicitly uses a non-404 status code
7363
- to indicate the end of pagination. Setting this incorrectly could cause
7364
- premature termination of data collection or error handling issues.
7373
+ to indicate the end of pagination, or to `200` with `lastPagePath` (below).
7374
+ Setting this incorrectly could cause premature termination of data
7375
+ collection or error handling issues.
7376
+ - |-
7377
+ `200` is the exception, for an API whose last page is an ordinary 200 response:
7378
+ together with `lastPagePath`, paging stops on the first 200 whose `lastPagePath`
7379
+ value matches `lastPageValues`, and that page's records are kept. Live-verified
7380
+ 2026-10-22 with token paging.
7365
7381
  examples:
7366
7382
  - 204
7367
7383
  - 400
7368
7384
  - 500
7369
7385
  lastPagePath:
7370
7386
  type: string
7371
- description: JSON path to a response-body field that signals the end of pagination, such as a "has more" flag or a cursor that empties on the last page. Must be used with `lastPageValues`, which lists the values at this path that stop paging. If the path does not exist in a response, the condition is not considered met.
7387
+ description: 'JSON path to a response-body field that signals the end of pagination, such as a "has more" flag or a cursor that empties on the last page. Must be used with `lastPageValues`, which lists the values at this path that stop paging. If the path does not exist in a response, the condition is not considered met. With `method: token` the path is read only on a response whose status code equals `lastPageStatusCode`, so pair it with `lastPageStatusCode: 200` for an ordinary last page; with `method: body` it is read on every response.'
7372
7388
  x-celigo-ai-guidance:
7373
7389
  - |-
7374
7390
  ## FIELD BEHAVIOR
7375
7391
 
7376
7392
  - OPTIONAL: Only needed for APIs with field-based pagination completion signals
7377
- - Works with all pagination methods
7393
+ - Accepted on all pagination methods; when it is read depends on the method (see
7394
+ the method note below)
7378
7395
  - Used in conjunction with lastPageValues
7379
7396
  - JSON path notation to a field in the response body
7380
7397
  - |-
7381
7398
  ## IMPLEMENTATION GUIDANCE
7382
7399
 
7383
7400
  This field is used when an API indicates the last page through a field
7384
- in the response body rather than using HTTP status codes. The system
7385
- checks this path in each response to determine if pagination is complete.
7401
+ in the response body rather than using HTTP status codes. Which responses
7402
+ the system checks it on depends on the paging method (see the method note
7403
+ below).
7386
7404
 
7387
7405
  Common patterns include:
7388
7406
 
@@ -7416,8 +7434,19 @@ components:
7416
7434
  "lastPageValues": ["false", "0"]
7417
7435
  ```
7418
7436
 
7419
- IMPORTANT: The path is evaluated against each response using JSON path notation.
7420
- If the path doesn't exist in the response, the condition is not considered met.
7437
+ IMPORTANT: The path is evaluated using JSON path notation, on the responses the
7438
+ method note below describes. If the path doesn't exist in the response, the
7439
+ condition is not considered met.
7440
+ - |-
7441
+ On `method: token` the path is checked only on a response whose status code equals
7442
+ `lastPageStatusCode`. For an API whose last page is an ordinary 200 (a GraphQL
7443
+ `pageInfo.hasNextPage: false`), set `lastPageStatusCode: 200` with it; without that,
7444
+ paging goes on while the token at `path` is non-empty, so a last page that still
7445
+ carries a cursor costs one more request. On `method: body` the path is read on
7446
+ every response, with no status code needed. Live-verified 2026-10-22 against an echo
7447
+ endpoint for `token` (two requests without `lastPageStatusCode`, one with 200) and
7448
+ `body` (stopped on the second response); `page`, `skip` and `url` paging were not
7449
+ verified.
7421
7450
  examples:
7422
7451
  - meta.isLastPage
7423
7452
  - pagination.hasMore
@@ -7841,22 +7870,30 @@ components:
7841
7870
  - '201'
7842
7871
  errorPath:
7843
7872
  type: string
7844
- description: Path to the error message in the response body. The value at this path is included in error logs and error records when the API returns an error.
7873
+ description: Path to the error message in the response body. The value at this path is included in error logs and error records when the API returns an error; without it, the message is the whole response body.
7845
7874
  examples:
7846
7875
  - error.message
7847
7876
  - errorMessage
7848
7877
  - errors[0].detail
7878
+ - errors[0].message
7849
7879
  failPath:
7850
7880
  type: string
7851
- description: Path to a response field that signals failure even when the HTTP status code is 200 — the inverse of `successPath`. Must be used with `failValues`.
7881
+ description: Path to a response field that signals failure even when the HTTP status code is 200 — the inverse of `successPath`. With `failValues`, the response fails when the value there matches one of them; without, when the path holds a truthy value. A path that resolves to an array matches only when the array has exactly one element.
7852
7882
  x-celigo-ai-guidance:
7883
+ - Similar to `successPath` but inverted logic — checks for failure indicators.
7853
7884
  - |-
7854
- Similar to `successPath` but inverted logic — checks for failure indicators.
7855
- Must be used together with `failValues`.
7885
+ A path that resolves to an array matches only when the array has exactly one
7886
+ element. GraphQL APIs usually report a failed query with HTTP 200 and an `errors` array:
7887
+ `failPath: errors` fails the response for one error and lets two or more through,
7888
+ so set `failPath` (and `errorPath`) to `errors[0].message`. Without a fail path the
7889
+ response counts as a success, and an export whose `resourcePath` points into
7890
+ `data` returns zero records with no error. Live-verified 2026-10-22 with export
7891
+ and import previews against an echo endpoint.
7856
7892
  examples:
7857
7893
  - error
7858
7894
  - status
7859
7895
  - result.error
7896
+ - errors[0].message
7860
7897
  failValues:
7861
7898
  type: array
7862
7899
  items:
@@ -10674,8 +10711,9 @@ components:
10674
10711
  Number of records the RESTlet returns per request (default 1000). This, not the
10675
10712
  export's `pageSize`, sizes each NetSuite call; the export keeps requesting until the
10676
10713
  search is exhausted. Larger batches reduce round-trips but raise NetSuite governance
10677
- and memory use per call; tune to the record's size. In a test run or preview the
10678
- request is capped at the export's `pageSize` (default 20) instead.
10714
+ and memory use per call; tune to the record's size. The RESTlet caps a call at 1000,
10715
+ so a larger value acts as 1000. In a test run or preview the request is capped at the
10716
+ export's `pageSize` (default 20) instead.
10679
10717
  examples:
10680
10718
  - 100
10681
10719
  - 200
@@ -10954,8 +10992,9 @@ components:
10954
10992
  type: array
10955
10993
  description: |-
10956
10994
  Search columns the RESTlet returns for each matching record. With a saved search,
10957
- omit this to return the search's own result columns; an ad-hoc search (no
10958
- `searchId`) must list its columns here.
10995
+ the RESTlet returns the search's own result columns followed by any listed here: a
10996
+ list adds columns and never removes one of the search's, so remove a column in the
10997
+ saved search itself. An ad-hoc search (no `searchId`) must list its columns here.
10959
10998
  x-celigo-ai-guidance:
10960
10999
  - |-
10961
11000
  Entries are objects keyed by `name` — `[{"name": "internalid"}, {"name":
package/dist/flow.yml CHANGED
@@ -6637,9 +6637,12 @@ components:
6637
6637
  source:
6638
6638
  type: string
6639
6639
  description: |-
6640
- Step stage or system the error came from, such as `application` (raised from the
6641
- destination's response), `connection`, a hook (`pre_save_page_hook`,
6642
- `post_response_map_hook`) or a filter (`output_filter`). `GET /v1/errors/filterMetadata`
6640
+ Step stage or system the error came from, such as `application`, `connection`, a hook
6641
+ (`pre_save_page_hook`, `post_response_map_hook`) or a filter (`output_filter`).
6642
+ `application` covers the step's whole call to the external system, not only its answer:
6643
+ besides errors the destination returned, it marks a request that never got an answer,
6644
+ such as a URL template that failed to render (`handlebars_template_parse_error`) or a
6645
+ refused connection, so read `code` and `message` with it. `GET /v1/errors/filterMetadata`
6643
6646
  lists the source values the errors filter accepts.
6644
6647
  examples:
6645
6648
  - application
package/dist/import.yml CHANGED
@@ -1572,12 +1572,25 @@ components:
1572
1572
  Use `assistant_graphql` as the default value if there is a connector available
1573
1573
  for the system and the connector supports GraphQL.
1574
1574
  - |-
1575
- The value selects the editor only. Each `http.body[]` entry stays a template STRING — a
1575
+ The value selects the editor and changes one thing in a GraphQL request: under
1576
+ `graph_ql` and `assistant_graphql`, a `variables` member stored as a JSON string is
1577
+ parsed and sent as an object, while under `http` it is sent as the string; an object
1578
+ `variables` goes out unchanged under `graph_ql` and `http`. Live-verified 2026-10-22 with import
1579
+ previews against an echo endpoint: a string `variables` under `graph_ql`,
1580
+ `assistant_graphql` and `http`, and an object `variables` under `graph_ql` and `http`.
1581
+ - |-
1582
+ Each `http.body[]` entry stays a template STRING — a
1576
1583
  stringified `{"query", "operationName", "variables"}` envelope, one per operation for the
1577
1584
  update/create pair (`http.body[0]` / `http.body[1]`); never an object entry, which is stored
1578
1585
  as-is and does not render. The GraphQL form parses that string to show each member in its
1579
1586
  own field and re-stringifies it on save; an entry that is not parseable JSON at rest renders
1580
- those fields empty, so keep templated variables inside a JSON string value.
1587
+ those fields empty, so keep templated variables inside a JSON string value. When
1588
+ `variables` is itself a JSON string, the string values inside it sit two JSON levels
1589
+ deep: write them as `\"{{jsonEncode record.x}}\"` with double braces, because a plain
1590
+ `{{record.x}}`, or a triple-brace `jsonEncode`, fails a record whose value holds a quote
1591
+ with 422 `invalid_json` before the request is sent. An object or array there is
1592
+ `{{jsonSerialize record.x}}`, also with double braces; `{{{jsonSerialize record.x}}}`
1593
+ fails the same way (live-verified 2026-10-22).
1581
1594
  - |-
1582
1595
  Create GraphQL imports on a `graph_ql` connection (or a connector connection bound to its
1583
1596
  GraphQL API): that setup offers the Form view toggle between the GraphQL editor and the
@@ -2394,13 +2407,20 @@ components:
2394
2407
 
2395
2408
  Each entry is a DOT-PATH STRING, or null for an operation
2396
2409
  with no ID path configured. When not specified, the platform
2397
- looks for standard `id` or `_id` fields automatically.
2410
+ looks for standard `id` or `_id` fields automatically. When
2411
+ set, a response with no value at the path fails the record
2412
+ with `missing_id`, quoting the response.
2398
2413
  x-celigo-ai-guidance:
2399
2414
  - |-
2400
2415
  Common LLM mistake:
2401
2416
  splitting a single dot-path like ``"data.id"`` into array segments ``["data",
2402
2417
  "id"]`` — DO NOT do this.
2403
2418
  See the ``response`` object docs above.
2419
+ - |-
2420
+ For a GraphQL mutation, point it at the id only a successful call returns
2421
+ (``["data.customerCreate.customer.id"]``): a 200 that carries top-level ``errors``
2422
+ or the mutation's ``userErrors`` then fails the record with ``missing_id`` instead
2423
+ of counting as written. Live-verified 2026-10-22 against an echo endpoint.
2404
2424
  examples:
2405
2425
  - - id
2406
2426
  - - data.id
@@ -2474,11 +2494,23 @@ components:
2474
2494
  available, set both — the platform evaluates ``successPath``
2475
2495
  first and falls through to ``failPath`` only when the
2476
2496
  success check is inconclusive.
2497
+
2498
+ Without ``failValues``, a truthy value at the path fails
2499
+ the response. A path that resolves to an array matches only
2500
+ when the array has exactly one element.
2501
+ x-celigo-ai-guidance:
2502
+ - |-
2503
+ A GraphQL API usually reports a failed mutation with HTTP 200 and an ``errors`` array, which
2504
+ counts as written when no rule catches it. ``failPath: ["errors"]`` fails the record
2505
+ for one error and lets two or more through; use ``["errors[0].message"]`` with
2506
+ ``errorPath: "errors[0].message"`` so the record fails with the server's message.
2507
+ Live-verified 2026-10-22 with import runs against an echo endpoint.
2477
2508
  examples:
2478
2509
  - - error
2479
2510
  - - success
2480
2511
  - - error
2481
2512
  - error
2513
+ - - errors[0].message
2482
2514
  failValues:
2483
2515
  type: array
2484
2516
  items:
@@ -17547,9 +17579,12 @@ components:
17547
17579
  type: array
17548
17580
  description: |-
17549
17581
  Errors recorded for the record. `source: application` with
17550
- `stage: apiCall` means the request reached the destination and its
17551
- answer was the failure; the destination's response body rides in
17552
- `message`.
17582
+ `stage: apiCall` marks the import's call to the destination. Usually
17583
+ the destination's answer was the failure, and its response body rides
17584
+ in `message`; but a request the import couldn't build carries the same
17585
+ pair and was never sent, such as a URL template that failed to render
17586
+ (`code: handlebars_template_parse_error`, "Failed to generate request
17587
+ url from template ...").
17553
17588
  items:
17554
17589
  type: object
17555
17590
  properties:
package/dist/tool.yml CHANGED
@@ -13387,12 +13387,25 @@ components:
13387
13387
  Use `assistant_graphql` as the default value if there is a connector available
13388
13388
  for the system and the connector supports GraphQL.
13389
13389
  - |-
13390
- The value selects the editor only. Each `http.body[]` entry stays a template STRING — a
13390
+ The value selects the editor and changes one thing in a GraphQL request: under
13391
+ `graph_ql` and `assistant_graphql`, a `variables` member stored as a JSON string is
13392
+ parsed and sent as an object, while under `http` it is sent as the string; an object
13393
+ `variables` goes out unchanged under `graph_ql` and `http`. Live-verified 2026-10-22 with import
13394
+ previews against an echo endpoint: a string `variables` under `graph_ql`,
13395
+ `assistant_graphql` and `http`, and an object `variables` under `graph_ql` and `http`.
13396
+ - |-
13397
+ Each `http.body[]` entry stays a template STRING — a
13391
13398
  stringified `{"query", "operationName", "variables"}` envelope, one per operation for the
13392
13399
  update/create pair (`http.body[0]` / `http.body[1]`); never an object entry, which is stored
13393
13400
  as-is and does not render. The GraphQL form parses that string to show each member in its
13394
13401
  own field and re-stringifies it on save; an entry that is not parseable JSON at rest renders
13395
- those fields empty, so keep templated variables inside a JSON string value.
13402
+ those fields empty, so keep templated variables inside a JSON string value. When
13403
+ `variables` is itself a JSON string, the string values inside it sit two JSON levels
13404
+ deep: write them as `\"{{jsonEncode record.x}}\"` with double braces, because a plain
13405
+ `{{record.x}}`, or a triple-brace `jsonEncode`, fails a record whose value holds a quote
13406
+ with 422 `invalid_json` before the request is sent. An object or array there is
13407
+ `{{jsonSerialize record.x}}`, also with double braces; `{{{jsonSerialize record.x}}}`
13408
+ fails the same way (live-verified 2026-10-22).
13396
13409
  - |-
13397
13410
  Create GraphQL imports on a `graph_ql` connection (or a connector connection bound to its
13398
13411
  GraphQL API): that setup offers the Form view toggle between the GraphQL editor and the
@@ -14209,13 +14222,20 @@ components:
14209
14222
 
14210
14223
  Each entry is a DOT-PATH STRING, or null for an operation
14211
14224
  with no ID path configured. When not specified, the platform
14212
- looks for standard `id` or `_id` fields automatically.
14225
+ looks for standard `id` or `_id` fields automatically. When
14226
+ set, a response with no value at the path fails the record
14227
+ with `missing_id`, quoting the response.
14213
14228
  x-celigo-ai-guidance:
14214
14229
  - |-
14215
14230
  Common LLM mistake:
14216
14231
  splitting a single dot-path like ``"data.id"`` into array segments ``["data",
14217
14232
  "id"]`` — DO NOT do this.
14218
14233
  See the ``response`` object docs above.
14234
+ - |-
14235
+ For a GraphQL mutation, point it at the id only a successful call returns
14236
+ (``["data.customerCreate.customer.id"]``): a 200 that carries top-level ``errors``
14237
+ or the mutation's ``userErrors`` then fails the record with ``missing_id`` instead
14238
+ of counting as written. Live-verified 2026-10-22 against an echo endpoint.
14219
14239
  examples:
14220
14240
  - - id
14221
14241
  - - data.id
@@ -14289,11 +14309,23 @@ components:
14289
14309
  available, set both — the platform evaluates ``successPath``
14290
14310
  first and falls through to ``failPath`` only when the
14291
14311
  success check is inconclusive.
14312
+
14313
+ Without ``failValues``, a truthy value at the path fails
14314
+ the response. A path that resolves to an array matches only
14315
+ when the array has exactly one element.
14316
+ x-celigo-ai-guidance:
14317
+ - |-
14318
+ A GraphQL API usually reports a failed mutation with HTTP 200 and an ``errors`` array, which
14319
+ counts as written when no rule catches it. ``failPath: ["errors"]`` fails the record
14320
+ for one error and lets two or more through; use ``["errors[0].message"]`` with
14321
+ ``errorPath: "errors[0].message"`` so the record fails with the server's message.
14322
+ Live-verified 2026-10-22 with import runs against an echo endpoint.
14292
14323
  examples:
14293
14324
  - - error
14294
14325
  - - success
14295
14326
  - - error
14296
14327
  - error
14328
+ - - errors[0].message
14297
14329
  failValues:
14298
14330
  type: array
14299
14331
  items:
@@ -30955,9 +30987,12 @@ components:
30955
30987
  request fields are interpreted. When omitted, the standard HTTP form is used.
30956
30988
  x-celigo-ai-guidance:
30957
30989
  - |-
30958
- The value changes only the editor, never the request: the same `http.body` is sent
30959
- identically under `http` and `graph_ql`, and the value can be changed on an existing
30960
- export without touching the body.
30990
+ The value picks the editor and changes one thing in a GraphQL request: under `graph_ql`
30991
+ and `assistant_graphql`, a `variables` member stored as a JSON string is parsed and sent
30992
+ as an object, while under `http` it is sent as the string. A body whose `variables` is
30993
+ already an object goes out unchanged under `graph_ql` and `http`. Live-verified 2026-10-22 with
30994
+ export previews against an echo endpoint: a string `variables` under `graph_ql`,
30995
+ `assistant_graphql` and `http`, and an object `variables` under `graph_ql` and `http`.
30961
30996
  - |-
30962
30997
  The GraphQL form reads `http.body` as the JSON envelope `{"query", "operationName",
30963
30998
  "variables"}` and shows each member in its own editor, recompiling the envelope on save
@@ -31174,9 +31209,15 @@ components:
31174
31209
  XML, etc.).
31175
31210
  - |-
31176
31211
  A GraphQL request is this field holding the stringified JSON envelope `{"query":
31177
- "<document>", "operationName": "...", "variables": ...}` whatever `formType` says;
31178
- `variables` may be an object or a JSON-encoded string, and a templated variables value
31179
- must stay inside a string so the body remains parseable JSON at rest (see `formType`).
31212
+ "<document>", "operationName": "...", "variables": ...}`. `variables` may be an object
31213
+ or a JSON-encoded string, and a string is sent as an object only under the GraphQL
31214
+ form types (see `formType`). Variables with unquoted Handlebars (a number, `null`, an
31215
+ `{{#if}}` block) must be a string so the body remains parseable JSON at rest; string
31216
+ values inside that string sit two JSON levels deep, so write them as
31217
+ `\"{{jsonEncode record.x}}\"` with double braces: a plain `{{record.x}}`, or a
31218
+ triple-brace `jsonEncode`, fails a value holding a quote with 422 `invalid_json`.
31219
+ An object or array there is `{{jsonSerialize record.x}}`, also with double braces;
31220
+ triple braces fail the same way.
31180
31221
  - |-
31181
31222
  You can use handlebars expressions to create dynamic content:
31182
31223
  ```
@@ -32000,7 +32041,7 @@ components:
32000
32041
  - response.records
32001
32042
  lastPageStatusCode:
32002
32043
  type: integer
32003
- description: HTTP status code that signals the last page, replacing the default behavior of treating 404 as the end of pagination. When this status is received, paging stops and the response is not treated as an error. Set only when the API uses a non-404 code (such as 204 or 400) to indicate no more pages.
32044
+ description: 'HTTP status code that signals the last page, replacing the default behavior of treating 404 as the end of pagination. When this status is received (any code but `200` paired with `lastPagePath`), paging stops and the response is not treated as an error. Set it when the API uses a non-404 code (such as 204 or 400) to indicate no more pages, or to `200` together with `lastPagePath` when the last page is an ordinary 200 response: then the response is parsed, its records are kept, and paging stops only when `lastPagePath` matches `lastPageValues`.'
32004
32045
  x-celigo-ai-guidance:
32005
32046
  - Specifies a custom HTTP status code that indicates the last page of results.
32006
32047
  - |-
@@ -32035,36 +32076,45 @@ components:
32035
32076
  - |-
32036
32077
  ## TECHNICAL DETAILS
32037
32078
 
32038
- When this status code is received, the system:
32079
+ When this status code is received (any code but `200` paired with
32080
+ `lastPagePath`), the system:
32039
32081
  - Stops the pagination process
32040
32082
  - Considers the data collection complete
32041
32083
  - Does not treat the response as an error
32042
32084
  - Does not attempt to process any response body
32043
32085
 
32044
32086
  IMPORTANT: Only set this if your API explicitly uses a non-404 status code
32045
- to indicate the end of pagination. Setting this incorrectly could cause
32046
- premature termination of data collection or error handling issues.
32087
+ to indicate the end of pagination, or to `200` with `lastPagePath` (below).
32088
+ Setting this incorrectly could cause premature termination of data
32089
+ collection or error handling issues.
32090
+ - |-
32091
+ `200` is the exception, for an API whose last page is an ordinary 200 response:
32092
+ together with `lastPagePath`, paging stops on the first 200 whose `lastPagePath`
32093
+ value matches `lastPageValues`, and that page's records are kept. Live-verified
32094
+ 2026-10-22 with token paging.
32047
32095
  examples:
32048
32096
  - 204
32049
32097
  - 400
32050
32098
  - 500
32051
32099
  lastPagePath:
32052
32100
  type: string
32053
- description: JSON path to a response-body field that signals the end of pagination, such as a "has more" flag or a cursor that empties on the last page. Must be used with `lastPageValues`, which lists the values at this path that stop paging. If the path does not exist in a response, the condition is not considered met.
32101
+ description: 'JSON path to a response-body field that signals the end of pagination, such as a "has more" flag or a cursor that empties on the last page. Must be used with `lastPageValues`, which lists the values at this path that stop paging. If the path does not exist in a response, the condition is not considered met. With `method: token` the path is read only on a response whose status code equals `lastPageStatusCode`, so pair it with `lastPageStatusCode: 200` for an ordinary last page; with `method: body` it is read on every response.'
32054
32102
  x-celigo-ai-guidance:
32055
32103
  - |-
32056
32104
  ## FIELD BEHAVIOR
32057
32105
 
32058
32106
  - OPTIONAL: Only needed for APIs with field-based pagination completion signals
32059
- - Works with all pagination methods
32107
+ - Accepted on all pagination methods; when it is read depends on the method (see
32108
+ the method note below)
32060
32109
  - Used in conjunction with lastPageValues
32061
32110
  - JSON path notation to a field in the response body
32062
32111
  - |-
32063
32112
  ## IMPLEMENTATION GUIDANCE
32064
32113
 
32065
32114
  This field is used when an API indicates the last page through a field
32066
- in the response body rather than using HTTP status codes. The system
32067
- checks this path in each response to determine if pagination is complete.
32115
+ in the response body rather than using HTTP status codes. Which responses
32116
+ the system checks it on depends on the paging method (see the method note
32117
+ below).
32068
32118
 
32069
32119
  Common patterns include:
32070
32120
 
@@ -32098,8 +32148,19 @@ components:
32098
32148
  "lastPageValues": ["false", "0"]
32099
32149
  ```
32100
32150
 
32101
- IMPORTANT: The path is evaluated against each response using JSON path notation.
32102
- If the path doesn't exist in the response, the condition is not considered met.
32151
+ IMPORTANT: The path is evaluated using JSON path notation, on the responses the
32152
+ method note below describes. If the path doesn't exist in the response, the
32153
+ condition is not considered met.
32154
+ - |-
32155
+ On `method: token` the path is checked only on a response whose status code equals
32156
+ `lastPageStatusCode`. For an API whose last page is an ordinary 200 (a GraphQL
32157
+ `pageInfo.hasNextPage: false`), set `lastPageStatusCode: 200` with it; without that,
32158
+ paging goes on while the token at `path` is non-empty, so a last page that still
32159
+ carries a cursor costs one more request. On `method: body` the path is read on
32160
+ every response, with no status code needed. Live-verified 2026-10-22 against an echo
32161
+ endpoint for `token` (two requests without `lastPageStatusCode`, one with 200) and
32162
+ `body` (stopped on the second response); `page`, `skip` and `url` paging were not
32163
+ verified.
32103
32164
  examples:
32104
32165
  - meta.isLastPage
32105
32166
  - pagination.hasMore
@@ -32523,22 +32584,30 @@ components:
32523
32584
  - '201'
32524
32585
  errorPath:
32525
32586
  type: string
32526
- description: Path to the error message in the response body. The value at this path is included in error logs and error records when the API returns an error.
32587
+ description: Path to the error message in the response body. The value at this path is included in error logs and error records when the API returns an error; without it, the message is the whole response body.
32527
32588
  examples:
32528
32589
  - error.message
32529
32590
  - errorMessage
32530
32591
  - errors[0].detail
32592
+ - errors[0].message
32531
32593
  failPath:
32532
32594
  type: string
32533
- description: Path to a response field that signals failure even when the HTTP status code is 200 — the inverse of `successPath`. Must be used with `failValues`.
32595
+ description: Path to a response field that signals failure even when the HTTP status code is 200 — the inverse of `successPath`. With `failValues`, the response fails when the value there matches one of them; without, when the path holds a truthy value. A path that resolves to an array matches only when the array has exactly one element.
32534
32596
  x-celigo-ai-guidance:
32535
- - |-
32536
- Similar to `successPath` but inverted logic — checks for failure indicators.
32537
- Must be used together with `failValues`.
32597
+ - Similar to `successPath` but inverted logic — checks for failure indicators.
32598
+ - |-
32599
+ A path that resolves to an array matches only when the array has exactly one
32600
+ element. GraphQL APIs usually report a failed query with HTTP 200 and an `errors` array:
32601
+ `failPath: errors` fails the response for one error and lets two or more through,
32602
+ so set `failPath` (and `errorPath`) to `errors[0].message`. Without a fail path the
32603
+ response counts as a success, and an export whose `resourcePath` points into
32604
+ `data` returns zero records with no error. Live-verified 2026-10-22 with export
32605
+ and import previews against an echo endpoint.
32538
32606
  examples:
32539
32607
  - error
32540
32608
  - status
32541
32609
  - result.error
32610
+ - errors[0].message
32542
32611
  failValues:
32543
32612
  type: array
32544
32613
  items:
@@ -35356,8 +35425,9 @@ components:
35356
35425
  Number of records the RESTlet returns per request (default 1000). This, not the
35357
35426
  export's `pageSize`, sizes each NetSuite call; the export keeps requesting until the
35358
35427
  search is exhausted. Larger batches reduce round-trips but raise NetSuite governance
35359
- and memory use per call; tune to the record's size. In a test run or preview the
35360
- request is capped at the export's `pageSize` (default 20) instead.
35428
+ and memory use per call; tune to the record's size. The RESTlet caps a call at 1000,
35429
+ so a larger value acts as 1000. In a test run or preview the request is capped at the
35430
+ export's `pageSize` (default 20) instead.
35361
35431
  examples:
35362
35432
  - 100
35363
35433
  - 200
@@ -35636,8 +35706,9 @@ components:
35636
35706
  type: array
35637
35707
  description: |-
35638
35708
  Search columns the RESTlet returns for each matching record. With a saved search,
35639
- omit this to return the search's own result columns; an ad-hoc search (no
35640
- `searchId`) must list its columns here.
35709
+ the RESTlet returns the search's own result columns followed by any listed here: a
35710
+ list adds columns and never removes one of the search's, so remove a column in the
35711
+ saved search itself. An ad-hoc search (no `searchId`) must list its columns here.
35641
35712
  x-celigo-ai-guidance:
35642
35713
  - |-
35643
35714
  Entries are objects keyed by `name` — `[{"name": "internalid"}, {"name":
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@celigo/api-specs",
3
- "version": "0.2.169",
3
+ "version": "0.2.170",
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": "750b2035",
4
+ "iasCommit": "f57db462",
5
5
  "generatedAt": "2026-10-22"
6
6
  },
7
7
  "roots": {