@celigo/api-specs 0.2.171 → 0.2.173

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/import.yml CHANGED
@@ -1810,6 +1810,8 @@ components:
1810
1810
  Reference the existing record ID in the UPDATE URI with `{{{data.0.fieldName}}}` (triple braces with the data.0 prefix).
1811
1811
  Use separate array elements per operation rather than `{{#if}}` conditionals inside a single URI.
1812
1812
  URI templates render strictly: a path that is undefined on the record — such as `record.<field>` on a grouped record, whose root is `rows` — fails the request instead of rendering empty.
1813
+ A field the record lacks, or a `{{lookup.<name>}}` whose lookup found nothing, fails that record before anything is sent, with `handlebars_template_parse_error` (source `application`, classification `parse`): `Failed to generate request url from template: <URL>. Details: "<field>" not defined in the model.` That is missing data, not template syntax, and a retry of the same record fails the same way: send records that may lack the destination id through a composite UPDATE/CREATE import (`existingExtract`), or skip them with `ignoreMissing` and `ignoreExtract`.
1814
+ A field that holds an empty string or null is defined: it renders empty, and the request is sent without the value.
1813
1815
  x-celigo-ai-guidance:
1814
1816
  - '**CRITICAL: This MUST be an array of strings, NOT an object.**'
1815
1817
  - |-
@@ -2853,9 +2855,17 @@ components:
2853
2855
  extract:
2854
2856
  type: string
2855
2857
  description: |
2856
- JSONPath expression that selects the lookup value from the
2857
- HTTP response body. ``$.`` prefix optional. Examples:
2858
- ``$.data[0].id``, ``$.results.primaryKey``, ``id``.
2858
+ Path to the lookup value in the HTTP response body, written
2859
+ without a ``$.`` prefix: ``id``, ``results[0].id``, or ``ids``
2860
+ for an array of ids. A ``$.``-prefixed path, a ``[*]``
2861
+ wildcard, or a dot path through an array (``results.id``)
2862
+ resolves nothing, so the lookup misses: with
2863
+ ``allowFailures: false`` the record fails
2864
+ (``batch_lookup_evaluation_failed``); otherwise it goes on with
2865
+ ``default`` or without the value, and nothing errors. A
2866
+ composite import whose ``existingLookupName`` names such a
2867
+ lookup sends every record to CREATE. Mapper 2.0 mapping
2868
+ extracts are the opposite: they take the ``$.``.
2859
2869
  _lookupCacheId:
2860
2870
  type: string
2861
2871
  format: objectId
@@ -2879,13 +2889,17 @@ components:
2879
2889
  - string
2880
2890
  - 'null'
2881
2891
  description: |
2882
- Value returned when the HTTP request returns no usable
2883
- match. When omitted and ``allowFailures`` is false, an
2884
- unmatched lookup halts the record. Stored as null when no
2892
+ Value written when the lookup finds no match and the miss is
2893
+ allowed (``allowFailures`` true, or omitted on a static
2894
+ ``map``). A save refuses a ``default`` together with an
2895
+ explicit ``allowFailures: false`` (422 "Lookups with default
2896
+ set can not have allowFailures explicitly set to false."), so
2897
+ a lookup either fails a miss (``allowFailures: false``, no
2898
+ default) or falls back to its default. Stored as null when no
2885
2899
  fallback is configured.
2886
2900
  x-celigo-ai-guidance:
2887
2901
  - 'Omit this field entirely when no fallback value is intended. An empty string is a value, not "no default": the save accepts `default: ""`, and a miss the lookup lets through writes `""`.'
2888
- - 'A fallback only takes effect on an allowed miss — pair a real default with allowFailures: true (or useDefaultOnMultipleMatches: true for the ambiguous-match case).'
2902
+ - 'A default raises no error: every unmatched value goes out as the default with a 200. Set one only when a single fallback is right for every value the lookup can''t match; when a miss must stop the record, set allowFailures: false and leave the default out. An ambiguous answer (two or more matches) doesn''t use the default either: see useDefaultOnMultipleMatches.'
2889
2903
  allowFailures:
2890
2904
  type:
2891
2905
  - boolean
@@ -2895,20 +2909,40 @@ components:
2895
2909
  field out when there is none) and the record continues. When
2896
2910
  false, a miss fails the record: ``lookup_error`` ("Could not find
2897
2911
  value for static lookup: …") for a static ``map``,
2898
- ``lookupcache_evaluation_failed`` for a cache. Omitted or null,
2912
+ ``lookupcache_evaluation_failed`` for a cache, and
2913
+ ``batch_lookup_evaluation_failed`` (source ``internal``, "<field>:
2914
+ The batch lookup could not be evaluated. Check the value in the
2915
+ key '<value>', and try again.") for a live request that matches
2916
+ nothing or whose ``extract`` resolves nothing. Omitted or null,
2899
2917
  a miss doesn't fail the record either: a static lookup writes
2900
2918
  its ``default`` if it has one, and a lookup without one (static,
2901
2919
  cache, or a live request that matches nothing or fails) leaves
2902
2920
  the mapped field out.
2921
+
2922
+ False is also the only setting under which an ambiguous answer
2923
+ fails the record: two or more values at ``extract`` (an array of
2924
+ ids or of result objects) fail it with ``lookup_conflict``
2925
+ ("Multiple matches found for lookup."). Omitted, null or true,
2926
+ the first value is sent with no error, and an array of result
2927
+ objects is written as the text ``[object Object]``. An indexed
2928
+ ``extract`` (``ids[0]``) takes the first match whatever this
2929
+ field says, so it hides an ambiguous search rather than fixing
2930
+ it.
2903
2931
  x-celigo-ai-guidance:
2904
2932
  - 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.
2933
+ - 'Fix an ambiguous lookup in its search, not here: query on a key that identifies one record (an email, an external id) and keep false, so a search that still finds two fails instead of writing against the first match.'
2905
2934
  useDefaultOnMultipleMatches:
2906
2935
  type: boolean
2907
2936
  description: |
2908
- Controls behaviour when the response contains more than one
2909
- match. When true, the ``default`` value is returned instead
2910
- of raising an ambiguous-match error. When false (default),
2911
- multiple matches are treated as a failure.
2937
+ Meant to return ``default`` when the response holds more than
2938
+ one match. On an HTTP import it has not been seen to take
2939
+ effect: with ``allowFailures`` omitted or true the first match
2940
+ is sent whatever this flag says, with or without a
2941
+ ``default``, and with ``allowFailures: false`` the record
2942
+ fails with ``lookup_conflict``. Two or more matches fail the
2943
+ record only when ``allowFailures`` is false (see
2944
+ ``allowFailures``), so make the search match one record
2945
+ rather than relying on this flag.
2912
2946
  type: array
2913
2947
  Ftp:
2914
2948
  type: object
@@ -5121,7 +5155,7 @@ components:
5121
5155
 
5122
5156
  This value is used as a fallback when:
5123
5157
  1. The source value doesn't match any key in the map
5124
- 2. allowFailures is set to true
5158
+ 2. allowFailures is true or omitted
5125
5159
 
5126
5160
  Setting an appropriate default helps prevent flow failures due to unexpected
5127
5161
  values and provides predictable behavior for edge cases.
@@ -5131,8 +5165,10 @@ components:
5131
5165
  - Original value indicators: "{Original Value}", "No mapping found"
5132
5166
  - Neutral values: "Other", "N/A", "Miscellaneous"
5133
5167
 
5134
- If allowFailures is false, a record whose value is unmapped fails and the default
5135
- is ignored.
5168
+ A save refuses a default together with an explicit `allowFailures: false`
5169
+ (422 `Lookups with default set can not have allowFailures explicitly set to
5170
+ false.`): a lookup either fails a miss (`allowFailures: false`, no default) or
5171
+ falls back to its default.
5136
5172
  examples:
5137
5173
  - Unknown
5138
5174
  - Other
@@ -5140,7 +5176,8 @@ components:
5140
5176
  - Unmapped Value
5141
5177
  - '{Original Value}'
5142
5178
  x-celigo-ai-guidance:
5143
- - 'Omit this field entirely when no fallback value is intended: a miss the lookup lets through then leaves the mapped field out, and with `allowFailures: false` a miss fails the record whatever the default. An empty string is a value, not "no default" — the save accepts `default: ""`, and an allowed miss writes `""`.'
5179
+ - 'Omit this field entirely when no fallback value is intended: a miss the lookup lets through then leaves the mapped field out, and `allowFailures: false` (which a save refuses alongside a default) fails it. An empty string is a value, not "no default" — the save accepts `default: ""`, and an allowed miss writes `""`.'
5180
+ - A default sends every unmapped value with no error, so add the missing key to the map when the destination needs the real value; keys match the extracted value exactly (case, spacing and suffixes count), and a save replaces the whole map.
5144
5181
  allowFailures:
5145
5182
  type:
5146
5183
  - boolean
@@ -12267,15 +12304,30 @@ components:
12267
12304
  - `"lessthan"`: Value is less than specified value (is less than)
12268
12305
  - `"lessthanequals"`: Value is less than or equal to specified value (is less than or equals)
12269
12306
  - `"startswith"`: String starts with specified prefix (starts with)
12307
+ - `"notstartswith"`: String does not start with specified prefix (does not start with)
12270
12308
  - `"endswith"`: String ends with specified suffix (ends with)
12309
+ - `"notendswith"`: String does not end with specified suffix (does not end with)
12271
12310
  - `"contains"`: String contains specified substring (contains)
12272
12311
  - `"doesnotcontain"`: String does not contain specified substring (does not contain)
12273
12312
  - `"empty"`: Field is missing or empty (is empty)
12274
12313
  - `"notempty"`: Field contains a value (is not empty)
12275
- - `"matches"`: Matches a regular expression (matches)
12276
-
12277
- `isempty`, `isnotempty` and `anyof` are not operators: they are refused with 422
12278
- "Invalid operation: <name>".
12314
+ - `"matches"`: Matches a regular expression, ignoring case (matches)
12315
+
12316
+ Operator names are case-insensitive: `NOTEMPTY` and `endsWith` work and are stored
12317
+ as sent. `isempty`, `isnotempty`, `anyof`, `notcontains`, `doesnotstartwith`,
12318
+ `doesnotendwith`, `notmatches`, `doesnotmatch` and `notequal` are not operators:
12319
+ they are refused with 422 "Invalid operation: <name>", with the name in lowercase,
12320
+ both when the filter is saved and by `POST /v1/processors/filter`. To negate a
12321
+ condition, wrap it in `not`.
12322
+
12323
+ The string comparisons (`equals`, `contains`, `startswith`, `endswith` and their
12324
+ negations) are case-sensitive; wrap the field in `lowercase` to compare without case.
12325
+ `matches` is not: every pattern is compiled with the flags `gi`, so `^paid$` also
12326
+ matches `PAID` and `[a-z]` matches capital letters. An inline flag such as `(?i)`
12327
+ makes the pattern invalid. The filter still saves, but in a run every record fails
12328
+ with `FILTER_EVALUATION_FAILED` ("Invalid regular expression: /(?i)…/gi: Invalid
12329
+ group"), and `POST /v1/processors/filter` refuses the call with 422 (live-verified
12330
+ 2026-10-22).
12279
12331
 
12280
12332
  **Logical Operators**
12281
12333
  - `"and"`: All conditions must be true
@@ -12565,7 +12617,9 @@ components:
12565
12617
  x-celigo-refModel: scripts
12566
12618
  description: |
12567
12619
  Reference to the Script resource that contains the filtering logic. This must be a valid
12568
- ObjectId of a Script resource that exists in the system.
12620
+ ObjectId of a Script resource in this account: any other id fails the save with 422
12621
+ ("Only a script owned by the user or a script shared by the Integration App can be used
12622
+ at filter.script._scriptId.").
12569
12623
 
12570
12624
  The referenced script must contain the function specified in the `function` field
12571
12625
  and must be written to handle filtering specifically. The script receives
@@ -12624,7 +12678,11 @@ components:
12624
12678
  type: string
12625
12679
  format: objectId
12626
12680
  x-celigo-refModel: scripts
12627
- description: Script containing the hook function named in `function`. Send this or `_stackId`, not both.
12681
+ description: |-
12682
+ Script containing the hook function named in `function`. Send this or `_stackId`, not both.
12683
+ Must be a script in this account: any other id fails the save with 422, naming the hook,
12684
+ such as "Only a script owned by the user or a script shared by the Integration App can
12685
+ be used at hooks.preMap._scriptId." on an import's `preMap`.
12628
12686
  _stackId:
12629
12687
  type: string
12630
12688
  format: objectId
@@ -12696,7 +12754,11 @@ components:
12696
12754
 
12697
12755
  **Simple Types (direct value mapping)**
12698
12756
  - `string`: Text values, converts other types to string representation
12699
- - `number`: Numeric values, attempts conversion from strings
12757
+ - `number`: Numeric values. Converts a numeric string (`"24"` → `24`,
12758
+ `"007"` → `7`) and leaves the field out for an empty string; a value
12759
+ holding letters or a thousands separator (`"1,250.00"`) fails the
12760
+ record with `non_parsable_string` (`<generate>: String contains alpha
12761
+ characters`)
12700
12762
  - `boolean`: True/false values, converts truthy/falsy values
12701
12763
 
12702
12764
  Dates are represented as strings — use `string` for date fields and
@@ -12739,8 +12801,14 @@ components:
12739
12801
  - |-
12740
12802
  Missing `dataType` is rejected at save with validation error
12741
12803
  `[mandatory_destination_datatype] Destination datatype is a
12742
- required field.` When in doubt, use `"string"` — it accepts
12743
- any source value and the runtime will coerce it.
12804
+ required field.`
12805
+ - |-
12806
+ Give each row the type the destination field expects; `"string"` is
12807
+ not a safe default. It accepts any source value, but sends a numeric
12808
+ source as text (`"24"`), which a destination that checks JSON types
12809
+ refuses. Map numeric destination fields as `number`, which fails a
12810
+ record (`non_parsable_string`) only when the value holds letters or a
12811
+ thousands separator.
12744
12812
  enum:
12745
12813
  - string
12746
12814
  - number
@@ -12752,7 +12820,7 @@ components:
12752
12820
  - objectarray
12753
12821
  x-enumDescriptions:
12754
12822
  string: Text values; converts other types to their string representation.
12755
- number: Numeric values; attempts conversion from strings.
12823
+ number: Numeric values; converts numeric strings, and fails the record (`non_parsable_string`) on letters or a thousands separator.
12756
12824
  boolean: True/false values; converts truthy/falsy values.
12757
12825
  object: Nested object built from child `mappings`, or copied whole with `extract` (not both).
12758
12826
  stringarray: Array of string values.
@@ -13780,7 +13848,11 @@ components:
13780
13848
 
13781
13849
  **Simple Types (direct value mapping)**
13782
13850
  - `string`: Text values, converts other types to string representation
13783
- - `number`: Numeric values, attempts conversion from strings
13851
+ - `number`: Numeric values. Converts a numeric string (`"24"` → `24`,
13852
+ `"007"` → `7`) and leaves the field out for an empty string; a value
13853
+ holding letters or a thousands separator (`"1,250.00"`) fails the
13854
+ record with `non_parsable_string` (`<generate>: String contains alpha
13855
+ characters`)
13784
13856
  - `boolean`: True/false values, converts truthy/falsy values
13785
13857
 
13786
13858
  Dates are represented as strings — use `string` for date fields and
@@ -13823,8 +13895,14 @@ components:
13823
13895
  - |-
13824
13896
  Missing `dataType` is rejected at save with validation error
13825
13897
  `[mandatory_destination_datatype] Destination datatype is a
13826
- required field.` When in doubt, use `"string"` — it accepts
13827
- any source value and the runtime will coerce it.
13898
+ required field.`
13899
+ - |-
13900
+ Give each row the type the destination field expects; `"string"` is
13901
+ not a safe default. It accepts any source value, but sends a numeric
13902
+ source as text (`"24"`), which a destination that checks JSON types
13903
+ refuses. Map numeric destination fields as `number`, which fails a
13904
+ record (`non_parsable_string`) only when the value holds letters or a
13905
+ thousands separator.
13828
13906
  enum:
13829
13907
  - string
13830
13908
  - number
@@ -13836,7 +13914,7 @@ components:
13836
13914
  - objectarray
13837
13915
  x-enumDescriptions:
13838
13916
  string: Text values; converts other types to their string representation.
13839
- number: Numeric values; attempts conversion from strings.
13917
+ number: Numeric values; converts numeric strings, and fails the record (`non_parsable_string`) on letters or a thousands separator.
13840
13918
  boolean: True/false values; converts truthy/falsy values.
13841
13919
  object: Nested object built from child `mappings`, or copied whole with `extract` (not both).
13842
13920
  stringarray: Array of string values.
@@ -15177,7 +15255,9 @@ components:
15177
15255
  Reference to a predefined script resource containing the transformation logic.
15178
15256
 
15179
15257
  The referenced script should contain the function specified in the
15180
- 'function' property.
15258
+ 'function' property. It must be a script in this account: any other id fails the save
15259
+ with 422 ("Only a script owned by the user or a script shared by the Integration App can
15260
+ be used at transform.script._scriptId.").
15181
15261
  format: objectid
15182
15262
  x-celigo-refModel: scripts
15183
15263
  examples:
@@ -15245,8 +15325,10 @@ components:
15245
15325
  - A dot path from the record root (e.g. `email`, `address.city`), read from the
15246
15326
  incoming record. A path that matches no field writes nothing.
15247
15327
  - Handlebars template (contains `{{`) for concatenation /
15248
- formatting / conditional logic (e.g.
15249
- `{{record.firstName}} {{record.lastName}}`).
15328
+ formatting / conditional logic (e.g. `{{firstName}} {{lastName}}`,
15329
+ `{{#if mobile}}{{mobile}}{{else}}{{phone}}{{/if}}`). The template reads the
15330
+ record's fields by bare name: `{{record.firstName}}` and `{{data.firstName}}`
15331
+ render nothing, so the field is left out even when the record has the value.
15250
15332
 
15251
15333
  A `$.` JSONPath (the Mapper 2.0 `mappings` syntax) reads nothing here, and a bare
15252
15334
  string is read as a field path, not a constant: set constants in `hardCodedValue`.
@@ -15287,8 +15369,9 @@ components:
15287
15369
  x-celigo-ai-guidance:
15288
15370
  - |-
15289
15371
  When true, skip this field entirely when ``extract`` / lookup
15290
- produces empty / null. Without this flag the destination field
15291
- receives null and may overwrite existing data.
15372
+ produces an empty string, null or nothing. Without this flag an
15373
+ empty string is written as ``""`` and null as null, either of which
15374
+ may overwrite existing data; a missing source is left out either way.
15292
15375
  immutable:
15293
15376
  type: boolean
15294
15377
  description: When true, the mapped value cannot be overwritten by later mapping steps.
@@ -15305,7 +15388,15 @@ components:
15305
15388
  type:
15306
15389
  - string
15307
15390
  - 'null'
15308
- description: Fallback value used when the extract yields no value.
15391
+ description: |-
15392
+ Fallback value written when the source value is an empty string, null or
15393
+ missing. Without a default, an empty string and null are written as they are
15394
+ and a missing field is left out.
15395
+ x-celigo-ai-guidance:
15396
+ - |-
15397
+ Use ``default``, not ``hardCodedValue``, for a fallback on a field that is
15398
+ sometimes empty: ``hardCodedValue`` is written on every record and replaces
15399
+ the values that exist.
15309
15400
  extractDateFormat:
15310
15401
  type: string
15311
15402
  description: Date format of the source value, used to parse it before conversion.
@@ -15421,8 +15512,8 @@ components:
15421
15512
  id:
15422
15513
  type: string
15423
15514
  description: |
15424
- Unique identifier for this field within the form.
15425
- This value typically matches the key in the fieldMap object.
15515
+ Unique identifier for this field within the form: layout containers and conditions
15516
+ refer to the field by it. Use the same string as the field's fieldMap key and its `name`.
15426
15517
  examples:
15427
15518
  - url
15428
15519
  - mode
@@ -15433,8 +15524,9 @@ components:
15433
15524
  name:
15434
15525
  type: string
15435
15526
  description: |
15436
- Name of the field, used as the property name when generating the settings object
15437
- from the submitted form data.
15527
+ Key the field's value is saved under: one top-level key of the resource's `settings`,
15528
+ which the form also reads the value back from when it opens. Nested objects inside
15529
+ `settings` are written to it directly, not through a form field's `name`.
15438
15530
  examples:
15439
15531
  - url
15440
15532
  - mode
@@ -15509,11 +15601,19 @@ components:
15509
15601
  required:
15510
15602
  type: boolean
15511
15603
  description: |
15512
- When true, the field must have a value before the form can be submitted.
15604
+ When true, the field must have a value before the form can be submitted. Only the form
15605
+ enforces it: an API write of `settings` is stored without the value.
15513
15606
  default: false
15514
15607
  examples:
15515
15608
  - true
15516
15609
  - false
15610
+ defaultValue:
15611
+ description: |
15612
+ Value the form shows while the resource's `settings` holds no value under the field's
15613
+ `name`.
15614
+ examples:
15615
+ - us
15616
+ - true
15517
15617
  multiline:
15518
15618
  type: boolean
15519
15619
  description: |
@@ -15576,15 +15676,187 @@ components:
15576
15676
  keyName:
15577
15677
  type: string
15578
15678
  description: |
15579
- For keyvalue fields, specifies the placeholder and field name for the key input.
15679
+ For keyvalue and staticMap fields, names the first column: each saved row holds that
15680
+ column's value under this key. A keyvalue field without it uses `key`.
15580
15681
  examples:
15581
15682
  - theKey
15683
+ - source
15582
15684
  valueName:
15583
15685
  type: string
15584
15686
  description: |
15585
- For keyvalue fields, specifies the placeholder and field name for the value input.
15687
+ For keyvalue and staticMap fields, names the second column: each saved row holds that
15688
+ column's value under this key. A keyvalue field without it uses `value`.
15586
15689
  examples:
15587
15690
  - theValue
15691
+ - target
15692
+ keyLabel:
15693
+ type: string
15694
+ description: |
15695
+ For staticMap fields, heading of the first column.
15696
+ examples:
15697
+ - Source status
15698
+ valueLabel:
15699
+ type: string
15700
+ description: |
15701
+ For staticMap fields, heading of the second column.
15702
+ examples:
15703
+ - Destination status
15704
+ keyOptions:
15705
+ type: array
15706
+ description: |
15707
+ For staticMap fields, suggestions offered in the first column's cells. A cell still
15708
+ accepts a typed value.
15709
+ items:
15710
+ type: object
15711
+ properties:
15712
+ label:
15713
+ type: string
15714
+ description: |
15715
+ Display text for the suggestion.
15716
+ value:
15717
+ type: string
15718
+ description: |
15719
+ Value saved when the suggestion is chosen.
15720
+ examples:
15721
+ - - label: Pending
15722
+ value: pending
15723
+ - label: Shipped
15724
+ value: shipped
15725
+ valueOptions:
15726
+ type: array
15727
+ description: |
15728
+ For staticMap fields, suggestions offered in the second column's cells. A cell still
15729
+ accepts a typed value.
15730
+ items:
15731
+ type: object
15732
+ properties:
15733
+ label:
15734
+ type: string
15735
+ description: |
15736
+ Display text for the suggestion.
15737
+ value:
15738
+ type: string
15739
+ description: |
15740
+ Value saved when the suggestion is chosen.
15741
+ examples:
15742
+ - - label: Open
15743
+ value: open
15744
+ - label: Closed
15745
+ value: closed
15746
+ keyResource:
15747
+ type: object
15748
+ description: |
15749
+ For staticMap fields, fills the first column's suggestions from an export the form
15750
+ carries inline in `virtual`, run the way an exportSelect's `resource` is. With
15751
+ `keyResource` or `valueResource` set, the form requires both columns in every row
15752
+ unless `keyValueRequired` is false.
15753
+ properties:
15754
+ virtual:
15755
+ type: object
15756
+ description: |
15757
+ Export document to run, inline, shaped like an exportSelect's `resource.virtual`.
15758
+ additionalProperties: true
15759
+ valueResource:
15760
+ type: object
15761
+ description: |
15762
+ For staticMap fields, fills the second column's suggestions from an export the form
15763
+ carries inline in `virtual`, run the way an exportSelect's `resource` is.
15764
+ properties:
15765
+ virtual:
15766
+ type: object
15767
+ description: |
15768
+ Export document to run, inline, shaped like an exportSelect's `resource.virtual`.
15769
+ additionalProperties: true
15770
+ keyValueRequired:
15771
+ type: boolean
15772
+ description: |
15773
+ For staticMap fields with `keyResource` or `valueResource`, when false, saves rows
15774
+ that fill only one column; by default the form drops them.
15775
+ default: true
15776
+ examples:
15777
+ - false
15778
+ resource:
15779
+ type: object
15780
+ description: |
15781
+ For exportSelect fields, the export whose records become the options. When the form
15782
+ opens, the UI previews the export in `virtual` (with `test.limit` 100 unless the export
15783
+ sets its own) and lists the preview's `data`: each record needs a `label` and a `value`
15784
+ (a string or number serves as both), so shape them with the export's `transform`. A
15785
+ saved export can't be referenced, and an HTTP export that finds no records leaves the
15786
+ field showing an error instead of options.
15787
+ properties:
15788
+ virtual:
15789
+ type: object
15790
+ description: |
15791
+ Export document to run, inline: `adaptorType`, its adaptor block, and an optional
15792
+ `transform`. `_connectionId` defaults to the connection of the export or import the
15793
+ form belongs to; set it on any other resource's form.
15794
+ additionalProperties: true
15795
+ examples:
15796
+ - virtual:
15797
+ adaptorType: HTTPExport
15798
+ http:
15799
+ relativeURI: /v1/warehouses
15800
+ method: GET
15801
+ formType: http
15802
+ response:
15803
+ resourcePath: warehouses
15804
+ transform:
15805
+ type: expression
15806
+ expression:
15807
+ version: '2'
15808
+ rulesTwoDotZero:
15809
+ mode: create
15810
+ mappings:
15811
+ - generate: label
15812
+ extract: $.name
15813
+ dataType: string
15814
+ status: Active
15815
+ - generate: value
15816
+ extract: $.code
15817
+ dataType: string
15818
+ status: Active
15819
+ multiselect:
15820
+ type: boolean
15821
+ description: |
15822
+ For exportSelect fields, when true, the user can choose several options and the value
15823
+ is saved as an array.
15824
+ default: false
15825
+ examples:
15826
+ - true
15827
+ supportHandlebars:
15828
+ type: boolean
15829
+ description: |
15830
+ For exportSelect fields, when true, renders the `resource.virtual` export as a Handlebars
15831
+ template before each preview (all but its `transform`, `hooks`, and `filter`). On an
15832
+ integration, flow group, flow, export, or import form, the form's current values are
15833
+ under that form's scope name (`integration`, `flowGrouping`, `flow`, `export`, or
15834
+ `import`), beside the saved settings of the scopes above it, with no `settings.`
15835
+ prefix; on a connection or iClient form the template has no context. The options then
15836
+ load through `refreshOptionsOnChangesTo` or `typeAheadSearch`, or when the user
15837
+ refreshes the field.
15838
+ default: false
15839
+ examples:
15840
+ - true
15841
+ refreshOptionsOnChangesTo:
15842
+ type: array
15843
+ items:
15844
+ type: string
15845
+ description: |
15846
+ For exportSelect fields with `supportHandlebars`, ids of the fields whose values the
15847
+ templated export uses: the options load once one of them has a value and reload whenever
15848
+ one changes.
15849
+ examples:
15850
+ - - region
15851
+ typeAheadSearch:
15852
+ type: boolean
15853
+ description: |
15854
+ For exportSelect fields, when true, re-runs the templated export as the user types, with
15855
+ the typed text as this field's own value; an empty box clears the options, and typed
15856
+ text is accepted as the value.
15857
+ default: false
15858
+ examples:
15859
+ - true
15588
15860
  showDelete:
15589
15861
  type: boolean
15590
15862
  description: |
@@ -15685,7 +15957,9 @@ components:
15685
15957
  field:
15686
15958
  type: string
15687
15959
  description: |
15688
- The ID of another field whose value controls the visibility of this field.
15960
+ The ID of another field whose value controls the visibility of this field. The
15961
+ save doesn't check it: a rule naming an ID that isn't in the form counts as met,
15962
+ so the field stays visible.
15689
15963
  examples:
15690
15964
  - mode
15691
15965
  is:
@@ -15721,7 +15995,7 @@ components:
15721
15995
  - tabWithoutSave
15722
15996
  - verticalTabWithoutSave
15723
15997
  x-enumDescriptions:
15724
- column: Arranges form fields in a single vertical column layout.
15998
+ column: Places the containers side by side, one column each.
15725
15999
  collapse: Groups fields into collapsible/expandable sections.
15726
16000
  box: Wraps field groups in bordered boxes with headings.
15727
16001
  indent: Indents field groups to show hierarchy.
@@ -15730,6 +16004,15 @@ components:
15730
16004
  examples:
15731
16005
  - column
15732
16006
  - collapse
16007
+ fields:
16008
+ type: array
16009
+ items:
16010
+ type: string
16011
+ description: |
16012
+ Field IDs shown above the containers, without a heading.
16013
+ examples:
16014
+ - - region
16015
+ - vatNumber
15733
16016
  containers:
15734
16017
  type: array
15735
16018
  description: |
@@ -15769,7 +16052,8 @@ components:
15769
16052
  type: string
15770
16053
  description: |
15771
16054
  Array of field IDs that should be displayed in this container.
15772
- Each ID must correspond to a key in the fieldMap object.
16055
+ Each ID must correspond to a key in the fieldMap object: the save doesn't check it,
16056
+ and an ID that doesn't renders nothing. A field the layout doesn't list isn't shown.
15773
16057
  examples:
15774
16058
  - - A
15775
16059
  - url
@@ -15846,6 +16130,9 @@ components:
15846
16130
 
15847
16131
  The function must return a valid form object that the UI can render.
15848
16132
  Throwing an exception will signal an error to the user.
16133
+
16134
+ The UI runs the function each time it opens the form and renders the returned form instead of
16135
+ `form`, then fills in the values from `settings`; a thrown error's message replaces the form.
15849
16136
  properties:
15850
16137
  function:
15851
16138
  type: string
@@ -15869,8 +16156,10 @@ components:
15869
16156
  Reference to a predefined script resource containing the initialization function.
15870
16157
 
15871
16158
  The referenced script should contain the function specified in the
15872
- 'function' property. This script must be accessible within the user's account
15873
- and have appropriate permissions.
16159
+ 'function' property. On an integration, a flow group, a flow, an export, an import, or a
16160
+ connection, an id that isn't a script in the same account (or, on an Integration App's
16161
+ resources, one the app shares) is refused with 422 `invalid_ref`. An iClient save
16162
+ stores the id without that check.
15874
16163
  examples:
15875
16164
  - 60a2c4e6f321d800129a1a3c
15876
16165
  - 5f8d43a1b9e5a80011a35f2c
@@ -16591,6 +16880,15 @@ components:
16591
16880
  plus whatever this step's response mapping merges back. A value later steps need
16592
16881
  belongs in the source export's `preSavePage`, in this step's `postResponseMap` hook on
16593
16882
  the flow, or in the later import's own `preMap`.
16883
+
16884
+ The function returns one element per record in `options.data`, in order:
16885
+ `{ data: <record> }` sends the record and `{ errors: [{ code, message }] }` fails it.
16886
+ An element without `data` — `{}`, or the record itself returned unwrapped — skips that
16887
+ record with no error: nothing is sent and the record is reported `ignored: true` at
16888
+ stage `preMapHook`. A return with more or fewer elements fails every record on the page
16889
+ with `invalid_extension_response` ("Extension result doesn't contain the same number
16890
+ of elements as the request object. Expected 2, got 1. Extension returned statusCode
16891
+ 200"), source `pre_map_hook`.
16594
16892
  x-celigo-ai-guidance:
16595
16893
  - |-
16596
16894
  Pre-map JavaScript hook — runs once per page BEFORE the
@@ -16602,7 +16900,18 @@ components:
16602
16900
  renames — mappings handle those.
16603
16901
 
16604
16902
  Runtime contract: ``options.data[]`` (the page of upstream
16605
- records) → array of the same length.
16903
+ records) → array of the same length, each element
16904
+ ``{data: record}`` or ``{errors: [...]}``. A bare record in
16905
+ the returned array is skipped without an error, so
16906
+ ``options.data.map(r => { r.total = t; return r })`` sends
16907
+ nothing.
16908
+ - |-
16909
+ Verified live 2026-10-22 by invoking an HTTP import with a
16910
+ Mapper 2.0 number mapping: one ``{data: record}`` per record
16911
+ sent both records; the bare records sent nothing and both
16912
+ came back ``ignored: true``, ``stage: preMapHook``, with no
16913
+ error; one element for two records failed both with 422
16914
+ ``invalid_extension_response``.
16606
16915
  allOf:
16607
16916
  - $ref: '#/components/schemas/Hook'
16608
16917
  postMap: