@celigo/api-specs 0.2.206 → 0.2.207

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 CHANGED
@@ -8505,10 +8505,12 @@ components:
8505
8505
  `targetConcurrencyLevel`. While true, `targetConcurrencyLevel` is the throughput lever: a
8506
8506
  `concurrencyLevel` sent in a PUT is ignored, and one sent in a PATCH is stored but the
8507
8507
  recovery machinery moves it back toward the target. Recovery never runs on `ftp`
8508
- connections: FTP errors aren't treated as rate limits.
8508
+ connections: FTP errors aren't treated as rate limits. A rate limit hit by a Tool
8509
+ invocation (`POST /v1/tools/{_id}/invoke`) or an export preview
8510
+ (`POST /v1/exports/preview`) leaves the connection's concurrency as it is.
8509
8511
  x-celigo-ai-guidance:
8510
8512
  - To change throughput while this is true, write `targetConcurrencyLevel`; a `concurrencyLevel` sent in a PUT returns 200 and changes nothing.
8511
- - Turning it on copies `concurrencyLevel` into `targetConcurrencyLevel`; turning it off unsets the target and leaves `concurrencyLevel` at its current value, which may be below the old target if a recovery was in progress. A `targetConcurrencyLevel` written while this is false is unset by the save.
8513
+ - Turning it on copies `concurrencyLevel` into `targetConcurrencyLevel`; turning it off unsets the target and leaves `concurrencyLevel` at its current value, which may be below the old target if a recovery was in progress. A `targetConcurrencyLevel` sent on a create that sets this false, or with the write that turns this off, is dropped; on a connection where this is already false, writing one fails with 422 `invalid_concurrency_level`.
8512
8514
  - These four settings (`concurrencyLevel`, `targetConcurrencyLevel`, `_borrowConcurrencyFromConnectionId`, this flag) accept a credential-free `PATCH /v1/connections/{_id}`. A PUT replaces the whole document, so send each secret back as its masked `******` value (that keeps it) or as a new value, and never drop one to keep it — an omitted password or `http.encrypted` is cleared, and a static token left out (with no `refreshMethod`) fails the PUT with 422.
8513
8515
  - On a create, while this is true, set the level with `targetConcurrencyLevel`: on `http`, `ftp`, `rdbms` and `mongodb` connections the save stores the target sent, or the adaptor's default without one (1 for `ftp`, 5 for `rdbms` and `mongodb`, 25 for `http` where the license's `concurrency` is at least 25), as both fields, whatever `concurrencyLevel` the body carried. A create that sends this as `false` keeps its `concurrencyLevel`.
8514
8516
  - On an `ftp` connection recovery never runs, and transfer threads are `ftp.multiThreadCount`.
@@ -9145,8 +9147,10 @@ components:
9145
9147
  While `autoRecoverRateLimitErrors` is true, a create sets `concurrencyLevel` to this value, and a
9146
9148
  create that omits it gets 1 for both. Auto-recovery never runs on FTP connections (FTP errors
9147
9149
  aren't treated as rate limits), so nothing climbs back to it.
9148
- Kept on a `PUT` that omits it, like `concurrencyLevel`; unset by the save while
9149
- `autoRecoverRateLimitErrors` is false.
9150
+ Kept on a `PUT` that omits it, like `concurrencyLevel`. A create that sends
9151
+ `autoRecoverRateLimitErrors` false, or a write that turns it off, drops it; on a connection
9152
+ where the flag is already false, sending it fails with 422 `invalid_concurrency_level`
9153
+ ("cannot be set when autoRecoverRateLimitErrors is false").
9150
9154
  minimum: 1
9151
9155
  maximum: 50
9152
9156
  examples:
@@ -9887,9 +9891,10 @@ components:
9887
9891
  Higher values increase throughput but may trigger API rate limits.
9888
9892
  Set this based on the target API's rate limit documentation.
9889
9893
  Send no more than the account's licensed maximum (25 standard, 50 with an Environments license).
9890
- A decimal is rejected with 422 `invalid_field_value` on every write (the same rule applies to every
9891
- adaptor's `concurrencyLevel` and `targetConcurrencyLevel`, and to `ftp.multiThreadCount`).
9892
- Platform-managed while `autoRecoverRateLimitErrors` is true — a create or PUT ignores the value (a create without `targetConcurrencyLevel` stores 25 where the license's `concurrency` is at least 25) and the recovery machinery moves it toward the target; set `targetConcurrencyLevel` instead.
9894
+ A create, a PATCH, and a PUT while `autoRecoverRateLimitErrors` is false reject a decimal with 422
9895
+ `invalid_field_value` and a boolean or a non-numeric string with 422 `invalid_concurrency_level`
9896
+ ("must be an integer").
9897
+ Platform-managed while `autoRecoverRateLimitErrors` is true — a create still checks the value but stores the target in its place (25 without a `targetConcurrencyLevel`, where the license's `concurrency` is at least 25), a PUT ignores it without checking it, and the recovery machinery moves it toward the target; set `targetConcurrencyLevel` instead.
9893
9898
  At level 1 an import's pages run one at a time, so a record's existence lookup and write finish before the next record's start (measured on a single import); the import's `idLockTemplate` serializes only same-key records and leaves the rest parallel.
9894
9899
  minimum: 1
9895
9900
  maximum: 50
@@ -9902,7 +9907,9 @@ components:
9902
9907
  Ceiling the platform climbs back to after rate-limit recovery, in steps of 25% of this value.
9903
9908
  Writing it also sets `concurrencyLevel` to the same value and stops any recovery in progress.
9904
9909
 
9905
- Honored only while `autoRecoverRateLimitErrors` is true; ignored, and unset, when it is false.
9910
+ Honored only while `autoRecoverRateLimitErrors` is true. A create that sends the flag as false, or a
9911
+ write that turns it off, drops it; on a connection where the flag is already false, sending it fails with 422
9912
+ `invalid_concurrency_level` ("cannot be set when autoRecoverRateLimitErrors is false").
9906
9913
  minimum: 1
9907
9914
  maximum: 50
9908
9915
  examples:
@@ -10673,6 +10680,26 @@ components:
10673
10680
  examples:
10674
10681
  - - rate_limit_exceeded
10675
10682
  - too_many_requests
10683
+ failHeaders:
10684
+ type: array
10685
+ description: |
10686
+ Response-header rules for detecting rate limiting, each a header `name` with an
10687
+ optional `value`. A rule with an empty `name` fails the save with 422
10688
+ `invalid_header_format`.
10689
+ items:
10690
+ type: object
10691
+ required:
10692
+ - name
10693
+ properties:
10694
+ name:
10695
+ type: string
10696
+ description: Response header the rule checks.
10697
+ value:
10698
+ type: string
10699
+ description: Header value the rule checks; omit to check the header alone.
10700
+ examples:
10701
+ - - name: X-RateLimit-Remaining
10702
+ value: '0'
10676
10703
  limit:
10677
10704
  type: number
10678
10705
  minimum: 1
@@ -844,8 +844,9 @@ paths:
844
844
 
845
845
  Three settings are the exception and survive an omission: `endUserProvidedFields`
846
846
  (send `null` to clear it — `[]` is treated like an omission), and on `ftp` connections
847
- `ftp.concurrencyLevel` and `ftp.targetConcurrencyLevel` (the latter is unset whenever
848
- `autoRecoverRateLimitErrors` is false). `connectionRole` is read-only here: a body carrying
847
+ `ftp.concurrencyLevel` and `ftp.targetConcurrencyLevel` (the latter is dropped by the PUT that
848
+ turns `autoRecoverRateLimitErrors` off, and sending it on a connection where the flag is already
849
+ false fails with 422 `invalid_concurrency_level`). `connectionRole` is read-only here: a body carrying
849
850
  `mcpChild` is rejected.
850
851
 
851
852
  An OAuth connection's `http.auth.oauth.authURI` and `tokenURI` can't change: a body that
@@ -1022,18 +1023,21 @@ paths:
1022
1023
  | `/debugDate` | Debug logging expiry (ISO-8601, max 1 hour from now) |
1023
1024
  | `/debugUntil` | Alias for `/debugDate` |
1024
1025
  | `/<adaptor>/concurrencyLevel` | Concurrent requests allowed. Platform-managed while `autoRecoverRateLimitErrors` is true — the recovery machinery moves it toward the target, so set `targetConcurrencyLevel` instead |
1025
- | `/<adaptor>/targetConcurrencyLevel` | Ceiling auto-recovery climbs back to. Persists only while `autoRecoverRateLimitErrors` is true; while false the save unsets it |
1026
+ | `/<adaptor>/targetConcurrencyLevel` | Ceiling auto-recovery climbs back to. Accepted only while `autoRecoverRateLimitErrors` is true; while it is false the patch fails with 422 `invalid_concurrency_level` |
1026
1027
  | `/_borrowConcurrencyFromConnectionId` | Share another connection's concurrency budget. `remove` clears it |
1027
1028
  | `/autoRecoverRateLimitErrors` | Rate-limit auto-recovery toggle. Turning it on copies the current level into the target; turning it off unsets the target and leaves the level at its current value |
1029
+ | `/http/rateLimit/failStatusCode`, `/http/rateLimit/failPath`, `/http/rateLimit/failHeaders` | Rate-limit detection rules. Send `failHeaders` as the whole array; on one element only `replace` of an existing entry works (e.g. `/http/rateLimit/failHeaders/0`), and `add` or `remove` on an element fails with 422 |
1030
+ | `/http/rateLimit/limit` | Requests per rate-limit window. Accepted only at a concurrency of 1: set `/http/targetConcurrencyLevel` (while `autoRecoverRateLimitErrors` is true) or `/http/concurrencyLevel` (while it is false) to 1 in the same patch; at any other level it fails with 422 `invalid_concurrency_level` |
1028
1031
  | `/endUserProvidedFields` | Dot-paths MCP end users must supply on their own child copy of this connection. `replace` with `[]` or `remove` clears the list, and `add` on `/endUserProvidedFields/-` appends one path; a path the account owns (`type`, `_agentId`, `wrapper._stackId`, any `<adaptor>._iClientId`) is rejected |
1029
1032
 
1030
1033
  `replace` and `add` both set the value (a currently unset field is fine);
1031
1034
  `remove` unsets it. A `null` value is rejected. Any other path — including
1032
1035
  `/connectionRole`, `/netsuite/concurrencyLevelRESTlet`,
1033
- `/netsuite/concurrencyLevelWebServices` and `rateLimit` fields — fails with
1034
- `<path> is not a whitelisted property`.
1036
+ `/netsuite/concurrencyLevelWebServices`, `/http/rateLimit` as a whole and
1037
+ `/http/rateLimit/failValues` — fails with `<path> is not a whitelisted property`.
1035
1038
  Concurrency values must be whole numbers within the account's licensed
1036
- range (a decimal fails with 422 `invalid_field_value`). A whitelisted path under an adaptor
1039
+ range (a decimal fails with 422 `invalid_field_value`, a boolean or non-numeric
1040
+ string with 422 `invalid_concurrency_level`). A whitelisted path under an adaptor
1037
1041
  block the connection does not use is accepted but never read. The
1038
1042
  borrowed-from connection must exist in the account and may not itself borrow
1039
1043
  (422 `connection_borrows_from_another`), and a connection that others borrow
@@ -1621,11 +1625,14 @@ paths:
1621
1625
  Adaptors `POST /v1/imports/preview` rejects with `invalid_adaptor` run
1622
1626
  here — NetSuite and RDBMS verified alongside HTTP.
1623
1627
 
1624
- The step runs with the document's own `settings` only: hooks receive
1625
- `options.settings` with an `import` key but no `integration` or `flow`
1626
- key and no `_flowId` / `_integrationId`; `{{settings.integration.*}}`
1627
- and `{{settings.flow.*}}` templates render empty. To run the document
1628
- with the context a real run of its parent supplies, use the
1628
+ The step runs without integration or flow context: hooks receive
1629
+ `options.settings` with the document's `import` settings (and
1630
+ `connection` when the connection has settings) but no `integration` or
1631
+ `flow` key and no `_flowId` / `_integrationId`. A
1632
+ `{{settings.integration.*}}` or `{{settings.flow.*}}` template renders
1633
+ empty in a body; in an HTTP `relativeURI` it fails the record with 422
1634
+ `handlebars_template_parse_error`. To run the document with the
1635
+ context a real run of its parent supplies, use the
1629
1636
  integration-scoped forms —
1630
1637
  `POST /v1/integrations/{_integrationId}/flows/{_flowId}/connections/{_connectionId}/import`
1631
1638
  and the `tools/{_toolId}` and `apis/{_apiId}` siblings. The connection
@@ -1658,10 +1665,12 @@ paths:
1658
1665
  This executes the request against the live destination — a real write, even when the
1659
1666
  document carries a saved `mockResponse`. Treat it like a flow run, never like a preview.
1660
1667
  - |-
1661
- The step gets the document's own settings only: hooks see `options.settings = {import}`
1662
- with no `integration` / `flow` key and no `_flowId` / `_integrationId`, and
1663
- `{{settings.integration.*}}` / `{{settings.flow.*}}` render empty. A step whose hooks or
1664
- templates read those settings builds a different record here than in a flow run — send
1668
+ The step gets no integration or flow context: hooks see `options.settings` with `import`
1669
+ (and `connection` when the connection has settings) but no `integration` / `flow` key and
1670
+ no `_flowId` / `_integrationId`; `{{settings.integration.*}}` / `{{settings.flow.*}}`
1671
+ render empty in a body and fail the record with 422 `handlebars_template_parse_error` in
1672
+ an HTTP `relativeURI`. A step whose hooks or templates read those settings builds a
1673
+ different record here than in a flow run — send
1665
1674
  it through the integration-scoped form
1666
1675
  (`/v1/integrations/{_integrationId}/flows/{_flowId}/connections/{_connectionId}/import`,
1667
1676
  or the `tools` / `apis` sibling) instead, which resolves that context from the URL.
@@ -1969,13 +1978,13 @@ paths:
1969
1978
  description: |-
1970
1979
  Runs an import document sent in the request body — a virtual import —
1971
1980
  through the connection, with the flow and the integration in the
1972
- path supplying the execution context a real run gives the step — hooks receive `options.settings` with the flow's and the integration's settings (a resource with none contributes no key) plus `_flowId` / `_integrationId`, as on the flow's own preview chain.
1981
+ path supplying the execution context a real run gives the step — hooks receive `options.settings` with the flow's, the integration's and the connection's settings (a resource with none contributes no key) plus `_flowId` / `_integrationId`, as on the flow's own preview chain.
1973
1982
  Nothing is saved — the document can be an unsaved draft, a modified
1974
1983
  copy, or a saved import as fetched — and the request executes against
1975
1984
  the live destination: a real write; a saved
1976
1985
  `mockResponse` does not substitute. Pipeline and per-record result are
1977
1986
  those of `POST /v1/connections/{_id}/import`, which runs the document
1978
- with its own settings only. The flow must belong to the
1987
+ without integration or flow context. The flow must belong to the
1979
1988
  integration, the connection must be registered to it, and the caller
1980
1989
  needs manage access to the account or the integration.
1981
1990
  parameters:
@@ -2147,13 +2156,13 @@ paths:
2147
2156
  description: |-
2148
2157
  Runs an import document sent in the request body — a virtual import —
2149
2158
  through the connection, with the tool and the integration in the
2150
- path supplying the execution context — hooks receive `options.settings` with the integration's settings (none when it carries none) plus `_integrationId`, and no flow. That is more than a step gets in a real run of the tool, which sees no integration settings and no `_integrationId`.
2159
+ path supplying the execution context — hooks receive `options.settings` with the integration's and the connection's settings (a resource with none contributes no key) plus `_integrationId`, and no flow. That is more than a step gets in a real run of the tool, which sees no integration settings and no `_integrationId`.
2151
2160
  Nothing is saved — the document can be an unsaved draft, a modified
2152
2161
  copy, or a saved import as fetched — and the request executes against
2153
2162
  the live destination: a real write, not a dry run; a saved
2154
2163
  `mockResponse` does not substitute. Pipeline and per-record result are
2155
2164
  those of `POST /v1/connections/{_id}/import`, which runs the document
2156
- with its own settings only. The tool must belong to the
2165
+ without integration or flow context. The tool must belong to the
2157
2166
  integration, the connection must be registered to it, and the caller
2158
2167
  needs manage access to the account or the integration.
2159
2168
  parameters:
@@ -2325,13 +2334,13 @@ paths:
2325
2334
  description: |-
2326
2335
  Runs an import document sent in the request body — a virtual import —
2327
2336
  through the connection, with the API and the integration in the
2328
- path supplying the execution context — hooks receive `options.settings` with the integration's settings (none when it carries none) plus `_integrationId`, and no flow. A step in a real call of the API gets less: no integration settings and no `_integrationId`.
2337
+ path supplying the execution context — hooks receive `options.settings` with the integration's and the connection's settings (a resource with none contributes no key) plus `_integrationId`, and no flow. A step in a real call of the API gets less: no integration settings and no `_integrationId`.
2329
2338
  Nothing is saved — the document can be an unsaved draft, a modified
2330
2339
  copy, or a saved import as fetched — and the request executes against
2331
2340
  the live destination: a real write, not a dry run; a saved
2332
2341
  `mockResponse` does not substitute. Pipeline and per-record result are
2333
2342
  those of `POST /v1/connections/{_id}/import`, which runs the document
2334
- with its own settings only. The API must belong to the
2343
+ without integration or flow context. The API must belong to the
2335
2344
  integration, the connection must be registered to it, and the caller
2336
2345
  needs manage access to the account or the integration.
2337
2346
  parameters:
@@ -4329,10 +4338,12 @@ components:
4329
4338
  `targetConcurrencyLevel`. While true, `targetConcurrencyLevel` is the throughput lever: a
4330
4339
  `concurrencyLevel` sent in a PUT is ignored, and one sent in a PATCH is stored but the
4331
4340
  recovery machinery moves it back toward the target. Recovery never runs on `ftp`
4332
- connections: FTP errors aren't treated as rate limits.
4341
+ connections: FTP errors aren't treated as rate limits. A rate limit hit by a Tool
4342
+ invocation (`POST /v1/tools/{_id}/invoke`) or an export preview
4343
+ (`POST /v1/exports/preview`) leaves the connection's concurrency as it is.
4333
4344
  x-celigo-ai-guidance:
4334
4345
  - To change throughput while this is true, write `targetConcurrencyLevel`; a `concurrencyLevel` sent in a PUT returns 200 and changes nothing.
4335
- - Turning it on copies `concurrencyLevel` into `targetConcurrencyLevel`; turning it off unsets the target and leaves `concurrencyLevel` at its current value, which may be below the old target if a recovery was in progress. A `targetConcurrencyLevel` written while this is false is unset by the save.
4346
+ - Turning it on copies `concurrencyLevel` into `targetConcurrencyLevel`; turning it off unsets the target and leaves `concurrencyLevel` at its current value, which may be below the old target if a recovery was in progress. A `targetConcurrencyLevel` sent on a create that sets this false, or with the write that turns this off, is dropped; on a connection where this is already false, writing one fails with 422 `invalid_concurrency_level`.
4336
4347
  - These four settings (`concurrencyLevel`, `targetConcurrencyLevel`, `_borrowConcurrencyFromConnectionId`, this flag) accept a credential-free `PATCH /v1/connections/{_id}`. A PUT replaces the whole document, so send each secret back as its masked `******` value (that keeps it) or as a new value, and never drop one to keep it — an omitted password or `http.encrypted` is cleared, and a static token left out (with no `refreshMethod`) fails the PUT with 422.
4337
4348
  - On a create, while this is true, set the level with `targetConcurrencyLevel`: on `http`, `ftp`, `rdbms` and `mongodb` connections the save stores the target sent, or the adaptor's default without one (1 for `ftp`, 5 for `rdbms` and `mongodb`, 25 for `http` where the license's `concurrency` is at least 25), as both fields, whatever `concurrencyLevel` the body carried. A create that sends this as `false` keeps its `concurrencyLevel`.
4338
4349
  - On an `ftp` connection recovery never runs, and transfer threads are `ftp.multiThreadCount`.
@@ -4969,8 +4980,10 @@ components:
4969
4980
  While `autoRecoverRateLimitErrors` is true, a create sets `concurrencyLevel` to this value, and a
4970
4981
  create that omits it gets 1 for both. Auto-recovery never runs on FTP connections (FTP errors
4971
4982
  aren't treated as rate limits), so nothing climbs back to it.
4972
- Kept on a `PUT` that omits it, like `concurrencyLevel`; unset by the save while
4973
- `autoRecoverRateLimitErrors` is false.
4983
+ Kept on a `PUT` that omits it, like `concurrencyLevel`. A create that sends
4984
+ `autoRecoverRateLimitErrors` false, or a write that turns it off, drops it; on a connection
4985
+ where the flag is already false, sending it fails with 422 `invalid_concurrency_level`
4986
+ ("cannot be set when autoRecoverRateLimitErrors is false").
4974
4987
  minimum: 1
4975
4988
  maximum: 50
4976
4989
  examples:
@@ -5711,9 +5724,10 @@ components:
5711
5724
  Higher values increase throughput but may trigger API rate limits.
5712
5725
  Set this based on the target API's rate limit documentation.
5713
5726
  Send no more than the account's licensed maximum (25 standard, 50 with an Environments license).
5714
- A decimal is rejected with 422 `invalid_field_value` on every write (the same rule applies to every
5715
- adaptor's `concurrencyLevel` and `targetConcurrencyLevel`, and to `ftp.multiThreadCount`).
5716
- Platform-managed while `autoRecoverRateLimitErrors` is true — a create or PUT ignores the value (a create without `targetConcurrencyLevel` stores 25 where the license's `concurrency` is at least 25) and the recovery machinery moves it toward the target; set `targetConcurrencyLevel` instead.
5727
+ A create, a PATCH, and a PUT while `autoRecoverRateLimitErrors` is false reject a decimal with 422
5728
+ `invalid_field_value` and a boolean or a non-numeric string with 422 `invalid_concurrency_level`
5729
+ ("must be an integer").
5730
+ Platform-managed while `autoRecoverRateLimitErrors` is true — a create still checks the value but stores the target in its place (25 without a `targetConcurrencyLevel`, where the license's `concurrency` is at least 25), a PUT ignores it without checking it, and the recovery machinery moves it toward the target; set `targetConcurrencyLevel` instead.
5717
5731
  At level 1 an import's pages run one at a time, so a record's existence lookup and write finish before the next record's start (measured on a single import); the import's `idLockTemplate` serializes only same-key records and leaves the rest parallel.
5718
5732
  minimum: 1
5719
5733
  maximum: 50
@@ -5726,7 +5740,9 @@ components:
5726
5740
  Ceiling the platform climbs back to after rate-limit recovery, in steps of 25% of this value.
5727
5741
  Writing it also sets `concurrencyLevel` to the same value and stops any recovery in progress.
5728
5742
 
5729
- Honored only while `autoRecoverRateLimitErrors` is true; ignored, and unset, when it is false.
5743
+ Honored only while `autoRecoverRateLimitErrors` is true. A create that sends the flag as false, or a
5744
+ write that turns it off, drops it; on a connection where the flag is already false, sending it fails with 422
5745
+ `invalid_concurrency_level` ("cannot be set when autoRecoverRateLimitErrors is false").
5730
5746
  minimum: 1
5731
5747
  maximum: 50
5732
5748
  examples:
@@ -6497,6 +6513,26 @@ components:
6497
6513
  examples:
6498
6514
  - - rate_limit_exceeded
6499
6515
  - too_many_requests
6516
+ failHeaders:
6517
+ type: array
6518
+ description: |
6519
+ Response-header rules for detecting rate limiting, each a header `name` with an
6520
+ optional `value`. A rule with an empty `name` fails the save with 422
6521
+ `invalid_header_format`.
6522
+ items:
6523
+ type: object
6524
+ required:
6525
+ - name
6526
+ properties:
6527
+ name:
6528
+ type: string
6529
+ description: Response header the rule checks.
6530
+ value:
6531
+ type: string
6532
+ description: Header value the rule checks; omit to check the header alone.
6533
+ examples:
6534
+ - - name: X-RateLimit-Remaining
6535
+ value: '0'
6500
6536
  limit:
6501
6537
  type: number
6502
6538
  minimum: 1
@@ -9834,7 +9870,8 @@ components:
9834
9870
  connection's traffic counts against the referenced connection's limit instead of its own,
9835
9871
  and its own concurrency and auto-recovery settings have no effect. One level only: the
9836
9872
  referenced connection may not itself borrow, and a connection that others borrow from
9837
- cannot start borrowing. A connection cannot reference itself (422).
9873
+ cannot start borrowing. Pointing it at the connection itself fails with 422
9874
+ `connection_borrows_from_another`, and an id that matches no connection with 422 `invalid_ref`.
9838
9875
  examples:
9839
9876
  - 615dfa0742763671275b70ab
9840
9877
  x-celigo-ai-guidance:
@@ -9863,6 +9900,8 @@ components:
9863
9900
  such an `http` create that sends only `concurrencyLevel: 10` is stored at 25. To keep the
9864
9901
  `concurrencyLevel` you send, create with this `false`.
9865
9902
  Recovery never runs on `ftp` connections: FTP errors aren't treated as rate limits.
9903
+ A rate limit hit by a Tool invocation (`POST /v1/tools/{_id}/invoke`) or an export preview
9904
+ (`POST /v1/exports/preview`) leaves the connection's concurrency as it is.
9866
9905
  __integrationIds:
9867
9906
  type: array
9868
9907
  maxItems: 100
@@ -10281,8 +10320,9 @@ components:
10281
10320
  type: object
10282
10321
  description: |-
10283
10322
  The outcome of running one input record through an import — one element
10284
- per record, in input order — shared by `POST /v1/imports/{_id}/invoke`
10285
- and the virtual import `POST /v1/connections/{_id}/import`. A record the
10323
+ per record, in input order — shared by `POST /v1/imports/{_id}/invoke`,
10324
+ the virtual import `POST /v1/connections/{_id}/import` and its
10325
+ integration-scoped forms. A record the
10286
10326
  import itself ignored before any request carries `ignored: true` and the
10287
10327
  `stage` that dropped it; a record the destination accepted carries its
10288
10328
  parsed response; a record the destination rejected — or that the
@@ -10372,8 +10412,9 @@ components:
10372
10412
  Hooks and templates see the context a real run of the parent gives them: for a flow step,
10373
10413
  `options.settings` carries `import`, `flow` and `integration` with `_flowId` /
10374
10414
  `_integrationId` — identical to the flow's own preview chain; for a tool or an API step it
10375
- carries `import` and `integration` with `_integrationId` and no flow. A parent or
10376
- integration with no settings contributes no key at all (no `integration` key when the
10415
+ carries `import` and `integration` with `_integrationId` and no flow. Every form adds
10416
+ `connection` when the connection in the path has settings. A parent, integration or
10417
+ connection with no settings contributes no key at all (no `integration` key when the
10377
10418
  integration carries none).
10378
10419
  - |-
10379
10420
  The connection in the path must be registered to the integration in the path (flows and
package/dist/enduser.yml CHANGED
@@ -2363,10 +2363,12 @@ components:
2363
2363
  `targetConcurrencyLevel`. While true, `targetConcurrencyLevel` is the throughput lever: a
2364
2364
  `concurrencyLevel` sent in a PUT is ignored, and one sent in a PATCH is stored but the
2365
2365
  recovery machinery moves it back toward the target. Recovery never runs on `ftp`
2366
- connections: FTP errors aren't treated as rate limits.
2366
+ connections: FTP errors aren't treated as rate limits. A rate limit hit by a Tool
2367
+ invocation (`POST /v1/tools/{_id}/invoke`) or an export preview
2368
+ (`POST /v1/exports/preview`) leaves the connection's concurrency as it is.
2367
2369
  x-celigo-ai-guidance:
2368
2370
  - To change throughput while this is true, write `targetConcurrencyLevel`; a `concurrencyLevel` sent in a PUT returns 200 and changes nothing.
2369
- - Turning it on copies `concurrencyLevel` into `targetConcurrencyLevel`; turning it off unsets the target and leaves `concurrencyLevel` at its current value, which may be below the old target if a recovery was in progress. A `targetConcurrencyLevel` written while this is false is unset by the save.
2371
+ - Turning it on copies `concurrencyLevel` into `targetConcurrencyLevel`; turning it off unsets the target and leaves `concurrencyLevel` at its current value, which may be below the old target if a recovery was in progress. A `targetConcurrencyLevel` sent on a create that sets this false, or with the write that turns this off, is dropped; on a connection where this is already false, writing one fails with 422 `invalid_concurrency_level`.
2370
2372
  - These four settings (`concurrencyLevel`, `targetConcurrencyLevel`, `_borrowConcurrencyFromConnectionId`, this flag) accept a credential-free `PATCH /v1/connections/{_id}`. A PUT replaces the whole document, so send each secret back as its masked `******` value (that keeps it) or as a new value, and never drop one to keep it — an omitted password or `http.encrypted` is cleared, and a static token left out (with no `refreshMethod`) fails the PUT with 422.
2371
2373
  - On a create, while this is true, set the level with `targetConcurrencyLevel`: on `http`, `ftp`, `rdbms` and `mongodb` connections the save stores the target sent, or the adaptor's default without one (1 for `ftp`, 5 for `rdbms` and `mongodb`, 25 for `http` where the license's `concurrency` is at least 25), as both fields, whatever `concurrencyLevel` the body carried. A create that sends this as `false` keeps its `concurrencyLevel`.
2372
2374
  - On an `ftp` connection recovery never runs, and transfer threads are `ftp.multiThreadCount`.
@@ -3003,8 +3005,10 @@ components:
3003
3005
  While `autoRecoverRateLimitErrors` is true, a create sets `concurrencyLevel` to this value, and a
3004
3006
  create that omits it gets 1 for both. Auto-recovery never runs on FTP connections (FTP errors
3005
3007
  aren't treated as rate limits), so nothing climbs back to it.
3006
- Kept on a `PUT` that omits it, like `concurrencyLevel`; unset by the save while
3007
- `autoRecoverRateLimitErrors` is false.
3008
+ Kept on a `PUT` that omits it, like `concurrencyLevel`. A create that sends
3009
+ `autoRecoverRateLimitErrors` false, or a write that turns it off, drops it; on a connection
3010
+ where the flag is already false, sending it fails with 422 `invalid_concurrency_level`
3011
+ ("cannot be set when autoRecoverRateLimitErrors is false").
3008
3012
  minimum: 1
3009
3013
  maximum: 50
3010
3014
  examples:
@@ -3745,9 +3749,10 @@ components:
3745
3749
  Higher values increase throughput but may trigger API rate limits.
3746
3750
  Set this based on the target API's rate limit documentation.
3747
3751
  Send no more than the account's licensed maximum (25 standard, 50 with an Environments license).
3748
- A decimal is rejected with 422 `invalid_field_value` on every write (the same rule applies to every
3749
- adaptor's `concurrencyLevel` and `targetConcurrencyLevel`, and to `ftp.multiThreadCount`).
3750
- Platform-managed while `autoRecoverRateLimitErrors` is true — a create or PUT ignores the value (a create without `targetConcurrencyLevel` stores 25 where the license's `concurrency` is at least 25) and the recovery machinery moves it toward the target; set `targetConcurrencyLevel` instead.
3752
+ A create, a PATCH, and a PUT while `autoRecoverRateLimitErrors` is false reject a decimal with 422
3753
+ `invalid_field_value` and a boolean or a non-numeric string with 422 `invalid_concurrency_level`
3754
+ ("must be an integer").
3755
+ Platform-managed while `autoRecoverRateLimitErrors` is true — a create still checks the value but stores the target in its place (25 without a `targetConcurrencyLevel`, where the license's `concurrency` is at least 25), a PUT ignores it without checking it, and the recovery machinery moves it toward the target; set `targetConcurrencyLevel` instead.
3751
3756
  At level 1 an import's pages run one at a time, so a record's existence lookup and write finish before the next record's start (measured on a single import); the import's `idLockTemplate` serializes only same-key records and leaves the rest parallel.
3752
3757
  minimum: 1
3753
3758
  maximum: 50
@@ -3760,7 +3765,9 @@ components:
3760
3765
  Ceiling the platform climbs back to after rate-limit recovery, in steps of 25% of this value.
3761
3766
  Writing it also sets `concurrencyLevel` to the same value and stops any recovery in progress.
3762
3767
 
3763
- Honored only while `autoRecoverRateLimitErrors` is true; ignored, and unset, when it is false.
3768
+ Honored only while `autoRecoverRateLimitErrors` is true. A create that sends the flag as false, or a
3769
+ write that turns it off, drops it; on a connection where the flag is already false, sending it fails with 422
3770
+ `invalid_concurrency_level` ("cannot be set when autoRecoverRateLimitErrors is false").
3764
3771
  minimum: 1
3765
3772
  maximum: 50
3766
3773
  examples:
@@ -4531,6 +4538,26 @@ components:
4531
4538
  examples:
4532
4539
  - - rate_limit_exceeded
4533
4540
  - too_many_requests
4541
+ failHeaders:
4542
+ type: array
4543
+ description: |
4544
+ Response-header rules for detecting rate limiting, each a header `name` with an
4545
+ optional `value`. A rule with an empty `name` fails the save with 422
4546
+ `invalid_header_format`.
4547
+ items:
4548
+ type: object
4549
+ required:
4550
+ - name
4551
+ properties:
4552
+ name:
4553
+ type: string
4554
+ description: Response header the rule checks.
4555
+ value:
4556
+ type: string
4557
+ description: Header value the rule checks; omit to check the header alone.
4558
+ examples:
4559
+ - - name: X-RateLimit-Remaining
4560
+ value: '0'
4534
4561
  limit:
4535
4562
  type: number
4536
4563
  minimum: 1
package/dist/export.yml CHANGED
@@ -1661,6 +1661,21 @@ components:
1661
1661
  - shopify
1662
1662
  - stripe
1663
1663
  - custom
1664
+ formType:
1665
+ type: string
1666
+ enum:
1667
+ - simple
1668
+ - webhook
1669
+ x-enumDescriptions:
1670
+ simple: Simple form, the default for a named provider (e.g. `shopify`, `stripe`).
1671
+ webhook: Full webhook form, the default when `provider` is `custom` or omitted.
1672
+ description: |-
1673
+ Which webhook export form the UI uses to edit this listener. A value sent on create or
1674
+ update wins (case-insensitive — `Simple` is stored as `simple`); a PUT that omits it
1675
+ keeps the stored value, and a new export without one gets the default for its
1676
+ `provider`. Every webhook export GET carries it.
1677
+ examples:
1678
+ - webhook
1664
1679
  verify:
1665
1680
  type: string
1666
1681
  x-celigo-ui-override: Required by the webhook export form (verify is required:true). Encoded to mirror the form so builders produce connectable configurations.
@@ -5958,6 +5973,8 @@ components:
5958
5973
  A stream export that resolves no snapshot mode — neither `snapshotMode` nor a
5959
5974
  `snapshot.mode` entry in `properties` — is rejected 422 ("Expected field: snapshotMode
5960
5975
  to be present").
5976
+ required:
5977
+ - paths
5961
5978
  properties:
5962
5979
  captureMode:
5963
5980
  type: string
@@ -6067,13 +6084,13 @@ components:
6067
6084
  - Never author or modify this field — the platform owns the stream position.
6068
6085
  paths:
6069
6086
  type: array
6087
+ minItems: 1
6070
6088
  items:
6071
6089
  type: string
6072
6090
  description: |-
6073
- Dot-notation paths within each raw change event to retain in the emitted record. MongoDB
6074
- listeners default to `["payload"]` (the whole change document); SQL Server, PostgreSQL and
6075
- MySQL listeners commonly select `payload.after`, `payload.op`, and related fields to expose
6076
- the changed row and operation type. The MySQL listener form offers `payload.after`,
6091
+ Dot-notation paths within each raw change event to retain in the emitted record, such as
6092
+ `payload.after` (the changed row or document) and `payload.op` (the operation type).
6093
+ The MySQL listener form offers `payload.after`,
6077
6094
  `payload.before`, `schema`, `payload.source`, `payload.op`, `payload.transaction`,
6078
6095
  `payload.ts_ms`, `payload.ts_us` and `payload.ts_ns`, preselecting `payload.after`; it has
6079
6096
  no `updateDescription`-derived options and no `payload.id`. The MySQL listener
@@ -6081,8 +6098,9 @@ components:
6081
6098
  as the row before an update or delete (needs `binlog_row_image=FULL`), `op` as `c` / `u` /
6082
6099
  `d` / `r` (insert / update / delete / snapshot read) and `source` as the database, table,
6083
6100
  binlog file and position.
6101
+ x-celigo-ui-override: 'Required by every listener form (MongoDB, SQL Server, PostgreSQL, and MySQL: cdc.paths is a required:true multiselect with defaultValue [''payload.after'']). Encoded here to mirror the forms so builders produce complete listener configurations.'
6084
6102
  examples:
6085
- - - payload
6103
+ - - payload.after
6086
6104
  - - payload.after
6087
6105
  - payload.op
6088
6106
  - - payload.after
@@ -6110,7 +6128,9 @@ components:
6110
6128
  serialized first, followed by optional keys such as `field.exclude.list`,
6111
6129
  `column.include.list`, or `snapshot.collection.filter.overrides.<db>.<collection>`.
6112
6130
  On save the API also lifts `snapshot.mode` / `capture.mode` entries into the typed
6113
- `snapshotMode` / `captureMode` fields.
6131
+ `snapshotMode` / `captureMode` fields. When one body carries both with different values,
6132
+ the `snapshot.mode` entry wins on SQL Server, PostgreSQL and MySQL listeners, and the typed
6133
+ `snapshotMode` wins on a MongoDB listener.
6114
6134
 
6115
6135
  The MySQL listener form offers six keys: `snapshot.mode` (preselected `no_data`) and five
6116
6136
  optional comma-separated regular-expression lists — `table.exclude.list` (matched on
@@ -6125,6 +6145,11 @@ components:
6125
6145
  The API persists any key sent here without validating it against the connector, so a
6126
6146
  MongoDB or PostgreSQL key on a MySQL listener saves cleanly and does nothing — author only
6127
6147
  the keys the listener's form offers.
6148
+ - |-
6149
+ On SQL Server, PostgreSQL, and MySQL listeners every save appends one more
6150
+ `snapshot.mode` entry that repeats the resolved mode, so a GET response lists it twice
6151
+ and each GET-then-PUT round trip adds another copy. Send a single `snapshot.mode`
6152
+ entry: drop the trailing repeats before you PUT a fetched export back.
6128
6153
  items:
6129
6154
  type: object
6130
6155
  required:
@@ -12111,7 +12136,7 @@ components:
12111
12136
  {
12112
12137
  "type": "stream",
12113
12138
  "rdbms": { "tables": "public.orders,public.customers" },
12114
- "cdc": { "properties": [{ "name": "snapshot.mode", "value": "no_data" }] }
12139
+ "cdc": { "properties": [{ "name": "snapshot.mode", "value": "no_data" }], "paths": ["payload.after"] }
12115
12140
  }
12116
12141
  ```
12117
12142
  A MySQL listener names its tables as `database.table` (MySQL has no schema layer):
@@ -16754,7 +16779,9 @@ components:
16754
16779
  `stream` is accepted only on MongoDB and RDBMS exports (SQL Server,
16755
16780
  PostgreSQL or MySQL connections) and on Event Streams listeners
16756
16781
  (`adaptorType: TopicExport`); every other adaptor rejects the save
16757
- with `unsupported_export_type`. A MongoDB or RDBMS stream export
16782
+ with `unsupported_export_type`, and a MariaDB connection is rejected
16783
+ with 422 `missing_required_field` on `type` ("RDBMS stream export not
16784
+ supported for mariadb"). A MongoDB or RDBMS stream export
16758
16785
  must carry `cdc.snapshotMode` (and `cdc.captureMode` on MongoDB) —
16759
16786
  omitting them fails with 422 `missing_required_field` on those paths.
16760
16787
  enum:
package/dist/import.yml CHANGED
@@ -8567,9 +8567,23 @@ components:
8567
8567
  description: |-
8568
8568
  Tool resource this import executes. The tool supplies the input schema, routing, page
8569
8569
  processors, and output mapping; the import runs that tool when records reach it. Required —
8570
- a `ToolImport` has no behavior without a tool to run.
8570
+ a `ToolImport` has no behavior without a tool to run. Saving the import fails with 422 when the
8571
+ tool has no routers, a step still being set up, or a branch that does not merge back; the
8572
+ message names the tool.
8571
8573
  x-celigo-ai-guidance:
8572
8574
  - Reference to the Celigo Tool resource this wrapper invokes.
8575
+ - |-
8576
+ Finish the tool before saving its wrapper: a create or update of this import fails with 422
8577
+ tool_empty_router when the tool has no `routers` (missing or empty; the message reads "…has
8578
+ no steps. Add at least one step to the tool, then save again."), router_setup_in_progress
8579
+ when a step is still being set up (setupInProgress), and tool_dangling_branch when a branch
8580
+ has no nextRouterId ("outputRouter" ends the tool). Fix the tool with PUT /v1/tools/{_id},
8581
+ then save the import again.
8582
+ - |-
8583
+ A save that passes doesn't mean the tool runs: a branch with empty `pageProcessors` passes
8584
+ it, and the tool then fails at invoke with 400 tool_empty_router. Creating a parent tool, or
8585
+ a disabled flow, whose step is this wrapper is not checked either: both saved while the
8586
+ wrapped tool had no routers.
8573
8587
  - |-
8574
8588
  Required.
8575
8589
  The Tool must already exist;
@@ -8973,16 +8987,20 @@ components:
8973
8987
  The `key` + `batchSize` combination has not been probed (it needs a B2B Manager
8974
8988
  account) — treat it as unverified, neither allowed nor forbidden.
8975
8989
  encrypt:
8976
- type: boolean
8990
+ type: string
8991
+ enum:
8992
+ - pgp
8993
+ x-enumDescriptions:
8994
+ pgp: Encrypt the file with PGP before it is written.
8977
8995
  description: |-
8978
- Whether to encrypt the output file.
8979
-
8980
- **Values**
8981
- - `true`: Encrypt the file (requires PGP configuration)
8982
- - `false`: No encryption
8983
-
8984
- **Default:** `false`
8985
- default: false
8996
+ Encrypts the output file; omit it for an unencrypted file. `pgp` requires
8997
+ `pgp.symmetricKeyAlgorithm` and a connection holding the recipient's public key
8998
+ (`pgp.publicKey`) — without either the save fails with 422 `missing_required_field`.
8999
+ The public-key check runs first: on a connection without one, any `encrypt` value,
9000
+ `false` included, fails with 422 `missing_required_field` "pgp publicKey is required
9001
+ when encrypt is selected to perform file encryption." before the value is checked.
9002
+ Blob (file-transfer) imports follow the same rule and return `encrypt` and `pgp` even
9003
+ without `file.type`.
8986
9004
  csv:
8987
9005
  type: object
8988
9006
  description: CSV-specific configuration. Only used when `type` is `"csv"`.
@@ -9149,8 +9167,8 @@ components:
9149
9167
  pgp:
9150
9168
  type: object
9151
9169
  description: |-
9152
- PGP encryption settings applied when encrypt is true; selects the symmetric cipher and the
9153
- signing hash. The connection must hold the recipient's public key.
9170
+ PGP encryption settings applied when `encrypt` is `pgp`; selects the symmetric cipher and
9171
+ the signing hash. The connection must hold the recipient's public key.
9154
9172
  properties:
9155
9173
  symmetricKeyAlgorithm:
9156
9174
  type: string
@@ -9167,9 +9185,10 @@ components:
9167
9185
  3des: Triple DES block cipher (legacy).
9168
9186
  aes128: AES with a 128-bit key.
9169
9187
  aes192: AES with a 192-bit key.
9170
- aes256: AES with a 256-bit key (default, recommended).
9171
- default: aes256
9172
- description: Symmetric cipher used to encrypt the file body; aes256 unless the recipient requires another.
9188
+ aes256: AES with a 256-bit key (recommended).
9189
+ description: |-
9190
+ Symmetric cipher used to encrypt the file body; required when `encrypt` is `pgp` (no
9191
+ server default). Use aes256 unless the recipient requires another.
9173
9192
  examples:
9174
9193
  - aes256
9175
9194
  - 3des
@@ -18086,8 +18105,9 @@ components:
18086
18105
  type: object
18087
18106
  description: |-
18088
18107
  The outcome of running one input record through an import — one element
18089
- per record, in input order — shared by `POST /v1/imports/{_id}/invoke`
18090
- and the virtual import `POST /v1/connections/{_id}/import`. A record the
18108
+ per record, in input order — shared by `POST /v1/imports/{_id}/invoke`,
18109
+ the virtual import `POST /v1/connections/{_id}/import` and its
18110
+ integration-scoped forms. A record the
18091
18111
  import itself ignored before any request carries `ignored: true` and the
18092
18112
  `stage` that dropped it; a record the destination accepted carries its
18093
18113
  parsed response; a record the destination rejected — or that the