@celigo/api-specs 0.2.213 → 0.2.215

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.
@@ -1028,7 +1028,7 @@ paths:
1028
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
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
1030
  | `/http/rateLimit/limit` | Wait between consecutive requests, in milliseconds. 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` |
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 |
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`, `_agentGroupId`, `wrapper._stackId`, any `<adaptor>._iClientId`) is rejected |
1032
1032
 
1033
1033
  `replace` and `add` both set the value (a currently unset field is fine);
1034
1034
  `remove` unsets it. A `null` value is rejected. Any other path — including
@@ -4175,11 +4175,22 @@ components:
4175
4175
  format: objectId
4176
4176
  x-celigo-refModel: agents
4177
4177
  description: |
4178
- Reference to a Celigo on-premise Agent. Required for connection types that need
4179
- local network or filesystem access (JDBC, filesystem, Oracle RDBMS, and on-premise MongoDB).
4178
+ Reference to a Celigo on-premise Agent. Connection types that need local network or
4179
+ filesystem access (JDBC, filesystem, Oracle RDBMS, and on-premise MongoDB) carry one
4180
+ binding — this agent, or an agent group in `_agentGroupId`; never both.
4180
4181
  The agent establishes a secure tunnel between the on-premise environment and integrator.io.
4181
4182
  examples:
4182
4183
  - 5f8d43a1b9e5a80011a35f2c
4184
+ _agentGroupId:
4185
+ type: string
4186
+ format: objectId
4187
+ x-celigo-refModel: agentgroups
4188
+ description: |-
4189
+ On-premise agent group serving this connection, when one is bound
4190
+ instead of a single `_agentId`. Absent on connections that use a
4191
+ single agent or none.
4192
+ examples:
4193
+ - 6650a1b2c3d4e5f60718293a
4183
4194
  _borrowConcurrencyFromConnectionId:
4184
4195
  type: string
4185
4196
  format: objectId
@@ -6957,8 +6968,10 @@ components:
6957
6968
  x-celigo-ai-guidance:
6958
6969
  - The POST is rejected with 422 if type-specific required fields are missing (see the per-type conditional rules).
6959
6970
  - |-
6960
- For Oracle, a placeholder connection cannot be created without a real connection-level _agentId
6961
- (validator error agent_mode_only) — direct the user to install a Celigo Agent first. All other
6971
+ For Oracle, a placeholder connection cannot be created without a real on-premise binding — a
6972
+ connection-level _agentId, or an agent group through _agentGroupId (validator error
6973
+ agent_mode_only with neither; live-verified that a POST carrying only _agentGroupId is not
6974
+ answered with it) — direct the user to install a Celigo Agent first. All other
6962
6975
  RDBMS types accept placeholder credentials that satisfy the per-type required fields.
6963
6976
  - |-
6964
6977
  Celigo has native support for these database systems:
@@ -7009,16 +7022,17 @@ components:
7009
7022
  `_iClientId` with `basic` auth is rejected. Both types share the
7010
7023
  `mssql` sub-object; `azuresynapse` is cloud-only, and the SQL Server
7011
7024
  connection form offers service-principal auth in Cloud mode only — it
7012
- saves `basic` for an on-premise connection (`_agentId` set).
7013
- - **Oracle** — runs in agent mode only, so requires `_agentId` on the
7014
- parent connection object. Uses `serviceName` instead of `database`.
7025
+ saves `basic` for an on-premise connection (`_agentId` or `_agentGroupId` set).
7026
+ - **Oracle** — runs in agent mode only, so requires an on-premise binding on
7027
+ the parent connection object: `_agentId`, or an agent group's `_agentGroupId`
7028
+ (one of the two, never both). Uses `serviceName` instead of `database`.
7015
7029
  Optionally also takes `serverType` and `instanceName`.
7016
7030
 
7017
7031
  ## PLACEHOLDER / DUMMY RDBMS CONNECTIONS
7018
7032
 
7019
7033
  For Oracle, placeholder connections cannot be created without a real
7020
- `_agentId` — the validator will reject them. Direct the user to install
7021
- a Celigo Agent first. For all other RDBMS types, a placeholder can be
7034
+ `_agentId` or `_agentGroupId` — the validator will reject them. Direct the
7035
+ user to install a Celigo Agent first. For all other RDBMS types, a placeholder can be
7022
7036
  created with dummy credentials matching the rules above.
7023
7037
  x-celigo-ui-override: 'Several requireds mirror the connection form rather than the API: snowflake.warehouse, redshift.clusterIdentifier, redshift.user, and mssql version. The API creates connections without them (live-verified 201), but the form requires them and a functional connection needs them. For mysql, postgresql, and mariadb the form makes password conditional — not required when a full SSL client certificate (ssl.ca, ssl.key, ssl.cert) is supplied instead; the conditional below keeps password required for the common (non-SSL) path, which is the only path the API enforces.'
7024
7038
  required:
@@ -7041,7 +7055,7 @@ components:
7041
7055
  postgresql: PostgreSQL database (default port 5432).
7042
7056
  mssql: Microsoft SQL Server (default port 1433).
7043
7057
  snowflake: Snowflake Data Cloud (requires snowflake.warehouse).
7044
- oracle: Oracle Database; runs in agent mode and requires a connection-level _agentId (default port 1521, uses serviceName instead of database).
7058
+ oracle: Oracle Database; runs in agent mode and requires a connection-level _agentId or _agentGroupId (default port 1521, uses serviceName instead of database).
7045
7059
  bigquery: Google BigQuery; requires service account credentials in the bigquery sub-object.
7046
7060
  redshift: Amazon Redshift — provisioned clusters or Redshift Serverless; authenticates with static access keys or an AWS IAM role iClient (redshift.authType).
7047
7061
  mariadb: MariaDB database (default port 3306).
@@ -7266,7 +7280,7 @@ components:
7266
7280
  iClient — a client secret, or on SQL Server a certificate — and
7267
7281
  `_iClientId` must reference it. The SQL Server connection form
7268
7282
  offers `azure-service-principal` in Cloud mode only and saves
7269
- `basic` for an on-premise connection (`_agentId` set).
7283
+ `basic` for an on-premise connection (`_agentId` or `_agentGroupId` set).
7270
7284
  default: basic
7271
7285
  examples:
7272
7286
  - basic
@@ -7732,9 +7746,9 @@ components:
7732
7746
  422 "Expected field: <field> to be present" if any of the three is missing. database is not
7733
7747
  required; when omitted, set it per operation instead.
7734
7748
  - |-
7735
- For an on-premise MongoDB instance, set the connection-level _agentId (the form's "On-premise"
7736
- mode) so traffic routes through a Celigo Agent. Cloud-reachable instances (including Atlas)
7737
- need no agent.
7749
+ For an on-premise MongoDB instance, bind the connection to one agent (connection-level
7750
+ _agentId) or to one agent group (_agentGroupId) — the form's "On-premise" mode — so traffic
7751
+ routes through a Celigo Agent. Cloud-reachable instances (including Atlas) need no agent.
7738
7752
  - |-
7739
7753
  ## AUTHENTICATION
7740
7754
  Username and password are optional — only required when the MongoDB server has
@@ -8434,8 +8448,8 @@ components:
8434
8448
  description: |-
8435
8449
  Configuration for filesystem connections. Used when the connection type is "filesystem".
8436
8450
  Provides access to directories on a Celigo on-premise Agent's host or mounted network
8437
- drives, so a connection-level `_agentId` is required — cloud-only deployments cannot use
8438
- this type. File-based PGP encryption/decryption is configured through the connection-level
8451
+ drives, so an on-premise binding is required — a connection-level `_agentId`, or an agent
8452
+ group through `_agentGroupId` — and cloud-only deployments cannot use this type. File-based PGP encryption/decryption is configured through the connection-level
8439
8453
  `pgp` object.
8440
8454
  properties:
8441
8455
  ping:
@@ -8481,9 +8495,10 @@ components:
8481
8495
  mounted network drives.
8482
8496
 
8483
8497
  ## AGENT REQUIREMENT
8484
- A Celigo Agent is REQUIRED for filesystem connections (set _agentId on the parent
8485
- connection object). The agent provides the filesystem access — cloud-only
8486
- deployments cannot use this connection type.
8498
+ A Celigo Agent is REQUIRED for filesystem connections: bind the parent connection
8499
+ object to one agent (_agentId) or to one agent group (_agentGroupId) — one of the
8500
+ two, never both. The agent provides the filesystem access — cloud-only deployments
8501
+ cannot use this connection type.
8487
8502
  token:
8488
8503
  type: object
8489
8504
  description: |
@@ -8957,13 +8972,17 @@ components:
8957
8972
  Configuration for JDBC (Java Database Connectivity) connections. Used when the connection
8958
8973
  type is "jdbc". Provides access through Java JDBC drivers to databases not covered by the
8959
8974
  rdbms type — such as NetSuite SuiteAnalytics, Databricks, DB2, and Workday. The driver runs
8960
- on a Celigo on-premise Agent, so most jdbc connections need a connection-level _agentId.
8975
+ on a Celigo on-premise Agent, so most jdbc connections need an on-premise binding — a
8976
+ connection-level _agentId, or an agent group through _agentGroupId.
8961
8977
  x-celigo-ai-guidance:
8962
8978
  - The POST is rejected with 422 if type-specific required fields are missing (see the per-type conditional rules).
8963
8979
  - |-
8964
- The agent and activedirectory types require a real connection-level _agentId: the POST fails with
8965
- 422 "The JDBC connection requires Agent. Expected field: _agentId to be present in the connection
8966
- doc." A placeholder cannot be created without one, so the user should install a Celigo Agent first.
8980
+ The agent and activedirectory types require a real on-premise binding — a connection-level
8981
+ _agentId, or an agent group through _agentGroupId (one of the two, never both; the agent-mode
8982
+ check accepts either — live-verified for both agent and activedirectory: a POST carrying only
8983
+ _agentGroupId is not answered with agent_mode_only): with neither, the POST fails with 422 "The JDBC
8984
+ connection requires Agent. Expected field: _agentId to be present in the connection doc." A
8985
+ placeholder cannot be created without one, so the user should install a Celigo Agent first.
8967
8986
  Other types commonly run on an agent too, but only these two are validator-enforced (live-verified
8968
8987
  celigo-labs-2 2026-06-11).
8969
8988
  x-celigo-ui-override: 'Two activedirectory requireds mirror the connection form rather than the API: password and port (default 389). The API creates an activedirectory connection without them (it auto-defaults port to 389), but the form requires both, so they are encoded to mirror the form. The workday user and password requireds are NOT form overrides — they are enforced by the API itself (POST returns 422 "Expected field: user/password to be present"). Per-type forms also require named entries inside jdbc.properties (netsuitejdbc AccountID + ServerDataSource; db2 AuthScheme; workday tenant/connectionType/authScheme; activedirectory LDAPVersion/BaseDN) — documented in prose since they live in the properties name/value array.'
@@ -9910,12 +9929,32 @@ components:
9910
9929
  format: objectId
9911
9930
  x-celigo-refModel: agents
9912
9931
  description: |-
9913
- Reference to a Celigo on-premise Agent. Required for types that need local network or
9914
- filesystem access (filesystem, jdbc agent/activedirectory, Oracle rdbms, and on-premise
9915
- mongodb). The agent establishes a secure tunnel between the on-premise environment and
9916
- integrator.io.
9932
+ Reference to a Celigo on-premise Agent. Types that run on an agent (filesystem, jdbc
9933
+ agent/activedirectory, Oracle rdbms, and on-premise mongodb) need one binding — this
9934
+ agent, or an agent group through `_agentGroupId`; either satisfies the requirement
9935
+ (live-verified for filesystem, jdbc `agent` and `activedirectory`, and Oracle: with
9936
+ neither id the POST answers 422 `agent_mode_only`; with `_agentGroupId` alone it does not).
9937
+ The agent establishes a secure tunnel between the on-premise environment and
9938
+ integrator.io. The connection form writes one of the two ids and omits the other; a
9939
+ connection never carries both.
9917
9940
  examples:
9918
9941
  - 5f8d43a1b9e5a80011a35f2c
9942
+ _agentGroupId:
9943
+ type: string
9944
+ format: objectId
9945
+ x-celigo-refModel: agentgroups
9946
+ description: |-
9947
+ On-premise agent group that serves this connection instead of a single
9948
+ `_agentId`; a connection binds one or the other, never both — the connection
9949
+ form writes one id and omits the other. Requests go to the first healthy
9950
+ member in the group's priority order (source-only: the dispatch rule the
9951
+ platform implements), so one host failing does not stop the flow. On an
9952
+ account whose license does not include agent groups, sending it fails with
9953
+ 422 `agent_groups_subscription_required` — "Your license does not support
9954
+ the agent groups feature." (live-verified); an id that names no group adds
9955
+ 422 `invalid_ref` on `_agentGroupId` to the same response.
9956
+ examples:
9957
+ - 6650a1b2c3d4e5f60718293a
9919
9958
  _borrowConcurrencyFromConnectionId:
9920
9959
  type: string
9921
9960
  format: objectId
@@ -10001,9 +10040,10 @@ components:
10001
10040
  x-celigo-ai-guidance:
10002
10041
  - |-
10003
10042
  List only the credential and tenant fields that differ per end user, never a path the
10004
- account owns: `type`, `_agentId`, `wrapper._stackId`, or any `<adaptor>._iClientId`
10043
+ account owns: `type`, `_agentId`, `_agentGroupId`, `wrapper._stackId`, or any `<adaptor>._iClientId`
10005
10044
  (e.g. `http._iClientId`) fails the save with 422
10006
- `mcp_end_user_provided_field_not_allowed`.
10045
+ `mcp_end_user_provided_field_not_allowed` (live-verified for `_agentGroupId`:
10046
+ "_agentGroupId is managed by the account owner and cannot be requested from an end user.").
10007
10047
  - |-
10008
10048
  This is the only MCP end-user field writable through `/v1/connections`; the child
10009
10049
  connections themselves are created by the end-user setup page, and `connectionRole:
@@ -10216,7 +10256,11 @@ components:
10216
10256
  then:
10217
10257
  required:
10218
10258
  - filesystem
10219
- - _agentId
10259
+ anyOf:
10260
+ - required:
10261
+ - _agentId
10262
+ - required:
10263
+ - _agentGroupId
10220
10264
  else:
10221
10265
  if:
10222
10266
  properties:
@@ -10260,8 +10304,11 @@ components:
10260
10304
  required:
10261
10305
  - jdbc
10262
10306
  then:
10263
- required:
10264
- - _agentId
10307
+ anyOf:
10308
+ - required:
10309
+ - _agentId
10310
+ - required:
10311
+ - _agentGroupId
10265
10312
  else:
10266
10313
  if:
10267
10314
  properties:
package/dist/enduser.yml CHANGED
@@ -2200,11 +2200,22 @@ components:
2200
2200
  format: objectId
2201
2201
  x-celigo-refModel: agents
2202
2202
  description: |
2203
- Reference to a Celigo on-premise Agent. Required for connection types that need
2204
- local network or filesystem access (JDBC, filesystem, Oracle RDBMS, and on-premise MongoDB).
2203
+ Reference to a Celigo on-premise Agent. Connection types that need local network or
2204
+ filesystem access (JDBC, filesystem, Oracle RDBMS, and on-premise MongoDB) carry one
2205
+ binding — this agent, or an agent group in `_agentGroupId`; never both.
2205
2206
  The agent establishes a secure tunnel between the on-premise environment and integrator.io.
2206
2207
  examples:
2207
2208
  - 5f8d43a1b9e5a80011a35f2c
2209
+ _agentGroupId:
2210
+ type: string
2211
+ format: objectId
2212
+ x-celigo-refModel: agentgroups
2213
+ description: |-
2214
+ On-premise agent group serving this connection, when one is bound
2215
+ instead of a single `_agentId`. Absent on connections that use a
2216
+ single agent or none.
2217
+ examples:
2218
+ - 6650a1b2c3d4e5f60718293a
2208
2219
  _borrowConcurrencyFromConnectionId:
2209
2220
  type: string
2210
2221
  format: objectId
@@ -4982,8 +4993,10 @@ components:
4982
4993
  x-celigo-ai-guidance:
4983
4994
  - The POST is rejected with 422 if type-specific required fields are missing (see the per-type conditional rules).
4984
4995
  - |-
4985
- For Oracle, a placeholder connection cannot be created without a real connection-level _agentId
4986
- (validator error agent_mode_only) — direct the user to install a Celigo Agent first. All other
4996
+ For Oracle, a placeholder connection cannot be created without a real on-premise binding — a
4997
+ connection-level _agentId, or an agent group through _agentGroupId (validator error
4998
+ agent_mode_only with neither; live-verified that a POST carrying only _agentGroupId is not
4999
+ answered with it) — direct the user to install a Celigo Agent first. All other
4987
5000
  RDBMS types accept placeholder credentials that satisfy the per-type required fields.
4988
5001
  - |-
4989
5002
  Celigo has native support for these database systems:
@@ -5034,16 +5047,17 @@ components:
5034
5047
  `_iClientId` with `basic` auth is rejected. Both types share the
5035
5048
  `mssql` sub-object; `azuresynapse` is cloud-only, and the SQL Server
5036
5049
  connection form offers service-principal auth in Cloud mode only — it
5037
- saves `basic` for an on-premise connection (`_agentId` set).
5038
- - **Oracle** — runs in agent mode only, so requires `_agentId` on the
5039
- parent connection object. Uses `serviceName` instead of `database`.
5050
+ saves `basic` for an on-premise connection (`_agentId` or `_agentGroupId` set).
5051
+ - **Oracle** — runs in agent mode only, so requires an on-premise binding on
5052
+ the parent connection object: `_agentId`, or an agent group's `_agentGroupId`
5053
+ (one of the two, never both). Uses `serviceName` instead of `database`.
5040
5054
  Optionally also takes `serverType` and `instanceName`.
5041
5055
 
5042
5056
  ## PLACEHOLDER / DUMMY RDBMS CONNECTIONS
5043
5057
 
5044
5058
  For Oracle, placeholder connections cannot be created without a real
5045
- `_agentId` — the validator will reject them. Direct the user to install
5046
- a Celigo Agent first. For all other RDBMS types, a placeholder can be
5059
+ `_agentId` or `_agentGroupId` — the validator will reject them. Direct the
5060
+ user to install a Celigo Agent first. For all other RDBMS types, a placeholder can be
5047
5061
  created with dummy credentials matching the rules above.
5048
5062
  x-celigo-ui-override: 'Several requireds mirror the connection form rather than the API: snowflake.warehouse, redshift.clusterIdentifier, redshift.user, and mssql version. The API creates connections without them (live-verified 201), but the form requires them and a functional connection needs them. For mysql, postgresql, and mariadb the form makes password conditional — not required when a full SSL client certificate (ssl.ca, ssl.key, ssl.cert) is supplied instead; the conditional below keeps password required for the common (non-SSL) path, which is the only path the API enforces.'
5049
5063
  required:
@@ -5066,7 +5080,7 @@ components:
5066
5080
  postgresql: PostgreSQL database (default port 5432).
5067
5081
  mssql: Microsoft SQL Server (default port 1433).
5068
5082
  snowflake: Snowflake Data Cloud (requires snowflake.warehouse).
5069
- oracle: Oracle Database; runs in agent mode and requires a connection-level _agentId (default port 1521, uses serviceName instead of database).
5083
+ oracle: Oracle Database; runs in agent mode and requires a connection-level _agentId or _agentGroupId (default port 1521, uses serviceName instead of database).
5070
5084
  bigquery: Google BigQuery; requires service account credentials in the bigquery sub-object.
5071
5085
  redshift: Amazon Redshift — provisioned clusters or Redshift Serverless; authenticates with static access keys or an AWS IAM role iClient (redshift.authType).
5072
5086
  mariadb: MariaDB database (default port 3306).
@@ -5291,7 +5305,7 @@ components:
5291
5305
  iClient — a client secret, or on SQL Server a certificate — and
5292
5306
  `_iClientId` must reference it. The SQL Server connection form
5293
5307
  offers `azure-service-principal` in Cloud mode only and saves
5294
- `basic` for an on-premise connection (`_agentId` set).
5308
+ `basic` for an on-premise connection (`_agentId` or `_agentGroupId` set).
5295
5309
  default: basic
5296
5310
  examples:
5297
5311
  - basic
@@ -5757,9 +5771,9 @@ components:
5757
5771
  422 "Expected field: <field> to be present" if any of the three is missing. database is not
5758
5772
  required; when omitted, set it per operation instead.
5759
5773
  - |-
5760
- For an on-premise MongoDB instance, set the connection-level _agentId (the form's "On-premise"
5761
- mode) so traffic routes through a Celigo Agent. Cloud-reachable instances (including Atlas)
5762
- need no agent.
5774
+ For an on-premise MongoDB instance, bind the connection to one agent (connection-level
5775
+ _agentId) or to one agent group (_agentGroupId) — the form's "On-premise" mode — so traffic
5776
+ routes through a Celigo Agent. Cloud-reachable instances (including Atlas) need no agent.
5763
5777
  - |-
5764
5778
  ## AUTHENTICATION
5765
5779
  Username and password are optional — only required when the MongoDB server has
@@ -6459,8 +6473,8 @@ components:
6459
6473
  description: |-
6460
6474
  Configuration for filesystem connections. Used when the connection type is "filesystem".
6461
6475
  Provides access to directories on a Celigo on-premise Agent's host or mounted network
6462
- drives, so a connection-level `_agentId` is required — cloud-only deployments cannot use
6463
- this type. File-based PGP encryption/decryption is configured through the connection-level
6476
+ drives, so an on-premise binding is required — a connection-level `_agentId`, or an agent
6477
+ group through `_agentGroupId` — and cloud-only deployments cannot use this type. File-based PGP encryption/decryption is configured through the connection-level
6464
6478
  `pgp` object.
6465
6479
  properties:
6466
6480
  ping:
@@ -6506,9 +6520,10 @@ components:
6506
6520
  mounted network drives.
6507
6521
 
6508
6522
  ## AGENT REQUIREMENT
6509
- A Celigo Agent is REQUIRED for filesystem connections (set _agentId on the parent
6510
- connection object). The agent provides the filesystem access — cloud-only
6511
- deployments cannot use this connection type.
6523
+ A Celigo Agent is REQUIRED for filesystem connections: bind the parent connection
6524
+ object to one agent (_agentId) or to one agent group (_agentGroupId) — one of the
6525
+ two, never both. The agent provides the filesystem access — cloud-only deployments
6526
+ cannot use this connection type.
6512
6527
  token:
6513
6528
  type: object
6514
6529
  description: |
@@ -6982,13 +6997,17 @@ components:
6982
6997
  Configuration for JDBC (Java Database Connectivity) connections. Used when the connection
6983
6998
  type is "jdbc". Provides access through Java JDBC drivers to databases not covered by the
6984
6999
  rdbms type — such as NetSuite SuiteAnalytics, Databricks, DB2, and Workday. The driver runs
6985
- on a Celigo on-premise Agent, so most jdbc connections need a connection-level _agentId.
7000
+ on a Celigo on-premise Agent, so most jdbc connections need an on-premise binding — a
7001
+ connection-level _agentId, or an agent group through _agentGroupId.
6986
7002
  x-celigo-ai-guidance:
6987
7003
  - The POST is rejected with 422 if type-specific required fields are missing (see the per-type conditional rules).
6988
7004
  - |-
6989
- The agent and activedirectory types require a real connection-level _agentId: the POST fails with
6990
- 422 "The JDBC connection requires Agent. Expected field: _agentId to be present in the connection
6991
- doc." A placeholder cannot be created without one, so the user should install a Celigo Agent first.
7005
+ The agent and activedirectory types require a real on-premise binding — a connection-level
7006
+ _agentId, or an agent group through _agentGroupId (one of the two, never both; the agent-mode
7007
+ check accepts either — live-verified for both agent and activedirectory: a POST carrying only
7008
+ _agentGroupId is not answered with agent_mode_only): with neither, the POST fails with 422 "The JDBC
7009
+ connection requires Agent. Expected field: _agentId to be present in the connection doc." A
7010
+ placeholder cannot be created without one, so the user should install a Celigo Agent first.
6992
7011
  Other types commonly run on an agent too, but only these two are validator-enforced (live-verified
6993
7012
  celigo-labs-2 2026-06-11).
6994
7013
  x-celigo-ui-override: 'Two activedirectory requireds mirror the connection form rather than the API: password and port (default 389). The API creates an activedirectory connection without them (it auto-defaults port to 389), but the form requires both, so they are encoded to mirror the form. The workday user and password requireds are NOT form overrides — they are enforced by the API itself (POST returns 422 "Expected field: user/password to be present"). Per-type forms also require named entries inside jdbc.properties (netsuitejdbc AccountID + ServerDataSource; db2 AuthScheme; workday tenant/connectionType/authScheme; activedirectory LDAPVersion/BaseDN) — documented in prose since they live in the properties name/value array.'
package/dist/export.yml CHANGED
@@ -15412,12 +15412,16 @@ components:
15412
15412
  - |-
15413
15413
  On a grouped record (the export groups rows, so the record is an
15414
15414
  array) only `create` can author output — build it from the rows with
15415
- `$[0].field`, `$[*].field`, or a `buildArrayHelper` over `$[*]`.
15415
+ `$[0].field`, `$[*].field`, or a `buildArrayHelper` over `$[*]`
15416
+ (`$.rows[0].field` and `$.rows[*]` with `inputContext: envelope`).
15416
15417
  `modify` has no object to overlay onto an array: the record passes
15417
- through untouched and the processor reports success. Either mode
15418
- reshapes the inside of one record; neither changes how many records
15419
- the page carries (that is the export's `preSavePage` hook) or whether
15420
- the export groups at all (that is its grouping setting).
15418
+ through untouched and the processor reports success. Paths written
15419
+ for one object record (`$.field`, an entry `$.lines[*]`) resolve
15420
+ nothing there, so `create` returns `{}` for each record, also with
15421
+ no error (live, 2026-10-30). Either mode reshapes the inside of one
15422
+ record; neither changes how many records the page carries (that is
15423
+ the export's `preSavePage` hook) or whether the export groups at all
15424
+ (that is its grouping setting).
15421
15425
  examples:
15422
15426
  - create
15423
15427
  - modify
@@ -15482,8 +15486,8 @@ components:
15482
15486
  - record
15483
15487
  - envelope
15484
15488
  x-enumDescriptions:
15485
- record: The transform processor evaluates `mappings[].extract` JSONPath against the flat record itself (`$.field`, no `record.` segment) — the default when absent.
15486
- envelope: The transform processor evaluates JSONPath against the wrapped runtime envelope `{record, job, testMode, settings, headers, queryParams}` (file-provider steps also carry `fileMeta`) — record fields need the `record.` segment (`$.record.field`), while `headers` and `queryParams` sit beside `record` (`$.headers['X-Id']`, `$.queryParams.src`).
15489
+ record: The transform processor evaluates `mappings[].extract` JSONPath against the flat record itself (`$.field`, no `record.` segment; a grouped record is the array of rows, `$[0].field`) — the default when absent.
15490
+ envelope: The transform processor evaluates JSONPath against the wrapped runtime envelope `{record, job, testMode, settings, headers, queryParams}` (file-provider steps also carry `fileMeta`) — record fields need the `record.` segment (`$.record.field`), and a grouped record sits under `rows` instead (`$.rows[0].field`), while `headers` and `queryParams` sit beside `record` (`$.headers['X-Id']`, `$.queryParams.src`).
15487
15491
  description: |
15488
15492
  Controls the JSON shape the transformTwoDotZero processor
15489
15493
  evaluates `mappings[].extract` JSONPath values against at
@@ -15499,24 +15503,38 @@ components:
15499
15503
  processor sees the FLAT record as its evaluation root.
15500
15504
  `mappings[].extract` JSONPath MUST anchor directly at
15501
15505
  `$` with NO `record.` segment — e.g. `"$.orderId"`,
15502
- `"$.customer.email"`; PLACEHOLDER extracts use
15506
+ `"$.customer.email"` on an object record, `"$[0].orderId"`
15507
+ on a grouped one; PLACEHOLDER extracts use
15503
15508
  `"$.PLACEHOLDER_<field>"`.
15504
15509
  This is the dominant Celigo idiom and the right choice for new transforms.
15505
15510
  - `envelope`: the processor sees a wrapped object
15506
15511
  `{record: {...}, job, testMode, settings, headers,
15507
15512
  queryParams}` (plus `fileMeta` on file-provider steps).
15508
15513
  `mappings[].extract` JSONPath MUST include the
15509
- `record.` segment for record fields — e.g.
15510
- `"$.record.orderId"` — and reads `headers` and
15514
+ `record.` segment for an object record's fields — e.g.
15515
+ `"$.record.orderId"`; a grouped record sits under `rows`
15516
+ instead (`"$.rows[0].orderId"`) — and reads `headers` and
15511
15517
  `queryParams` beside it (`$.headers['X-Id']`);
15512
15518
  PLACEHOLDER extracts use `"$.record.PLACEHOLDER_<field>"`.
15513
15519
  Pick this only when the transform was authored against
15514
15520
  the envelope shape on purpose.
15515
15521
  - |-
15516
- Handlebars expressions inside `extract`
15517
- (`{{record.field}}`, `{{dateFormat ... record.field}}`)
15518
- ALWAYS reference the `record` root regardless of
15522
+ Handlebars expressions inside `extract` reference the
15523
+ `record` root on an object record (`{{record.field}}`,
15524
+ `{{dateFormat ... record.field}}`) and `rows` on a
15525
+ grouped one (`{{rows.0.field}}`), regardless of
15519
15526
  `inputContext` — only JSONPath anchoring flips.
15527
+ - |-
15528
+ ## Grouped records
15529
+
15530
+ When the export groups rows, each record is an array of
15531
+ rows. In `record` mode JSONPath roots at that array
15532
+ (`$[0].field`, `$[*]`); `envelope` binds it as `rows`,
15533
+ not `record` — `$.rows[0].field`, and an entry
15534
+ `$.rows[*]` whose children read `$.rows.field` — while
15535
+ `$.record[0].field` and `$.record[*]` resolve nothing,
15536
+ with no error (live, 2026-10-30). Handlebars extracts
15537
+ read it as `rows` in both modes (`{{rows.0.field}}`).
15520
15538
  - |-
15521
15539
  In `envelope` mode the output is still a bare record: a
15522
15540
  `modify` transform returns the record with its mapped
@@ -15537,7 +15555,8 @@ components:
15537
15555
  ``mappings[].extract`` JSONPath values MUST anchor
15538
15556
  directly at ``$`` with NO ``record.`` segment — for
15539
15557
  example ``"$.orderId"`` or
15540
- ``"$.customer.email"``. PLACEHOLDER extracts use
15558
+ ``"$.customer.email"`` on an object record, and
15559
+ ``"$[0].orderId"`` on a grouped one. PLACEHOLDER extracts use
15541
15560
  ``"$.PLACEHOLDER_<field>"``. This is the dominant
15542
15561
  Celigo idiom and the right choice for new transforms.
15543
15562
 
@@ -15549,9 +15568,10 @@ components:
15549
15568
  ``record``) — the
15550
15569
  same runtime-context envelope Handlebars / SQL /
15551
15570
  GraphQL templates render against. ``mappings[].extract``
15552
- JSONPath values for record fields MUST include the
15571
+ JSONPath values for an object record's fields MUST include the
15553
15572
  ``record.`` segment — for example ``"$.record.orderId"``
15554
- or ``"$.record.customer.email"`` — while ``headers`` and
15573
+ or ``"$.record.customer.email"``; a grouped record's rows
15574
+ sit under ``rows`` instead (``"$.rows[0].orderId"``) — while ``headers`` and
15555
15575
  ``queryParams`` are read beside it
15556
15576
  (``"$.headers['X-Id']"``). PLACEHOLDER extracts
15557
15577
  use ``"$.record.PLACEHOLDER_<field>"``. Pick this
@@ -15564,8 +15584,9 @@ components:
15564
15584
 
15565
15585
  Handlebars expressions inside ``extract``
15566
15586
  (``{{record.field}}``,
15567
- ``{{dateFormat ... record.field}}``, etc.) ALWAYS
15568
- reference the runtime context's ``record`` root
15587
+ ``{{dateFormat ... record.field}}``, etc.) reference the
15588
+ runtime context's ``record`` root on an object record,
15589
+ and ``rows`` (``{{rows.0.field}}``) on a grouped one,
15569
15590
  regardless of ``inputContext`` — the Handlebars runtime
15570
15591
  always sees the wrapped envelope. Only JSONPath
15571
15592
  behavior flips with this field.
@@ -16426,8 +16447,8 @@ components:
16426
16447
  **Structure**
16427
16448
 
16428
16449
  The mock output must follow the integrator.io canonical format, which consists of a
16429
- `page_of_records` array containing record objects. Each record object has a `record`
16430
- property that contains the actual data fields.
16450
+ `page_of_records` array of items. On an export that does not group rows, each item has a
16451
+ `record` property that contains the actual data fields:
16431
16452
 
16432
16453
  ```json
16433
16454
  {
@@ -16444,6 +16465,19 @@ components:
16444
16465
  }
16445
16466
  ```
16446
16467
 
16468
+ An export that groups rows (`groupByFields`) produces records that are arrays of rows, and
16469
+ each item then carries `rows` instead of `record`, holding the rows of one grouped record. A
16470
+ flow test run saves a grouped export's records in this form:
16471
+
16472
+ ```json
16473
+ {
16474
+ "page_of_records": [
16475
+ { "rows": [ { "field1": "value1" }, { "field1": "value2" } ] },
16476
+ ...
16477
+ ]
16478
+ }
16479
+ ```
16480
+
16447
16481
  **Usage**
16448
16482
 
16449
16483
  In a flow test run, and for an upstream lookup during a page-processor preview
@@ -16476,7 +16510,8 @@ components:
16476
16510
 
16477
16511
  - Maximum of 10 records
16478
16512
  - Maximum size of 1 MB
16479
- - Must follow the canonical format shown above
16513
+ - Must follow one of the canonical formats shown above: every item `{"record": {...}}`, or
16514
+ on a grouped export every item `{"rows": [...]}`
16480
16515
 
16481
16516
  Mock output can be populated automatically from preview data (which is the parsed response,
16482
16517
  before `transform` / `filter`) or entered manually.
@@ -16518,6 +16553,22 @@ components:
16518
16553
  categories:
16519
16554
  - Electronics
16520
16555
  - Accessories
16556
+ rows:
16557
+ type: array
16558
+ description: |
16559
+ The rows of one grouped record, present instead of `record` when the export
16560
+ groups rows (`groupByFields`). Every item of a grouped export's mock carries
16561
+ `rows`.
16562
+ items:
16563
+ type: object
16564
+ additionalProperties: true
16565
+ example:
16566
+ - orderId: SO-1001
16567
+ sku: SKU-100
16568
+ quantity: 2
16569
+ - orderId: SO-1001
16570
+ sku: SKU-200
16571
+ quantity: 1
16521
16572
  example:
16522
16573
  page_of_records:
16523
16574
  - record: