@celigo/api-specs 0.2.151 → 0.2.153

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/ai-agent.yml CHANGED
@@ -2410,6 +2410,12 @@ components:
2410
2410
  - Examples: '$.customer.firstName', '$.items[0].price', '$.addresses[*].street',
2411
2411
  '$[*].Tax' (every row of a grouped record)
2412
2412
  - Wildcards like [*] extract multiple values/objects
2413
+ - A key that contains a dot needs bracket notation: `$['P.O. Number']` (or
2414
+ `$["P.O. Number"]`, `$.[P.O. Number]`). `$.P.O. Number` is read as a nested
2415
+ path: it maps nothing and the record still succeeds. Spaces, hyphens and `#`
2416
+ need no brackets (`$.Ship To Name`, `$.Tracking #`)
2417
+ - Filter expressions such as `$.items[?(@.active)]` fail the record with
2418
+ "Eval [?(expr)] prevented in JSONPath expression."
2413
2419
 
2414
2420
  ```json
2415
2421
  "extract": "$.customer.addresses[*]" // Extracts all addresses
@@ -2598,6 +2604,12 @@ components:
2598
2604
  **Usage**
2599
2605
 
2600
2606
  The lookupName refers to a named lookup defined in the lookups array of the same resource.
2607
+ On an HTTP import that is `http.lookups`: a `lookups` array sent only at the top level
2608
+ is dropped on save. On an import, a name that matches no lookup fails every record
2609
+ with "Unable to find lookup in mapping configs - <name>", and a key the lookup
2610
+ doesn't hold follows the lookup's `allowFailures`: false fails the record; true, or
2611
+ the field left out, lets the record succeed with the lookup's `default`, or without
2612
+ the mapped field when there is none.
2601
2613
 
2602
2614
  ```json
2603
2615
  {
@@ -2935,6 +2947,11 @@ components:
2935
2947
  The system creates special composite objects during processing to maintain
2936
2948
  hierarchical relationships, allowing easy access to both the current array item
2937
2949
  and its parent contexts.
2950
+
2951
+ An iterating entry keeps the `[*]`: `$.line_items` without it yields one empty
2952
+ element per item, with no error. Child extracts drop the `[*]` but keep the
2953
+ array's path (`$.line_items.sku`); `$.line_items[*].sku` maps nothing, and an
2954
+ element-relative `$.sku` reads the record root instead of the element.
2938
2955
  examples:
2939
2956
  - $.items[*]
2940
2957
  - $.order.lineItems[*]
@@ -3146,14 +3163,17 @@ components:
3146
3163
  type: string
3147
3164
  description: |
3148
3165
  **Purpose**
3149
- Required on every mapping entry. Controls whether the mapping is applied.
3166
+ Controls whether the mapping is applied. Send it on every mapping entry.
3150
3167
 
3151
3168
  **Guidance**
3152
3169
  Only `Active` rows run. `Draft` and `Inactive` rows keep their
3153
3170
  configuration, are saved with minimal validation, and are skipped at
3154
3171
  runtime and in preview; a non-Active parent skips its whole subtree
3155
- whatever its children say. The API rejects a mapping missing this field
3156
- (validation error: "Mapping object must have status field present.").
3172
+ whatever its children say. Imports (on save and in the mapper processor)
3173
+ and API response mappings reject a row missing this field (validation
3174
+ error: "Mapping object must have status field present."); a Tool's
3175
+ output mapping saves and runs one, which is why `required` doesn't
3176
+ list it.
3157
3177
  x-celigo-ai-guidance:
3158
3178
  - |-
3159
3179
  Emit `"Active"` for mappings that should run; `"Draft"` is also
@@ -3476,6 +3496,12 @@ components:
3476
3496
  - Examples: '$.customer.firstName', '$.items[0].price', '$.addresses[*].street',
3477
3497
  '$[*].Tax' (every row of a grouped record)
3478
3498
  - Wildcards like [*] extract multiple values/objects
3499
+ - A key that contains a dot needs bracket notation: `$['P.O. Number']` (or
3500
+ `$["P.O. Number"]`, `$.[P.O. Number]`). `$.P.O. Number` is read as a nested
3501
+ path: it maps nothing and the record still succeeds. Spaces, hyphens and `#`
3502
+ need no brackets (`$.Ship To Name`, `$.Tracking #`)
3503
+ - Filter expressions such as `$.items[?(@.active)]` fail the record with
3504
+ "Eval [?(expr)] prevented in JSONPath expression."
3479
3505
 
3480
3506
  ```json
3481
3507
  "extract": "$.customer.addresses[*]" // Extracts all addresses
@@ -3664,6 +3690,12 @@ components:
3664
3690
  **Usage**
3665
3691
 
3666
3692
  The lookupName refers to a named lookup defined in the lookups array of the same resource.
3693
+ On an HTTP import that is `http.lookups`: a `lookups` array sent only at the top level
3694
+ is dropped on save. On an import, a name that matches no lookup fails every record
3695
+ with "Unable to find lookup in mapping configs - <name>", and a key the lookup
3696
+ doesn't hold follows the lookup's `allowFailures`: false fails the record; true, or
3697
+ the field left out, lets the record succeed with the lookup's `default`, or without
3698
+ the mapped field when there is none.
3667
3699
 
3668
3700
  ```json
3669
3701
  {
@@ -4001,6 +4033,11 @@ components:
4001
4033
  The system creates special composite objects during processing to maintain
4002
4034
  hierarchical relationships, allowing easy access to both the current array item
4003
4035
  and its parent contexts.
4036
+
4037
+ An iterating entry keeps the `[*]`: `$.line_items` without it yields one empty
4038
+ element per item, with no error. Child extracts drop the `[*]` but keep the
4039
+ array's path (`$.line_items.sku`); `$.line_items[*].sku` maps nothing, and an
4040
+ element-relative `$.sku` reads the record root instead of the element.
4004
4041
  examples:
4005
4042
  - $.items[*]
4006
4043
  - $.order.lineItems[*]
@@ -4212,14 +4249,17 @@ components:
4212
4249
  type: string
4213
4250
  description: |
4214
4251
  **Purpose**
4215
- Required on every mapping entry. Controls whether the mapping is applied.
4252
+ Controls whether the mapping is applied. Send it on every mapping entry.
4216
4253
 
4217
4254
  **Guidance**
4218
4255
  Only `Active` rows run. `Draft` and `Inactive` rows keep their
4219
4256
  configuration, are saved with minimal validation, and are skipped at
4220
4257
  runtime and in preview; a non-Active parent skips its whole subtree
4221
- whatever its children say. The API rejects a mapping missing this field
4222
- (validation error: "Mapping object must have status field present.").
4258
+ whatever its children say. Imports (on save and in the mapper processor)
4259
+ and API response mappings reject a row missing this field (validation
4260
+ error: "Mapping object must have status field present."); a Tool's
4261
+ output mapping saves and runs one, which is why `required` doesn't
4262
+ list it.
4223
4263
  x-celigo-ai-guidance:
4224
4264
  - |-
4225
4265
  Emit `"Active"` for mappings that should run; `"Draft"` is also
@@ -5213,8 +5253,8 @@ components:
5213
5253
  - Original value indicators: "{Original Value}", "No mapping found"
5214
5254
  - Neutral values: "Other", "N/A", "Miscellaneous"
5215
5255
 
5216
- If allowFailures is false and no default is specified, the flow will fail
5217
- when encountering unmapped values.
5256
+ If allowFailures is false, a record whose value is unmapped fails and the default
5257
+ is ignored.
5218
5258
  examples:
5219
5259
  - Unknown
5220
5260
  - Other
@@ -5235,7 +5275,11 @@ components:
5235
5275
  This field determines how the system handles source values that don't exist in the map:
5236
5276
 
5237
5277
  - true: Use the default value for missing mappings and continue processing
5238
- - false: Treat missing mappings as errors, failing the record
5278
+ - false: Treat missing mappings as errors, failing the record (`lookup_error` for a
5279
+ static map, `lookupcache_evaluation_failed` for a lookup cache)
5280
+ - omitted or null: the record doesn't fail either. On an import a static lookup writes
5281
+ its default if it has one, and a static or cache lookup without one leaves the
5282
+ mapped field out of the output, with no error
5239
5283
 
5240
5284
  **Recommendation**
5241
5285
 
@@ -5249,11 +5293,14 @@ components:
5249
5293
  - All possible source values are known and controlled
5250
5294
  - Missing mappings indicate serious data problems that should be addressed
5251
5295
 
5252
- The best practice is typically to set allowFailures to true with a meaningful
5253
- default value, so flows remain operational while alerting you to missing mappings.
5296
+ A default raises no error: records that miss go out with the default value and
5297
+ nothing reports them. Use true only when that fallback is acceptable at the
5298
+ destination, and set false explicitly when a missing value must stop the record.
5254
5299
  examples:
5255
5300
  - true
5256
5301
  - false
5302
+ x-celigo-ai-guidance:
5303
+ - 'Never leave this field out to mean "fail on a miss": on an import, an omitted or null value lets a missing key through without an error (with the default, or without the mapped field when there is none). Only an explicit false fails the record.'
5257
5304
  Transform:
5258
5305
  type: object
5259
5306
  description: |
@@ -619,6 +619,12 @@ components:
619
619
  - Examples: '$.customer.firstName', '$.items[0].price', '$.addresses[*].street',
620
620
  '$[*].Tax' (every row of a grouped record)
621
621
  - Wildcards like [*] extract multiple values/objects
622
+ - A key that contains a dot needs bracket notation: `$['P.O. Number']` (or
623
+ `$["P.O. Number"]`, `$.[P.O. Number]`). `$.P.O. Number` is read as a nested
624
+ path: it maps nothing and the record still succeeds. Spaces, hyphens and `#`
625
+ need no brackets (`$.Ship To Name`, `$.Tracking #`)
626
+ - Filter expressions such as `$.items[?(@.active)]` fail the record with
627
+ "Eval [?(expr)] prevented in JSONPath expression."
622
628
 
623
629
  ```json
624
630
  "extract": "$.customer.addresses[*]" // Extracts all addresses
@@ -807,6 +813,12 @@ components:
807
813
  **Usage**
808
814
 
809
815
  The lookupName refers to a named lookup defined in the lookups array of the same resource.
816
+ On an HTTP import that is `http.lookups`: a `lookups` array sent only at the top level
817
+ is dropped on save. On an import, a name that matches no lookup fails every record
818
+ with "Unable to find lookup in mapping configs - <name>", and a key the lookup
819
+ doesn't hold follows the lookup's `allowFailures`: false fails the record; true, or
820
+ the field left out, lets the record succeed with the lookup's `default`, or without
821
+ the mapped field when there is none.
810
822
 
811
823
  ```json
812
824
  {
@@ -1144,6 +1156,11 @@ components:
1144
1156
  The system creates special composite objects during processing to maintain
1145
1157
  hierarchical relationships, allowing easy access to both the current array item
1146
1158
  and its parent contexts.
1159
+
1160
+ An iterating entry keeps the `[*]`: `$.line_items` without it yields one empty
1161
+ element per item, with no error. Child extracts drop the `[*]` but keep the
1162
+ array's path (`$.line_items.sku`); `$.line_items[*].sku` maps nothing, and an
1163
+ element-relative `$.sku` reads the record root instead of the element.
1147
1164
  examples:
1148
1165
  - $.items[*]
1149
1166
  - $.order.lineItems[*]
@@ -1355,14 +1372,17 @@ components:
1355
1372
  type: string
1356
1373
  description: |
1357
1374
  **Purpose**
1358
- Required on every mapping entry. Controls whether the mapping is applied.
1375
+ Controls whether the mapping is applied. Send it on every mapping entry.
1359
1376
 
1360
1377
  **Guidance**
1361
1378
  Only `Active` rows run. `Draft` and `Inactive` rows keep their
1362
1379
  configuration, are saved with minimal validation, and are skipped at
1363
1380
  runtime and in preview; a non-Active parent skips its whole subtree
1364
- whatever its children say. The API rejects a mapping missing this field
1365
- (validation error: "Mapping object must have status field present.").
1381
+ whatever its children say. Imports (on save and in the mapper processor)
1382
+ and API response mappings reject a row missing this field (validation
1383
+ error: "Mapping object must have status field present."); a Tool's
1384
+ output mapping saves and runs one, which is why `required` doesn't
1385
+ list it.
1366
1386
  x-celigo-ai-guidance:
1367
1387
  - |-
1368
1388
  Emit `"Active"` for mappings that should run; `"Draft"` is also
@@ -1685,6 +1705,12 @@ components:
1685
1705
  - Examples: '$.customer.firstName', '$.items[0].price', '$.addresses[*].street',
1686
1706
  '$[*].Tax' (every row of a grouped record)
1687
1707
  - Wildcards like [*] extract multiple values/objects
1708
+ - A key that contains a dot needs bracket notation: `$['P.O. Number']` (or
1709
+ `$["P.O. Number"]`, `$.[P.O. Number]`). `$.P.O. Number` is read as a nested
1710
+ path: it maps nothing and the record still succeeds. Spaces, hyphens and `#`
1711
+ need no brackets (`$.Ship To Name`, `$.Tracking #`)
1712
+ - Filter expressions such as `$.items[?(@.active)]` fail the record with
1713
+ "Eval [?(expr)] prevented in JSONPath expression."
1688
1714
 
1689
1715
  ```json
1690
1716
  "extract": "$.customer.addresses[*]" // Extracts all addresses
@@ -1873,6 +1899,12 @@ components:
1873
1899
  **Usage**
1874
1900
 
1875
1901
  The lookupName refers to a named lookup defined in the lookups array of the same resource.
1902
+ On an HTTP import that is `http.lookups`: a `lookups` array sent only at the top level
1903
+ is dropped on save. On an import, a name that matches no lookup fails every record
1904
+ with "Unable to find lookup in mapping configs - <name>", and a key the lookup
1905
+ doesn't hold follows the lookup's `allowFailures`: false fails the record; true, or
1906
+ the field left out, lets the record succeed with the lookup's `default`, or without
1907
+ the mapped field when there is none.
1876
1908
 
1877
1909
  ```json
1878
1910
  {
@@ -2210,6 +2242,11 @@ components:
2210
2242
  The system creates special composite objects during processing to maintain
2211
2243
  hierarchical relationships, allowing easy access to both the current array item
2212
2244
  and its parent contexts.
2245
+
2246
+ An iterating entry keeps the `[*]`: `$.line_items` without it yields one empty
2247
+ element per item, with no error. Child extracts drop the `[*]` but keep the
2248
+ array's path (`$.line_items.sku`); `$.line_items[*].sku` maps nothing, and an
2249
+ element-relative `$.sku` reads the record root instead of the element.
2213
2250
  examples:
2214
2251
  - $.items[*]
2215
2252
  - $.order.lineItems[*]
@@ -2421,14 +2458,17 @@ components:
2421
2458
  type: string
2422
2459
  description: |
2423
2460
  **Purpose**
2424
- Required on every mapping entry. Controls whether the mapping is applied.
2461
+ Controls whether the mapping is applied. Send it on every mapping entry.
2425
2462
 
2426
2463
  **Guidance**
2427
2464
  Only `Active` rows run. `Draft` and `Inactive` rows keep their
2428
2465
  configuration, are saved with minimal validation, and are skipped at
2429
2466
  runtime and in preview; a non-Active parent skips its whole subtree
2430
- whatever its children say. The API rejects a mapping missing this field
2431
- (validation error: "Mapping object must have status field present.").
2467
+ whatever its children say. Imports (on save and in the mapper processor)
2468
+ and API response mappings reject a row missing this field (validation
2469
+ error: "Mapping object must have status field present."); a Tool's
2470
+ output mapping saves and runs one, which is why `required` doesn't
2471
+ list it.
2432
2472
  x-celigo-ai-guidance:
2433
2473
  - |-
2434
2474
  Emit `"Active"` for mappings that should run; `"Draft"` is also
@@ -2799,8 +2839,8 @@ components:
2799
2839
  - Original value indicators: "{Original Value}", "No mapping found"
2800
2840
  - Neutral values: "Other", "N/A", "Miscellaneous"
2801
2841
 
2802
- If allowFailures is false and no default is specified, the flow will fail
2803
- when encountering unmapped values.
2842
+ If allowFailures is false, a record whose value is unmapped fails and the default
2843
+ is ignored.
2804
2844
  examples:
2805
2845
  - Unknown
2806
2846
  - Other
@@ -2821,7 +2861,11 @@ components:
2821
2861
  This field determines how the system handles source values that don't exist in the map:
2822
2862
 
2823
2863
  - true: Use the default value for missing mappings and continue processing
2824
- - false: Treat missing mappings as errors, failing the record
2864
+ - false: Treat missing mappings as errors, failing the record (`lookup_error` for a
2865
+ static map, `lookupcache_evaluation_failed` for a lookup cache)
2866
+ - omitted or null: the record doesn't fail either. On an import a static lookup writes
2867
+ its default if it has one, and a static or cache lookup without one leaves the
2868
+ mapped field out of the output, with no error
2825
2869
 
2826
2870
  **Recommendation**
2827
2871
 
@@ -2835,11 +2879,14 @@ components:
2835
2879
  - All possible source values are known and controlled
2836
2880
  - Missing mappings indicate serious data problems that should be addressed
2837
2881
 
2838
- The best practice is typically to set allowFailures to true with a meaningful
2839
- default value, so flows remain operational while alerting you to missing mappings.
2882
+ A default raises no error: records that miss go out with the default value and
2883
+ nothing reports them. Use true only when that fallback is acceptable at the
2884
+ destination, and set false explicitly when a missing value must stop the record.
2840
2885
  examples:
2841
2886
  - true
2842
2887
  - false
2888
+ x-celigo-ai-guidance:
2889
+ - 'Never leave this field out to mean "fail on a miss": on an import, an omitted or null value lets a missing key through without an error (with the default, or without the mapped field when there is none). Only an explicit false fails the record.'
2843
2890
  Transform:
2844
2891
  type: object
2845
2892
  description: |
package/dist/export.yml CHANGED
@@ -6615,6 +6615,8 @@ components:
6615
6615
  Controls how the export requests subsequent pages when the API returns multi-page responses. The `method` field determines which companion fields are required and how each next page is requested. For the page, skip, and token methods, reference the matching pagination variable (`{{export.http.paging.page}}`, `{{export.http.paging.skip}}`, or `{{export.http.paging.token}}`) in the relative URI or request body — misconfigured pagination is a common cause of incomplete data retrieval.
6616
6616
 
6617
6617
  When this export is the first lookup of a builder-mode API with `pagination.enabled` set, it is that API's volume driver: saving the export (even unchanged) invalidates the API's issued cursors, so a caller mid-walk gets an empty final page, and removing `paging` is accepted on save but makes every call to the API fail with `400 api_pagination_source_not_paged` until paging is restored or the API's flag is turned off.
6618
+
6619
+ When a next page's response is identical to the previous one, paging stops: the export records an open error with code `page_response_error` ("Identical response received from next page request. No more page requests will be made.") and the run completes with the pages already read, so later pages are never exported. A request that doesn't change between pages produces this, as observed with `method: page` and the pagination variable missing from the relative URI and body; reference the variable so each request asks for the next page.
6618
6620
  x-celigo-ai-guidance:
6619
6621
  - Configuration object for navigating through multi-page API responses.
6620
6622
  - |-
@@ -12516,6 +12518,12 @@ components:
12516
12518
  - Examples: '$.customer.firstName', '$.items[0].price', '$.addresses[*].street',
12517
12519
  '$[*].Tax' (every row of a grouped record)
12518
12520
  - Wildcards like [*] extract multiple values/objects
12521
+ - A key that contains a dot needs bracket notation: `$['P.O. Number']` (or
12522
+ `$["P.O. Number"]`, `$.[P.O. Number]`). `$.P.O. Number` is read as a nested
12523
+ path: it maps nothing and the record still succeeds. Spaces, hyphens and `#`
12524
+ need no brackets (`$.Ship To Name`, `$.Tracking #`)
12525
+ - Filter expressions such as `$.items[?(@.active)]` fail the record with
12526
+ "Eval [?(expr)] prevented in JSONPath expression."
12519
12527
 
12520
12528
  ```json
12521
12529
  "extract": "$.customer.addresses[*]" // Extracts all addresses
@@ -12704,6 +12712,12 @@ components:
12704
12712
  **Usage**
12705
12713
 
12706
12714
  The lookupName refers to a named lookup defined in the lookups array of the same resource.
12715
+ On an HTTP import that is `http.lookups`: a `lookups` array sent only at the top level
12716
+ is dropped on save. On an import, a name that matches no lookup fails every record
12717
+ with "Unable to find lookup in mapping configs - <name>", and a key the lookup
12718
+ doesn't hold follows the lookup's `allowFailures`: false fails the record; true, or
12719
+ the field left out, lets the record succeed with the lookup's `default`, or without
12720
+ the mapped field when there is none.
12707
12721
 
12708
12722
  ```json
12709
12723
  {
@@ -13041,6 +13055,11 @@ components:
13041
13055
  The system creates special composite objects during processing to maintain
13042
13056
  hierarchical relationships, allowing easy access to both the current array item
13043
13057
  and its parent contexts.
13058
+
13059
+ An iterating entry keeps the `[*]`: `$.line_items` without it yields one empty
13060
+ element per item, with no error. Child extracts drop the `[*]` but keep the
13061
+ array's path (`$.line_items.sku`); `$.line_items[*].sku` maps nothing, and an
13062
+ element-relative `$.sku` reads the record root instead of the element.
13044
13063
  examples:
13045
13064
  - $.items[*]
13046
13065
  - $.order.lineItems[*]
@@ -13252,14 +13271,17 @@ components:
13252
13271
  type: string
13253
13272
  description: |
13254
13273
  **Purpose**
13255
- Required on every mapping entry. Controls whether the mapping is applied.
13274
+ Controls whether the mapping is applied. Send it on every mapping entry.
13256
13275
 
13257
13276
  **Guidance**
13258
13277
  Only `Active` rows run. `Draft` and `Inactive` rows keep their
13259
13278
  configuration, are saved with minimal validation, and are skipped at
13260
13279
  runtime and in preview; a non-Active parent skips its whole subtree
13261
- whatever its children say. The API rejects a mapping missing this field
13262
- (validation error: "Mapping object must have status field present.").
13280
+ whatever its children say. Imports (on save and in the mapper processor)
13281
+ and API response mappings reject a row missing this field (validation
13282
+ error: "Mapping object must have status field present."); a Tool's
13283
+ output mapping saves and runs one, which is why `required` doesn't
13284
+ list it.
13263
13285
  x-celigo-ai-guidance:
13264
13286
  - |-
13265
13287
  Emit `"Active"` for mappings that should run; `"Draft"` is also
@@ -13582,6 +13604,12 @@ components:
13582
13604
  - Examples: '$.customer.firstName', '$.items[0].price', '$.addresses[*].street',
13583
13605
  '$[*].Tax' (every row of a grouped record)
13584
13606
  - Wildcards like [*] extract multiple values/objects
13607
+ - A key that contains a dot needs bracket notation: `$['P.O. Number']` (or
13608
+ `$["P.O. Number"]`, `$.[P.O. Number]`). `$.P.O. Number` is read as a nested
13609
+ path: it maps nothing and the record still succeeds. Spaces, hyphens and `#`
13610
+ need no brackets (`$.Ship To Name`, `$.Tracking #`)
13611
+ - Filter expressions such as `$.items[?(@.active)]` fail the record with
13612
+ "Eval [?(expr)] prevented in JSONPath expression."
13585
13613
 
13586
13614
  ```json
13587
13615
  "extract": "$.customer.addresses[*]" // Extracts all addresses
@@ -13770,6 +13798,12 @@ components:
13770
13798
  **Usage**
13771
13799
 
13772
13800
  The lookupName refers to a named lookup defined in the lookups array of the same resource.
13801
+ On an HTTP import that is `http.lookups`: a `lookups` array sent only at the top level
13802
+ is dropped on save. On an import, a name that matches no lookup fails every record
13803
+ with "Unable to find lookup in mapping configs - <name>", and a key the lookup
13804
+ doesn't hold follows the lookup's `allowFailures`: false fails the record; true, or
13805
+ the field left out, lets the record succeed with the lookup's `default`, or without
13806
+ the mapped field when there is none.
13773
13807
 
13774
13808
  ```json
13775
13809
  {
@@ -14107,6 +14141,11 @@ components:
14107
14141
  The system creates special composite objects during processing to maintain
14108
14142
  hierarchical relationships, allowing easy access to both the current array item
14109
14143
  and its parent contexts.
14144
+
14145
+ An iterating entry keeps the `[*]`: `$.line_items` without it yields one empty
14146
+ element per item, with no error. Child extracts drop the `[*]` but keep the
14147
+ array's path (`$.line_items.sku`); `$.line_items[*].sku` maps nothing, and an
14148
+ element-relative `$.sku` reads the record root instead of the element.
14110
14149
  examples:
14111
14150
  - $.items[*]
14112
14151
  - $.order.lineItems[*]
@@ -14318,14 +14357,17 @@ components:
14318
14357
  type: string
14319
14358
  description: |
14320
14359
  **Purpose**
14321
- Required on every mapping entry. Controls whether the mapping is applied.
14360
+ Controls whether the mapping is applied. Send it on every mapping entry.
14322
14361
 
14323
14362
  **Guidance**
14324
14363
  Only `Active` rows run. `Draft` and `Inactive` rows keep their
14325
14364
  configuration, are saved with minimal validation, and are skipped at
14326
14365
  runtime and in preview; a non-Active parent skips its whole subtree
14327
- whatever its children say. The API rejects a mapping missing this field
14328
- (validation error: "Mapping object must have status field present.").
14366
+ whatever its children say. Imports (on save and in the mapper processor)
14367
+ and API response mappings reject a row missing this field (validation
14368
+ error: "Mapping object must have status field present."); a Tool's
14369
+ output mapping saves and runs one, which is why `required` doesn't
14370
+ list it.
14329
14371
  x-celigo-ai-guidance:
14330
14372
  - |-
14331
14373
  Emit `"Active"` for mappings that should run; `"Draft"` is also
@@ -14696,8 +14738,8 @@ components:
14696
14738
  - Original value indicators: "{Original Value}", "No mapping found"
14697
14739
  - Neutral values: "Other", "N/A", "Miscellaneous"
14698
14740
 
14699
- If allowFailures is false and no default is specified, the flow will fail
14700
- when encountering unmapped values.
14741
+ If allowFailures is false, a record whose value is unmapped fails and the default
14742
+ is ignored.
14701
14743
  examples:
14702
14744
  - Unknown
14703
14745
  - Other
@@ -14718,7 +14760,11 @@ components:
14718
14760
  This field determines how the system handles source values that don't exist in the map:
14719
14761
 
14720
14762
  - true: Use the default value for missing mappings and continue processing
14721
- - false: Treat missing mappings as errors, failing the record
14763
+ - false: Treat missing mappings as errors, failing the record (`lookup_error` for a
14764
+ static map, `lookupcache_evaluation_failed` for a lookup cache)
14765
+ - omitted or null: the record doesn't fail either. On an import a static lookup writes
14766
+ its default if it has one, and a static or cache lookup without one leaves the
14767
+ mapped field out of the output, with no error
14722
14768
 
14723
14769
  **Recommendation**
14724
14770
 
@@ -14732,11 +14778,14 @@ components:
14732
14778
  - All possible source values are known and controlled
14733
14779
  - Missing mappings indicate serious data problems that should be addressed
14734
14780
 
14735
- The best practice is typically to set allowFailures to true with a meaningful
14736
- default value, so flows remain operational while alerting you to missing mappings.
14781
+ A default raises no error: records that miss go out with the default value and
14782
+ nothing reports them. Use true only when that fallback is acceptable at the
14783
+ destination, and set false explicitly when a missing value must stop the record.
14737
14784
  examples:
14738
14785
  - true
14739
14786
  - false
14787
+ x-celigo-ai-guidance:
14788
+ - 'Never leave this field out to mean "fail on a miss": on an import, an omitted or null value lets a missing key through without an error (with the default, or without the mapped field when there is none). Only an explicit false fails the record.'
14740
14789
  Transform:
14741
14790
  type: object
14742
14791
  description: |
@@ -17374,16 +17423,22 @@ components:
17374
17423
  properties:
17375
17424
  postData:
17376
17425
  type: object
17377
- description: Additional data for the export preview
17426
+ description: |-
17427
+ Delta window for this preview. Without it, a document preview renders
17428
+ `{{lastExportDateTime}}` and `{{currentExportDateTime}}` as empty strings (observed on
17429
+ HTTP and RDBMS exports), so the preview doesn't reflect the export's delta window. On an
17430
+ HTTP export these strings are substituted exactly as given; other adaptors weren't
17431
+ checked. On an export without `delta.dateFormat`, a real run renders both as ISO 8601 UTC
17432
+ with milliseconds, so pass them in that form to preview the request such a run would send.
17378
17433
  properties:
17379
17434
  currentExportDateTime:
17380
17435
  type: string
17381
- description: Current export date time (timestamp)
17382
- example: '1751909419'
17436
+ description: Value `{{currentExportDateTime}}` renders as in this preview (the window's end).
17437
+ example: '2026-01-16T00:00:00.000Z'
17383
17438
  lastExportDateTime:
17384
17439
  type: string
17385
- description: Last export date time (timestamp)
17386
- example: '1742641523'
17440
+ description: Value `{{lastExportDateTime}}` renders as in this preview (the window's start).
17441
+ example: '2026-01-15T00:00:00.000Z'
17387
17442
  PreviewResponse:
17388
17443
  type: object
17389
17444
  description: Response body for export data preview
@@ -1985,7 +1985,7 @@ components:
1985
1985
  description: When true, the mapped value cannot be overwritten by later mapping steps.
1986
1986
  lookupName:
1987
1987
  type: string
1988
- description: Name of an entry in the import's `lookups` array used to translate the value.
1988
+ description: Name of an entry in the import's `lookups` array (`http.lookups` on an HTTP import) used to translate the value.
1989
1989
  x-celigo-ai-guidance:
1990
1990
  - |-
1991
1991
  Name of a lookup defined on ``resource.lookups`` whose result
package/dist/import.yml CHANGED
@@ -2717,7 +2717,9 @@ components:
2717
2717
 
2718
2718
  - **Field mappings** — a mapping entry sets
2719
2719
  ``lookupName: "<name>"`` to resolve a field's value through
2720
- the lookup.
2720
+ the lookup. A ``lookupName`` that matches no entry in this
2721
+ array fails every record with ``Unable to find lookup in
2722
+ mapping configs - <name>``.
2721
2723
  - **Handlebars expressions** — anywhere handlebars is
2722
2724
  evaluated (relativeURI, headers, body), ``{{lookup "name"
2723
2725
  value}}`` calls the lookup with ``value`` as input.
@@ -2731,9 +2733,13 @@ components:
2731
2733
  ## Mirror invariant
2732
2734
 
2733
2735
  The Celigo platform persists lookups in TWO locations on an HTTP
2734
- import: top-level ``lookups`` and ``http.lookups``. Both arrays
2735
- MUST hold byte-for-byte identical content, so write both on
2736
- every save.
2736
+ import: top-level ``lookups`` and ``http.lookups``, and
2737
+ ``http.lookups`` is the copy that counts. A save keeps
2738
+ ``http.lookups`` and mirrors it to the top level, overwriting a
2739
+ top-level copy that differs; a ``lookups`` array sent only at the
2740
+ top level is dropped with no error, on create and on PUT, and both
2741
+ arrays read back null. Write ``http.lookups`` on every save;
2742
+ sending the same array at the top level too is harmless.
2737
2743
  - |-
2738
2744
  ## Static vs dynamic vs cached
2739
2745
 
@@ -2783,12 +2789,13 @@ components:
2783
2789
  - handlebars
2784
2790
  description: |
2785
2791
  Request body template for POST / PUT / PATCH lookup methods, typically
2786
- a JSON string with Handlebars placeholders (``{"email":"{{{email}}}"}``);
2792
+ a JSON string with Handlebars placeholders (``{"email":"{{email}}"}``);
2787
2793
  ignored for GET / DELETE. The record's fields sit at the top level:
2788
2794
  ``{{email}}`` renders the record's value, while ``{{record.email}}``
2789
2795
  renders empty.
2790
2796
  x-celigo-ai-guidance:
2791
2797
  - 'Put the lookup''s request template here, not in ``postBody``: a ``postBody`` saves without an error but is not kept under ``http.lookups``, so the lookup goes out with no body and the run reports no error.'
2798
+ - 'Write string values with double braces inside the quotes (``"{{email}}"``): they are JSON-escaped at runtime. With triple braces a value holding a double quote breaks the request body, and the lookup quietly finds nothing, so an existence check writes the record as new.'
2792
2799
  headers:
2793
2800
  type: array
2794
2801
  items:
@@ -2844,10 +2851,17 @@ components:
2844
2851
  - boolean
2845
2852
  - 'null'
2846
2853
  description: |
2847
- When true, a lookup miss (no matching response and no
2848
- ``default``) resolves to ``null`` and the import continues.
2849
- When false (default), a miss halts the record. May be
2850
- stored as null (treated as unset).
2854
+ When true, a lookup miss uses ``default`` (or leaves the mapped
2855
+ field out when there is none) and the record continues. When
2856
+ false, a miss fails the record: ``lookup_error`` ("Could not find
2857
+ value for static lookup: …") for a static ``map``,
2858
+ ``lookupcache_evaluation_failed`` for a cache. Omitted or null,
2859
+ a miss doesn't fail the record either: a static lookup writes
2860
+ its ``default`` if it has one, and a lookup without one (static,
2861
+ cache, or a live request that matches nothing or fails) leaves
2862
+ the mapped field out.
2863
+ x-celigo-ai-guidance:
2864
+ - Set false explicitly when a miss must stop the record. Leaving the field out lets the record through with the default or without the looked-up value, so a destination that needs the real value gets a request without it and nothing errors.
2851
2865
  useDefaultOnMultipleMatches:
2852
2866
  type: boolean
2853
2867
  description: |
@@ -5077,8 +5091,8 @@ components:
5077
5091
  - Original value indicators: "{Original Value}", "No mapping found"
5078
5092
  - Neutral values: "Other", "N/A", "Miscellaneous"
5079
5093
 
5080
- If allowFailures is false and no default is specified, the flow will fail
5081
- when encountering unmapped values.
5094
+ If allowFailures is false, a record whose value is unmapped fails and the default
5095
+ is ignored.
5082
5096
  examples:
5083
5097
  - Unknown
5084
5098
  - Other
@@ -5099,7 +5113,11 @@ components:
5099
5113
  This field determines how the system handles source values that don't exist in the map:
5100
5114
 
5101
5115
  - true: Use the default value for missing mappings and continue processing
5102
- - false: Treat missing mappings as errors, failing the record
5116
+ - false: Treat missing mappings as errors, failing the record (`lookup_error` for a
5117
+ static map, `lookupcache_evaluation_failed` for a lookup cache)
5118
+ - omitted or null: the record doesn't fail either. On an import a static lookup writes
5119
+ its default if it has one, and a static or cache lookup without one leaves the
5120
+ mapped field out of the output, with no error
5103
5121
 
5104
5122
  **Recommendation**
5105
5123
 
@@ -5113,11 +5131,14 @@ components:
5113
5131
  - All possible source values are known and controlled
5114
5132
  - Missing mappings indicate serious data problems that should be addressed
5115
5133
 
5116
- The best practice is typically to set allowFailures to true with a meaningful
5117
- default value, so flows remain operational while alerting you to missing mappings.
5134
+ A default raises no error: records that miss go out with the default value and
5135
+ nothing reports them. Use true only when that fallback is acceptable at the
5136
+ destination, and set false explicitly when a missing value must stop the record.
5118
5137
  examples:
5119
5138
  - true
5120
5139
  - false
5140
+ x-celigo-ai-guidance:
5141
+ - 'Never leave this field out to mean "fail on a miss": on an import, an omitted or null value lets a missing key through without an error (with the default, or without the mapped field when there is none). Only an explicit false fails the record.'
5121
5142
  Rdbms:
5122
5143
  type: object
5123
5144
  description: |-
@@ -12661,6 +12682,12 @@ components:
12661
12682
  - Examples: '$.customer.firstName', '$.items[0].price', '$.addresses[*].street',
12662
12683
  '$[*].Tax' (every row of a grouped record)
12663
12684
  - Wildcards like [*] extract multiple values/objects
12685
+ - A key that contains a dot needs bracket notation: `$['P.O. Number']` (or
12686
+ `$["P.O. Number"]`, `$.[P.O. Number]`). `$.P.O. Number` is read as a nested
12687
+ path: it maps nothing and the record still succeeds. Spaces, hyphens and `#`
12688
+ need no brackets (`$.Ship To Name`, `$.Tracking #`)
12689
+ - Filter expressions such as `$.items[?(@.active)]` fail the record with
12690
+ "Eval [?(expr)] prevented in JSONPath expression."
12664
12691
 
12665
12692
  ```json
12666
12693
  "extract": "$.customer.addresses[*]" // Extracts all addresses
@@ -12849,6 +12876,12 @@ components:
12849
12876
  **Usage**
12850
12877
 
12851
12878
  The lookupName refers to a named lookup defined in the lookups array of the same resource.
12879
+ On an HTTP import that is `http.lookups`: a `lookups` array sent only at the top level
12880
+ is dropped on save. On an import, a name that matches no lookup fails every record
12881
+ with "Unable to find lookup in mapping configs - <name>", and a key the lookup
12882
+ doesn't hold follows the lookup's `allowFailures`: false fails the record; true, or
12883
+ the field left out, lets the record succeed with the lookup's `default`, or without
12884
+ the mapped field when there is none.
12852
12885
 
12853
12886
  ```json
12854
12887
  {
@@ -13186,6 +13219,11 @@ components:
13186
13219
  The system creates special composite objects during processing to maintain
13187
13220
  hierarchical relationships, allowing easy access to both the current array item
13188
13221
  and its parent contexts.
13222
+
13223
+ An iterating entry keeps the `[*]`: `$.line_items` without it yields one empty
13224
+ element per item, with no error. Child extracts drop the `[*]` but keep the
13225
+ array's path (`$.line_items.sku`); `$.line_items[*].sku` maps nothing, and an
13226
+ element-relative `$.sku` reads the record root instead of the element.
13189
13227
  examples:
13190
13228
  - $.items[*]
13191
13229
  - $.order.lineItems[*]
@@ -13397,14 +13435,17 @@ components:
13397
13435
  type: string
13398
13436
  description: |
13399
13437
  **Purpose**
13400
- Required on every mapping entry. Controls whether the mapping is applied.
13438
+ Controls whether the mapping is applied. Send it on every mapping entry.
13401
13439
 
13402
13440
  **Guidance**
13403
13441
  Only `Active` rows run. `Draft` and `Inactive` rows keep their
13404
13442
  configuration, are saved with minimal validation, and are skipped at
13405
13443
  runtime and in preview; a non-Active parent skips its whole subtree
13406
- whatever its children say. The API rejects a mapping missing this field
13407
- (validation error: "Mapping object must have status field present.").
13444
+ whatever its children say. Imports (on save and in the mapper processor)
13445
+ and API response mappings reject a row missing this field (validation
13446
+ error: "Mapping object must have status field present."); a Tool's
13447
+ output mapping saves and runs one, which is why `required` doesn't
13448
+ list it.
13408
13449
  x-celigo-ai-guidance:
13409
13450
  - |-
13410
13451
  Emit `"Active"` for mappings that should run; `"Draft"` is also
@@ -13727,6 +13768,12 @@ components:
13727
13768
  - Examples: '$.customer.firstName', '$.items[0].price', '$.addresses[*].street',
13728
13769
  '$[*].Tax' (every row of a grouped record)
13729
13770
  - Wildcards like [*] extract multiple values/objects
13771
+ - A key that contains a dot needs bracket notation: `$['P.O. Number']` (or
13772
+ `$["P.O. Number"]`, `$.[P.O. Number]`). `$.P.O. Number` is read as a nested
13773
+ path: it maps nothing and the record still succeeds. Spaces, hyphens and `#`
13774
+ need no brackets (`$.Ship To Name`, `$.Tracking #`)
13775
+ - Filter expressions such as `$.items[?(@.active)]` fail the record with
13776
+ "Eval [?(expr)] prevented in JSONPath expression."
13730
13777
 
13731
13778
  ```json
13732
13779
  "extract": "$.customer.addresses[*]" // Extracts all addresses
@@ -13915,6 +13962,12 @@ components:
13915
13962
  **Usage**
13916
13963
 
13917
13964
  The lookupName refers to a named lookup defined in the lookups array of the same resource.
13965
+ On an HTTP import that is `http.lookups`: a `lookups` array sent only at the top level
13966
+ is dropped on save. On an import, a name that matches no lookup fails every record
13967
+ with "Unable to find lookup in mapping configs - <name>", and a key the lookup
13968
+ doesn't hold follows the lookup's `allowFailures`: false fails the record; true, or
13969
+ the field left out, lets the record succeed with the lookup's `default`, or without
13970
+ the mapped field when there is none.
13918
13971
 
13919
13972
  ```json
13920
13973
  {
@@ -14252,6 +14305,11 @@ components:
14252
14305
  The system creates special composite objects during processing to maintain
14253
14306
  hierarchical relationships, allowing easy access to both the current array item
14254
14307
  and its parent contexts.
14308
+
14309
+ An iterating entry keeps the `[*]`: `$.line_items` without it yields one empty
14310
+ element per item, with no error. Child extracts drop the `[*]` but keep the
14311
+ array's path (`$.line_items.sku`); `$.line_items[*].sku` maps nothing, and an
14312
+ element-relative `$.sku` reads the record root instead of the element.
14255
14313
  examples:
14256
14314
  - $.items[*]
14257
14315
  - $.order.lineItems[*]
@@ -14463,14 +14521,17 @@ components:
14463
14521
  type: string
14464
14522
  description: |
14465
14523
  **Purpose**
14466
- Required on every mapping entry. Controls whether the mapping is applied.
14524
+ Controls whether the mapping is applied. Send it on every mapping entry.
14467
14525
 
14468
14526
  **Guidance**
14469
14527
  Only `Active` rows run. `Draft` and `Inactive` rows keep their
14470
14528
  configuration, are saved with minimal validation, and are skipped at
14471
14529
  runtime and in preview; a non-Active parent skips its whole subtree
14472
- whatever its children say. The API rejects a mapping missing this field
14473
- (validation error: "Mapping object must have status field present.").
14530
+ whatever its children say. Imports (on save and in the mapper processor)
14531
+ and API response mappings reject a row missing this field (validation
14532
+ error: "Mapping object must have status field present."); a Tool's
14533
+ output mapping saves and runs one, which is why `required` doesn't
14534
+ list it.
14474
14535
  x-celigo-ai-guidance:
14475
14536
  - |-
14476
14537
  Emit `"Active"` for mappings that should run; `"Draft"` is also
@@ -15140,7 +15201,7 @@ components:
15140
15201
  description: When true, the mapped value cannot be overwritten by later mapping steps.
15141
15202
  lookupName:
15142
15203
  type: string
15143
- description: Name of an entry in the import's `lookups` array used to translate the value.
15204
+ description: Name of an entry in the import's `lookups` array (`http.lookups` on an HTTP import) used to translate the value.
15144
15205
  x-celigo-ai-guidance:
15145
15206
  - |-
15146
15207
  Name of a lookup defined on ``resource.lookups`` whose result
@@ -16592,8 +16653,9 @@ components:
16592
16653
 
16593
16654
  Lookups referenced by ``lookupName`` live on the top-level
16594
16655
  ``resource.lookups`` array (mirrored under the adaptor key for
16595
- adaptors that maintain their own copy — see the mirror invariant
16596
- on ``lookups``). Lookups are independent of this
16656
+ adaptors that maintain their own copy; on an HTTP import that
16657
+ copy, ``http.lookups``, is the one a save keeps — see the mirror
16658
+ invariant on ``lookups``). Lookups are independent of this
16597
16659
  mapping: they are neither created nor cleared automatically when
16598
16660
  this mapping changes.
16599
16661
  properties:
@@ -16712,6 +16774,12 @@ components:
16712
16774
 
16713
16775
  Both arrays MUST hold byte-for-byte identical content: write
16714
16776
  both on every save and treat them as a single logical field.
16777
+ On an HTTP import the adaptor copy decides: a save keeps
16778
+ ``http.lookups`` and mirrors it here, overwriting a copy here
16779
+ that differs, and an array sent only here is dropped on create
16780
+ and on PUT with no error. A mapping row that names one of its
16781
+ lookups then fails every record with ``Unable to find lookup in
16782
+ mapping configs - <name>``.
16715
16783
  - |-
16716
16784
  ## Shape
16717
16785
 
package/dist/tool.yml CHANGED
@@ -3638,6 +3638,12 @@ components:
3638
3638
  - Examples: '$.customer.firstName', '$.items[0].price', '$.addresses[*].street',
3639
3639
  '$[*].Tax' (every row of a grouped record)
3640
3640
  - Wildcards like [*] extract multiple values/objects
3641
+ - A key that contains a dot needs bracket notation: `$['P.O. Number']` (or
3642
+ `$["P.O. Number"]`, `$.[P.O. Number]`). `$.P.O. Number` is read as a nested
3643
+ path: it maps nothing and the record still succeeds. Spaces, hyphens and `#`
3644
+ need no brackets (`$.Ship To Name`, `$.Tracking #`)
3645
+ - Filter expressions such as `$.items[?(@.active)]` fail the record with
3646
+ "Eval [?(expr)] prevented in JSONPath expression."
3641
3647
 
3642
3648
  ```json
3643
3649
  "extract": "$.customer.addresses[*]" // Extracts all addresses
@@ -3826,6 +3832,12 @@ components:
3826
3832
  **Usage**
3827
3833
 
3828
3834
  The lookupName refers to a named lookup defined in the lookups array of the same resource.
3835
+ On an HTTP import that is `http.lookups`: a `lookups` array sent only at the top level
3836
+ is dropped on save. On an import, a name that matches no lookup fails every record
3837
+ with "Unable to find lookup in mapping configs - <name>", and a key the lookup
3838
+ doesn't hold follows the lookup's `allowFailures`: false fails the record; true, or
3839
+ the field left out, lets the record succeed with the lookup's `default`, or without
3840
+ the mapped field when there is none.
3829
3841
 
3830
3842
  ```json
3831
3843
  {
@@ -4163,6 +4175,11 @@ components:
4163
4175
  The system creates special composite objects during processing to maintain
4164
4176
  hierarchical relationships, allowing easy access to both the current array item
4165
4177
  and its parent contexts.
4178
+
4179
+ An iterating entry keeps the `[*]`: `$.line_items` without it yields one empty
4180
+ element per item, with no error. Child extracts drop the `[*]` but keep the
4181
+ array's path (`$.line_items.sku`); `$.line_items[*].sku` maps nothing, and an
4182
+ element-relative `$.sku` reads the record root instead of the element.
4166
4183
  examples:
4167
4184
  - $.items[*]
4168
4185
  - $.order.lineItems[*]
@@ -4374,14 +4391,17 @@ components:
4374
4391
  type: string
4375
4392
  description: |
4376
4393
  **Purpose**
4377
- Required on every mapping entry. Controls whether the mapping is applied.
4394
+ Controls whether the mapping is applied. Send it on every mapping entry.
4378
4395
 
4379
4396
  **Guidance**
4380
4397
  Only `Active` rows run. `Draft` and `Inactive` rows keep their
4381
4398
  configuration, are saved with minimal validation, and are skipped at
4382
4399
  runtime and in preview; a non-Active parent skips its whole subtree
4383
- whatever its children say. The API rejects a mapping missing this field
4384
- (validation error: "Mapping object must have status field present.").
4400
+ whatever its children say. Imports (on save and in the mapper processor)
4401
+ and API response mappings reject a row missing this field (validation
4402
+ error: "Mapping object must have status field present."); a Tool's
4403
+ output mapping saves and runs one, which is why `required` doesn't
4404
+ list it.
4385
4405
  x-celigo-ai-guidance:
4386
4406
  - |-
4387
4407
  Emit `"Active"` for mappings that should run; `"Draft"` is also
@@ -4704,6 +4724,12 @@ components:
4704
4724
  - Examples: '$.customer.firstName', '$.items[0].price', '$.addresses[*].street',
4705
4725
  '$[*].Tax' (every row of a grouped record)
4706
4726
  - Wildcards like [*] extract multiple values/objects
4727
+ - A key that contains a dot needs bracket notation: `$['P.O. Number']` (or
4728
+ `$["P.O. Number"]`, `$.[P.O. Number]`). `$.P.O. Number` is read as a nested
4729
+ path: it maps nothing and the record still succeeds. Spaces, hyphens and `#`
4730
+ need no brackets (`$.Ship To Name`, `$.Tracking #`)
4731
+ - Filter expressions such as `$.items[?(@.active)]` fail the record with
4732
+ "Eval [?(expr)] prevented in JSONPath expression."
4707
4733
 
4708
4734
  ```json
4709
4735
  "extract": "$.customer.addresses[*]" // Extracts all addresses
@@ -4892,6 +4918,12 @@ components:
4892
4918
  **Usage**
4893
4919
 
4894
4920
  The lookupName refers to a named lookup defined in the lookups array of the same resource.
4921
+ On an HTTP import that is `http.lookups`: a `lookups` array sent only at the top level
4922
+ is dropped on save. On an import, a name that matches no lookup fails every record
4923
+ with "Unable to find lookup in mapping configs - <name>", and a key the lookup
4924
+ doesn't hold follows the lookup's `allowFailures`: false fails the record; true, or
4925
+ the field left out, lets the record succeed with the lookup's `default`, or without
4926
+ the mapped field when there is none.
4895
4927
 
4896
4928
  ```json
4897
4929
  {
@@ -5229,6 +5261,11 @@ components:
5229
5261
  The system creates special composite objects during processing to maintain
5230
5262
  hierarchical relationships, allowing easy access to both the current array item
5231
5263
  and its parent contexts.
5264
+
5265
+ An iterating entry keeps the `[*]`: `$.line_items` without it yields one empty
5266
+ element per item, with no error. Child extracts drop the `[*]` but keep the
5267
+ array's path (`$.line_items.sku`); `$.line_items[*].sku` maps nothing, and an
5268
+ element-relative `$.sku` reads the record root instead of the element.
5232
5269
  examples:
5233
5270
  - $.items[*]
5234
5271
  - $.order.lineItems[*]
@@ -5440,14 +5477,17 @@ components:
5440
5477
  type: string
5441
5478
  description: |
5442
5479
  **Purpose**
5443
- Required on every mapping entry. Controls whether the mapping is applied.
5480
+ Controls whether the mapping is applied. Send it on every mapping entry.
5444
5481
 
5445
5482
  **Guidance**
5446
5483
  Only `Active` rows run. `Draft` and `Inactive` rows keep their
5447
5484
  configuration, are saved with minimal validation, and are skipped at
5448
5485
  runtime and in preview; a non-Active parent skips its whole subtree
5449
- whatever its children say. The API rejects a mapping missing this field
5450
- (validation error: "Mapping object must have status field present.").
5486
+ whatever its children say. Imports (on save and in the mapper processor)
5487
+ and API response mappings reject a row missing this field (validation
5488
+ error: "Mapping object must have status field present."); a Tool's
5489
+ output mapping saves and runs one, which is why `required` doesn't
5490
+ list it.
5451
5491
  x-celigo-ai-guidance:
5452
5492
  - |-
5453
5493
  Emit `"Active"` for mappings that should run; `"Draft"` is also
@@ -5818,8 +5858,8 @@ components:
5818
5858
  - Original value indicators: "{Original Value}", "No mapping found"
5819
5859
  - Neutral values: "Other", "N/A", "Miscellaneous"
5820
5860
 
5821
- If allowFailures is false and no default is specified, the flow will fail
5822
- when encountering unmapped values.
5861
+ If allowFailures is false, a record whose value is unmapped fails and the default
5862
+ is ignored.
5823
5863
  examples:
5824
5864
  - Unknown
5825
5865
  - Other
@@ -5840,7 +5880,11 @@ components:
5840
5880
  This field determines how the system handles source values that don't exist in the map:
5841
5881
 
5842
5882
  - true: Use the default value for missing mappings and continue processing
5843
- - false: Treat missing mappings as errors, failing the record
5883
+ - false: Treat missing mappings as errors, failing the record (`lookup_error` for a
5884
+ static map, `lookupcache_evaluation_failed` for a lookup cache)
5885
+ - omitted or null: the record doesn't fail either. On an import a static lookup writes
5886
+ its default if it has one, and a static or cache lookup without one leaves the
5887
+ mapped field out of the output, with no error
5844
5888
 
5845
5889
  **Recommendation**
5846
5890
 
@@ -5854,11 +5898,14 @@ components:
5854
5898
  - All possible source values are known and controlled
5855
5899
  - Missing mappings indicate serious data problems that should be addressed
5856
5900
 
5857
- The best practice is typically to set allowFailures to true with a meaningful
5858
- default value, so flows remain operational while alerting you to missing mappings.
5901
+ A default raises no error: records that miss go out with the default value and
5902
+ nothing reports them. Use true only when that fallback is acceptable at the
5903
+ destination, and set false explicitly when a missing value must stop the record.
5859
5904
  examples:
5860
5905
  - true
5861
5906
  - false
5907
+ x-celigo-ai-guidance:
5908
+ - 'Never leave this field out to mean "fail on a miss": on an import, an omitted or null value lets a missing key through without an error (with the default, or without the mapped field when there is none). Only an explicit false fails the record.'
5862
5909
  Transform:
5863
5910
  type: object
5864
5911
  description: |
@@ -14411,7 +14458,9 @@ components:
14411
14458
 
14412
14459
  - **Field mappings** — a mapping entry sets
14413
14460
  ``lookupName: "<name>"`` to resolve a field's value through
14414
- the lookup.
14461
+ the lookup. A ``lookupName`` that matches no entry in this
14462
+ array fails every record with ``Unable to find lookup in
14463
+ mapping configs - <name>``.
14415
14464
  - **Handlebars expressions** — anywhere handlebars is
14416
14465
  evaluated (relativeURI, headers, body), ``{{lookup "name"
14417
14466
  value}}`` calls the lookup with ``value`` as input.
@@ -14425,9 +14474,13 @@ components:
14425
14474
  ## Mirror invariant
14426
14475
 
14427
14476
  The Celigo platform persists lookups in TWO locations on an HTTP
14428
- import: top-level ``lookups`` and ``http.lookups``. Both arrays
14429
- MUST hold byte-for-byte identical content, so write both on
14430
- every save.
14477
+ import: top-level ``lookups`` and ``http.lookups``, and
14478
+ ``http.lookups`` is the copy that counts. A save keeps
14479
+ ``http.lookups`` and mirrors it to the top level, overwriting a
14480
+ top-level copy that differs; a ``lookups`` array sent only at the
14481
+ top level is dropped with no error, on create and on PUT, and both
14482
+ arrays read back null. Write ``http.lookups`` on every save;
14483
+ sending the same array at the top level too is harmless.
14431
14484
  - |-
14432
14485
  ## Static vs dynamic vs cached
14433
14486
 
@@ -14477,12 +14530,13 @@ components:
14477
14530
  - handlebars
14478
14531
  description: |
14479
14532
  Request body template for POST / PUT / PATCH lookup methods, typically
14480
- a JSON string with Handlebars placeholders (``{"email":"{{{email}}}"}``);
14533
+ a JSON string with Handlebars placeholders (``{"email":"{{email}}"}``);
14481
14534
  ignored for GET / DELETE. The record's fields sit at the top level:
14482
14535
  ``{{email}}`` renders the record's value, while ``{{record.email}}``
14483
14536
  renders empty.
14484
14537
  x-celigo-ai-guidance:
14485
14538
  - 'Put the lookup''s request template here, not in ``postBody``: a ``postBody`` saves without an error but is not kept under ``http.lookups``, so the lookup goes out with no body and the run reports no error.'
14539
+ - 'Write string values with double braces inside the quotes (``"{{email}}"``): they are JSON-escaped at runtime. With triple braces a value holding a double quote breaks the request body, and the lookup quietly finds nothing, so an existence check writes the record as new.'
14486
14540
  headers:
14487
14541
  type: array
14488
14542
  items:
@@ -14538,10 +14592,17 @@ components:
14538
14592
  - boolean
14539
14593
  - 'null'
14540
14594
  description: |
14541
- When true, a lookup miss (no matching response and no
14542
- ``default``) resolves to ``null`` and the import continues.
14543
- When false (default), a miss halts the record. May be
14544
- stored as null (treated as unset).
14595
+ When true, a lookup miss uses ``default`` (or leaves the mapped
14596
+ field out when there is none) and the record continues. When
14597
+ false, a miss fails the record: ``lookup_error`` ("Could not find
14598
+ value for static lookup: …") for a static ``map``,
14599
+ ``lookupcache_evaluation_failed`` for a cache. Omitted or null,
14600
+ a miss doesn't fail the record either: a static lookup writes
14601
+ its ``default`` if it has one, and a lookup without one (static,
14602
+ cache, or a live request that matches nothing or fails) leaves
14603
+ the mapped field out.
14604
+ x-celigo-ai-guidance:
14605
+ - Set false explicitly when a miss must stop the record. Leaving the field out lets the record through with the default or without the looked-up value, so a destination that needs the real value gets a request without it and nothing errors.
14545
14606
  useDefaultOnMultipleMatches:
14546
14607
  type: boolean
14547
14608
  description: |
@@ -24058,7 +24119,7 @@ components:
24058
24119
  description: When true, the mapped value cannot be overwritten by later mapping steps.
24059
24120
  lookupName:
24060
24121
  type: string
24061
- description: Name of an entry in the import's `lookups` array used to translate the value.
24122
+ description: Name of an entry in the import's `lookups` array (`http.lookups` on an HTTP import) used to translate the value.
24062
24123
  x-celigo-ai-guidance:
24063
24124
  - |-
24064
24125
  Name of a lookup defined on ``resource.lookups`` whose result
@@ -25510,8 +25571,9 @@ components:
25510
25571
 
25511
25572
  Lookups referenced by ``lookupName`` live on the top-level
25512
25573
  ``resource.lookups`` array (mirrored under the adaptor key for
25513
- adaptors that maintain their own copy — see the mirror invariant
25514
- on ``lookups``). Lookups are independent of this
25574
+ adaptors that maintain their own copy; on an HTTP import that
25575
+ copy, ``http.lookups``, is the one a save keeps — see the mirror
25576
+ invariant on ``lookups``). Lookups are independent of this
25515
25577
  mapping: they are neither created nor cleared automatically when
25516
25578
  this mapping changes.
25517
25579
  properties:
@@ -25630,6 +25692,12 @@ components:
25630
25692
 
25631
25693
  Both arrays MUST hold byte-for-byte identical content: write
25632
25694
  both on every save and treat them as a single logical field.
25695
+ On an HTTP import the adaptor copy decides: a save keeps
25696
+ ``http.lookups`` and mirrors it here, overwriting a copy here
25697
+ that differs, and an array sent only here is dropped on create
25698
+ and on PUT with no error. A mapping row that names one of its
25699
+ lookups then fails every record with ``Unable to find lookup in
25700
+ mapping configs - <name>``.
25633
25701
  - |-
25634
25702
  ## Shape
25635
25703
 
@@ -31090,6 +31158,8 @@ components:
31090
31158
  Controls how the export requests subsequent pages when the API returns multi-page responses. The `method` field determines which companion fields are required and how each next page is requested. For the page, skip, and token methods, reference the matching pagination variable (`{{export.http.paging.page}}`, `{{export.http.paging.skip}}`, or `{{export.http.paging.token}}`) in the relative URI or request body — misconfigured pagination is a common cause of incomplete data retrieval.
31091
31159
 
31092
31160
  When this export is the first lookup of a builder-mode API with `pagination.enabled` set, it is that API's volume driver: saving the export (even unchanged) invalidates the API's issued cursors, so a caller mid-walk gets an empty final page, and removing `paging` is accepted on save but makes every call to the API fail with `400 api_pagination_source_not_paged` until paging is restored or the API's flag is turned off.
31161
+
31162
+ When a next page's response is identical to the previous one, paging stops: the export records an open error with code `page_response_error` ("Identical response received from next page request. No more page requests will be made.") and the run completes with the pages already read, so later pages are never exported. A request that doesn't change between pages produces this, as observed with `method: page` and the pagination variable missing from the relative URI and body; reference the variable so each request asks for the next page.
31093
31163
  x-celigo-ai-guidance:
31094
31164
  - Configuration object for navigating through multi-page API responses.
31095
31165
  - |-
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@celigo/api-specs",
3
- "version": "0.2.151",
3
+ "version": "0.2.153",
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,7 +1,7 @@
1
1
  {
2
2
  "provenance": {
3
3
  "repo": "celigo/integrator-api-specs",
4
- "iasCommit": "48f349ad",
4
+ "iasCommit": "edaea717",
5
5
  "generatedAt": "2026-10-21"
6
6
  },
7
7
  "roots": {