@celigo/api-specs 0.2.171 → 0.2.172

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.
@@ -746,15 +746,30 @@ components:
746
746
  - `"lessthan"`: Value is less than specified value (is less than)
747
747
  - `"lessthanequals"`: Value is less than or equal to specified value (is less than or equals)
748
748
  - `"startswith"`: String starts with specified prefix (starts with)
749
+ - `"notstartswith"`: String does not start with specified prefix (does not start with)
749
750
  - `"endswith"`: String ends with specified suffix (ends with)
751
+ - `"notendswith"`: String does not end with specified suffix (does not end with)
750
752
  - `"contains"`: String contains specified substring (contains)
751
753
  - `"doesnotcontain"`: String does not contain specified substring (does not contain)
752
754
  - `"empty"`: Field is missing or empty (is empty)
753
755
  - `"notempty"`: Field contains a value (is not empty)
754
- - `"matches"`: Matches a regular expression (matches)
755
-
756
- `isempty`, `isnotempty` and `anyof` are not operators: they are refused with 422
757
- "Invalid operation: <name>".
756
+ - `"matches"`: Matches a regular expression, ignoring case (matches)
757
+
758
+ Operator names are case-insensitive: `NOTEMPTY` and `endsWith` work and are stored
759
+ as sent. `isempty`, `isnotempty`, `anyof`, `notcontains`, `doesnotstartwith`,
760
+ `doesnotendwith`, `notmatches`, `doesnotmatch` and `notequal` are not operators:
761
+ they are refused with 422 "Invalid operation: <name>", with the name in lowercase,
762
+ both when the filter is saved and by `POST /v1/processors/filter`. To negate a
763
+ condition, wrap it in `not`.
764
+
765
+ The string comparisons (`equals`, `contains`, `startswith`, `endswith` and their
766
+ negations) are case-sensitive; wrap the field in `lowercase` to compare without case.
767
+ `matches` is not: every pattern is compiled with the flags `gi`, so `^paid$` also
768
+ matches `PAID` and `[a-z]` matches capital letters. An inline flag such as `(?i)`
769
+ makes the pattern invalid. The filter still saves, but in a run every record fails
770
+ with `FILTER_EVALUATION_FAILED` ("Invalid regular expression: /(?i)…/gi: Invalid
771
+ group"), and `POST /v1/processors/filter` refuses the call with 422 (live-verified
772
+ 2026-10-22).
758
773
 
759
774
  **Logical Operators**
760
775
  - `"and"`: All conditions must be true
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
@@ -12696,7 +12748,11 @@ components:
12696
12748
 
12697
12749
  **Simple Types (direct value mapping)**
12698
12750
  - `string`: Text values, converts other types to string representation
12699
- - `number`: Numeric values, attempts conversion from strings
12751
+ - `number`: Numeric values. Converts a numeric string (`"24"` → `24`,
12752
+ `"007"` → `7`) and leaves the field out for an empty string; a value
12753
+ holding letters or a thousands separator (`"1,250.00"`) fails the
12754
+ record with `non_parsable_string` (`<generate>: String contains alpha
12755
+ characters`)
12700
12756
  - `boolean`: True/false values, converts truthy/falsy values
12701
12757
 
12702
12758
  Dates are represented as strings — use `string` for date fields and
@@ -12739,8 +12795,14 @@ components:
12739
12795
  - |-
12740
12796
  Missing `dataType` is rejected at save with validation error
12741
12797
  `[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.
12798
+ required field.`
12799
+ - |-
12800
+ Give each row the type the destination field expects; `"string"` is
12801
+ not a safe default. It accepts any source value, but sends a numeric
12802
+ source as text (`"24"`), which a destination that checks JSON types
12803
+ refuses. Map numeric destination fields as `number`, which fails a
12804
+ record (`non_parsable_string`) only when the value holds letters or a
12805
+ thousands separator.
12744
12806
  enum:
12745
12807
  - string
12746
12808
  - number
@@ -12752,7 +12814,7 @@ components:
12752
12814
  - objectarray
12753
12815
  x-enumDescriptions:
12754
12816
  string: Text values; converts other types to their string representation.
12755
- number: Numeric values; attempts conversion from strings.
12817
+ number: Numeric values; converts numeric strings, and fails the record (`non_parsable_string`) on letters or a thousands separator.
12756
12818
  boolean: True/false values; converts truthy/falsy values.
12757
12819
  object: Nested object built from child `mappings`, or copied whole with `extract` (not both).
12758
12820
  stringarray: Array of string values.
@@ -13780,7 +13842,11 @@ components:
13780
13842
 
13781
13843
  **Simple Types (direct value mapping)**
13782
13844
  - `string`: Text values, converts other types to string representation
13783
- - `number`: Numeric values, attempts conversion from strings
13845
+ - `number`: Numeric values. Converts a numeric string (`"24"` → `24`,
13846
+ `"007"` → `7`) and leaves the field out for an empty string; a value
13847
+ holding letters or a thousands separator (`"1,250.00"`) fails the
13848
+ record with `non_parsable_string` (`<generate>: String contains alpha
13849
+ characters`)
13784
13850
  - `boolean`: True/false values, converts truthy/falsy values
13785
13851
 
13786
13852
  Dates are represented as strings — use `string` for date fields and
@@ -13823,8 +13889,14 @@ components:
13823
13889
  - |-
13824
13890
  Missing `dataType` is rejected at save with validation error
13825
13891
  `[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.
13892
+ required field.`
13893
+ - |-
13894
+ Give each row the type the destination field expects; `"string"` is
13895
+ not a safe default. It accepts any source value, but sends a numeric
13896
+ source as text (`"24"`), which a destination that checks JSON types
13897
+ refuses. Map numeric destination fields as `number`, which fails a
13898
+ record (`non_parsable_string`) only when the value holds letters or a
13899
+ thousands separator.
13828
13900
  enum:
13829
13901
  - string
13830
13902
  - number
@@ -13836,7 +13908,7 @@ components:
13836
13908
  - objectarray
13837
13909
  x-enumDescriptions:
13838
13910
  string: Text values; converts other types to their string representation.
13839
- number: Numeric values; attempts conversion from strings.
13911
+ number: Numeric values; converts numeric strings, and fails the record (`non_parsable_string`) on letters or a thousands separator.
13840
13912
  boolean: True/false values; converts truthy/falsy values.
13841
13913
  object: Nested object built from child `mappings`, or copied whole with `extract` (not both).
13842
13914
  stringarray: Array of string values.
@@ -15245,8 +15317,10 @@ components:
15245
15317
  - A dot path from the record root (e.g. `email`, `address.city`), read from the
15246
15318
  incoming record. A path that matches no field writes nothing.
15247
15319
  - Handlebars template (contains `{{`) for concatenation /
15248
- formatting / conditional logic (e.g.
15249
- `{{record.firstName}} {{record.lastName}}`).
15320
+ formatting / conditional logic (e.g. `{{firstName}} {{lastName}}`,
15321
+ `{{#if mobile}}{{mobile}}{{else}}{{phone}}{{/if}}`). The template reads the
15322
+ record's fields by bare name: `{{record.firstName}}` and `{{data.firstName}}`
15323
+ render nothing, so the field is left out even when the record has the value.
15250
15324
 
15251
15325
  A `$.` JSONPath (the Mapper 2.0 `mappings` syntax) reads nothing here, and a bare
15252
15326
  string is read as a field path, not a constant: set constants in `hardCodedValue`.
@@ -15287,8 +15361,9 @@ components:
15287
15361
  x-celigo-ai-guidance:
15288
15362
  - |-
15289
15363
  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.
15364
+ produces an empty string, null or nothing. Without this flag an
15365
+ empty string is written as ``""`` and null as null, either of which
15366
+ may overwrite existing data; a missing source is left out either way.
15292
15367
  immutable:
15293
15368
  type: boolean
15294
15369
  description: When true, the mapped value cannot be overwritten by later mapping steps.
@@ -15305,7 +15380,15 @@ components:
15305
15380
  type:
15306
15381
  - string
15307
15382
  - 'null'
15308
- description: Fallback value used when the extract yields no value.
15383
+ description: |-
15384
+ Fallback value written when the source value is an empty string, null or
15385
+ missing. Without a default, an empty string and null are written as they are
15386
+ and a missing field is left out.
15387
+ x-celigo-ai-guidance:
15388
+ - |-
15389
+ Use ``default``, not ``hardCodedValue``, for a fallback on a field that is
15390
+ sometimes empty: ``hardCodedValue`` is written on every record and replaces
15391
+ the values that exist.
15309
15392
  extractDateFormat:
15310
15393
  type: string
15311
15394
  description: Date format of the source value, used to parse it before conversion.
@@ -15421,8 +15504,8 @@ components:
15421
15504
  id:
15422
15505
  type: string
15423
15506
  description: |
15424
- Unique identifier for this field within the form.
15425
- This value typically matches the key in the fieldMap object.
15507
+ Unique identifier for this field within the form: layout containers and conditions
15508
+ refer to the field by it. Use the same string as the field's fieldMap key and its `name`.
15426
15509
  examples:
15427
15510
  - url
15428
15511
  - mode
@@ -15433,8 +15516,9 @@ components:
15433
15516
  name:
15434
15517
  type: string
15435
15518
  description: |
15436
- Name of the field, used as the property name when generating the settings object
15437
- from the submitted form data.
15519
+ Key the field's value is saved under: one top-level key of the resource's `settings`,
15520
+ which the form also reads the value back from when it opens. Nested objects inside
15521
+ `settings` are written to it directly, not through a form field's `name`.
15438
15522
  examples:
15439
15523
  - url
15440
15524
  - mode
@@ -15509,11 +15593,19 @@ components:
15509
15593
  required:
15510
15594
  type: boolean
15511
15595
  description: |
15512
- When true, the field must have a value before the form can be submitted.
15596
+ When true, the field must have a value before the form can be submitted. Only the form
15597
+ enforces it: an API write of `settings` is stored without the value.
15513
15598
  default: false
15514
15599
  examples:
15515
15600
  - true
15516
15601
  - false
15602
+ defaultValue:
15603
+ description: |
15604
+ Value the form shows while the resource's `settings` holds no value under the field's
15605
+ `name`.
15606
+ examples:
15607
+ - us
15608
+ - true
15517
15609
  multiline:
15518
15610
  type: boolean
15519
15611
  description: |
@@ -15576,15 +15668,187 @@ components:
15576
15668
  keyName:
15577
15669
  type: string
15578
15670
  description: |
15579
- For keyvalue fields, specifies the placeholder and field name for the key input.
15671
+ For keyvalue and staticMap fields, names the first column: each saved row holds that
15672
+ column's value under this key. A keyvalue field without it uses `key`.
15580
15673
  examples:
15581
15674
  - theKey
15675
+ - source
15582
15676
  valueName:
15583
15677
  type: string
15584
15678
  description: |
15585
- For keyvalue fields, specifies the placeholder and field name for the value input.
15679
+ For keyvalue and staticMap fields, names the second column: each saved row holds that
15680
+ column's value under this key. A keyvalue field without it uses `value`.
15586
15681
  examples:
15587
15682
  - theValue
15683
+ - target
15684
+ keyLabel:
15685
+ type: string
15686
+ description: |
15687
+ For staticMap fields, heading of the first column.
15688
+ examples:
15689
+ - Source status
15690
+ valueLabel:
15691
+ type: string
15692
+ description: |
15693
+ For staticMap fields, heading of the second column.
15694
+ examples:
15695
+ - Destination status
15696
+ keyOptions:
15697
+ type: array
15698
+ description: |
15699
+ For staticMap fields, suggestions offered in the first column's cells. A cell still
15700
+ accepts a typed value.
15701
+ items:
15702
+ type: object
15703
+ properties:
15704
+ label:
15705
+ type: string
15706
+ description: |
15707
+ Display text for the suggestion.
15708
+ value:
15709
+ type: string
15710
+ description: |
15711
+ Value saved when the suggestion is chosen.
15712
+ examples:
15713
+ - - label: Pending
15714
+ value: pending
15715
+ - label: Shipped
15716
+ value: shipped
15717
+ valueOptions:
15718
+ type: array
15719
+ description: |
15720
+ For staticMap fields, suggestions offered in the second column's cells. A cell still
15721
+ accepts a typed value.
15722
+ items:
15723
+ type: object
15724
+ properties:
15725
+ label:
15726
+ type: string
15727
+ description: |
15728
+ Display text for the suggestion.
15729
+ value:
15730
+ type: string
15731
+ description: |
15732
+ Value saved when the suggestion is chosen.
15733
+ examples:
15734
+ - - label: Open
15735
+ value: open
15736
+ - label: Closed
15737
+ value: closed
15738
+ keyResource:
15739
+ type: object
15740
+ description: |
15741
+ For staticMap fields, fills the first column's suggestions from an export the form
15742
+ carries inline in `virtual`, run the way an exportSelect's `resource` is. With
15743
+ `keyResource` or `valueResource` set, the form requires both columns in every row
15744
+ unless `keyValueRequired` is false.
15745
+ properties:
15746
+ virtual:
15747
+ type: object
15748
+ description: |
15749
+ Export document to run, inline, shaped like an exportSelect's `resource.virtual`.
15750
+ additionalProperties: true
15751
+ valueResource:
15752
+ type: object
15753
+ description: |
15754
+ For staticMap fields, fills the second column's suggestions from an export the form
15755
+ carries inline in `virtual`, run the way an exportSelect's `resource` is.
15756
+ properties:
15757
+ virtual:
15758
+ type: object
15759
+ description: |
15760
+ Export document to run, inline, shaped like an exportSelect's `resource.virtual`.
15761
+ additionalProperties: true
15762
+ keyValueRequired:
15763
+ type: boolean
15764
+ description: |
15765
+ For staticMap fields with `keyResource` or `valueResource`, when false, saves rows
15766
+ that fill only one column; by default the form drops them.
15767
+ default: true
15768
+ examples:
15769
+ - false
15770
+ resource:
15771
+ type: object
15772
+ description: |
15773
+ For exportSelect fields, the export whose records become the options. When the form
15774
+ opens, the UI previews the export in `virtual` (with `test.limit` 100 unless the export
15775
+ sets its own) and lists the preview's `data`: each record needs a `label` and a `value`
15776
+ (a string or number serves as both), so shape them with the export's `transform`. A
15777
+ saved export can't be referenced, and an HTTP export that finds no records leaves the
15778
+ field showing an error instead of options.
15779
+ properties:
15780
+ virtual:
15781
+ type: object
15782
+ description: |
15783
+ Export document to run, inline: `adaptorType`, its adaptor block, and an optional
15784
+ `transform`. `_connectionId` defaults to the connection of the export or import the
15785
+ form belongs to; set it on any other resource's form.
15786
+ additionalProperties: true
15787
+ examples:
15788
+ - virtual:
15789
+ adaptorType: HTTPExport
15790
+ http:
15791
+ relativeURI: /v1/warehouses
15792
+ method: GET
15793
+ formType: http
15794
+ response:
15795
+ resourcePath: warehouses
15796
+ transform:
15797
+ type: expression
15798
+ expression:
15799
+ version: '2'
15800
+ rulesTwoDotZero:
15801
+ mode: create
15802
+ mappings:
15803
+ - generate: label
15804
+ extract: $.name
15805
+ dataType: string
15806
+ status: Active
15807
+ - generate: value
15808
+ extract: $.code
15809
+ dataType: string
15810
+ status: Active
15811
+ multiselect:
15812
+ type: boolean
15813
+ description: |
15814
+ For exportSelect fields, when true, the user can choose several options and the value
15815
+ is saved as an array.
15816
+ default: false
15817
+ examples:
15818
+ - true
15819
+ supportHandlebars:
15820
+ type: boolean
15821
+ description: |
15822
+ For exportSelect fields, when true, renders the `resource.virtual` export as a Handlebars
15823
+ template before each preview (all but its `transform`, `hooks`, and `filter`). On an
15824
+ integration, flow group, flow, export, or import form, the form's current values are
15825
+ under that form's scope name (`integration`, `flowGrouping`, `flow`, `export`, or
15826
+ `import`), beside the saved settings of the scopes above it, with no `settings.`
15827
+ prefix; on a connection or iClient form the template has no context. The options then
15828
+ load through `refreshOptionsOnChangesTo` or `typeAheadSearch`, or when the user
15829
+ refreshes the field.
15830
+ default: false
15831
+ examples:
15832
+ - true
15833
+ refreshOptionsOnChangesTo:
15834
+ type: array
15835
+ items:
15836
+ type: string
15837
+ description: |
15838
+ For exportSelect fields with `supportHandlebars`, ids of the fields whose values the
15839
+ templated export uses: the options load once one of them has a value and reload whenever
15840
+ one changes.
15841
+ examples:
15842
+ - - region
15843
+ typeAheadSearch:
15844
+ type: boolean
15845
+ description: |
15846
+ For exportSelect fields, when true, re-runs the templated export as the user types, with
15847
+ the typed text as this field's own value; an empty box clears the options, and typed
15848
+ text is accepted as the value.
15849
+ default: false
15850
+ examples:
15851
+ - true
15588
15852
  showDelete:
15589
15853
  type: boolean
15590
15854
  description: |
@@ -15685,7 +15949,9 @@ components:
15685
15949
  field:
15686
15950
  type: string
15687
15951
  description: |
15688
- The ID of another field whose value controls the visibility of this field.
15952
+ The ID of another field whose value controls the visibility of this field. The
15953
+ save doesn't check it: a rule naming an ID that isn't in the form counts as met,
15954
+ so the field stays visible.
15689
15955
  examples:
15690
15956
  - mode
15691
15957
  is:
@@ -15721,7 +15987,7 @@ components:
15721
15987
  - tabWithoutSave
15722
15988
  - verticalTabWithoutSave
15723
15989
  x-enumDescriptions:
15724
- column: Arranges form fields in a single vertical column layout.
15990
+ column: Places the containers side by side, one column each.
15725
15991
  collapse: Groups fields into collapsible/expandable sections.
15726
15992
  box: Wraps field groups in bordered boxes with headings.
15727
15993
  indent: Indents field groups to show hierarchy.
@@ -15730,6 +15996,15 @@ components:
15730
15996
  examples:
15731
15997
  - column
15732
15998
  - collapse
15999
+ fields:
16000
+ type: array
16001
+ items:
16002
+ type: string
16003
+ description: |
16004
+ Field IDs shown above the containers, without a heading.
16005
+ examples:
16006
+ - - region
16007
+ - vatNumber
15733
16008
  containers:
15734
16009
  type: array
15735
16010
  description: |
@@ -15769,7 +16044,8 @@ components:
15769
16044
  type: string
15770
16045
  description: |
15771
16046
  Array of field IDs that should be displayed in this container.
15772
- Each ID must correspond to a key in the fieldMap object.
16047
+ Each ID must correspond to a key in the fieldMap object: the save doesn't check it,
16048
+ and an ID that doesn't renders nothing. A field the layout doesn't list isn't shown.
15773
16049
  examples:
15774
16050
  - - A
15775
16051
  - url
@@ -15846,6 +16122,9 @@ components:
15846
16122
 
15847
16123
  The function must return a valid form object that the UI can render.
15848
16124
  Throwing an exception will signal an error to the user.
16125
+
16126
+ The UI runs the function each time it opens the form and renders the returned form instead of
16127
+ `form`, then fills in the values from `settings`; a thrown error's message replaces the form.
15849
16128
  properties:
15850
16129
  function:
15851
16130
  type: string
@@ -15869,8 +16148,10 @@ components:
15869
16148
  Reference to a predefined script resource containing the initialization function.
15870
16149
 
15871
16150
  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.
16151
+ 'function' property. On an integration, a flow group, a flow, an export, an import, or a
16152
+ connection, an id that isn't a script in the same account (or, on an Integration App's
16153
+ resources, one the app shares) is refused with 422 `invalid_ref`. An iClient save
16154
+ stores the id without that check.
15874
16155
  examples:
15875
16156
  - 60a2c4e6f321d800129a1a3c
15876
16157
  - 5f8d43a1b9e5a80011a35f2c