@celigo/api-specs 0.2.170 → 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.
package/dist/audit.yml CHANGED
@@ -49,6 +49,12 @@ paths:
49
49
  exact resource only — to include descendants (e.g. an integration's
50
50
  flows and exports), use `GET /v1/{resourceType}/{_id}/audit` instead.
51
51
  `_resourceId` requires `resourceType` to also be set.
52
+
53
+ Only the account owner and administrators can query the account-wide
54
+ log: manage, monitor and integration-level users get 403, and an API
55
+ token with limited scope gets 401 `token_restricted_access`. Those
56
+ users can still read the history of a resource they can see, through
57
+ `GET /v1/{resourceType}/{_id}/audit`.
52
58
  parameters:
53
59
  - name: limit
54
60
  in: query
@@ -311,7 +317,9 @@ paths:
311
317
  '400':
312
318
  $ref: '#/components/responses/400-bad-request'
313
319
  '401':
314
- $ref: '#/components/responses/401-unauthorized'
320
+ $ref: '#/components/responses/401-unauthorized-or-scoped-token'
321
+ '403':
322
+ $ref: '#/components/responses/403-administrator-only'
315
323
  '422':
316
324
  $ref: '#/components/responses/422-unprocessable-entity'
317
325
  post:
@@ -328,7 +336,8 @@ paths:
328
336
  identical to `GET /v1/audit`.
329
337
 
330
338
  Pagination, sorting, and time bounds stay in the query string — sending
331
- them in the body fails with 400 `invalid_request_body`.
339
+ them in the body fails with 400 `invalid_request_body`. The same callers
340
+ are refused as on `GET /v1/audit`.
332
341
  parameters:
333
342
  - name: limit
334
343
  in: query
@@ -472,7 +481,9 @@ paths:
472
481
  - code: invalid_request_body
473
482
  message: 'The request body should not contain pagination parameter(s): limit. Pagination values (after, before, limit, sort_order, sort_by) must be provided as query parameters. The request body should only contain filter fields.'
474
483
  '401':
475
- $ref: '#/components/responses/401-unauthorized'
484
+ $ref: '#/components/responses/401-unauthorized-or-scoped-token'
485
+ '403':
486
+ $ref: '#/components/responses/403-administrator-only'
476
487
  '422':
477
488
  description: |-
478
489
  A filter value is invalid, a filter that must be an array was sent as
@@ -502,7 +513,9 @@ paths:
502
513
  description: |-
503
514
  Generates a signed URL for downloading a CSV export of audit logs across all
504
515
  documents. The CSV columns are: Time, Source, User, Resource, Name/ID, Action,
505
- Field, Old value, New value, Support.
516
+ Field, Old value, New value, Support. The same callers are refused as on
517
+ `GET /v1/audit`: only the account owner and administrators can export the
518
+ account-wide log.
506
519
 
507
520
  The signed URL expires after 15 minutes. When `hasMore` is true, pass
508
521
  the last CSV row's timestamp as `to` to fetch the next batch.
@@ -686,7 +699,9 @@ paths:
686
699
  signedURL: https://integrator-userdata-delete-30.s3.us-east-1.amazonaws.com/audit/624cb034630.../audit-export.csv?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Expires=900&...
687
700
  hasMore: false
688
701
  '401':
689
- $ref: '#/components/responses/401-unauthorized'
702
+ $ref: '#/components/responses/401-unauthorized-or-scoped-token'
703
+ '403':
704
+ $ref: '#/components/responses/403-administrator-only'
690
705
  '422':
691
706
  $ref: '#/components/responses/422-unprocessable-entity'
692
707
  post:
@@ -766,7 +781,9 @@ paths:
766
781
  schema:
767
782
  $ref: '#/components/schemas/Error'
768
783
  '401':
769
- $ref: '#/components/responses/401-unauthorized'
784
+ $ref: '#/components/responses/401-unauthorized-or-scoped-token'
785
+ '403':
786
+ $ref: '#/components/responses/403-administrator-only'
770
787
  '422':
771
788
  $ref: '#/components/responses/422-unprocessable-entity'
772
789
  /v1/{resourceType}/{_id}/audit:
@@ -1997,6 +2014,65 @@ components:
1997
2014
  errors:
1998
2015
  - code: invalid_request
1999
2016
  message: The request body failed validation.
2017
+ 401-unauthorized-or-scoped-token:
2018
+ description: |-
2019
+ Unauthorized: the request has no valid bearer token (a bare `{message}` body, as on every
2020
+ route), or the token is an API token with limited scope. The account-wide audit query
2021
+ takes only a full-access API token, a personal access token, or a signed-in session; a
2022
+ scoped token is refused with `token_restricted_access` in the standard `{errors: [...]}`
2023
+ envelope.
2024
+ content:
2025
+ application/json:
2026
+ schema:
2027
+ oneOf:
2028
+ - $ref: '#/components/schemas/Error'
2029
+ - type: object
2030
+ description: The auth middleware's bare body for a missing or invalid token.
2031
+ properties:
2032
+ message:
2033
+ type: string
2034
+ description: '`Unauthorized` (no Authorization header) or `Bearer Authentication Failed`.'
2035
+ required:
2036
+ - message
2037
+ examples:
2038
+ scopedToken:
2039
+ summary: An API token scoped to specific resources
2040
+ value:
2041
+ errors:
2042
+ - code: token_restricted_access
2043
+ message: This action is not allowed using API tokens with limited scope.
2044
+ invalidToken:
2045
+ summary: Bearer token invalid or revoked
2046
+ value:
2047
+ message: Bearer Authentication Failed
2048
+ 403-administrator-only:
2049
+ description: |-
2050
+ The caller is a manage, monitor or integration-level user. The account-wide audit log is
2051
+ for the account owner and administrators; other users read one resource's history with
2052
+ `GET /v1/{resourceType}/{_id}/audit` instead.
2053
+ content:
2054
+ application/json:
2055
+ schema:
2056
+ $ref: '#/components/schemas/Error'
2057
+ examples:
2058
+ notAdministrator:
2059
+ value:
2060
+ errors:
2061
+ - code: access_restricted
2062
+ message: The role which you are associated with doesn't have the required permissions to perform the action.
2063
+ 422-unprocessable-entity:
2064
+ description: |
2065
+ Unprocessable entity. The request was well-formed but was unable to be followed due to semantic errors.
2066
+ content:
2067
+ application/json:
2068
+ schema:
2069
+ $ref: '#/components/schemas/Error'
2070
+ examples:
2071
+ default:
2072
+ value:
2073
+ errors:
2074
+ - code: unprocessable_entity
2075
+ message: The request could not be processed due to a semantic error.
2000
2076
  401-unauthorized:
2001
2077
  description: |-
2002
2078
  Unauthorized. The request lacks a valid bearer token, or the provided token
@@ -2031,19 +2107,6 @@ components:
2031
2107
  summary: Bearer token invalid or revoked
2032
2108
  value:
2033
2109
  message: Bearer Authentication Failed
2034
- 422-unprocessable-entity:
2035
- description: |
2036
- Unprocessable entity. The request was well-formed but was unable to be followed due to semantic errors.
2037
- content:
2038
- application/json:
2039
- schema:
2040
- $ref: '#/components/schemas/Error'
2041
- examples:
2042
- default:
2043
- value:
2044
- errors:
2045
- - code: unprocessable_entity
2046
- message: The request could not be processed due to a semantic error.
2047
2110
  404-not-found:
2048
2111
  description: |
2049
2112
  Not found. The requested resource does not exist or is not visible to the caller.
package/dist/export.yml CHANGED
@@ -2910,15 +2910,30 @@ components:
2910
2910
  - `"lessthan"`: Value is less than specified value (is less than)
2911
2911
  - `"lessthanequals"`: Value is less than or equal to specified value (is less than or equals)
2912
2912
  - `"startswith"`: String starts with specified prefix (starts with)
2913
+ - `"notstartswith"`: String does not start with specified prefix (does not start with)
2913
2914
  - `"endswith"`: String ends with specified suffix (ends with)
2915
+ - `"notendswith"`: String does not end with specified suffix (does not end with)
2914
2916
  - `"contains"`: String contains specified substring (contains)
2915
2917
  - `"doesnotcontain"`: String does not contain specified substring (does not contain)
2916
2918
  - `"empty"`: Field is missing or empty (is empty)
2917
2919
  - `"notempty"`: Field contains a value (is not empty)
2918
- - `"matches"`: Matches a regular expression (matches)
2919
-
2920
- `isempty`, `isnotempty` and `anyof` are not operators: they are refused with 422
2921
- "Invalid operation: <name>".
2920
+ - `"matches"`: Matches a regular expression, ignoring case (matches)
2921
+
2922
+ Operator names are case-insensitive: `NOTEMPTY` and `endsWith` work and are stored
2923
+ as sent. `isempty`, `isnotempty`, `anyof`, `notcontains`, `doesnotstartwith`,
2924
+ `doesnotendwith`, `notmatches`, `doesnotmatch` and `notequal` are not operators:
2925
+ they are refused with 422 "Invalid operation: <name>", with the name in lowercase,
2926
+ both when the filter is saved and by `POST /v1/processors/filter`. To negate a
2927
+ condition, wrap it in `not`.
2928
+
2929
+ The string comparisons (`equals`, `contains`, `startswith`, `endswith` and their
2930
+ negations) are case-sensitive; wrap the field in `lowercase` to compare without case.
2931
+ `matches` is not: every pattern is compiled with the flags `gi`, so `^paid$` also
2932
+ matches `PAID` and `[a-z]` matches capital letters. An inline flag such as `(?i)`
2933
+ makes the pattern invalid. The filter still saves, but in a run every record fails
2934
+ with `FILTER_EVALUATION_FAILED` ("Invalid regular expression: /(?i)…/gi: Invalid
2935
+ group"), and `POST /v1/processors/filter` refuses the call with 422 (live-verified
2936
+ 2026-10-22).
2922
2937
 
2923
2938
  **Logical Operators**
2924
2939
  - `"and"`: All conditions must be true
@@ -12551,7 +12566,11 @@ components:
12551
12566
 
12552
12567
  **Simple Types (direct value mapping)**
12553
12568
  - `string`: Text values, converts other types to string representation
12554
- - `number`: Numeric values, attempts conversion from strings
12569
+ - `number`: Numeric values. Converts a numeric string (`"24"` → `24`,
12570
+ `"007"` → `7`) and leaves the field out for an empty string; a value
12571
+ holding letters or a thousands separator (`"1,250.00"`) fails the
12572
+ record with `non_parsable_string` (`<generate>: String contains alpha
12573
+ characters`)
12555
12574
  - `boolean`: True/false values, converts truthy/falsy values
12556
12575
 
12557
12576
  Dates are represented as strings — use `string` for date fields and
@@ -12594,8 +12613,14 @@ components:
12594
12613
  - |-
12595
12614
  Missing `dataType` is rejected at save with validation error
12596
12615
  `[mandatory_destination_datatype] Destination datatype is a
12597
- required field.` When in doubt, use `"string"` — it accepts
12598
- any source value and the runtime will coerce it.
12616
+ required field.`
12617
+ - |-
12618
+ Give each row the type the destination field expects; `"string"` is
12619
+ not a safe default. It accepts any source value, but sends a numeric
12620
+ source as text (`"24"`), which a destination that checks JSON types
12621
+ refuses. Map numeric destination fields as `number`, which fails a
12622
+ record (`non_parsable_string`) only when the value holds letters or a
12623
+ thousands separator.
12599
12624
  enum:
12600
12625
  - string
12601
12626
  - number
@@ -12607,7 +12632,7 @@ components:
12607
12632
  - objectarray
12608
12633
  x-enumDescriptions:
12609
12634
  string: Text values; converts other types to their string representation.
12610
- number: Numeric values; attempts conversion from strings.
12635
+ number: Numeric values; converts numeric strings, and fails the record (`non_parsable_string`) on letters or a thousands separator.
12611
12636
  boolean: True/false values; converts truthy/falsy values.
12612
12637
  object: Nested object built from child `mappings`, or copied whole with `extract` (not both).
12613
12638
  stringarray: Array of string values.
@@ -13635,7 +13660,11 @@ components:
13635
13660
 
13636
13661
  **Simple Types (direct value mapping)**
13637
13662
  - `string`: Text values, converts other types to string representation
13638
- - `number`: Numeric values, attempts conversion from strings
13663
+ - `number`: Numeric values. Converts a numeric string (`"24"` → `24`,
13664
+ `"007"` → `7`) and leaves the field out for an empty string; a value
13665
+ holding letters or a thousands separator (`"1,250.00"`) fails the
13666
+ record with `non_parsable_string` (`<generate>: String contains alpha
13667
+ characters`)
13639
13668
  - `boolean`: True/false values, converts truthy/falsy values
13640
13669
 
13641
13670
  Dates are represented as strings — use `string` for date fields and
@@ -13678,8 +13707,14 @@ components:
13678
13707
  - |-
13679
13708
  Missing `dataType` is rejected at save with validation error
13680
13709
  `[mandatory_destination_datatype] Destination datatype is a
13681
- required field.` When in doubt, use `"string"` — it accepts
13682
- any source value and the runtime will coerce it.
13710
+ required field.`
13711
+ - |-
13712
+ Give each row the type the destination field expects; `"string"` is
13713
+ not a safe default. It accepts any source value, but sends a numeric
13714
+ source as text (`"24"`), which a destination that checks JSON types
13715
+ refuses. Map numeric destination fields as `number`, which fails a
13716
+ record (`non_parsable_string`) only when the value holds letters or a
13717
+ thousands separator.
13683
13718
  enum:
13684
13719
  - string
13685
13720
  - number
@@ -13691,7 +13726,7 @@ components:
13691
13726
  - objectarray
13692
13727
  x-enumDescriptions:
13693
13728
  string: Text values; converts other types to their string representation.
13694
- number: Numeric values; attempts conversion from strings.
13729
+ number: Numeric values; converts numeric strings, and fails the record (`non_parsable_string`) on letters or a thousands separator.
13695
13730
  boolean: True/false values; converts truthy/falsy values.
13696
13731
  object: Nested object built from child `mappings`, or copied whole with `extract` (not both).
13697
13732
  stringarray: Array of string values.
@@ -14833,7 +14868,7 @@ components:
14833
14868
 
14834
14869
  This value is used as a fallback when:
14835
14870
  1. The source value doesn't match any key in the map
14836
- 2. allowFailures is set to true
14871
+ 2. allowFailures is true or omitted
14837
14872
 
14838
14873
  Setting an appropriate default helps prevent flow failures due to unexpected
14839
14874
  values and provides predictable behavior for edge cases.
@@ -14843,8 +14878,10 @@ components:
14843
14878
  - Original value indicators: "{Original Value}", "No mapping found"
14844
14879
  - Neutral values: "Other", "N/A", "Miscellaneous"
14845
14880
 
14846
- If allowFailures is false, a record whose value is unmapped fails and the default
14847
- is ignored.
14881
+ A save refuses a default together with an explicit `allowFailures: false`
14882
+ (422 `Lookups with default set can not have allowFailures explicitly set to
14883
+ false.`): a lookup either fails a miss (`allowFailures: false`, no default) or
14884
+ falls back to its default.
14848
14885
  examples:
14849
14886
  - Unknown
14850
14887
  - Other
@@ -14852,7 +14889,8 @@ components:
14852
14889
  - Unmapped Value
14853
14890
  - '{Original Value}'
14854
14891
  x-celigo-ai-guidance:
14855
- - '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 `""`.'
14892
+ - '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 `""`.'
14893
+ - 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.
14856
14894
  allowFailures:
14857
14895
  type:
14858
14896
  - boolean
@@ -15378,8 +15416,8 @@ components:
15378
15416
  id:
15379
15417
  type: string
15380
15418
  description: |
15381
- Unique identifier for this field within the form.
15382
- This value typically matches the key in the fieldMap object.
15419
+ Unique identifier for this field within the form: layout containers and conditions
15420
+ refer to the field by it. Use the same string as the field's fieldMap key and its `name`.
15383
15421
  examples:
15384
15422
  - url
15385
15423
  - mode
@@ -15390,8 +15428,9 @@ components:
15390
15428
  name:
15391
15429
  type: string
15392
15430
  description: |
15393
- Name of the field, used as the property name when generating the settings object
15394
- from the submitted form data.
15431
+ Key the field's value is saved under: one top-level key of the resource's `settings`,
15432
+ which the form also reads the value back from when it opens. Nested objects inside
15433
+ `settings` are written to it directly, not through a form field's `name`.
15395
15434
  examples:
15396
15435
  - url
15397
15436
  - mode
@@ -15466,11 +15505,19 @@ components:
15466
15505
  required:
15467
15506
  type: boolean
15468
15507
  description: |
15469
- When true, the field must have a value before the form can be submitted.
15508
+ When true, the field must have a value before the form can be submitted. Only the form
15509
+ enforces it: an API write of `settings` is stored without the value.
15470
15510
  default: false
15471
15511
  examples:
15472
15512
  - true
15473
15513
  - false
15514
+ defaultValue:
15515
+ description: |
15516
+ Value the form shows while the resource's `settings` holds no value under the field's
15517
+ `name`.
15518
+ examples:
15519
+ - us
15520
+ - true
15474
15521
  multiline:
15475
15522
  type: boolean
15476
15523
  description: |
@@ -15533,15 +15580,187 @@ components:
15533
15580
  keyName:
15534
15581
  type: string
15535
15582
  description: |
15536
- For keyvalue fields, specifies the placeholder and field name for the key input.
15583
+ For keyvalue and staticMap fields, names the first column: each saved row holds that
15584
+ column's value under this key. A keyvalue field without it uses `key`.
15537
15585
  examples:
15538
15586
  - theKey
15587
+ - source
15539
15588
  valueName:
15540
15589
  type: string
15541
15590
  description: |
15542
- For keyvalue fields, specifies the placeholder and field name for the value input.
15591
+ For keyvalue and staticMap fields, names the second column: each saved row holds that
15592
+ column's value under this key. A keyvalue field without it uses `value`.
15543
15593
  examples:
15544
15594
  - theValue
15595
+ - target
15596
+ keyLabel:
15597
+ type: string
15598
+ description: |
15599
+ For staticMap fields, heading of the first column.
15600
+ examples:
15601
+ - Source status
15602
+ valueLabel:
15603
+ type: string
15604
+ description: |
15605
+ For staticMap fields, heading of the second column.
15606
+ examples:
15607
+ - Destination status
15608
+ keyOptions:
15609
+ type: array
15610
+ description: |
15611
+ For staticMap fields, suggestions offered in the first column's cells. A cell still
15612
+ accepts a typed value.
15613
+ items:
15614
+ type: object
15615
+ properties:
15616
+ label:
15617
+ type: string
15618
+ description: |
15619
+ Display text for the suggestion.
15620
+ value:
15621
+ type: string
15622
+ description: |
15623
+ Value saved when the suggestion is chosen.
15624
+ examples:
15625
+ - - label: Pending
15626
+ value: pending
15627
+ - label: Shipped
15628
+ value: shipped
15629
+ valueOptions:
15630
+ type: array
15631
+ description: |
15632
+ For staticMap fields, suggestions offered in the second column's cells. A cell still
15633
+ accepts a typed value.
15634
+ items:
15635
+ type: object
15636
+ properties:
15637
+ label:
15638
+ type: string
15639
+ description: |
15640
+ Display text for the suggestion.
15641
+ value:
15642
+ type: string
15643
+ description: |
15644
+ Value saved when the suggestion is chosen.
15645
+ examples:
15646
+ - - label: Open
15647
+ value: open
15648
+ - label: Closed
15649
+ value: closed
15650
+ keyResource:
15651
+ type: object
15652
+ description: |
15653
+ For staticMap fields, fills the first column's suggestions from an export the form
15654
+ carries inline in `virtual`, run the way an exportSelect's `resource` is. With
15655
+ `keyResource` or `valueResource` set, the form requires both columns in every row
15656
+ unless `keyValueRequired` is false.
15657
+ properties:
15658
+ virtual:
15659
+ type: object
15660
+ description: |
15661
+ Export document to run, inline, shaped like an exportSelect's `resource.virtual`.
15662
+ additionalProperties: true
15663
+ valueResource:
15664
+ type: object
15665
+ description: |
15666
+ For staticMap fields, fills the second column's suggestions from an export the form
15667
+ carries inline in `virtual`, run the way an exportSelect's `resource` is.
15668
+ properties:
15669
+ virtual:
15670
+ type: object
15671
+ description: |
15672
+ Export document to run, inline, shaped like an exportSelect's `resource.virtual`.
15673
+ additionalProperties: true
15674
+ keyValueRequired:
15675
+ type: boolean
15676
+ description: |
15677
+ For staticMap fields with `keyResource` or `valueResource`, when false, saves rows
15678
+ that fill only one column; by default the form drops them.
15679
+ default: true
15680
+ examples:
15681
+ - false
15682
+ resource:
15683
+ type: object
15684
+ description: |
15685
+ For exportSelect fields, the export whose records become the options. When the form
15686
+ opens, the UI previews the export in `virtual` (with `test.limit` 100 unless the export
15687
+ sets its own) and lists the preview's `data`: each record needs a `label` and a `value`
15688
+ (a string or number serves as both), so shape them with the export's `transform`. A
15689
+ saved export can't be referenced, and an HTTP export that finds no records leaves the
15690
+ field showing an error instead of options.
15691
+ properties:
15692
+ virtual:
15693
+ type: object
15694
+ description: |
15695
+ Export document to run, inline: `adaptorType`, its adaptor block, and an optional
15696
+ `transform`. `_connectionId` defaults to the connection of the export or import the
15697
+ form belongs to; set it on any other resource's form.
15698
+ additionalProperties: true
15699
+ examples:
15700
+ - virtual:
15701
+ adaptorType: HTTPExport
15702
+ http:
15703
+ relativeURI: /v1/warehouses
15704
+ method: GET
15705
+ formType: http
15706
+ response:
15707
+ resourcePath: warehouses
15708
+ transform:
15709
+ type: expression
15710
+ expression:
15711
+ version: '2'
15712
+ rulesTwoDotZero:
15713
+ mode: create
15714
+ mappings:
15715
+ - generate: label
15716
+ extract: $.name
15717
+ dataType: string
15718
+ status: Active
15719
+ - generate: value
15720
+ extract: $.code
15721
+ dataType: string
15722
+ status: Active
15723
+ multiselect:
15724
+ type: boolean
15725
+ description: |
15726
+ For exportSelect fields, when true, the user can choose several options and the value
15727
+ is saved as an array.
15728
+ default: false
15729
+ examples:
15730
+ - true
15731
+ supportHandlebars:
15732
+ type: boolean
15733
+ description: |
15734
+ For exportSelect fields, when true, renders the `resource.virtual` export as a Handlebars
15735
+ template before each preview (all but its `transform`, `hooks`, and `filter`). On an
15736
+ integration, flow group, flow, export, or import form, the form's current values are
15737
+ under that form's scope name (`integration`, `flowGrouping`, `flow`, `export`, or
15738
+ `import`), beside the saved settings of the scopes above it, with no `settings.`
15739
+ prefix; on a connection or iClient form the template has no context. The options then
15740
+ load through `refreshOptionsOnChangesTo` or `typeAheadSearch`, or when the user
15741
+ refreshes the field.
15742
+ default: false
15743
+ examples:
15744
+ - true
15745
+ refreshOptionsOnChangesTo:
15746
+ type: array
15747
+ items:
15748
+ type: string
15749
+ description: |
15750
+ For exportSelect fields with `supportHandlebars`, ids of the fields whose values the
15751
+ templated export uses: the options load once one of them has a value and reload whenever
15752
+ one changes.
15753
+ examples:
15754
+ - - region
15755
+ typeAheadSearch:
15756
+ type: boolean
15757
+ description: |
15758
+ For exportSelect fields, when true, re-runs the templated export as the user types, with
15759
+ the typed text as this field's own value; an empty box clears the options, and typed
15760
+ text is accepted as the value.
15761
+ default: false
15762
+ examples:
15763
+ - true
15545
15764
  showDelete:
15546
15765
  type: boolean
15547
15766
  description: |
@@ -15642,7 +15861,9 @@ components:
15642
15861
  field:
15643
15862
  type: string
15644
15863
  description: |
15645
- The ID of another field whose value controls the visibility of this field.
15864
+ The ID of another field whose value controls the visibility of this field. The
15865
+ save doesn't check it: a rule naming an ID that isn't in the form counts as met,
15866
+ so the field stays visible.
15646
15867
  examples:
15647
15868
  - mode
15648
15869
  is:
@@ -15678,7 +15899,7 @@ components:
15678
15899
  - tabWithoutSave
15679
15900
  - verticalTabWithoutSave
15680
15901
  x-enumDescriptions:
15681
- column: Arranges form fields in a single vertical column layout.
15902
+ column: Places the containers side by side, one column each.
15682
15903
  collapse: Groups fields into collapsible/expandable sections.
15683
15904
  box: Wraps field groups in bordered boxes with headings.
15684
15905
  indent: Indents field groups to show hierarchy.
@@ -15687,6 +15908,15 @@ components:
15687
15908
  examples:
15688
15909
  - column
15689
15910
  - collapse
15911
+ fields:
15912
+ type: array
15913
+ items:
15914
+ type: string
15915
+ description: |
15916
+ Field IDs shown above the containers, without a heading.
15917
+ examples:
15918
+ - - region
15919
+ - vatNumber
15690
15920
  containers:
15691
15921
  type: array
15692
15922
  description: |
@@ -15726,7 +15956,8 @@ components:
15726
15956
  type: string
15727
15957
  description: |
15728
15958
  Array of field IDs that should be displayed in this container.
15729
- Each ID must correspond to a key in the fieldMap object.
15959
+ Each ID must correspond to a key in the fieldMap object: the save doesn't check it,
15960
+ and an ID that doesn't renders nothing. A field the layout doesn't list isn't shown.
15730
15961
  examples:
15731
15962
  - - A
15732
15963
  - url
@@ -15803,6 +16034,9 @@ components:
15803
16034
 
15804
16035
  The function must return a valid form object that the UI can render.
15805
16036
  Throwing an exception will signal an error to the user.
16037
+
16038
+ The UI runs the function each time it opens the form and renders the returned form instead of
16039
+ `form`, then fills in the values from `settings`; a thrown error's message replaces the form.
15806
16040
  properties:
15807
16041
  function:
15808
16042
  type: string
@@ -15826,8 +16060,10 @@ components:
15826
16060
  Reference to a predefined script resource containing the initialization function.
15827
16061
 
15828
16062
  The referenced script should contain the function specified in the
15829
- 'function' property. This script must be accessible within the user's account
15830
- and have appropriate permissions.
16063
+ 'function' property. On an integration, a flow group, a flow, an export, an import, or a
16064
+ connection, an id that isn't a script in the same account (or, on an Integration App's
16065
+ resources, one the app shares) is refused with 422 `invalid_ref`. An iClient save
16066
+ stores the id without that check.
15831
16067
  examples:
15832
16068
  - 60a2c4e6f321d800129a1a3c
15833
16069
  - 5f8d43a1b9e5a80011a35f2c
@@ -16238,8 +16474,11 @@ components:
16238
16474
  (CSV/XML/JSON) into records. Most modes take their matching configuration object (e.g. a
16239
16475
  `webhook` object when `type` is `webhook`); an HTTP or SQL `delta` export saves without a
16240
16476
  `delta` object because its request carries `{{lastExportDateTime}}`, though
16241
- `delta.startDate` sets its first window. Use `blob` only to transfer raw files without
16242
- parsing their contents.
16477
+ `delta.startDate` sets its first window. It still needs `type: delta`: on an export
16478
+ with no `type`, `{{lastExportDateTime}}` and `{{currentExportDateTime}}` render
16479
+ empty on every run, so a request that carries them goes out with blank values each time
16480
+ (live-verified 2026-10-22). Use `blob` only to transfer raw files without parsing their
16481
+ contents.
16243
16482
  x-celigo-ai-guidance:
16244
16483
  - |-
16245
16484
  ## HOW TO PICK THE TYPE VALUE