@celigo/api-specs 0.2.159 → 0.2.160

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
@@ -4589,6 +4589,10 @@ components:
4589
4589
  - Items that don't match are completely skipped
4590
4590
  - No partial processing is performed
4591
4591
 
4592
+ Send the whole object. A rules array sent alone as the `filter` value is not
4593
+ stored, and a full update of an export that carries one removes the filter the
4594
+ export had, with no error.
4595
+
4592
4596
  **Implementation approaches**
4593
4597
 
4594
4598
  There are two distinct filtering mechanisms available:
@@ -4739,6 +4743,8 @@ components:
4739
4743
  **Using `extract` to access record fields:**
4740
4744
  - Retrieves values from the current record being processed
4741
4745
  - Can access nested properties using dot notation (e.g., `"customer.email"`)
4746
+ - Paths are relative to the record itself: `["extract", "record.status"]`
4747
+ matches nothing
4742
4748
  - In a record filter, must be wrapped in a type conversion (`string`, `number`,
4743
4749
  `boolean` or `epochtime`): a bare `["extract", ...]` operand is refused with 422
4744
4750
  "Field operation extract must be called by a Type Conversion Operation but was called
@@ -4749,9 +4755,17 @@ components:
4749
4755
  - Retrieves values from the integration's configuration settings
4750
4756
  - Supports different scopes with prefix notation:
4751
4757
  - `flow.settingName`: Access flow-level settings
4752
- - `export.settingName`: Access export-level settings
4753
- - `import.settingName`: Access import-level settings
4758
+ - `flowGrouping.settingName`: Access the flow group's settings
4759
+ - `export.settingName`: Access the export's (or lookup's) own settings
4760
+ - `import.settingName`: Access the import's own settings
4754
4761
  - `integration.settingName`: Access integration-level settings
4762
+ - `connection.settingName`, `iClient.settingName`: Access the step's
4763
+ connection and iClient settings
4764
+ - A scope whose resource has no settings can be absent; a rule that reads
4765
+ it matches nothing
4766
+ - Must be wrapped in a type conversion like `extract`: a bare
4767
+ `["settings", ...]` operand is refused with 422 "Field operation settings
4768
+ must be called by a Type Conversion Operation"
4755
4769
  - Useful for dynamic filtering based on configuration
4756
4770
 
4757
4771
  **Field Transformations**
@@ -4761,6 +4775,24 @@ components:
4761
4775
  - `"floor"`: Round number down to the nearest integer
4762
4776
  - `"abs"`: Get absolute value of a number
4763
4777
 
4778
+ **Arithmetic** (number operands)
4779
+ - `"add"`, `"subtract"`, `"multiply"`, `"divide"`, `"modulo"`: for example
4780
+ `["subtract", ["number", ["extract", "total"]], ["number", ["extract", "discount"]]]`.
4781
+ `mod` is not an operator (422 "Invalid operation: mod.").
4782
+
4783
+ **Dates**
4784
+ - `epochtime` reads ISO 8601 strings and epoch-millisecond numbers. An empty
4785
+ string, a string that isn't a date, or epoch milliseconds sent as a string
4786
+ fail it with "Invalid date. Cannot convert given string or number to date
4787
+ time.", followed by `; record=` and the record as JSON: in a run that record fails (`FILTER_EVALUATION_FAILED`, source
4788
+ `output_filter` on an export), and `POST /v1/processors/filter` and an
4789
+ export preview refuse the whole call with 422. `and` and `or` evaluate
4790
+ every operand, so a `notempty` test beside it doesn't prevent the failure.
4791
+ A missing or null field doesn't match.
4792
+ - `datetime`, `date` and `timestamp` are not type conversions: 422
4793
+ "Invalid operation: <name>."
4794
+ - `number` reads a missing or empty field as 0.
4795
+
4764
4796
  **Handlebars operands**
4765
4797
  - An operand can also be a string holding exactly one Handlebars expression, such as
4766
4798
  `"{{record.status}}"` or `"{{lowercase record.code}}"`, on either side of the
@@ -4772,6 +4804,12 @@ components:
4772
4804
  with 422 "invalid datetime format".
4773
4805
  - A string with text around the expression, or with more than one expression, is
4774
4806
  compared as a literal.
4807
+ - `["number", "{{timestamp \"x\"}}"]` is the current time in epoch milliseconds,
4808
+ so `["greaterthanequals", ["epochtime", ["extract", "created"]], ["subtract",
4809
+ ["number", "{{timestamp \"x\"}}"], 604800000]]` keeps records created in the
4810
+ last 7 days.
4811
+ - An unknown helper fails the rule with 422 "Failed to evaluate handlebars
4812
+ expression".
4775
4813
 
4776
4814
  Choose the type conversion that matches the comparison — `number` for numeric
4777
4815
  comparisons, `epochtime` for dates, `string` for text. For example:
package/dist/export.yml CHANGED
@@ -489,9 +489,10 @@ paths:
489
489
 
490
490
  Use `test.limit` inside the body to cap the number of records
491
491
  returned. Configuration errors in the export doc surface in the
492
- `errors[]` and `stages[].errors[]` arrays within a 200 response;
493
- only structural validation failures (e.g. missing `_connectionId`)
494
- return 4xx.
492
+ `errors[]` and `stages[].errors[]` arrays within a 200 response, but
493
+ not every failure does: structural validation failures (e.g. missing
494
+ `_connectionId`) return 4xx, and so does an output filter that can't
495
+ read a record's value (see the 422 response).
495
496
  requestBody:
496
497
  required: true
497
498
  content:
@@ -522,7 +523,8 @@ paths:
522
523
  responses:
523
524
  '200':
524
525
  description: |-
525
- Preview envelope — always returned on valid-body calls. User-error in
526
+ Preview envelope for a preview that ran; a valid body can still answer
527
+ 422 (see that response). User-error in
526
528
  the export config (handlebars template failures, runtime errors)
527
529
  surfaces in `errors[]` and `stages[].errors[]`; inspect those before
528
530
  trusting `stages[].data[]`.
@@ -553,7 +555,11 @@ paths:
553
555
  description: |-
554
556
  Structural validation failed — typically `missing_required_field`
555
557
  for fields the preview pipeline needs before it can execute
556
- (e.g. `_connectionId`).
558
+ (e.g. `_connectionId`). A valid output filter also fails the preview
559
+ with 422 when a record holds a value its type conversion can't read,
560
+ such as an empty or non-date string under `epochtime`: the message is
561
+ "Invalid date. Cannot convert given string or number to date time.",
562
+ followed by `; record=` and that record as JSON.
557
563
  content:
558
564
  application/json:
559
565
  schema:
@@ -2775,6 +2781,10 @@ components:
2775
2781
  - Items that don't match are completely skipped
2776
2782
  - No partial processing is performed
2777
2783
 
2784
+ Send the whole object. A rules array sent alone as the `filter` value is not
2785
+ stored, and a full update of an export that carries one removes the filter the
2786
+ export had, with no error.
2787
+
2778
2788
  **Implementation approaches**
2779
2789
 
2780
2790
  There are two distinct filtering mechanisms available:
@@ -2925,6 +2935,8 @@ components:
2925
2935
  **Using `extract` to access record fields:**
2926
2936
  - Retrieves values from the current record being processed
2927
2937
  - Can access nested properties using dot notation (e.g., `"customer.email"`)
2938
+ - Paths are relative to the record itself: `["extract", "record.status"]`
2939
+ matches nothing
2928
2940
  - In a record filter, must be wrapped in a type conversion (`string`, `number`,
2929
2941
  `boolean` or `epochtime`): a bare `["extract", ...]` operand is refused with 422
2930
2942
  "Field operation extract must be called by a Type Conversion Operation but was called
@@ -2935,9 +2947,17 @@ components:
2935
2947
  - Retrieves values from the integration's configuration settings
2936
2948
  - Supports different scopes with prefix notation:
2937
2949
  - `flow.settingName`: Access flow-level settings
2938
- - `export.settingName`: Access export-level settings
2939
- - `import.settingName`: Access import-level settings
2950
+ - `flowGrouping.settingName`: Access the flow group's settings
2951
+ - `export.settingName`: Access the export's (or lookup's) own settings
2952
+ - `import.settingName`: Access the import's own settings
2940
2953
  - `integration.settingName`: Access integration-level settings
2954
+ - `connection.settingName`, `iClient.settingName`: Access the step's
2955
+ connection and iClient settings
2956
+ - A scope whose resource has no settings can be absent; a rule that reads
2957
+ it matches nothing
2958
+ - Must be wrapped in a type conversion like `extract`: a bare
2959
+ `["settings", ...]` operand is refused with 422 "Field operation settings
2960
+ must be called by a Type Conversion Operation"
2941
2961
  - Useful for dynamic filtering based on configuration
2942
2962
 
2943
2963
  **Field Transformations**
@@ -2947,6 +2967,24 @@ components:
2947
2967
  - `"floor"`: Round number down to the nearest integer
2948
2968
  - `"abs"`: Get absolute value of a number
2949
2969
 
2970
+ **Arithmetic** (number operands)
2971
+ - `"add"`, `"subtract"`, `"multiply"`, `"divide"`, `"modulo"`: for example
2972
+ `["subtract", ["number", ["extract", "total"]], ["number", ["extract", "discount"]]]`.
2973
+ `mod` is not an operator (422 "Invalid operation: mod.").
2974
+
2975
+ **Dates**
2976
+ - `epochtime` reads ISO 8601 strings and epoch-millisecond numbers. An empty
2977
+ string, a string that isn't a date, or epoch milliseconds sent as a string
2978
+ fail it with "Invalid date. Cannot convert given string or number to date
2979
+ time.", followed by `; record=` and the record as JSON: in a run that record fails (`FILTER_EVALUATION_FAILED`, source
2980
+ `output_filter` on an export), and `POST /v1/processors/filter` and an
2981
+ export preview refuse the whole call with 422. `and` and `or` evaluate
2982
+ every operand, so a `notempty` test beside it doesn't prevent the failure.
2983
+ A missing or null field doesn't match.
2984
+ - `datetime`, `date` and `timestamp` are not type conversions: 422
2985
+ "Invalid operation: <name>."
2986
+ - `number` reads a missing or empty field as 0.
2987
+
2950
2988
  **Handlebars operands**
2951
2989
  - An operand can also be a string holding exactly one Handlebars expression, such as
2952
2990
  `"{{record.status}}"` or `"{{lowercase record.code}}"`, on either side of the
@@ -2958,6 +2996,12 @@ components:
2958
2996
  with 422 "invalid datetime format".
2959
2997
  - A string with text around the expression, or with more than one expression, is
2960
2998
  compared as a literal.
2999
+ - `["number", "{{timestamp \"x\"}}"]` is the current time in epoch milliseconds,
3000
+ so `["greaterthanequals", ["epochtime", ["extract", "created"]], ["subtract",
3001
+ ["number", "{{timestamp \"x\"}}"], 604800000]]` keeps records created in the
3002
+ last 7 days.
3003
+ - An unknown helper fails the rule with 422 "Failed to evaluate handlebars
3004
+ expression".
2961
3005
 
2962
3006
  Choose the type conversion that matches the comparison — `number` for numeric
2963
3007
  comparisons, `epochtime` for dates, `string` for text. For example:
@@ -17329,8 +17373,8 @@ components:
17329
17373
  type: array
17330
17374
  description: |-
17331
17375
  Final sampled records produced by the preview — the output of the last
17332
- stage. Identical in practice to the last `stages[].data` entry, exposed
17333
- here as a convenience for callers that only care about the end result.
17376
+ stage, without the wrappers the transform, filter and hook stages put
17377
+ around it, so records the export's output filter dropped are not here.
17334
17378
  Absent from the zero-record answers described under `stages`.
17335
17379
  items: {}
17336
17380
  dataURIs:
@@ -17351,13 +17395,17 @@ components:
17351
17395
  type: array
17352
17396
  description: |-
17353
17397
  Ordered list of pipeline stages the preview traversed. The preview
17354
- runs through parsing only — the export's transform, output filter,
17355
- and preSavePage hook are NOT applied here (they run in flow
17356
- previews, test runs, and real runs). Observed stage names: `parse`
17357
- for a live read that returned records, and as the only stage when a
17358
- `mockOutput` in the request body answers; `request` and `raw` for HTTP
17359
- exports; `group` when the export groups records (grouped records are
17360
- bare arrays of the grouped rows). Each stage carries its `data[]`
17398
+ runs the export's pipeline, not just the parse: `request` and `raw`
17399
+ for HTTP exports; `parse` for a live read that returned records, and
17400
+ as the only stage when a `mockOutput` in the request body answers;
17401
+ `group` when the export groups records (grouped records are bare
17402
+ arrays of the grouped rows). After a live `parse`, the stages the
17403
+ export configures follow: the transform (`transformTwoDotZero` for
17404
+ Transformation 2.0 rules, `transform` for version 1 rules), the
17405
+ output filter (`outputFilter`, where each record it drops carries
17406
+ `isIgnored: true`) and the preSavePage hook (`preSavePageHook`, which
17407
+ receives only the records the filter kept). Top-level `data` holds
17408
+ the records the last of them kept, unwrapped. Each stage carries its `data[]`
17361
17409
  output and any `errors[]` raised at that stage. A live read that
17362
17410
  selects no records has been observed without a `parse` stage or
17363
17411
  top-level `data` on two adaptors: an HTTP export returns only `request`
@@ -17369,11 +17417,15 @@ components:
17369
17417
  properties:
17370
17418
  name:
17371
17419
  type: string
17372
- description: Stage identifier (e.g. `parse`, `request`, `raw`).
17420
+ description: Stage identifier (e.g. `request`, `raw`, `parse`, `transformTwoDotZero`, `outputFilter`, `preSavePageHook`).
17373
17421
  data:
17374
17422
  description: |-
17375
17423
  Stage output. Shape varies — `raw` carries the source
17376
17424
  response, `parse` (and `group`) carry the extracted records.
17425
+ The transform and `outputFilter` stages carry one
17426
+ `{data, errors}` entry per record (a dropped record adds
17427
+ `isIgnored: true`), and `preSavePageHook` one entry for the
17428
+ page: the object the hook returned.
17377
17429
  oneOf:
17378
17430
  - title: Array
17379
17431
  type: array
package/dist/flow.yml CHANGED
@@ -8355,8 +8355,8 @@ components:
8355
8355
  type: array
8356
8356
  description: |-
8357
8357
  Final sampled records produced by the preview — the output of the last
8358
- stage. Identical in practice to the last `stages[].data` entry, exposed
8359
- here as a convenience for callers that only care about the end result.
8358
+ stage, without the wrappers the transform, filter and hook stages put
8359
+ around it, so records the export's output filter dropped are not here.
8360
8360
  Absent from the zero-record answers described under `stages`.
8361
8361
  items: {}
8362
8362
  dataURIs:
@@ -8377,13 +8377,17 @@ components:
8377
8377
  type: array
8378
8378
  description: |-
8379
8379
  Ordered list of pipeline stages the preview traversed. The preview
8380
- runs through parsing only — the export's transform, output filter,
8381
- and preSavePage hook are NOT applied here (they run in flow
8382
- previews, test runs, and real runs). Observed stage names: `parse`
8383
- for a live read that returned records, and as the only stage when a
8384
- `mockOutput` in the request body answers; `request` and `raw` for HTTP
8385
- exports; `group` when the export groups records (grouped records are
8386
- bare arrays of the grouped rows). Each stage carries its `data[]`
8380
+ runs the export's pipeline, not just the parse: `request` and `raw`
8381
+ for HTTP exports; `parse` for a live read that returned records, and
8382
+ as the only stage when a `mockOutput` in the request body answers;
8383
+ `group` when the export groups records (grouped records are bare
8384
+ arrays of the grouped rows). After a live `parse`, the stages the
8385
+ export configures follow: the transform (`transformTwoDotZero` for
8386
+ Transformation 2.0 rules, `transform` for version 1 rules), the
8387
+ output filter (`outputFilter`, where each record it drops carries
8388
+ `isIgnored: true`) and the preSavePage hook (`preSavePageHook`, which
8389
+ receives only the records the filter kept). Top-level `data` holds
8390
+ the records the last of them kept, unwrapped. Each stage carries its `data[]`
8387
8391
  output and any `errors[]` raised at that stage. A live read that
8388
8392
  selects no records has been observed without a `parse` stage or
8389
8393
  top-level `data` on two adaptors: an HTTP export returns only `request`
@@ -8395,11 +8399,15 @@ components:
8395
8399
  properties:
8396
8400
  name:
8397
8401
  type: string
8398
- description: Stage identifier (e.g. `parse`, `request`, `raw`).
8402
+ description: Stage identifier (e.g. `request`, `raw`, `parse`, `transformTwoDotZero`, `outputFilter`, `preSavePageHook`).
8399
8403
  data:
8400
8404
  description: |-
8401
8405
  Stage output. Shape varies — `raw` carries the source
8402
8406
  response, `parse` (and `group`) carry the extracted records.
8407
+ The transform and `outputFilter` stages carry one
8408
+ `{data, errors}` entry per record (a dropped record adds
8409
+ `isIgnored: true`), and `preSavePageHook` one entry for the
8410
+ page: the object the hook returned.
8403
8411
  oneOf:
8404
8412
  - title: Array
8405
8413
  type: array
@@ -1174,6 +1174,10 @@ components:
1174
1174
  - Items that don't match are completely skipped
1175
1175
  - No partial processing is performed
1176
1176
 
1177
+ Send the whole object. A rules array sent alone as the `filter` value is not
1178
+ stored, and a full update of an export that carries one removes the filter the
1179
+ export had, with no error.
1180
+
1177
1181
  **Implementation approaches**
1178
1182
 
1179
1183
  There are two distinct filtering mechanisms available:
@@ -1324,6 +1328,8 @@ components:
1324
1328
  **Using `extract` to access record fields:**
1325
1329
  - Retrieves values from the current record being processed
1326
1330
  - Can access nested properties using dot notation (e.g., `"customer.email"`)
1331
+ - Paths are relative to the record itself: `["extract", "record.status"]`
1332
+ matches nothing
1327
1333
  - In a record filter, must be wrapped in a type conversion (`string`, `number`,
1328
1334
  `boolean` or `epochtime`): a bare `["extract", ...]` operand is refused with 422
1329
1335
  "Field operation extract must be called by a Type Conversion Operation but was called
@@ -1334,9 +1340,17 @@ components:
1334
1340
  - Retrieves values from the integration's configuration settings
1335
1341
  - Supports different scopes with prefix notation:
1336
1342
  - `flow.settingName`: Access flow-level settings
1337
- - `export.settingName`: Access export-level settings
1338
- - `import.settingName`: Access import-level settings
1343
+ - `flowGrouping.settingName`: Access the flow group's settings
1344
+ - `export.settingName`: Access the export's (or lookup's) own settings
1345
+ - `import.settingName`: Access the import's own settings
1339
1346
  - `integration.settingName`: Access integration-level settings
1347
+ - `connection.settingName`, `iClient.settingName`: Access the step's
1348
+ connection and iClient settings
1349
+ - A scope whose resource has no settings can be absent; a rule that reads
1350
+ it matches nothing
1351
+ - Must be wrapped in a type conversion like `extract`: a bare
1352
+ `["settings", ...]` operand is refused with 422 "Field operation settings
1353
+ must be called by a Type Conversion Operation"
1340
1354
  - Useful for dynamic filtering based on configuration
1341
1355
 
1342
1356
  **Field Transformations**
@@ -1346,6 +1360,24 @@ components:
1346
1360
  - `"floor"`: Round number down to the nearest integer
1347
1361
  - `"abs"`: Get absolute value of a number
1348
1362
 
1363
+ **Arithmetic** (number operands)
1364
+ - `"add"`, `"subtract"`, `"multiply"`, `"divide"`, `"modulo"`: for example
1365
+ `["subtract", ["number", ["extract", "total"]], ["number", ["extract", "discount"]]]`.
1366
+ `mod` is not an operator (422 "Invalid operation: mod.").
1367
+
1368
+ **Dates**
1369
+ - `epochtime` reads ISO 8601 strings and epoch-millisecond numbers. An empty
1370
+ string, a string that isn't a date, or epoch milliseconds sent as a string
1371
+ fail it with "Invalid date. Cannot convert given string or number to date
1372
+ time.", followed by `; record=` and the record as JSON: in a run that record fails (`FILTER_EVALUATION_FAILED`, source
1373
+ `output_filter` on an export), and `POST /v1/processors/filter` and an
1374
+ export preview refuse the whole call with 422. `and` and `or` evaluate
1375
+ every operand, so a `notempty` test beside it doesn't prevent the failure.
1376
+ A missing or null field doesn't match.
1377
+ - `datetime`, `date` and `timestamp` are not type conversions: 422
1378
+ "Invalid operation: <name>."
1379
+ - `number` reads a missing or empty field as 0.
1380
+
1349
1381
  **Handlebars operands**
1350
1382
  - An operand can also be a string holding exactly one Handlebars expression, such as
1351
1383
  `"{{record.status}}"` or `"{{lowercase record.code}}"`, on either side of the
@@ -1357,6 +1389,12 @@ components:
1357
1389
  with 422 "invalid datetime format".
1358
1390
  - A string with text around the expression, or with more than one expression, is
1359
1391
  compared as a literal.
1392
+ - `["number", "{{timestamp \"x\"}}"]` is the current time in epoch milliseconds,
1393
+ so `["greaterthanequals", ["epochtime", ["extract", "created"]], ["subtract",
1394
+ ["number", "{{timestamp \"x\"}}"], 604800000]]` keeps records created in the
1395
+ last 7 days.
1396
+ - An unknown helper fails the rule with 422 "Failed to evaluate handlebars
1397
+ expression".
1360
1398
 
1361
1399
  Choose the type conversion that matches the comparison — `number` for numeric
1362
1400
  comparisons, `epochtime` for dates, `string` for text. For example:
@@ -620,6 +620,10 @@ components:
620
620
  - Items that don't match are completely skipped
621
621
  - No partial processing is performed
622
622
 
623
+ Send the whole object. A rules array sent alone as the `filter` value is not
624
+ stored, and a full update of an export that carries one removes the filter the
625
+ export had, with no error.
626
+
623
627
  **Implementation approaches**
624
628
 
625
629
  There are two distinct filtering mechanisms available:
@@ -770,6 +774,8 @@ components:
770
774
  **Using `extract` to access record fields:**
771
775
  - Retrieves values from the current record being processed
772
776
  - Can access nested properties using dot notation (e.g., `"customer.email"`)
777
+ - Paths are relative to the record itself: `["extract", "record.status"]`
778
+ matches nothing
773
779
  - In a record filter, must be wrapped in a type conversion (`string`, `number`,
774
780
  `boolean` or `epochtime`): a bare `["extract", ...]` operand is refused with 422
775
781
  "Field operation extract must be called by a Type Conversion Operation but was called
@@ -780,9 +786,17 @@ components:
780
786
  - Retrieves values from the integration's configuration settings
781
787
  - Supports different scopes with prefix notation:
782
788
  - `flow.settingName`: Access flow-level settings
783
- - `export.settingName`: Access export-level settings
784
- - `import.settingName`: Access import-level settings
789
+ - `flowGrouping.settingName`: Access the flow group's settings
790
+ - `export.settingName`: Access the export's (or lookup's) own settings
791
+ - `import.settingName`: Access the import's own settings
785
792
  - `integration.settingName`: Access integration-level settings
793
+ - `connection.settingName`, `iClient.settingName`: Access the step's
794
+ connection and iClient settings
795
+ - A scope whose resource has no settings can be absent; a rule that reads
796
+ it matches nothing
797
+ - Must be wrapped in a type conversion like `extract`: a bare
798
+ `["settings", ...]` operand is refused with 422 "Field operation settings
799
+ must be called by a Type Conversion Operation"
786
800
  - Useful for dynamic filtering based on configuration
787
801
 
788
802
  **Field Transformations**
@@ -792,6 +806,24 @@ components:
792
806
  - `"floor"`: Round number down to the nearest integer
793
807
  - `"abs"`: Get absolute value of a number
794
808
 
809
+ **Arithmetic** (number operands)
810
+ - `"add"`, `"subtract"`, `"multiply"`, `"divide"`, `"modulo"`: for example
811
+ `["subtract", ["number", ["extract", "total"]], ["number", ["extract", "discount"]]]`.
812
+ `mod` is not an operator (422 "Invalid operation: mod.").
813
+
814
+ **Dates**
815
+ - `epochtime` reads ISO 8601 strings and epoch-millisecond numbers. An empty
816
+ string, a string that isn't a date, or epoch milliseconds sent as a string
817
+ fail it with "Invalid date. Cannot convert given string or number to date
818
+ time.", followed by `; record=` and the record as JSON: in a run that record fails (`FILTER_EVALUATION_FAILED`, source
819
+ `output_filter` on an export), and `POST /v1/processors/filter` and an
820
+ export preview refuse the whole call with 422. `and` and `or` evaluate
821
+ every operand, so a `notempty` test beside it doesn't prevent the failure.
822
+ A missing or null field doesn't match.
823
+ - `datetime`, `date` and `timestamp` are not type conversions: 422
824
+ "Invalid operation: <name>."
825
+ - `number` reads a missing or empty field as 0.
826
+
795
827
  **Handlebars operands**
796
828
  - An operand can also be a string holding exactly one Handlebars expression, such as
797
829
  `"{{record.status}}"` or `"{{lowercase record.code}}"`, on either side of the
@@ -803,6 +835,12 @@ components:
803
835
  with 422 "invalid datetime format".
804
836
  - A string with text around the expression, or with more than one expression, is
805
837
  compared as a literal.
838
+ - `["number", "{{timestamp \"x\"}}"]` is the current time in epoch milliseconds,
839
+ so `["greaterthanequals", ["epochtime", ["extract", "created"]], ["subtract",
840
+ ["number", "{{timestamp \"x\"}}"], 604800000]]` keeps records created in the
841
+ last 7 days.
842
+ - An unknown helper fails the rule with 422 "Failed to evaluate handlebars
843
+ expression".
806
844
 
807
845
  Choose the type conversion that matches the comparison — `number` for numeric
808
846
  comparisons, `epochtime` for dates, `string` for text. For example:
package/dist/import.yml CHANGED
@@ -12091,6 +12091,10 @@ components:
12091
12091
  - Items that don't match are completely skipped
12092
12092
  - No partial processing is performed
12093
12093
 
12094
+ Send the whole object. A rules array sent alone as the `filter` value is not
12095
+ stored, and a full update of an export that carries one removes the filter the
12096
+ export had, with no error.
12097
+
12094
12098
  **Implementation approaches**
12095
12099
 
12096
12100
  There are two distinct filtering mechanisms available:
@@ -12241,6 +12245,8 @@ components:
12241
12245
  **Using `extract` to access record fields:**
12242
12246
  - Retrieves values from the current record being processed
12243
12247
  - Can access nested properties using dot notation (e.g., `"customer.email"`)
12248
+ - Paths are relative to the record itself: `["extract", "record.status"]`
12249
+ matches nothing
12244
12250
  - In a record filter, must be wrapped in a type conversion (`string`, `number`,
12245
12251
  `boolean` or `epochtime`): a bare `["extract", ...]` operand is refused with 422
12246
12252
  "Field operation extract must be called by a Type Conversion Operation but was called
@@ -12251,9 +12257,17 @@ components:
12251
12257
  - Retrieves values from the integration's configuration settings
12252
12258
  - Supports different scopes with prefix notation:
12253
12259
  - `flow.settingName`: Access flow-level settings
12254
- - `export.settingName`: Access export-level settings
12255
- - `import.settingName`: Access import-level settings
12260
+ - `flowGrouping.settingName`: Access the flow group's settings
12261
+ - `export.settingName`: Access the export's (or lookup's) own settings
12262
+ - `import.settingName`: Access the import's own settings
12256
12263
  - `integration.settingName`: Access integration-level settings
12264
+ - `connection.settingName`, `iClient.settingName`: Access the step's
12265
+ connection and iClient settings
12266
+ - A scope whose resource has no settings can be absent; a rule that reads
12267
+ it matches nothing
12268
+ - Must be wrapped in a type conversion like `extract`: a bare
12269
+ `["settings", ...]` operand is refused with 422 "Field operation settings
12270
+ must be called by a Type Conversion Operation"
12257
12271
  - Useful for dynamic filtering based on configuration
12258
12272
 
12259
12273
  **Field Transformations**
@@ -12263,6 +12277,24 @@ components:
12263
12277
  - `"floor"`: Round number down to the nearest integer
12264
12278
  - `"abs"`: Get absolute value of a number
12265
12279
 
12280
+ **Arithmetic** (number operands)
12281
+ - `"add"`, `"subtract"`, `"multiply"`, `"divide"`, `"modulo"`: for example
12282
+ `["subtract", ["number", ["extract", "total"]], ["number", ["extract", "discount"]]]`.
12283
+ `mod` is not an operator (422 "Invalid operation: mod.").
12284
+
12285
+ **Dates**
12286
+ - `epochtime` reads ISO 8601 strings and epoch-millisecond numbers. An empty
12287
+ string, a string that isn't a date, or epoch milliseconds sent as a string
12288
+ fail it with "Invalid date. Cannot convert given string or number to date
12289
+ time.", followed by `; record=` and the record as JSON: in a run that record fails (`FILTER_EVALUATION_FAILED`, source
12290
+ `output_filter` on an export), and `POST /v1/processors/filter` and an
12291
+ export preview refuse the whole call with 422. `and` and `or` evaluate
12292
+ every operand, so a `notempty` test beside it doesn't prevent the failure.
12293
+ A missing or null field doesn't match.
12294
+ - `datetime`, `date` and `timestamp` are not type conversions: 422
12295
+ "Invalid operation: <name>."
12296
+ - `number` reads a missing or empty field as 0.
12297
+
12266
12298
  **Handlebars operands**
12267
12299
  - An operand can also be a string holding exactly one Handlebars expression, such as
12268
12300
  `"{{record.status}}"` or `"{{lowercase record.code}}"`, on either side of the
@@ -12274,6 +12306,12 @@ components:
12274
12306
  with 422 "invalid datetime format".
12275
12307
  - A string with text around the expression, or with more than one expression, is
12276
12308
  compared as a literal.
12309
+ - `["number", "{{timestamp \"x\"}}"]` is the current time in epoch milliseconds,
12310
+ so `["greaterthanequals", ["epochtime", ["extract", "created"]], ["subtract",
12311
+ ["number", "{{timestamp \"x\"}}"], 604800000]]` keeps records created in the
12312
+ last 7 days.
12313
+ - An unknown helper fails the rule with 422 "Failed to evaluate handlebars
12314
+ expression".
12277
12315
 
12278
12316
  Choose the type conversion that matches the comparison — `number` for numeric
12279
12317
  comparisons, `epochtime` for dates, `string` for text. For example:
@@ -335,6 +335,11 @@ paths:
335
335
  Soft-deletes a lookup cache and all its data. Retained for 30 days
336
336
  before permanent removal. To clear data without deleting the cache
337
337
  itself, use `DELETE /v1/lookupcaches/{_id}/data/purge` instead.
338
+
339
+ A cache that an export's or import's lookup still uses, or that an
340
+ integration's alias points at, can't be deleted (422). The delete also
341
+ removes the cache from every integration's `_registeredLookupCacheIds`,
342
+ and restoring it from the recycle bin doesn't register it again.
338
343
  operationId: deleteLookupCache
339
344
  tags:
340
345
  - Lookup Caches
@@ -358,13 +363,26 @@ paths:
358
363
  $ref: '#/components/responses/404-not-found'
359
364
  '422':
360
365
  description: |-
361
- An integration's `aliases[]` still points at the cache. Registering a cache adds such an
362
- alias, so remove it from that integration's `aliases`, then delete again.
366
+ The cache is still in use. An integration's `aliases[]` points at it (checked first):
367
+ registering a cache adds such an alias, so remove it from that integration's `aliases`.
368
+ Or an export's or import's lookup uses it: the message names each such export or import
369
+ ("must be deleted before you can delete lookupcache"), and for an export in a flow names
370
+ that flow as well, but removing the lookup from the step is enough. Then delete again.
363
371
  content:
364
372
  application/json:
365
373
  schema:
366
374
  $ref: '#/components/schemas/Error'
367
375
  examples:
376
+ export_referenced:
377
+ summary: An export in a flow uses the cache in a Transformation 2.0 lookup
378
+ value:
379
+ errors:
380
+ - message: export <exportId> must be deleted before you can delete lookupcache <lookupCacheId>; flow <flowId> must be deleted before you can delete lookupcache <lookupCacheId>
381
+ import_referenced:
382
+ summary: An import in no flow uses the cache in an http.lookups entry
383
+ value:
384
+ errors:
385
+ - message: import <importId> must be deleted before you can delete lookupcache <lookupCacheId>
368
386
  alias_referenced:
369
387
  value:
370
388
  errors:
@@ -1151,7 +1151,11 @@ paths:
1151
1151
  description: |-
1152
1152
  The rules are invalid, for example an unknown operator ("Invalid operation: isnotempty.") or
1153
1153
  an `extract` that is not wrapped in a type conversion ("Field operation extract must be called
1154
- by a Type Conversion Operation but was called by notempty.").
1154
+ by a Type Conversion Operation but was called by notempty."). A valid rule is refused the same
1155
+ way when a record holds a value its type conversion can't read: an `epochtime` operand on an
1156
+ empty string, a string that isn't a date, or epoch milliseconds sent as a string fails the
1157
+ whole call with "Invalid date. Cannot convert given string or number to date time.",
1158
+ followed by `; record=` and that record as JSON.
1155
1159
  content:
1156
1160
  application/json:
1157
1161
  schema:
package/dist/tool.yml CHANGED
@@ -23599,6 +23599,10 @@ components:
23599
23599
  - Items that don't match are completely skipped
23600
23600
  - No partial processing is performed
23601
23601
 
23602
+ Send the whole object. A rules array sent alone as the `filter` value is not
23603
+ stored, and a full update of an export that carries one removes the filter the
23604
+ export had, with no error.
23605
+
23602
23606
  **Implementation approaches**
23603
23607
 
23604
23608
  There are two distinct filtering mechanisms available:
@@ -23749,6 +23753,8 @@ components:
23749
23753
  **Using `extract` to access record fields:**
23750
23754
  - Retrieves values from the current record being processed
23751
23755
  - Can access nested properties using dot notation (e.g., `"customer.email"`)
23756
+ - Paths are relative to the record itself: `["extract", "record.status"]`
23757
+ matches nothing
23752
23758
  - In a record filter, must be wrapped in a type conversion (`string`, `number`,
23753
23759
  `boolean` or `epochtime`): a bare `["extract", ...]` operand is refused with 422
23754
23760
  "Field operation extract must be called by a Type Conversion Operation but was called
@@ -23759,9 +23765,17 @@ components:
23759
23765
  - Retrieves values from the integration's configuration settings
23760
23766
  - Supports different scopes with prefix notation:
23761
23767
  - `flow.settingName`: Access flow-level settings
23762
- - `export.settingName`: Access export-level settings
23763
- - `import.settingName`: Access import-level settings
23768
+ - `flowGrouping.settingName`: Access the flow group's settings
23769
+ - `export.settingName`: Access the export's (or lookup's) own settings
23770
+ - `import.settingName`: Access the import's own settings
23764
23771
  - `integration.settingName`: Access integration-level settings
23772
+ - `connection.settingName`, `iClient.settingName`: Access the step's
23773
+ connection and iClient settings
23774
+ - A scope whose resource has no settings can be absent; a rule that reads
23775
+ it matches nothing
23776
+ - Must be wrapped in a type conversion like `extract`: a bare
23777
+ `["settings", ...]` operand is refused with 422 "Field operation settings
23778
+ must be called by a Type Conversion Operation"
23765
23779
  - Useful for dynamic filtering based on configuration
23766
23780
 
23767
23781
  **Field Transformations**
@@ -23771,6 +23785,24 @@ components:
23771
23785
  - `"floor"`: Round number down to the nearest integer
23772
23786
  - `"abs"`: Get absolute value of a number
23773
23787
 
23788
+ **Arithmetic** (number operands)
23789
+ - `"add"`, `"subtract"`, `"multiply"`, `"divide"`, `"modulo"`: for example
23790
+ `["subtract", ["number", ["extract", "total"]], ["number", ["extract", "discount"]]]`.
23791
+ `mod` is not an operator (422 "Invalid operation: mod.").
23792
+
23793
+ **Dates**
23794
+ - `epochtime` reads ISO 8601 strings and epoch-millisecond numbers. An empty
23795
+ string, a string that isn't a date, or epoch milliseconds sent as a string
23796
+ fail it with "Invalid date. Cannot convert given string or number to date
23797
+ time.", followed by `; record=` and the record as JSON: in a run that record fails (`FILTER_EVALUATION_FAILED`, source
23798
+ `output_filter` on an export), and `POST /v1/processors/filter` and an
23799
+ export preview refuse the whole call with 422. `and` and `or` evaluate
23800
+ every operand, so a `notempty` test beside it doesn't prevent the failure.
23801
+ A missing or null field doesn't match.
23802
+ - `datetime`, `date` and `timestamp` are not type conversions: 422
23803
+ "Invalid operation: <name>."
23804
+ - `number` reads a missing or empty field as 0.
23805
+
23774
23806
  **Handlebars operands**
23775
23807
  - An operand can also be a string holding exactly one Handlebars expression, such as
23776
23808
  `"{{record.status}}"` or `"{{lowercase record.code}}"`, on either side of the
@@ -23782,6 +23814,12 @@ components:
23782
23814
  with 422 "invalid datetime format".
23783
23815
  - A string with text around the expression, or with more than one expression, is
23784
23816
  compared as a literal.
23817
+ - `["number", "{{timestamp \"x\"}}"]` is the current time in epoch milliseconds,
23818
+ so `["greaterthanequals", ["epochtime", ["extract", "created"]], ["subtract",
23819
+ ["number", "{{timestamp \"x\"}}"], 604800000]]` keeps records created in the
23820
+ last 7 days.
23821
+ - An unknown helper fails the rule with 422 "Failed to evaluate handlebars
23822
+ expression".
23785
23823
 
23786
23824
  Choose the type conversion that matches the comparison — `number` for numeric
23787
23825
  comparisons, `epochtime` for dates, `string` for text. For example:
@@ -488,6 +488,10 @@ components:
488
488
  - Items that don't match are completely skipped
489
489
  - No partial processing is performed
490
490
 
491
+ Send the whole object. A rules array sent alone as the `filter` value is not
492
+ stored, and a full update of an export that carries one removes the filter the
493
+ export had, with no error.
494
+
491
495
  **Implementation approaches**
492
496
 
493
497
  There are two distinct filtering mechanisms available:
@@ -638,6 +642,8 @@ components:
638
642
  **Using `extract` to access record fields:**
639
643
  - Retrieves values from the current record being processed
640
644
  - Can access nested properties using dot notation (e.g., `"customer.email"`)
645
+ - Paths are relative to the record itself: `["extract", "record.status"]`
646
+ matches nothing
641
647
  - In a record filter, must be wrapped in a type conversion (`string`, `number`,
642
648
  `boolean` or `epochtime`): a bare `["extract", ...]` operand is refused with 422
643
649
  "Field operation extract must be called by a Type Conversion Operation but was called
@@ -648,9 +654,17 @@ components:
648
654
  - Retrieves values from the integration's configuration settings
649
655
  - Supports different scopes with prefix notation:
650
656
  - `flow.settingName`: Access flow-level settings
651
- - `export.settingName`: Access export-level settings
652
- - `import.settingName`: Access import-level settings
657
+ - `flowGrouping.settingName`: Access the flow group's settings
658
+ - `export.settingName`: Access the export's (or lookup's) own settings
659
+ - `import.settingName`: Access the import's own settings
653
660
  - `integration.settingName`: Access integration-level settings
661
+ - `connection.settingName`, `iClient.settingName`: Access the step's
662
+ connection and iClient settings
663
+ - A scope whose resource has no settings can be absent; a rule that reads
664
+ it matches nothing
665
+ - Must be wrapped in a type conversion like `extract`: a bare
666
+ `["settings", ...]` operand is refused with 422 "Field operation settings
667
+ must be called by a Type Conversion Operation"
654
668
  - Useful for dynamic filtering based on configuration
655
669
 
656
670
  **Field Transformations**
@@ -660,6 +674,24 @@ components:
660
674
  - `"floor"`: Round number down to the nearest integer
661
675
  - `"abs"`: Get absolute value of a number
662
676
 
677
+ **Arithmetic** (number operands)
678
+ - `"add"`, `"subtract"`, `"multiply"`, `"divide"`, `"modulo"`: for example
679
+ `["subtract", ["number", ["extract", "total"]], ["number", ["extract", "discount"]]]`.
680
+ `mod` is not an operator (422 "Invalid operation: mod.").
681
+
682
+ **Dates**
683
+ - `epochtime` reads ISO 8601 strings and epoch-millisecond numbers. An empty
684
+ string, a string that isn't a date, or epoch milliseconds sent as a string
685
+ fail it with "Invalid date. Cannot convert given string or number to date
686
+ time.", followed by `; record=` and the record as JSON: in a run that record fails (`FILTER_EVALUATION_FAILED`, source
687
+ `output_filter` on an export), and `POST /v1/processors/filter` and an
688
+ export preview refuse the whole call with 422. `and` and `or` evaluate
689
+ every operand, so a `notempty` test beside it doesn't prevent the failure.
690
+ A missing or null field doesn't match.
691
+ - `datetime`, `date` and `timestamp` are not type conversions: 422
692
+ "Invalid operation: <name>."
693
+ - `number` reads a missing or empty field as 0.
694
+
663
695
  **Handlebars operands**
664
696
  - An operand can also be a string holding exactly one Handlebars expression, such as
665
697
  `"{{record.status}}"` or `"{{lowercase record.code}}"`, on either side of the
@@ -671,6 +703,12 @@ components:
671
703
  with 422 "invalid datetime format".
672
704
  - A string with text around the expression, or with more than one expression, is
673
705
  compared as a literal.
706
+ - `["number", "{{timestamp \"x\"}}"]` is the current time in epoch milliseconds,
707
+ so `["greaterthanequals", ["epochtime", ["extract", "created"]], ["subtract",
708
+ ["number", "{{timestamp \"x\"}}"], 604800000]]` keeps records created in the
709
+ last 7 days.
710
+ - An unknown helper fails the rule with 422 "Failed to evaluate handlebars
711
+ expression".
674
712
 
675
713
  Choose the type conversion that matches the comparison — `number` for numeric
676
714
  comparisons, `epochtime` for dates, `string` for text. For example:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@celigo/api-specs",
3
- "version": "0.2.159",
3
+ "version": "0.2.160",
4
4
  "private": false,
5
5
  "description": "Public OpenAPI bundles (dist/) and the celigo-cli lint schema pack (schemas.json).",
6
6
  "keywords": [
package/schemas.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "provenance": {
3
3
  "repo": "celigo/integrator-api-specs",
4
- "iasCommit": "d6523356",
5
- "generatedAt": "2026-10-21"
4
+ "iasCommit": "2df59293",
5
+ "generatedAt": "2026-10-22"
6
6
  },
7
7
  "roots": {
8
8
  "aiagent": 134,