@celigo/api-specs 0.2.152 → 0.2.154

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/ai-agent.yml CHANGED
@@ -2410,6 +2410,12 @@ components:
2410
2410
  - Examples: '$.customer.firstName', '$.items[0].price', '$.addresses[*].street',
2411
2411
  '$[*].Tax' (every row of a grouped record)
2412
2412
  - Wildcards like [*] extract multiple values/objects
2413
+ - A key that contains a dot needs bracket notation: `$['P.O. Number']` (or
2414
+ `$["P.O. Number"]`, `$.[P.O. Number]`). `$.P.O. Number` is read as a nested
2415
+ path: it maps nothing and the record still succeeds. Spaces, hyphens and `#`
2416
+ need no brackets (`$.Ship To Name`, `$.Tracking #`)
2417
+ - Filter expressions such as `$.items[?(@.active)]` fail the record with
2418
+ "Eval [?(expr)] prevented in JSONPath expression."
2413
2419
 
2414
2420
  ```json
2415
2421
  "extract": "$.customer.addresses[*]" // Extracts all addresses
@@ -2598,6 +2604,12 @@ components:
2598
2604
  **Usage**
2599
2605
 
2600
2606
  The lookupName refers to a named lookup defined in the lookups array of the same resource.
2607
+ On an HTTP import that is `http.lookups`: a `lookups` array sent only at the top level
2608
+ is dropped on save. On an import, a name that matches no lookup fails every record
2609
+ with "Unable to find lookup in mapping configs - <name>", and a key the lookup
2610
+ doesn't hold follows the lookup's `allowFailures`: false fails the record; true, or
2611
+ the field left out, lets the record succeed with the lookup's `default`, or without
2612
+ the mapped field when there is none.
2601
2613
 
2602
2614
  ```json
2603
2615
  {
@@ -2935,6 +2947,11 @@ components:
2935
2947
  The system creates special composite objects during processing to maintain
2936
2948
  hierarchical relationships, allowing easy access to both the current array item
2937
2949
  and its parent contexts.
2950
+
2951
+ An iterating entry keeps the `[*]`: `$.line_items` without it yields one empty
2952
+ element per item, with no error. Child extracts drop the `[*]` but keep the
2953
+ array's path (`$.line_items.sku`); `$.line_items[*].sku` maps nothing, and an
2954
+ element-relative `$.sku` reads the record root instead of the element.
2938
2955
  examples:
2939
2956
  - $.items[*]
2940
2957
  - $.order.lineItems[*]
@@ -3146,14 +3163,17 @@ components:
3146
3163
  type: string
3147
3164
  description: |
3148
3165
  **Purpose**
3149
- Required on every mapping entry. Controls whether the mapping is applied.
3166
+ Controls whether the mapping is applied. Send it on every mapping entry.
3150
3167
 
3151
3168
  **Guidance**
3152
3169
  Only `Active` rows run. `Draft` and `Inactive` rows keep their
3153
3170
  configuration, are saved with minimal validation, and are skipped at
3154
3171
  runtime and in preview; a non-Active parent skips its whole subtree
3155
- whatever its children say. The API rejects a mapping missing this field
3156
- (validation error: "Mapping object must have status field present.").
3172
+ whatever its children say. Imports (on save and in the mapper processor)
3173
+ and API response mappings reject a row missing this field (validation
3174
+ error: "Mapping object must have status field present."); a Tool's
3175
+ output mapping saves and runs one, which is why `required` doesn't
3176
+ list it.
3157
3177
  x-celigo-ai-guidance:
3158
3178
  - |-
3159
3179
  Emit `"Active"` for mappings that should run; `"Draft"` is also
@@ -3476,6 +3496,12 @@ components:
3476
3496
  - Examples: '$.customer.firstName', '$.items[0].price', '$.addresses[*].street',
3477
3497
  '$[*].Tax' (every row of a grouped record)
3478
3498
  - Wildcards like [*] extract multiple values/objects
3499
+ - A key that contains a dot needs bracket notation: `$['P.O. Number']` (or
3500
+ `$["P.O. Number"]`, `$.[P.O. Number]`). `$.P.O. Number` is read as a nested
3501
+ path: it maps nothing and the record still succeeds. Spaces, hyphens and `#`
3502
+ need no brackets (`$.Ship To Name`, `$.Tracking #`)
3503
+ - Filter expressions such as `$.items[?(@.active)]` fail the record with
3504
+ "Eval [?(expr)] prevented in JSONPath expression."
3479
3505
 
3480
3506
  ```json
3481
3507
  "extract": "$.customer.addresses[*]" // Extracts all addresses
@@ -3664,6 +3690,12 @@ components:
3664
3690
  **Usage**
3665
3691
 
3666
3692
  The lookupName refers to a named lookup defined in the lookups array of the same resource.
3693
+ On an HTTP import that is `http.lookups`: a `lookups` array sent only at the top level
3694
+ is dropped on save. On an import, a name that matches no lookup fails every record
3695
+ with "Unable to find lookup in mapping configs - <name>", and a key the lookup
3696
+ doesn't hold follows the lookup's `allowFailures`: false fails the record; true, or
3697
+ the field left out, lets the record succeed with the lookup's `default`, or without
3698
+ the mapped field when there is none.
3667
3699
 
3668
3700
  ```json
3669
3701
  {
@@ -4001,6 +4033,11 @@ components:
4001
4033
  The system creates special composite objects during processing to maintain
4002
4034
  hierarchical relationships, allowing easy access to both the current array item
4003
4035
  and its parent contexts.
4036
+
4037
+ An iterating entry keeps the `[*]`: `$.line_items` without it yields one empty
4038
+ element per item, with no error. Child extracts drop the `[*]` but keep the
4039
+ array's path (`$.line_items.sku`); `$.line_items[*].sku` maps nothing, and an
4040
+ element-relative `$.sku` reads the record root instead of the element.
4004
4041
  examples:
4005
4042
  - $.items[*]
4006
4043
  - $.order.lineItems[*]
@@ -4212,14 +4249,17 @@ components:
4212
4249
  type: string
4213
4250
  description: |
4214
4251
  **Purpose**
4215
- Required on every mapping entry. Controls whether the mapping is applied.
4252
+ Controls whether the mapping is applied. Send it on every mapping entry.
4216
4253
 
4217
4254
  **Guidance**
4218
4255
  Only `Active` rows run. `Draft` and `Inactive` rows keep their
4219
4256
  configuration, are saved with minimal validation, and are skipped at
4220
4257
  runtime and in preview; a non-Active parent skips its whole subtree
4221
- whatever its children say. The API rejects a mapping missing this field
4222
- (validation error: "Mapping object must have status field present.").
4258
+ whatever its children say. Imports (on save and in the mapper processor)
4259
+ and API response mappings reject a row missing this field (validation
4260
+ error: "Mapping object must have status field present."); a Tool's
4261
+ output mapping saves and runs one, which is why `required` doesn't
4262
+ list it.
4223
4263
  x-celigo-ai-guidance:
4224
4264
  - |-
4225
4265
  Emit `"Active"` for mappings that should run; `"Draft"` is also
@@ -5213,8 +5253,8 @@ components:
5213
5253
  - Original value indicators: "{Original Value}", "No mapping found"
5214
5254
  - Neutral values: "Other", "N/A", "Miscellaneous"
5215
5255
 
5216
- If allowFailures is false and no default is specified, the flow will fail
5217
- when encountering unmapped values.
5256
+ If allowFailures is false, a record whose value is unmapped fails and the default
5257
+ is ignored.
5218
5258
  examples:
5219
5259
  - Unknown
5220
5260
  - Other
@@ -5235,7 +5275,11 @@ components:
5235
5275
  This field determines how the system handles source values that don't exist in the map:
5236
5276
 
5237
5277
  - true: Use the default value for missing mappings and continue processing
5238
- - false: Treat missing mappings as errors, failing the record
5278
+ - false: Treat missing mappings as errors, failing the record (`lookup_error` for a
5279
+ static map, `lookupcache_evaluation_failed` for a lookup cache)
5280
+ - omitted or null: the record doesn't fail either. On an import a static lookup writes
5281
+ its default if it has one, and a static or cache lookup without one leaves the
5282
+ mapped field out of the output, with no error
5239
5283
 
5240
5284
  **Recommendation**
5241
5285
 
@@ -5249,11 +5293,14 @@ components:
5249
5293
  - All possible source values are known and controlled
5250
5294
  - Missing mappings indicate serious data problems that should be addressed
5251
5295
 
5252
- The best practice is typically to set allowFailures to true with a meaningful
5253
- default value, so flows remain operational while alerting you to missing mappings.
5296
+ A default raises no error: records that miss go out with the default value and
5297
+ nothing reports them. Use true only when that fallback is acceptable at the
5298
+ destination, and set false explicitly when a missing value must stop the record.
5254
5299
  examples:
5255
5300
  - true
5256
5301
  - false
5302
+ x-celigo-ai-guidance:
5303
+ - 'Never leave this field out to mean "fail on a miss": on an import, an omitted or null value lets a missing key through without an error (with the default, or without the mapped field when there is none). Only an explicit false fails the record.'
5257
5304
  Transform:
5258
5305
  type: object
5259
5306
  description: |
package/dist/api.yml CHANGED
@@ -5258,7 +5258,7 @@ components:
5258
5258
  connection's traffic counts against the referenced connection's limit instead of its own,
5259
5259
  and its own concurrency and auto-recovery settings have no effect. One level only: the
5260
5260
  referenced connection may not itself borrow, and a connection that others borrow from
5261
- cannot start borrowing.
5261
+ cannot start borrowing. A connection cannot reference itself (422).
5262
5262
  examples:
5263
5263
  - 615dfa0742763671275b70ab
5264
5264
  x-celigo-ai-guidance:
@@ -5295,16 +5295,21 @@ components:
5295
5295
  type: boolean
5296
5296
  description: |-
5297
5297
  When true, the connection has been taken offline and is skipped during flow execution.
5298
- The platform tests the connection after a create or `PUT` and updates this shortly
5299
- afterwards (the audit log records a `system` change; `lastModified` doesn't move), so
5300
- read it again a few seconds after the write.
5298
+ It is set by the connection test a create or `PUT` runs: the result arrives in the
5299
+ write's response or, when the target is slow to answer, shortly afterwards (the audit
5300
+ log records a `system` change; `lastModified` doesn't move), so read it again a few
5301
+ seconds after the write. On an `http` connection the write runs the test only when
5302
+ `http.ping` is configured, and an `http` connection that was never tested has no
5303
+ `offline` key.
5301
5304
  readOnly: true
5302
5305
  needsAuthorization:
5303
5306
  type: boolean
5304
5307
  readOnly: true
5305
5308
  description: |-
5306
5309
  OAuth handshake state. Celigo's OAuth callback sets it to `false` once the user consents
5307
- and the tokens are stored (see `GET /v1/connection/{_id}/oauth2`).
5310
+ and the tokens are stored (see `GET /v1/connection/{_id}/oauth2`). A connection that
5311
+ was never authorized usually has no `needsAuthorization` key, so its absence does not
5312
+ mean the connection is authorized.
5308
5313
  _sourceId:
5309
5314
  type: string
5310
5315
  format: objectId
@@ -6279,15 +6284,18 @@ components:
6279
6284
  clientId:
6280
6285
  type: string
6281
6286
  description: |
6282
- OAuth client ID (application ID) registered with the API provider.
6283
- Required for all OAuth 2.0 grant types.
6287
+ OAuth client ID (application ID) registered with the API provider. An `http`
6288
+ connection takes the app from a `custom_oauth2` iClient referenced by `http._iClientId`
6289
+ (an `mcp` connection from `mcp.http._iClientId`) and doesn't store this field: a create
6290
+ that sends `clientId` and `clientSecret` here answers 201 without either (and stores
6291
+ `useIClientFields: true` unless `false` is sent).
6284
6292
  examples:
6285
6293
  - 0oa1b2c3d4EXAMPLE5
6286
6294
  clientSecret:
6287
6295
  type: string
6288
6296
  description: |
6289
- OAuth client secret (encrypted at rest).
6290
- Required for "authorizecode" and "clientcredentials" grant types.
6297
+ OAuth client secret (encrypted at rest). Not stored on an `http` connection: the secret
6298
+ belongs on the iClient (see `clientId`).
6291
6299
  writeOnly: true
6292
6300
  examples:
6293
6301
  - cs_abc123EXAMPLE456secret
@@ -6503,9 +6511,11 @@ components:
6503
6511
  - "authorizecode" — Authorization Code flow (browser-based user consent).
6504
6512
  Requires authURI, tokenURI, and user authorization via browser.
6505
6513
  - "clientcredentials" — Client Credentials flow (server-to-server, no user).
6506
- Requires tokenURI, clientId, clientSecret.
6514
+ Requires tokenURI.
6507
6515
  - "password" — Resource Owner Password flow (username/password exchange).
6508
- Requires tokenURI, username, password, clientId, clientSecret.
6516
+ Requires tokenURI, username, password.
6517
+ - On an `http` connection the client ID and secret are never stored here: a
6518
+ `custom_oauth2` iClient referenced by `http._iClientId` supplies them.
6509
6519
  JWT:
6510
6520
  type: object
6511
6521
  description: |-
@@ -619,6 +619,12 @@ components:
619
619
  - Examples: '$.customer.firstName', '$.items[0].price', '$.addresses[*].street',
620
620
  '$[*].Tax' (every row of a grouped record)
621
621
  - Wildcards like [*] extract multiple values/objects
622
+ - A key that contains a dot needs bracket notation: `$['P.O. Number']` (or
623
+ `$["P.O. Number"]`, `$.[P.O. Number]`). `$.P.O. Number` is read as a nested
624
+ path: it maps nothing and the record still succeeds. Spaces, hyphens and `#`
625
+ need no brackets (`$.Ship To Name`, `$.Tracking #`)
626
+ - Filter expressions such as `$.items[?(@.active)]` fail the record with
627
+ "Eval [?(expr)] prevented in JSONPath expression."
622
628
 
623
629
  ```json
624
630
  "extract": "$.customer.addresses[*]" // Extracts all addresses
@@ -807,6 +813,12 @@ components:
807
813
  **Usage**
808
814
 
809
815
  The lookupName refers to a named lookup defined in the lookups array of the same resource.
816
+ On an HTTP import that is `http.lookups`: a `lookups` array sent only at the top level
817
+ is dropped on save. On an import, a name that matches no lookup fails every record
818
+ with "Unable to find lookup in mapping configs - <name>", and a key the lookup
819
+ doesn't hold follows the lookup's `allowFailures`: false fails the record; true, or
820
+ the field left out, lets the record succeed with the lookup's `default`, or without
821
+ the mapped field when there is none.
810
822
 
811
823
  ```json
812
824
  {
@@ -1144,6 +1156,11 @@ components:
1144
1156
  The system creates special composite objects during processing to maintain
1145
1157
  hierarchical relationships, allowing easy access to both the current array item
1146
1158
  and its parent contexts.
1159
+
1160
+ An iterating entry keeps the `[*]`: `$.line_items` without it yields one empty
1161
+ element per item, with no error. Child extracts drop the `[*]` but keep the
1162
+ array's path (`$.line_items.sku`); `$.line_items[*].sku` maps nothing, and an
1163
+ element-relative `$.sku` reads the record root instead of the element.
1147
1164
  examples:
1148
1165
  - $.items[*]
1149
1166
  - $.order.lineItems[*]
@@ -1355,14 +1372,17 @@ components:
1355
1372
  type: string
1356
1373
  description: |
1357
1374
  **Purpose**
1358
- Required on every mapping entry. Controls whether the mapping is applied.
1375
+ Controls whether the mapping is applied. Send it on every mapping entry.
1359
1376
 
1360
1377
  **Guidance**
1361
1378
  Only `Active` rows run. `Draft` and `Inactive` rows keep their
1362
1379
  configuration, are saved with minimal validation, and are skipped at
1363
1380
  runtime and in preview; a non-Active parent skips its whole subtree
1364
- whatever its children say. The API rejects a mapping missing this field
1365
- (validation error: "Mapping object must have status field present.").
1381
+ whatever its children say. Imports (on save and in the mapper processor)
1382
+ and API response mappings reject a row missing this field (validation
1383
+ error: "Mapping object must have status field present."); a Tool's
1384
+ output mapping saves and runs one, which is why `required` doesn't
1385
+ list it.
1366
1386
  x-celigo-ai-guidance:
1367
1387
  - |-
1368
1388
  Emit `"Active"` for mappings that should run; `"Draft"` is also
@@ -1685,6 +1705,12 @@ components:
1685
1705
  - Examples: '$.customer.firstName', '$.items[0].price', '$.addresses[*].street',
1686
1706
  '$[*].Tax' (every row of a grouped record)
1687
1707
  - Wildcards like [*] extract multiple values/objects
1708
+ - A key that contains a dot needs bracket notation: `$['P.O. Number']` (or
1709
+ `$["P.O. Number"]`, `$.[P.O. Number]`). `$.P.O. Number` is read as a nested
1710
+ path: it maps nothing and the record still succeeds. Spaces, hyphens and `#`
1711
+ need no brackets (`$.Ship To Name`, `$.Tracking #`)
1712
+ - Filter expressions such as `$.items[?(@.active)]` fail the record with
1713
+ "Eval [?(expr)] prevented in JSONPath expression."
1688
1714
 
1689
1715
  ```json
1690
1716
  "extract": "$.customer.addresses[*]" // Extracts all addresses
@@ -1873,6 +1899,12 @@ components:
1873
1899
  **Usage**
1874
1900
 
1875
1901
  The lookupName refers to a named lookup defined in the lookups array of the same resource.
1902
+ On an HTTP import that is `http.lookups`: a `lookups` array sent only at the top level
1903
+ is dropped on save. On an import, a name that matches no lookup fails every record
1904
+ with "Unable to find lookup in mapping configs - <name>", and a key the lookup
1905
+ doesn't hold follows the lookup's `allowFailures`: false fails the record; true, or
1906
+ the field left out, lets the record succeed with the lookup's `default`, or without
1907
+ the mapped field when there is none.
1876
1908
 
1877
1909
  ```json
1878
1910
  {
@@ -2210,6 +2242,11 @@ components:
2210
2242
  The system creates special composite objects during processing to maintain
2211
2243
  hierarchical relationships, allowing easy access to both the current array item
2212
2244
  and its parent contexts.
2245
+
2246
+ An iterating entry keeps the `[*]`: `$.line_items` without it yields one empty
2247
+ element per item, with no error. Child extracts drop the `[*]` but keep the
2248
+ array's path (`$.line_items.sku`); `$.line_items[*].sku` maps nothing, and an
2249
+ element-relative `$.sku` reads the record root instead of the element.
2213
2250
  examples:
2214
2251
  - $.items[*]
2215
2252
  - $.order.lineItems[*]
@@ -2421,14 +2458,17 @@ components:
2421
2458
  type: string
2422
2459
  description: |
2423
2460
  **Purpose**
2424
- Required on every mapping entry. Controls whether the mapping is applied.
2461
+ Controls whether the mapping is applied. Send it on every mapping entry.
2425
2462
 
2426
2463
  **Guidance**
2427
2464
  Only `Active` rows run. `Draft` and `Inactive` rows keep their
2428
2465
  configuration, are saved with minimal validation, and are skipped at
2429
2466
  runtime and in preview; a non-Active parent skips its whole subtree
2430
- whatever its children say. The API rejects a mapping missing this field
2431
- (validation error: "Mapping object must have status field present.").
2467
+ whatever its children say. Imports (on save and in the mapper processor)
2468
+ and API response mappings reject a row missing this field (validation
2469
+ error: "Mapping object must have status field present."); a Tool's
2470
+ output mapping saves and runs one, which is why `required` doesn't
2471
+ list it.
2432
2472
  x-celigo-ai-guidance:
2433
2473
  - |-
2434
2474
  Emit `"Active"` for mappings that should run; `"Draft"` is also
@@ -2799,8 +2839,8 @@ components:
2799
2839
  - Original value indicators: "{Original Value}", "No mapping found"
2800
2840
  - Neutral values: "Other", "N/A", "Miscellaneous"
2801
2841
 
2802
- If allowFailures is false and no default is specified, the flow will fail
2803
- when encountering unmapped values.
2842
+ If allowFailures is false, a record whose value is unmapped fails and the default
2843
+ is ignored.
2804
2844
  examples:
2805
2845
  - Unknown
2806
2846
  - Other
@@ -2821,7 +2861,11 @@ components:
2821
2861
  This field determines how the system handles source values that don't exist in the map:
2822
2862
 
2823
2863
  - true: Use the default value for missing mappings and continue processing
2824
- - false: Treat missing mappings as errors, failing the record
2864
+ - false: Treat missing mappings as errors, failing the record (`lookup_error` for a
2865
+ static map, `lookupcache_evaluation_failed` for a lookup cache)
2866
+ - omitted or null: the record doesn't fail either. On an import a static lookup writes
2867
+ its default if it has one, and a static or cache lookup without one leaves the
2868
+ mapped field out of the output, with no error
2825
2869
 
2826
2870
  **Recommendation**
2827
2871
 
@@ -2835,11 +2879,14 @@ components:
2835
2879
  - All possible source values are known and controlled
2836
2880
  - Missing mappings indicate serious data problems that should be addressed
2837
2881
 
2838
- The best practice is typically to set allowFailures to true with a meaningful
2839
- default value, so flows remain operational while alerting you to missing mappings.
2882
+ A default raises no error: records that miss go out with the default value and
2883
+ nothing reports them. Use true only when that fallback is acceptable at the
2884
+ destination, and set false explicitly when a missing value must stop the record.
2840
2885
  examples:
2841
2886
  - true
2842
2887
  - false
2888
+ x-celigo-ai-guidance:
2889
+ - 'Never leave this field out to mean "fail on a miss": on an import, an omitted or null value lets a missing key through without an error (with the default, or without the mapped field when there is none). Only an explicit false fails the record.'
2843
2890
  Transform:
2844
2891
  type: object
2845
2892
  description: |
@@ -841,6 +841,11 @@ paths:
841
841
  `ftp.concurrencyLevel` and `ftp.targetConcurrencyLevel` (the latter is unset whenever
842
842
  `autoRecoverRateLimitErrors` is false). `connectionRole` is read-only here: a body carrying
843
843
  `mcpChild` is rejected.
844
+
845
+ An OAuth connection's `http.auth.oauth.authURI` and `tokenURI` can't change: a body that
846
+ changes either is rejected with 422 "Updating the value in tokenURI is not allowed for oauth
847
+ connections due to security reasons. Please contact celigo support." (and the same for
848
+ `authURI`), and nothing is saved. To move to new OAuth URLs, create a new connection.
844
849
  operationId: updateConnection
845
850
  tags:
846
851
  - Connections
@@ -1028,7 +1033,8 @@ paths:
1028
1033
  borrowed-from connection must exist in the account and may not itself borrow
1029
1034
  (422 `connection_borrows_from_another`), and a connection that others borrow
1030
1035
  from cannot start borrowing (422 `connection_borrowed_by_another`). A
1031
- connection naming itself is accepted, so check the id before sending it.
1036
+ connection can't borrow from itself: naming its own id is rejected with 422 ("… a
1037
+ connection cannot borrow concurrency from itself."), here and on `PUT`.
1032
1038
  Settings-only changes are recorded in the connection's audit log.
1033
1039
  operationId: patchConnection
1034
1040
  tags:
@@ -1134,6 +1140,15 @@ paths:
1134
1140
  Deletes a connection. The connection is soft-deleted and retained in the
1135
1141
  recycle bin for 30 days before permanent removal. Use
1136
1142
  `POST /v1/recycleBinTTL/connections/{_id}` to restore it during that window.
1143
+
1144
+ Rejected with 422 while anything still uses the connection; the message names each
1145
+ blocker — every export or import on it, the flows they are steps of, and any connection
1146
+ whose `_borrowConcurrencyFromConnectionId` points at it (clearing that field is enough).
1147
+ Registration on an integration does not block the delete, and neither do exports, imports
1148
+ or flows already in the recycle bin; but purging the connection early
1149
+ (`DELETE /v1/recycleBinTTL/connections/{_id}`) is rejected with 422 "this document is
1150
+ referenced by Export : …" while a binned export or import still points at it, so purge the
1151
+ flows, then the exports and imports, then the connection.
1137
1152
  operationId: deleteConnection
1138
1153
  tags:
1139
1154
  - Connections
@@ -1161,7 +1176,7 @@ paths:
1161
1176
  - |-
1162
1177
  Soft-deletes the connection into the recycle bin (restorable for 30 days). Check
1163
1178
  `GET /v1/connections/{_id}/dependencies` first — a connection still referenced by flows,
1164
- exports, or imports is rejected with 422.
1179
+ exports, imports, or a borrowing connection is rejected with 422.
1165
1180
  /v1/connections/{_id}/ping:
1166
1181
  get:
1167
1182
  x-internal: false
@@ -1170,7 +1185,8 @@ paths:
1170
1185
  GET variant of the saved-connection ping — identical behavior to
1171
1186
  `POST /v1/connections/{_id}/ping`, with no request body to send. Runs the adaptor's ping
1172
1187
  routine against the connection identified by `_id` to verify its credentials and network
1173
- configuration still work; no data is read, written, or modified.
1188
+ configuration still work; no data is read, written, or modified. An `http` connection with
1189
+ no `http.ping` answers `{code: 200}` without sending any request.
1174
1190
 
1175
1191
  Inspect the response body, not the HTTP status, to determine the outcome: success and
1176
1192
  adaptor-level failures both return HTTP 200 — success is `{code: 200}`, failures are
@@ -1243,16 +1259,20 @@ paths:
1243
1259
  Behaves identically to POST /v1/connections/{_id}/ping and takes no request body — use
1244
1260
  whichever verb the client supports. Both verbs return HTTP 200 with {code: 200} on
1245
1261
  success and HTTP 200 with {errors: [...]} on adaptor-level failure, so inspect the body,
1246
- not the status code.
1262
+ not the status code. On an `http` connection, {code: 200} shows reachability only once
1263
+ `http.ping` is set: with no ping configured, nothing is sent and the answer is always
1264
+ {code: 200}.
1247
1265
  post:
1248
1266
  x-internal: false
1249
1267
  summary: Ping an existing connection
1250
1268
  description: |-
1251
1269
  Runs the adaptor's ping routine against a saved connection to verify its credentials and
1252
1270
  network configuration still work; no data is read, written, or modified. The check is
1253
- adaptor-specific (HTTP runs the ping relativeURI or baseURI, RDBMS/JDBC open a driver
1254
- session, MCP issues a tools/list, NetSuite/Salesforce do a token or session validation).
1255
- The request body is optional and ignored.
1271
+ adaptor-specific (HTTP sends the `http.ping` request, RDBMS/JDBC open a driver session,
1272
+ MCP issues a tools/list, NetSuite/Salesforce do a token or session validation). An `http`
1273
+ connection with no `http.ping` passes with `{code: 200}` without sending any request, so
1274
+ the ping proves nothing about it until a ping is configured. The request body is optional
1275
+ and ignored.
1256
1276
 
1257
1277
  Inspect the response body, not the HTTP status, to determine the outcome: success and
1258
1278
  adaptor-level failures both return HTTP 200 — success is `{code: 200}`, failures are
@@ -1362,6 +1382,10 @@ paths:
1362
1382
  - Test network connectivity
1363
1383
  - Verify permissions for basic operations
1364
1384
  - Return connection status and any error details
1385
+
1386
+ Exception: an `http` connection with no `http.ping` answers {code: 200} without sending
1387
+ any request, so it proves nothing until a ping (ideally one that needs the connection's
1388
+ credentials) is configured.
1365
1389
  /v1/connections/{_id}/proxy:
1366
1390
  post:
1367
1391
  x-internal: false
@@ -2452,6 +2476,9 @@ paths:
2452
2476
  The response is a plain-text stream (not JSON): each entry is a header line
2453
2477
  (`timestamp traceKey resourceType resourceId`) followed by a single-line JSON payload,
2454
2478
  entries separated by blank lines; paired request/response entries share a `traceKey`.
2479
+ A response payload carries only `headers` and `body` — no HTTP status code, so judge a
2480
+ failure by the body and by headers such as `Retry-After`. Connection tests are logged too:
2481
+ resource type `ping` with an empty `resourceId`, and `isPing: true` in the request payload.
2455
2482
  Logs are shared across every flow using the connection (filter by `resourceId` client-side),
2456
2483
  and sensitive header values are redacted (`"Authorization": "********"`). For execution logs
2457
2484
  tied to a specific run, use `GET /v1/flows/{_id}/jobs/{_jobId}/logs` instead.
@@ -2916,6 +2943,13 @@ paths:
2916
2943
  `/v1/connections/{_id}/oauth2` is an alias that answers identically. The URL's
2917
2944
  `state` token is one-time and expires quickly, so request a fresh one if the flow is
2918
2945
  interrupted, then poll `GET /v1/connections/{_id}` until `needsAuthorization` is `false`.
2946
+
2947
+ The URL's `redirect_uri` is the account's Celigo callback
2948
+ (`https://integrator.io/connection/oauth2callback` on North America), which the provider's
2949
+ app registration must list. On an `http` connection the client comes from the iClient in
2950
+ `http._iClientId`: with no iClient the request is rejected with 422 `unknown http authURI`,
2951
+ and an iClient whose `oauth2.validDomainNames` lacks the authorization URL's registrable
2952
+ domain is rejected as well (see the 422 examples).
2919
2953
  parameters:
2920
2954
  - name: _id
2921
2955
  in: path
@@ -2959,9 +2993,11 @@ paths:
2959
2993
  $ref: '#/components/responses/404-not-found'
2960
2994
  '422':
2961
2995
  description: |-
2962
- Connection exists but is not configured for OAuth — e.g. an FTP, S3, or plain-auth
2963
- HTTP connection. The server fails the handshake pre-check because the connection has
2964
- no `authURI` in its config.
2996
+ The handshake pre-check failed: the connection has no `authURI` in its config (an FTP,
2997
+ S3, plain-auth or client-credentials HTTP connection — nothing to authorize in a
2998
+ browser); an `http` connection has no iClient (`unknown http authURI: "<registrable
2999
+ domain>"`); or its iClient's `oauth2.validDomainNames` doesn't list the authorization
3000
+ URL's registrable domain.
2965
3001
  content:
2966
3002
  application/json:
2967
3003
  schema:
@@ -2974,6 +3010,16 @@ paths:
2974
3010
  - code: missing_required_field
2975
3011
  message: 'Expected field: authURI in the Connection to be present.'
2976
3012
  source: connector
3013
+ noIClient:
3014
+ summary: HTTP connection with no iClient
3015
+ value:
3016
+ errors:
3017
+ - message: 'unknown http authURI: "example.com"'
3018
+ domainNotListed:
3019
+ summary: The iClient's validDomainNames lacks the authorization URL's domain
3020
+ value:
3021
+ errors:
3022
+ - message: The domain of request url should be present in iClient.oauth2.validDomainNames
2977
3023
  /v1/connections/{_id}/dependencies:
2978
3024
  get:
2979
3025
  x-internal: false
@@ -4088,7 +4134,7 @@ components:
4088
4134
  connection's traffic counts against the referenced connection's limit instead of its own,
4089
4135
  and its own concurrency and auto-recovery settings have no effect. One level only: the
4090
4136
  referenced connection may not itself borrow, and a connection that others borrow from
4091
- cannot start borrowing.
4137
+ cannot start borrowing. A connection cannot reference itself (422).
4092
4138
  examples:
4093
4139
  - 615dfa0742763671275b70ab
4094
4140
  x-celigo-ai-guidance:
@@ -4125,16 +4171,21 @@ components:
4125
4171
  type: boolean
4126
4172
  description: |-
4127
4173
  When true, the connection has been taken offline and is skipped during flow execution.
4128
- The platform tests the connection after a create or `PUT` and updates this shortly
4129
- afterwards (the audit log records a `system` change; `lastModified` doesn't move), so
4130
- read it again a few seconds after the write.
4174
+ It is set by the connection test a create or `PUT` runs: the result arrives in the
4175
+ write's response or, when the target is slow to answer, shortly afterwards (the audit
4176
+ log records a `system` change; `lastModified` doesn't move), so read it again a few
4177
+ seconds after the write. On an `http` connection the write runs the test only when
4178
+ `http.ping` is configured, and an `http` connection that was never tested has no
4179
+ `offline` key.
4131
4180
  readOnly: true
4132
4181
  needsAuthorization:
4133
4182
  type: boolean
4134
4183
  readOnly: true
4135
4184
  description: |-
4136
4185
  OAuth handshake state. Celigo's OAuth callback sets it to `false` once the user consents
4137
- and the tokens are stored (see `GET /v1/connection/{_id}/oauth2`).
4186
+ and the tokens are stored (see `GET /v1/connection/{_id}/oauth2`). A connection that
4187
+ was never authorized usually has no `needsAuthorization` key, so its absence does not
4188
+ mean the connection is authorized.
4138
4189
  _sourceId:
4139
4190
  type: string
4140
4191
  format: objectId
@@ -5109,15 +5160,18 @@ components:
5109
5160
  clientId:
5110
5161
  type: string
5111
5162
  description: |
5112
- OAuth client ID (application ID) registered with the API provider.
5113
- Required for all OAuth 2.0 grant types.
5163
+ OAuth client ID (application ID) registered with the API provider. An `http`
5164
+ connection takes the app from a `custom_oauth2` iClient referenced by `http._iClientId`
5165
+ (an `mcp` connection from `mcp.http._iClientId`) and doesn't store this field: a create
5166
+ that sends `clientId` and `clientSecret` here answers 201 without either (and stores
5167
+ `useIClientFields: true` unless `false` is sent).
5114
5168
  examples:
5115
5169
  - 0oa1b2c3d4EXAMPLE5
5116
5170
  clientSecret:
5117
5171
  type: string
5118
5172
  description: |
5119
- OAuth client secret (encrypted at rest).
5120
- Required for "authorizecode" and "clientcredentials" grant types.
5173
+ OAuth client secret (encrypted at rest). Not stored on an `http` connection: the secret
5174
+ belongs on the iClient (see `clientId`).
5121
5175
  writeOnly: true
5122
5176
  examples:
5123
5177
  - cs_abc123EXAMPLE456secret
@@ -5333,9 +5387,11 @@ components:
5333
5387
  - "authorizecode" — Authorization Code flow (browser-based user consent).
5334
5388
  Requires authURI, tokenURI, and user authorization via browser.
5335
5389
  - "clientcredentials" — Client Credentials flow (server-to-server, no user).
5336
- Requires tokenURI, clientId, clientSecret.
5390
+ Requires tokenURI.
5337
5391
  - "password" — Resource Owner Password flow (username/password exchange).
5338
- Requires tokenURI, username, password, clientId, clientSecret.
5392
+ Requires tokenURI, username, password.
5393
+ - On an `http` connection the client ID and secret are never stored here: a
5394
+ `custom_oauth2` iClient referenced by `http._iClientId` supplies them.
5339
5395
  JWT:
5340
5396
  type: object
5341
5397
  description: |-
@@ -9560,7 +9616,7 @@ components:
9560
9616
  connection's traffic counts against the referenced connection's limit instead of its own,
9561
9617
  and its own concurrency and auto-recovery settings have no effect. One level only: the
9562
9618
  referenced connection may not itself borrow, and a connection that others borrow from
9563
- cannot start borrowing.
9619
+ cannot start borrowing. A connection cannot reference itself (422).
9564
9620
  examples:
9565
9621
  - 615dfa0742763671275b70ab
9566
9622
  x-celigo-ai-guidance: