@celigo/api-specs 0.2.168 → 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.
- package/dist/api.yml +11 -2
- package/dist/connection.yml +34 -12
- package/dist/enduser.yml +11 -2
- package/dist/eventreport.yml +43 -16
- package/dist/export.yml +63 -24
- package/dist/flow.yml +6 -3
- package/dist/import.yml +41 -6
- package/dist/mcp-server.yml +11 -2
- package/dist/state.yml +33 -10
- package/dist/tool.yml +110 -30
- package/package.json +1 -1
- package/schemas.json +1 -1
package/dist/api.yml
CHANGED
|
@@ -5932,6 +5932,14 @@ components:
|
|
|
5932
5932
|
Do NOT include the protocol prefix (e.g., use "ftp.example.com", not "sftp://ftp.example.com").
|
|
5933
5933
|
examples:
|
|
5934
5934
|
- sftp.example.com
|
|
5935
|
+
x-celigo-ai-guidance:
|
|
5936
|
+
- |-
|
|
5937
|
+
Don't point a connection at this environment's own Celigo file server (its
|
|
5938
|
+
`endpoint.hostname`, with a username ending in `@<identifier>`, the server's own
|
|
5939
|
+
`identifier`): a flow reads those files from Celigo Storage directly, and the save
|
|
5940
|
+
refuses that pairing with 422 `fileserver_loopback_not_supported`. Another
|
|
5941
|
+
environment's file server on the same host, such as a trading partner's, is an
|
|
5942
|
+
ordinary connection.
|
|
5935
5943
|
port:
|
|
5936
5944
|
type: number
|
|
5937
5945
|
description: |
|
|
@@ -6055,7 +6063,8 @@ components:
|
|
|
6055
6063
|
description: |
|
|
6056
6064
|
Maximum number of concurrent file transfer operations.
|
|
6057
6065
|
FTP servers often have low connection limits — keep this value conservative.
|
|
6058
|
-
Send no more than the account's licensed maximum (25 standard,
|
|
6066
|
+
Send no more than the account's licensed maximum, the license's `concurrency` (25 standard,
|
|
6067
|
+
50 with an Environments license).
|
|
6059
6068
|
Unlike the rest of the `ftp` object, a `PUT` that omits this field keeps the stored value instead of clearing it.
|
|
6060
6069
|
minimum: 1
|
|
6061
6070
|
maximum: 50
|
|
@@ -6079,7 +6088,7 @@ components:
|
|
|
6079
6088
|
description: |-
|
|
6080
6089
|
Number of parallel transfer threads for this FTP connection. Must be a
|
|
6081
6090
|
whole number — decimals are rejected on save. Send no more than the
|
|
6082
|
-
account's licensed concurrency maximum
|
|
6091
|
+
account's licensed concurrency maximum, the same as for `concurrencyLevel`. On
|
|
6083
6092
|
save the value is mirrored into `userConcurrencyLevel` (and into
|
|
6084
6093
|
`userTargetConcurrencyLevel` when auto-recovery of rate-limit errors
|
|
6085
6094
|
is active with `targetConcurrencyLevel` set); clearing it clears the
|
package/dist/connection.yml
CHANGED
|
@@ -1185,7 +1185,8 @@ paths:
|
|
|
1185
1185
|
`POST /v1/connections/{_id}/ping`, with no request body to send. Runs the adaptor's ping
|
|
1186
1186
|
routine against the connection identified by `_id` to verify its credentials and network
|
|
1187
1187
|
configuration still work; no data is read, written, or modified. An `http` connection with
|
|
1188
|
-
no `http.ping` answers `{code: 200}` without sending any request
|
|
1188
|
+
no `http.ping` answers `{code: 200}` without sending any request, unless it authorizes with
|
|
1189
|
+
an authorization code and holds no token yet: that one answers `missing_token`.
|
|
1189
1190
|
|
|
1190
1191
|
Inspect the response body, not the HTTP status, to determine the outcome: success and
|
|
1191
1192
|
adaptor-level failures both return HTTP 200 — success is `{code: 200}`, failures are
|
|
@@ -1259,8 +1260,10 @@ paths:
|
|
|
1259
1260
|
whichever verb the client supports. Both verbs return HTTP 200 with {code: 200} on
|
|
1260
1261
|
success and HTTP 200 with {errors: [...]} on adaptor-level failure, so inspect the body,
|
|
1261
1262
|
not the status code. On an `http` connection, {code: 200} shows reachability only once
|
|
1262
|
-
`http.ping` is set: with no ping configured, nothing is sent and the answer is
|
|
1263
|
-
{code: 200}
|
|
1263
|
+
`http.ping` is set: with no ping configured, nothing is sent and the answer is
|
|
1264
|
+
{code: 200}, or `missing_token` for an authorization-code OAuth connection that holds no
|
|
1265
|
+
token yet. An OAuth connection requests a token only when the target answers 401, so a
|
|
1266
|
+
ping of an endpoint that needs no authentication passes without testing the OAuth setup.
|
|
1264
1267
|
post:
|
|
1265
1268
|
x-internal: false
|
|
1266
1269
|
summary: Ping an existing connection
|
|
@@ -1270,8 +1273,11 @@ paths:
|
|
|
1270
1273
|
adaptor-specific (HTTP sends the `http.ping` request, RDBMS/JDBC open a driver session,
|
|
1271
1274
|
MCP issues a tools/list, NetSuite/Salesforce do a token or session validation). An `http`
|
|
1272
1275
|
connection with no `http.ping` passes with `{code: 200}` without sending any request, so
|
|
1273
|
-
the ping proves nothing about it until a ping is configured
|
|
1274
|
-
and
|
|
1276
|
+
the ping proves nothing about it until a ping is configured; one that authorizes with an
|
|
1277
|
+
authorization code and holds no token yet answers `missing_token` instead. An OAuth
|
|
1278
|
+
connection requests a token only when the target answers 401, so a ping of an endpoint
|
|
1279
|
+
that needs no authentication passes without testing the OAuth setup. The request body
|
|
1280
|
+
is optional and ignored.
|
|
1275
1281
|
|
|
1276
1282
|
Inspect the response body, not the HTTP status, to determine the outcome: success and
|
|
1277
1283
|
adaptor-level failures both return HTTP 200 — success is `{code: 200}`, failures are
|
|
@@ -1383,8 +1389,10 @@ paths:
|
|
|
1383
1389
|
- Return connection status and any error details
|
|
1384
1390
|
|
|
1385
1391
|
Exception: an `http` connection with no `http.ping` answers {code: 200} without sending
|
|
1386
|
-
any request
|
|
1387
|
-
|
|
1392
|
+
any request (or `missing_token`, for an authorization-code OAuth connection that holds no
|
|
1393
|
+
token yet), so it proves nothing until a ping is configured — one that needs the
|
|
1394
|
+
connection's credentials, since an OAuth connection requests a token only when the target
|
|
1395
|
+
answers 401.
|
|
1388
1396
|
/v1/connections/{_id}/proxy:
|
|
1389
1397
|
post:
|
|
1390
1398
|
x-internal: false
|
|
@@ -2942,6 +2950,8 @@ paths:
|
|
|
2942
2950
|
`/v1/connections/{_id}/oauth2` is an alias that answers identically. The URL's
|
|
2943
2951
|
`state` token is one-time and expires quickly, so request a fresh one if the flow is
|
|
2944
2952
|
interrupted, then poll `GET /v1/connections/{_id}` until `needsAuthorization` is `false`.
|
|
2953
|
+
On a connection that uses PKCE (an iClient with `oauth2.pkceCodeChallengeMethod`), each call
|
|
2954
|
+
issues a new `code_challenge`, so send the user to the most recent URL only.
|
|
2945
2955
|
|
|
2946
2956
|
The URL's `redirect_uri` is the account's Celigo callback
|
|
2947
2957
|
(`https://integrator.io/connection/oauth2callback` on North America), which the provider's
|
|
@@ -4780,6 +4790,14 @@ components:
|
|
|
4780
4790
|
Do NOT include the protocol prefix (e.g., use "ftp.example.com", not "sftp://ftp.example.com").
|
|
4781
4791
|
examples:
|
|
4782
4792
|
- sftp.example.com
|
|
4793
|
+
x-celigo-ai-guidance:
|
|
4794
|
+
- |-
|
|
4795
|
+
Don't point a connection at this environment's own Celigo file server (its
|
|
4796
|
+
`endpoint.hostname`, with a username ending in `@<identifier>`, the server's own
|
|
4797
|
+
`identifier`): a flow reads those files from Celigo Storage directly, and the save
|
|
4798
|
+
refuses that pairing with 422 `fileserver_loopback_not_supported`. Another
|
|
4799
|
+
environment's file server on the same host, such as a trading partner's, is an
|
|
4800
|
+
ordinary connection.
|
|
4783
4801
|
port:
|
|
4784
4802
|
type: number
|
|
4785
4803
|
description: |
|
|
@@ -4903,7 +4921,8 @@ components:
|
|
|
4903
4921
|
description: |
|
|
4904
4922
|
Maximum number of concurrent file transfer operations.
|
|
4905
4923
|
FTP servers often have low connection limits — keep this value conservative.
|
|
4906
|
-
Send no more than the account's licensed maximum (25 standard,
|
|
4924
|
+
Send no more than the account's licensed maximum, the license's `concurrency` (25 standard,
|
|
4925
|
+
50 with an Environments license).
|
|
4907
4926
|
Unlike the rest of the `ftp` object, a `PUT` that omits this field keeps the stored value instead of clearing it.
|
|
4908
4927
|
minimum: 1
|
|
4909
4928
|
maximum: 50
|
|
@@ -4927,7 +4946,7 @@ components:
|
|
|
4927
4946
|
description: |-
|
|
4928
4947
|
Number of parallel transfer threads for this FTP connection. Must be a
|
|
4929
4948
|
whole number — decimals are rejected on save. Send no more than the
|
|
4930
|
-
account's licensed concurrency maximum
|
|
4949
|
+
account's licensed concurrency maximum, the same as for `concurrencyLevel`. On
|
|
4931
4950
|
save the value is mirrored into `userConcurrencyLevel` (and into
|
|
4932
4951
|
`userTargetConcurrencyLevel` when auto-recovery of rate-limit errors
|
|
4933
4952
|
is active with `targetConcurrencyLevel` set); clearing it clears the
|
|
@@ -10094,9 +10113,12 @@ components:
|
|
|
10094
10113
|
type: array
|
|
10095
10114
|
description: |-
|
|
10096
10115
|
Errors recorded for the record. `source: application` with
|
|
10097
|
-
`stage: apiCall`
|
|
10098
|
-
answer was the failure
|
|
10099
|
-
`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 ...").
|
|
10100
10122
|
items:
|
|
10101
10123
|
type: object
|
|
10102
10124
|
properties:
|
package/dist/enduser.yml
CHANGED
|
@@ -2847,6 +2847,14 @@ components:
|
|
|
2847
2847
|
Do NOT include the protocol prefix (e.g., use "ftp.example.com", not "sftp://ftp.example.com").
|
|
2848
2848
|
examples:
|
|
2849
2849
|
- sftp.example.com
|
|
2850
|
+
x-celigo-ai-guidance:
|
|
2851
|
+
- |-
|
|
2852
|
+
Don't point a connection at this environment's own Celigo file server (its
|
|
2853
|
+
`endpoint.hostname`, with a username ending in `@<identifier>`, the server's own
|
|
2854
|
+
`identifier`): a flow reads those files from Celigo Storage directly, and the save
|
|
2855
|
+
refuses that pairing with 422 `fileserver_loopback_not_supported`. Another
|
|
2856
|
+
environment's file server on the same host, such as a trading partner's, is an
|
|
2857
|
+
ordinary connection.
|
|
2850
2858
|
port:
|
|
2851
2859
|
type: number
|
|
2852
2860
|
description: |
|
|
@@ -2970,7 +2978,8 @@ components:
|
|
|
2970
2978
|
description: |
|
|
2971
2979
|
Maximum number of concurrent file transfer operations.
|
|
2972
2980
|
FTP servers often have low connection limits — keep this value conservative.
|
|
2973
|
-
Send no more than the account's licensed maximum (25 standard,
|
|
2981
|
+
Send no more than the account's licensed maximum, the license's `concurrency` (25 standard,
|
|
2982
|
+
50 with an Environments license).
|
|
2974
2983
|
Unlike the rest of the `ftp` object, a `PUT` that omits this field keeps the stored value instead of clearing it.
|
|
2975
2984
|
minimum: 1
|
|
2976
2985
|
maximum: 50
|
|
@@ -2994,7 +3003,7 @@ components:
|
|
|
2994
3003
|
description: |-
|
|
2995
3004
|
Number of parallel transfer threads for this FTP connection. Must be a
|
|
2996
3005
|
whole number — decimals are rejected on save. Send no more than the
|
|
2997
|
-
account's licensed concurrency maximum
|
|
3006
|
+
account's licensed concurrency maximum, the same as for `concurrencyLevel`. On
|
|
2998
3007
|
save the value is mirrored into `userConcurrencyLevel` (and into
|
|
2999
3008
|
`userTargetConcurrencyLevel` when auto-recovery of rate-limit errors
|
|
3000
3009
|
is active with `targetConcurrencyLevel` set); clearing it clears the
|
package/dist/eventreport.yml
CHANGED
|
@@ -43,8 +43,9 @@ paths:
|
|
|
43
43
|
`startTime` must be within the last 30 days and the span to `endTime` must not exceed 3 days.
|
|
44
44
|
If `endTime` is omitted, the server defaults it to the current time. Poll
|
|
45
45
|
`GET /v1/eventreports/{_id}` until `status` is `completed`, then download the CSV via
|
|
46
|
-
`GET /v1/eventreports/{_id}/signedURL
|
|
47
|
-
subsequent GET responses replace this with the
|
|
46
|
+
`GET /v1/eventreports/{_id}/signedURL`; generation can take several minutes. The create
|
|
47
|
+
response includes `_requestedByUserId`; subsequent GET responses replace this with the
|
|
48
|
+
`requestedByUser` object (name + email).
|
|
48
49
|
requestBody:
|
|
49
50
|
required: true
|
|
50
51
|
content:
|
|
@@ -94,7 +95,42 @@ paths:
|
|
|
94
95
|
'401':
|
|
95
96
|
$ref: '#/components/responses/401-unauthorized'
|
|
96
97
|
'422':
|
|
97
|
-
|
|
98
|
+
description: |-
|
|
99
|
+
The window is out of bounds -- `startTime` more than 30 days back, `endTime` before
|
|
100
|
+
`startTime`, or a span over 3 days -- or `_flowIds` is empty. No report is created.
|
|
101
|
+
content:
|
|
102
|
+
application/json:
|
|
103
|
+
schema:
|
|
104
|
+
$ref: '#/components/schemas/Error'
|
|
105
|
+
examples:
|
|
106
|
+
span_over_three_days:
|
|
107
|
+
summary: Window longer than 3 days
|
|
108
|
+
value:
|
|
109
|
+
errors:
|
|
110
|
+
- field: endTime
|
|
111
|
+
code: invalid_range
|
|
112
|
+
message: For event report, the time gap between start and end time can't exceed 3 days.
|
|
113
|
+
start_over_thirty_days:
|
|
114
|
+
summary: Start more than 30 days back
|
|
115
|
+
value:
|
|
116
|
+
errors:
|
|
117
|
+
- field: startTime
|
|
118
|
+
code: invalid_starttime
|
|
119
|
+
message: The start time for the event report can't go beyond 30 days.
|
|
120
|
+
end_before_start:
|
|
121
|
+
summary: endTime before startTime
|
|
122
|
+
value:
|
|
123
|
+
errors:
|
|
124
|
+
- field: startTime
|
|
125
|
+
code: invalid_range
|
|
126
|
+
message: The end time can't be before than start time.
|
|
127
|
+
no_flows:
|
|
128
|
+
summary: Empty _flowIds
|
|
129
|
+
value:
|
|
130
|
+
errors:
|
|
131
|
+
- field: type
|
|
132
|
+
code: invalid_flowevents
|
|
133
|
+
message: Please select the flows for which the flow event report needs to be generated.
|
|
98
134
|
get:
|
|
99
135
|
x-internal: false
|
|
100
136
|
operationId: listEventReports
|
|
@@ -227,6 +263,10 @@ paths:
|
|
|
227
263
|
The URL is valid for approximately 15 minutes. Only works when the report `status` is
|
|
228
264
|
`completed` -- requesting it in any other status returns 400. If the URL has expired,
|
|
229
265
|
call this endpoint again to get a fresh one.
|
|
266
|
+
|
|
267
|
+
The file is served with `Content-Encoding: gzip`, so download it with a client that decodes
|
|
268
|
+
it (`curl --compressed`) or gunzip it afterwards. Its columns start `traceKey`, `time`,
|
|
269
|
+
`type`, `timeTaken`, `_flowJobId`.
|
|
230
270
|
parameters:
|
|
231
271
|
- name: _id
|
|
232
272
|
in: path
|
|
@@ -670,19 +710,6 @@ components:
|
|
|
670
710
|
errors:
|
|
671
711
|
- code: invalid_request
|
|
672
712
|
message: The request body failed validation.
|
|
673
|
-
422-unprocessable-entity:
|
|
674
|
-
description: |
|
|
675
|
-
Unprocessable entity. The request was well-formed but was unable to be followed due to semantic errors.
|
|
676
|
-
content:
|
|
677
|
-
application/json:
|
|
678
|
-
schema:
|
|
679
|
-
$ref: '#/components/schemas/Error'
|
|
680
|
-
examples:
|
|
681
|
-
default:
|
|
682
|
-
value:
|
|
683
|
-
errors:
|
|
684
|
-
- code: unprocessable_entity
|
|
685
|
-
message: The request could not be processed due to a semantic error.
|
|
686
713
|
404-not-found:
|
|
687
714
|
description: |
|
|
688
715
|
Not found. The requested resource does not exist or is not visible to the caller.
|
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
|
|
6277
|
-
|
|
6278
|
-
|
|
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": ...}
|
|
6496
|
-
|
|
6497
|
-
|
|
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
|
|
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
|
|
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
|
|
7364
|
-
|
|
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
|
-
-
|
|
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.
|
|
7385
|
-
checks
|
|
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
|
|
7420
|
-
If the path doesn't exist in the response, the
|
|
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`.
|
|
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
|
-
|
|
7855
|
-
|
|
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.
|
|
10678
|
-
|
|
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
|
-
|
|
10958
|
-
|
|
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`
|
|
6641
|
-
|
|
6642
|
-
`
|
|
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
|
|
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`
|
|
17551
|
-
answer was the failure
|
|
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/mcp-server.yml
CHANGED
|
@@ -4679,6 +4679,14 @@ components:
|
|
|
4679
4679
|
Do NOT include the protocol prefix (e.g., use "ftp.example.com", not "sftp://ftp.example.com").
|
|
4680
4680
|
examples:
|
|
4681
4681
|
- sftp.example.com
|
|
4682
|
+
x-celigo-ai-guidance:
|
|
4683
|
+
- |-
|
|
4684
|
+
Don't point a connection at this environment's own Celigo file server (its
|
|
4685
|
+
`endpoint.hostname`, with a username ending in `@<identifier>`, the server's own
|
|
4686
|
+
`identifier`): a flow reads those files from Celigo Storage directly, and the save
|
|
4687
|
+
refuses that pairing with 422 `fileserver_loopback_not_supported`. Another
|
|
4688
|
+
environment's file server on the same host, such as a trading partner's, is an
|
|
4689
|
+
ordinary connection.
|
|
4682
4690
|
port:
|
|
4683
4691
|
type: number
|
|
4684
4692
|
description: |
|
|
@@ -4802,7 +4810,8 @@ components:
|
|
|
4802
4810
|
description: |
|
|
4803
4811
|
Maximum number of concurrent file transfer operations.
|
|
4804
4812
|
FTP servers often have low connection limits — keep this value conservative.
|
|
4805
|
-
Send no more than the account's licensed maximum (25 standard,
|
|
4813
|
+
Send no more than the account's licensed maximum, the license's `concurrency` (25 standard,
|
|
4814
|
+
50 with an Environments license).
|
|
4806
4815
|
Unlike the rest of the `ftp` object, a `PUT` that omits this field keeps the stored value instead of clearing it.
|
|
4807
4816
|
minimum: 1
|
|
4808
4817
|
maximum: 50
|
|
@@ -4826,7 +4835,7 @@ components:
|
|
|
4826
4835
|
description: |-
|
|
4827
4836
|
Number of parallel transfer threads for this FTP connection. Must be a
|
|
4828
4837
|
whole number — decimals are rejected on save. Send no more than the
|
|
4829
|
-
account's licensed concurrency maximum
|
|
4838
|
+
account's licensed concurrency maximum, the same as for `concurrencyLevel`. On
|
|
4830
4839
|
save the value is mirrored into `userConcurrencyLevel` (and into
|
|
4831
4840
|
`userTargetConcurrencyLevel` when auto-recovery of rate-limit errors
|
|
4832
4841
|
is active with `targetConcurrencyLevel` set); clearing it clears the
|
package/dist/state.yml
CHANGED
|
@@ -35,6 +35,10 @@ tags:
|
|
|
35
35
|
Values must be non-empty JSON objects or arrays. Bare primitives,
|
|
36
36
|
`null`, and empty containers (`{}`, `[]`) are rejected.
|
|
37
37
|
|
|
38
|
+
Each export, import or integration holds at most 10 keys, and the
|
|
39
|
+
global scope at most 100. A new key past the limit is refused with 422
|
|
40
|
+
`limit_reached`; replacing an existing key still works.
|
|
41
|
+
|
|
38
42
|
Prefer resource-scoped state over global state when the data belongs
|
|
39
43
|
to a specific export, import, or integration. State keys are upserted —
|
|
40
44
|
PUT creates if absent, replaces if present. There is no PATCH; send the
|
|
@@ -243,15 +247,25 @@ paths:
|
|
|
243
247
|
'422':
|
|
244
248
|
description: |-
|
|
245
249
|
The request body is empty, or is an empty container (`{}` or
|
|
246
|
-
`[]`)
|
|
250
|
+
`[]`), or the key is new and the account already holds 100 global
|
|
251
|
+
keys.
|
|
247
252
|
content:
|
|
248
253
|
application/json:
|
|
249
254
|
schema:
|
|
250
255
|
$ref: '#/components/schemas/Error'
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
256
|
+
examples:
|
|
257
|
+
missing_request_body:
|
|
258
|
+
summary: Empty body or empty container
|
|
259
|
+
value:
|
|
260
|
+
errors:
|
|
261
|
+
- code: missing_request_body
|
|
262
|
+
message: Please send state as request body in the PUT request.
|
|
263
|
+
limit_reached:
|
|
264
|
+
summary: The account already holds 100 global keys
|
|
265
|
+
value:
|
|
266
|
+
errors:
|
|
267
|
+
- code: limit_reached
|
|
268
|
+
message: 'Cannot save state, allowed number of states already reached for user : 60f1a2b3c4d5e6f7a8b9c0d1'
|
|
255
269
|
delete:
|
|
256
270
|
x-internal: false
|
|
257
271
|
operationId: deleteGlobalStateKey
|
|
@@ -710,15 +724,24 @@ paths:
|
|
|
710
724
|
'422':
|
|
711
725
|
description: |-
|
|
712
726
|
The request body is empty, or is an empty container (`{}` or
|
|
713
|
-
`[]`).
|
|
727
|
+
`[]`), or the key is new and the resource already holds 10 keys.
|
|
714
728
|
content:
|
|
715
729
|
application/json:
|
|
716
730
|
schema:
|
|
717
731
|
$ref: '#/components/schemas/Error'
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
732
|
+
examples:
|
|
733
|
+
missing_request_body:
|
|
734
|
+
summary: Empty body or empty container
|
|
735
|
+
value:
|
|
736
|
+
errors:
|
|
737
|
+
- code: missing_request_body
|
|
738
|
+
message: Please send state as request body in the PUT request.
|
|
739
|
+
limit_reached:
|
|
740
|
+
summary: The resource already holds 10 keys
|
|
741
|
+
value:
|
|
742
|
+
errors:
|
|
743
|
+
- code: limit_reached
|
|
744
|
+
message: 'Cannot save state, allowed number of states already reached for export : 66a1f2c3b4d5e6f7a8b9c0d1'
|
|
722
745
|
delete:
|
|
723
746
|
x-internal: false
|
|
724
747
|
operationId: deleteResourceStateKey
|
package/dist/tool.yml
CHANGED
|
@@ -8187,6 +8187,14 @@ components:
|
|
|
8187
8187
|
Do NOT include the protocol prefix (e.g., use "ftp.example.com", not "sftp://ftp.example.com").
|
|
8188
8188
|
examples:
|
|
8189
8189
|
- sftp.example.com
|
|
8190
|
+
x-celigo-ai-guidance:
|
|
8191
|
+
- |-
|
|
8192
|
+
Don't point a connection at this environment's own Celigo file server (its
|
|
8193
|
+
`endpoint.hostname`, with a username ending in `@<identifier>`, the server's own
|
|
8194
|
+
`identifier`): a flow reads those files from Celigo Storage directly, and the save
|
|
8195
|
+
refuses that pairing with 422 `fileserver_loopback_not_supported`. Another
|
|
8196
|
+
environment's file server on the same host, such as a trading partner's, is an
|
|
8197
|
+
ordinary connection.
|
|
8190
8198
|
port:
|
|
8191
8199
|
type: number
|
|
8192
8200
|
description: |
|
|
@@ -8310,7 +8318,8 @@ components:
|
|
|
8310
8318
|
description: |
|
|
8311
8319
|
Maximum number of concurrent file transfer operations.
|
|
8312
8320
|
FTP servers often have low connection limits — keep this value conservative.
|
|
8313
|
-
Send no more than the account's licensed maximum (25 standard,
|
|
8321
|
+
Send no more than the account's licensed maximum, the license's `concurrency` (25 standard,
|
|
8322
|
+
50 with an Environments license).
|
|
8314
8323
|
Unlike the rest of the `ftp` object, a `PUT` that omits this field keeps the stored value instead of clearing it.
|
|
8315
8324
|
minimum: 1
|
|
8316
8325
|
maximum: 50
|
|
@@ -8334,7 +8343,7 @@ components:
|
|
|
8334
8343
|
description: |-
|
|
8335
8344
|
Number of parallel transfer threads for this FTP connection. Must be a
|
|
8336
8345
|
whole number — decimals are rejected on save. Send no more than the
|
|
8337
|
-
account's licensed concurrency maximum
|
|
8346
|
+
account's licensed concurrency maximum, the same as for `concurrencyLevel`. On
|
|
8338
8347
|
save the value is mirrored into `userConcurrencyLevel` (and into
|
|
8339
8348
|
`userTargetConcurrencyLevel` when auto-recovery of rate-limit errors
|
|
8340
8349
|
is active with `targetConcurrencyLevel` set); clearing it clears the
|
|
@@ -13378,12 +13387,25 @@ components:
|
|
|
13378
13387
|
Use `assistant_graphql` as the default value if there is a connector available
|
|
13379
13388
|
for the system and the connector supports GraphQL.
|
|
13380
13389
|
- |-
|
|
13381
|
-
The value selects the editor
|
|
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
|
|
13382
13398
|
stringified `{"query", "operationName", "variables"}` envelope, one per operation for the
|
|
13383
13399
|
update/create pair (`http.body[0]` / `http.body[1]`); never an object entry, which is stored
|
|
13384
13400
|
as-is and does not render. The GraphQL form parses that string to show each member in its
|
|
13385
13401
|
own field and re-stringifies it on save; an entry that is not parseable JSON at rest renders
|
|
13386
|
-
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).
|
|
13387
13409
|
- |-
|
|
13388
13410
|
Create GraphQL imports on a `graph_ql` connection (or a connector connection bound to its
|
|
13389
13411
|
GraphQL API): that setup offers the Form view toggle between the GraphQL editor and the
|
|
@@ -14200,13 +14222,20 @@ components:
|
|
|
14200
14222
|
|
|
14201
14223
|
Each entry is a DOT-PATH STRING, or null for an operation
|
|
14202
14224
|
with no ID path configured. When not specified, the platform
|
|
14203
|
-
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.
|
|
14204
14228
|
x-celigo-ai-guidance:
|
|
14205
14229
|
- |-
|
|
14206
14230
|
Common LLM mistake:
|
|
14207
14231
|
splitting a single dot-path like ``"data.id"`` into array segments ``["data",
|
|
14208
14232
|
"id"]`` — DO NOT do this.
|
|
14209
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.
|
|
14210
14239
|
examples:
|
|
14211
14240
|
- - id
|
|
14212
14241
|
- - data.id
|
|
@@ -14280,11 +14309,23 @@ components:
|
|
|
14280
14309
|
available, set both — the platform evaluates ``successPath``
|
|
14281
14310
|
first and falls through to ``failPath`` only when the
|
|
14282
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.
|
|
14283
14323
|
examples:
|
|
14284
14324
|
- - error
|
|
14285
14325
|
- - success
|
|
14286
14326
|
- - error
|
|
14287
14327
|
- error
|
|
14328
|
+
- - errors[0].message
|
|
14288
14329
|
failValues:
|
|
14289
14330
|
type: array
|
|
14290
14331
|
items:
|
|
@@ -30946,9 +30987,12 @@ components:
|
|
|
30946
30987
|
request fields are interpreted. When omitted, the standard HTTP form is used.
|
|
30947
30988
|
x-celigo-ai-guidance:
|
|
30948
30989
|
- |-
|
|
30949
|
-
The value
|
|
30950
|
-
|
|
30951
|
-
|
|
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`.
|
|
30952
30996
|
- |-
|
|
30953
30997
|
The GraphQL form reads `http.body` as the JSON envelope `{"query", "operationName",
|
|
30954
30998
|
"variables"}` and shows each member in its own editor, recompiling the envelope on save
|
|
@@ -31165,9 +31209,15 @@ components:
|
|
|
31165
31209
|
XML, etc.).
|
|
31166
31210
|
- |-
|
|
31167
31211
|
A GraphQL request is this field holding the stringified JSON envelope `{"query":
|
|
31168
|
-
"<document>", "operationName": "...", "variables": ...}
|
|
31169
|
-
|
|
31170
|
-
|
|
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.
|
|
31171
31221
|
- |-
|
|
31172
31222
|
You can use handlebars expressions to create dynamic content:
|
|
31173
31223
|
```
|
|
@@ -31991,7 +32041,7 @@ components:
|
|
|
31991
32041
|
- response.records
|
|
31992
32042
|
lastPageStatusCode:
|
|
31993
32043
|
type: integer
|
|
31994
|
-
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
|
|
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`.'
|
|
31995
32045
|
x-celigo-ai-guidance:
|
|
31996
32046
|
- Specifies a custom HTTP status code that indicates the last page of results.
|
|
31997
32047
|
- |-
|
|
@@ -32026,36 +32076,45 @@ components:
|
|
|
32026
32076
|
- |-
|
|
32027
32077
|
## TECHNICAL DETAILS
|
|
32028
32078
|
|
|
32029
|
-
When this status code is received
|
|
32079
|
+
When this status code is received (any code but `200` paired with
|
|
32080
|
+
`lastPagePath`), the system:
|
|
32030
32081
|
- Stops the pagination process
|
|
32031
32082
|
- Considers the data collection complete
|
|
32032
32083
|
- Does not treat the response as an error
|
|
32033
32084
|
- Does not attempt to process any response body
|
|
32034
32085
|
|
|
32035
32086
|
IMPORTANT: Only set this if your API explicitly uses a non-404 status code
|
|
32036
|
-
to indicate the end of pagination
|
|
32037
|
-
|
|
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.
|
|
32038
32095
|
examples:
|
|
32039
32096
|
- 204
|
|
32040
32097
|
- 400
|
|
32041
32098
|
- 500
|
|
32042
32099
|
lastPagePath:
|
|
32043
32100
|
type: string
|
|
32044
|
-
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.'
|
|
32045
32102
|
x-celigo-ai-guidance:
|
|
32046
32103
|
- |-
|
|
32047
32104
|
## FIELD BEHAVIOR
|
|
32048
32105
|
|
|
32049
32106
|
- OPTIONAL: Only needed for APIs with field-based pagination completion signals
|
|
32050
|
-
-
|
|
32107
|
+
- Accepted on all pagination methods; when it is read depends on the method (see
|
|
32108
|
+
the method note below)
|
|
32051
32109
|
- Used in conjunction with lastPageValues
|
|
32052
32110
|
- JSON path notation to a field in the response body
|
|
32053
32111
|
- |-
|
|
32054
32112
|
## IMPLEMENTATION GUIDANCE
|
|
32055
32113
|
|
|
32056
32114
|
This field is used when an API indicates the last page through a field
|
|
32057
|
-
in the response body rather than using HTTP status codes.
|
|
32058
|
-
checks
|
|
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).
|
|
32059
32118
|
|
|
32060
32119
|
Common patterns include:
|
|
32061
32120
|
|
|
@@ -32089,8 +32148,19 @@ components:
|
|
|
32089
32148
|
"lastPageValues": ["false", "0"]
|
|
32090
32149
|
```
|
|
32091
32150
|
|
|
32092
|
-
IMPORTANT: The path is evaluated
|
|
32093
|
-
If the path doesn't exist in the response, the
|
|
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.
|
|
32094
32164
|
examples:
|
|
32095
32165
|
- meta.isLastPage
|
|
32096
32166
|
- pagination.hasMore
|
|
@@ -32514,22 +32584,30 @@ components:
|
|
|
32514
32584
|
- '201'
|
|
32515
32585
|
errorPath:
|
|
32516
32586
|
type: string
|
|
32517
|
-
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.
|
|
32518
32588
|
examples:
|
|
32519
32589
|
- error.message
|
|
32520
32590
|
- errorMessage
|
|
32521
32591
|
- errors[0].detail
|
|
32592
|
+
- errors[0].message
|
|
32522
32593
|
failPath:
|
|
32523
32594
|
type: string
|
|
32524
|
-
description: Path to a response field that signals failure even when the HTTP status code is 200 — the inverse of `successPath`.
|
|
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.
|
|
32525
32596
|
x-celigo-ai-guidance:
|
|
32526
|
-
-
|
|
32527
|
-
|
|
32528
|
-
|
|
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.
|
|
32529
32606
|
examples:
|
|
32530
32607
|
- error
|
|
32531
32608
|
- status
|
|
32532
32609
|
- result.error
|
|
32610
|
+
- errors[0].message
|
|
32533
32611
|
failValues:
|
|
32534
32612
|
type: array
|
|
32535
32613
|
items:
|
|
@@ -35347,8 +35425,9 @@ components:
|
|
|
35347
35425
|
Number of records the RESTlet returns per request (default 1000). This, not the
|
|
35348
35426
|
export's `pageSize`, sizes each NetSuite call; the export keeps requesting until the
|
|
35349
35427
|
search is exhausted. Larger batches reduce round-trips but raise NetSuite governance
|
|
35350
|
-
and memory use per call; tune to the record's size.
|
|
35351
|
-
|
|
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.
|
|
35352
35431
|
examples:
|
|
35353
35432
|
- 100
|
|
35354
35433
|
- 200
|
|
@@ -35627,8 +35706,9 @@ components:
|
|
|
35627
35706
|
type: array
|
|
35628
35707
|
description: |-
|
|
35629
35708
|
Search columns the RESTlet returns for each matching record. With a saved search,
|
|
35630
|
-
|
|
35631
|
-
|
|
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.
|
|
35632
35712
|
x-celigo-ai-guidance:
|
|
35633
35713
|
- |-
|
|
35634
35714
|
Entries are objects keyed by `name` — `[{"name": "internalid"}, {"name":
|
package/package.json
CHANGED