@celigo/api-specs 0.2.153 → 0.2.155

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/iclient.yml CHANGED
@@ -491,6 +491,8 @@ paths:
491
491
  Permanently deletes an iClient. Blocked while any connection references
492
492
  it, including a deleted connection still in the recycle bin: purge that
493
493
  connection with `DELETE /v1/recycleBinTTL/connections/{_id}` first.
494
+ `GET /v1/iclients/{_id}/dependencies` doesn't list a binned connection,
495
+ so an empty dependency list doesn't mean the delete will succeed.
494
496
  operationId: deleteIClient
495
497
  tags:
496
498
  - iClients
@@ -1623,68 +1625,12 @@ components:
1623
1625
  endpoint response body.
1624
1626
  x-celigo-ai-guidance:
1625
1627
  - |-
1626
- ## FIELD BEHAVIOR:
1627
- - Defines the endpoint path for access token requests in the OAuth2 flow.
1628
- - Must be a valid relative URL path starting with a forward slash (/).
1629
- - Used during the token exchange phase after obtaining an authorization code or other grant types.
1630
- - Typically combined with the authorization server's base URL to form the complete token endpoint URL.
1631
- - |-
1632
- Specifies the relative URL path on the OAuth2 authorization server where the
1633
- access token request should be sent.
1634
- This path is appended to the base URL of the authorization server to form the
1635
- full endpoint for obtaining an access token during the OAuth2 authentication
1636
- flow.
1637
- It is essential for enabling clients to exchange authorization grants for access
1638
- tokens securely.
1639
- - |-
1640
- ## IMPORTANT NOTES:
1641
- - This path is critical for the OAuth2 token exchange process; incorrect configuration will prevent successful authentication.
1642
- - It should not include the full URL, only the path component.
1643
- - Must align with the OAuth2 server's documentation to ensure interoperability.
1644
- - Often used in conjunction with other OAuth2 properties like client ID, client secret, and authorization path.
1645
- - |-
1646
- ## DEPENDENCY CHAIN:
1647
- - Depends on the base URL of the OAuth2 authorization server.
1648
- - Used alongside authorizationPath and other OAuth2 configuration properties.
1649
- - Integral to the OAuth2 token grant process.
1650
- - |-
1651
- ## EXAMPLES:
1652
- - /oauth2/token
1653
- - /api/v1/access_token
1654
- - /auth/token
1655
- - |-
1656
- ## IMPLEMENTATION GUIDANCE:
1657
- - Ensure the path corresponds exactly to the OAuth2 server's token endpoint specification.
1658
- - Validate that the path is correctly formatted and accessible.
1659
- - Avoid including query parameters or fragments in this path; it should be a clean URL path.
1660
- - Confirm compatibility with the OAuth2 server's expected token endpoint URL structure.
1661
- - |-
1662
- ## TECHNICAL DETAILS:
1663
- - Expected to be a URI path string.
1664
- - Should begin with a forward slash (/).
1665
- - Combined with the OAuth2 server's base URL to form the full token endpoint URI.
1666
- - Utilized in HTTP POST requests to obtain access tokens.
1667
- - |-
1668
- Specifies the relative URL path on the OAuth2 authorization server where the
1669
- access token request should be sent.
1670
- This path is appended to the base URL of the authorization server to form the
1671
- full endpoint for obtaining an access token during the OAuth2 authentication
1672
- flow.
1673
- It is essential for enabling clients to exchange authorization grants for access
1674
- tokens securely.
1675
- - |-
1676
- Specifies the relative URL path on the OAuth2 authorization server where the
1677
- access token request should be sent.
1678
- This path is appended to the base URL of the authorization server to form the
1679
- full endpoint for obtaining an access token during the OAuth2 authentication
1680
- flow.
1681
- It is essential for enabling clients to exchange authorization grants for access
1682
- tokens securely.
1628
+ A path into the token endpoint's JSON response — `access_token`, or
1629
+ `data.access_token` when the provider nests it — never a URL or an endpoint path.
1630
+ The token endpoint itself is `token.uri`.
1683
1631
  examples:
1684
1632
  - access_token
1685
- - /oauth2/token
1686
- - /api/v1/access_token
1687
- - /auth/token
1633
+ - data.access_token
1688
1634
  refreshTokenPath:
1689
1635
  type: string
1690
1636
  description: |-
@@ -1692,72 +1638,12 @@ components:
1692
1638
  endpoint response body.
1693
1639
  x-celigo-ai-guidance:
1694
1640
  - |-
1695
- ## IMPORTANT NOTES:
1696
- - This path is distinct from the initial token request endpoint.
1697
- - The refresh token flow requires that the client has previously obtained a refresh token.
1698
- - Not all OAuth 2.0 providers support refresh tokens; verify compatibility.
1699
- - The endpoint must support secure communication protocols (e.g., HTTPS).
1700
- - |-
1701
- ## EXAMPLES:
1702
- - "/oauth2/token/refresh"
1703
- - "https://auth.example.com/oauth2/token"
1704
- - "/api/v1/auth/refresh-token"
1705
- - |-
1706
- ## DEPENDENCY CHAIN:
1707
- - Depends on the existence of a valid refresh token issued during initial authentication.
1708
- - Works in conjunction with the access token and client credentials.
1709
- - Related to the OAuth 2.0 token endpoint configuration.
1710
- - |-
1711
- The relative or absolute URL path used to request a refresh token from the OAuth
1712
- 2.0 authorization server.
1713
- This endpoint is typically called when the current access token has expired or
1714
- is about to expire,
1715
- allowing the client to obtain a new access token without requiring the user to re-authenticate.
1716
- The path should conform to the OAuth 2.0 specification for token refresh
1717
- requests and support the necessary HTTP methods,
1718
- usually POST.
1719
- - |-
1720
- ## TECHNICAL DETAILS:
1721
- - Typically uses the HTTP POST method with form-encoded parameters.
1722
- - Requires parameters such as grant_type=refresh_token and the refresh_token itself.
1723
- - Responses include a new access token and optionally a new refresh token.
1724
- - Must handle scopes and token expiration as per OAuth 2.0 standards.
1725
- - |-
1726
- ## IMPLEMENTATION GUIDANCE:
1727
- - Ensure the path is correctly formatted as a relative or absolute URL.
1728
- - Confirm that the authorization server supports refresh token requests at this endpoint.
1729
- - Secure the endpoint with appropriate authentication and authorization measures.
1730
- - Validate that the client credentials and refresh token are correctly handled during the request.
1731
- - Handle error responses gracefully, such as invalid or expired refresh tokens.
1732
- - |-
1733
- ## FIELD BEHAVIOR:
1734
- - Specifies the endpoint for refreshing OAuth 2.0 access tokens.
1735
- - Used by the client application to maintain authenticated sessions seamlessly.
1736
- - Invoked automatically by the client when the access token expires or is near expiration.
1737
- - Must be accessible and correctly configured on the authorization server.
1738
- - |-
1739
- The relative or absolute URL path used to request a refresh token from the OAuth
1740
- 2.0 authorization server.
1741
- This endpoint is typically called when the current access token has expired or
1742
- is about to expire,
1743
- allowing the client to obtain a new access token without requiring the user to re-authenticate.
1744
- The path should conform to the OAuth 2.0 specification for token refresh
1745
- requests and support the necessary HTTP methods,
1746
- usually POST.
1747
- - |-
1748
- The relative or absolute URL path used to request a refresh token from the OAuth
1749
- 2.0 authorization server.
1750
- This endpoint is typically called when the current access token has expired or
1751
- is about to expire,
1752
- allowing the client to obtain a new access token without requiring the user to re-authenticate.
1753
- The path should conform to the OAuth 2.0 specification for token refresh
1754
- requests and support the necessary HTTP methods,
1755
- usually POST.
1641
+ A path into the token endpoint's JSON response — `refresh_token`, or
1642
+ `data.refresh_token` when the provider nests it — never a URL or an endpoint path.
1643
+ The refresh endpoint itself is `refresh.uri`.
1756
1644
  examples:
1757
1645
  - refresh_token
1758
- - /oauth2/token/refresh
1759
- - https://auth.example.com/oauth2/token
1760
- - /api/v1/auth/refresh-token
1646
+ - data.refresh_token
1761
1647
  scheme:
1762
1648
  type: string
1763
1649
  description: Authorization scheme prefix (e.g. `Bearer`, `Basic`).
package/dist/import.yml CHANGED
@@ -2844,7 +2844,7 @@ components:
2844
2844
  unmatched lookup halts the record. Stored as null when no
2845
2845
  fallback is configured.
2846
2846
  x-celigo-ai-guidance:
2847
- - 'Omit this field entirely when no fallback value is intended. The API rejects an empty string with [invalid_field] Invalid value '''' for field ''default'' — emitting default: "" to mean "no default" fails validation; leaving the key out is the valid spelling of that intent.'
2847
+ - '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 `""`.'
2848
2848
  - 'A fallback only takes effect on an allowed miss — pair a real default with allowFailures: true (or useDefaultOnMultipleMatches: true for the ambiguous-match case).'
2849
2849
  allowFailures:
2850
2850
  type:
@@ -5100,7 +5100,7 @@ components:
5100
5100
  - Unmapped Value
5101
5101
  - '{Original Value}'
5102
5102
  x-celigo-ai-guidance:
5103
- - 'Omit this field entirely when no fallback value is intended. The API rejects an empty string with [invalid_field] Invalid value '''' for field ''default'' — emitting default: "" to mean "no default" fails validation; leaving the key out is the valid spelling of that intent.'
5103
+ - '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 `""`.'
5104
5104
  allowFailures:
5105
5105
  type:
5106
5106
  - boolean
@@ -12568,9 +12568,8 @@ components:
12568
12568
  - For regular fields: Set to the exact property name (e.g., "firstName", "price", "isActive")
12569
12569
  - For object fields: Set to the object property name, then add child mappings in the 'mappings' array
12570
12570
  - For array fields: Set to the array property name, then configure 'buildArrayHelper'
12571
- - Two structural blanks: the inner array item of an array of arrays (it has no field name),
12572
- and the single top-level `objectarray` item of a `rows [ ]` mapping (the array output
12573
- structure — see the array's description). A child-bearing wrapper and a source-only row that
12571
+ - One structural blank: the single top-level `objectarray` item of a `rows [ ]` mapping (the
12572
+ array output structure — see the array's description). A child-bearing wrapper and a source-only row that
12574
12573
  already exist in a saved document also stay unnamed when the tree is re-sent — filling in a
12575
12574
  name changes the output; it does not complete the row
12576
12575
 
@@ -12587,7 +12586,9 @@ components:
12587
12586
  }
12588
12587
  ```
12589
12588
 
12590
- When parsing existing mappings, an empty `generate` inside a parent array is an inner array; an
12589
+ When parsing existing mappings, an empty `generate` on a row inside an `arrayarray` row's
12590
+ `buildArrayHelper` entry is that row's inner array (`arrayarray` fails at run time; see
12591
+ `dataType`); other unnamed rows are the wrappers and source-only rows described above; an
12591
12592
  empty `generate` on the ONLY top-level item, with `dataType: objectarray`, is the `rows [ ]` JSON
12592
12593
  structure — array output, bound as `rows` in templates — and is intentional, not a missing name.
12593
12594
  examples:
@@ -12621,17 +12622,25 @@ components:
12621
12622
  - `numberarray`: Array of numbers
12622
12623
  - `booleanarray`: Array of booleans
12623
12624
  - `objectarray`: Array of objects (most common array type)
12624
- - `arrayarray`: Array of arrays (for matrix/table structures)
12625
12625
 
12626
- Array dataTypes can be populated three ways: pass a source array
12627
- through unchanged via a JSONPath `extract` alone (when the source is
12628
- already an array of the right shape), construct/iterate via
12629
- `buildArrayHelper`, or set a constant with `hardCodedValue`.
12626
+ `arrayarray` is not a type the mapper recognizes: a save accepts it, but every record
12627
+ then fails with `Destination datatype is a required field.` Build an array of arrays
12628
+ in a script hook instead.
12629
+
12630
+ Array dataTypes are populated two ways: construct or iterate through
12631
+ `buildArrayHelper` entries, or set a constant with `hardCodedValue`. The
12632
+ row's own `extract` is never read on an array type: a primitive-array row
12633
+ that has only an `extract` (JSONPath, Handlebars or a literal) yields
12634
+ nothing, with no error, and an `objectarray` row without `buildArrayHelper`
12635
+ or `hardCodedValue` is refused with 422 ("buildArrayHelper" or
12636
+ "hardCodedValue" must be present for object array datatype.). To copy a
12637
+ source array through unchanged, use one entry that iterates it
12638
+ (`buildArrayHelper: [{"extract": "$.items[*]"}]`).
12630
12639
 
12631
12640
  IMPORTANT: The dataType controls which additional fields are relevant:
12632
12641
  - For date-like string fields: extractDateFormat, generateDateFormat, etc. become relevant
12633
12642
  - For object types: 'mappings' array becomes relevant
12634
- - For array types: a JSONPath `extract` alone, `buildArrayHelper`, or `hardCodedValue` (see above)
12643
+ - For array types: `buildArrayHelper` or `hardCodedValue` (see above)
12635
12644
 
12636
12645
  When analyzing existing mappings or generating new ones, always check dataType first
12637
12646
  to understand what additional fields should be present.
@@ -12650,7 +12659,6 @@ components:
12650
12659
  - numberarray
12651
12660
  - booleanarray
12652
12661
  - objectarray
12653
- - arrayarray
12654
12662
  x-enumDescriptions:
12655
12663
  string: Text values; converts other types to their string representation.
12656
12664
  number: Numeric values; attempts conversion from strings.
@@ -12660,7 +12668,6 @@ components:
12660
12668
  numberarray: Array of numeric values.
12661
12669
  booleanarray: Array of boolean values.
12662
12670
  objectarray: Array of objects, the most common array type.
12663
- arrayarray: Array of arrays, used for matrix or table structures.
12664
12671
  examples:
12665
12672
  - string
12666
12673
  - number
@@ -12703,9 +12710,10 @@ components:
12703
12710
  - Valid on scalars and on `object` rows, where the rendered output must
12704
12711
  parse into an object. On an array row the template goes in a
12705
12712
  `buildArrayHelper` entry instead: on an `objectarray` row's own
12706
- `extract` it is refused with 422 ("buildArrayHelper" must be present
12707
- for object array datatype), and on a primitive-array row's own
12708
- `extract` it renders null without an error
12713
+ `extract` it is refused with 422 ("buildArrayHelper" or "hardCodedValue"
12714
+ must be present for object array datatype.), and on a primitive-array
12715
+ row's own `extract` it yields nothing (the field is left out) without an
12716
+ error
12709
12717
 
12710
12718
  ```json
12711
12719
  "extract": "{{record.price}} {{record.currency}}" // Combines two fields
@@ -12847,8 +12855,10 @@ components:
12847
12855
  Explicit JSON `null` is itself a valid fallback: the destination field is written as
12848
12856
  JSON null when the extract yields nothing (the Mapper UI's "Use null as default value"
12849
12857
  action). Omitting the key entirely means no fallback — the field is left out of the
12850
- output when the extract is empty (the UI's "Do nothing" action). Failing the record
12851
- instead is `conditional.when: fail_record_when_empty`, which excludes a default.
12858
+ output when the extract is missing or an empty string (the UI's "Do nothing" action),
12859
+ while a null source is still written as null unless `conditional.when` is
12860
+ `extract_not_empty`. Failing the record instead is `conditional.when:
12861
+ fail_record_when_empty`, which excludes a default.
12852
12862
  x-celigo-ai-guidance:
12853
12863
  - |-
12854
12864
  `"default": null` and `"default": ""` are distinct saved values, not
@@ -12856,11 +12866,14 @@ components:
12856
12866
  empty string renders it as `""` when the extract yields nothing.
12857
12867
  Preserve them verbatim when editing or migrating a mapping — dropping
12858
12868
  the key changes runtime behavior from "use null/empty string as
12859
- default value" to "do nothing" (field omitted from the output).
12869
+ default value" to "do nothing" (a missing or `""` source is left out
12870
+ of the output, while a null source is written as null unless
12871
+ `conditional.when` is `extract_not_empty`).
12860
12872
  - |-
12861
12873
  The four "Action to take if source field has no value" choices map to:
12862
- do nothing → no `default` key (optionally `conditional.when:
12863
- extract_not_empty`); use null → `"default": null`; use empty string or
12874
+ do nothing → no `default` key (add `conditional.when:
12875
+ extract_not_empty` to leave a null source out too; without it a null
12876
+ source is written as null); use null → `"default": null`; use empty string or
12864
12877
  a custom value → `"default": "<value>"`; cause the record to fail →
12865
12878
  `conditional.when: fail_record_when_empty` with no `default` key.
12866
12879
  examples:
@@ -13075,8 +13088,7 @@ components:
13075
13088
 
13076
13089
  **When to Use**
13077
13090
  - REQUIRED when dataType ends with "array" (stringarray, objectarray, etc.), unless the
13078
- row passes a source array through with a JSONPath `extract` alone or sets
13079
- `hardCodedValue`
13091
+ row sets `hardCodedValue`: an array row's own `extract` is never read (see `dataType`)
13080
13092
  - Each entry in this array contributes elements to the output array
13081
13093
  - Multiple entries allow combining data from different input arrays
13082
13094
 
@@ -13160,28 +13172,10 @@ components:
13160
13172
  }
13161
13173
  ```
13162
13174
 
13163
- **For Arrays of Arrays (arrayarray)**
13164
- - Similar to objectarray, but inner arrays have empty 'generate' fields
13165
- - Used for matrix/table structures
13166
- ```json
13167
- {
13168
- "generate": "matrix",
13169
- "dataType": "arrayarray",
13170
- "buildArrayHelper": [
13171
- {
13172
- "extract": "$.rows[*]", // For each row in the rows array
13173
- "mappings": [
13174
- {
13175
- "dataType": "numberarray", // Note: No generate field for inner arrays
13176
- "buildArrayHelper": [
13177
- {"extract": "$.rows.columns[*]"} // Notice: "rows" is singular in the composite object
13178
- ]
13179
- }
13180
- ]
13181
- }
13182
- ]
13183
- }
13184
- ```
13175
+ **Arrays of Arrays**
13176
+ - The mapper has no working type for them: `arrayarray` saves, but every record
13177
+ fails with `Destination datatype is a required field.` Build an array of arrays
13178
+ in a script hook instead.
13185
13179
 
13186
13180
  **Important details**
13187
13181
 
@@ -13599,8 +13593,8 @@ components:
13599
13593
  nature is essential for building effective mappings:
13600
13594
 
13601
13595
  1. The schema is self-referential by design - a mapping can contain nested mappings of the same structure
13602
- 2. Complex data structures (nested objects, arrays of objects, arrays of arrays of objects) are ALL
13603
- handled through this recursive pattern
13596
+ 2. Complex data structures (nested objects and arrays of objects, to any depth) are ALL
13597
+ handled through this recursive pattern; an array of arrays is not (build one in a script hook)
13604
13598
  3. Each mapping handles one level of the data structure; deeper levels are handled by nested mappings
13605
13599
 
13606
13600
  When generating mappings programmatically:
@@ -13654,9 +13648,8 @@ components:
13654
13648
  - For regular fields: Set to the exact property name (e.g., "firstName", "price", "isActive")
13655
13649
  - For object fields: Set to the object property name, then add child mappings in the 'mappings' array
13656
13650
  - For array fields: Set to the array property name, then configure 'buildArrayHelper'
13657
- - Two structural blanks: the inner array item of an array of arrays (it has no field name),
13658
- and the single top-level `objectarray` item of a `rows [ ]` mapping (the array output
13659
- structure — see the array's description). A child-bearing wrapper and a source-only row that
13651
+ - One structural blank: the single top-level `objectarray` item of a `rows [ ]` mapping (the
13652
+ array output structure — see the array's description). A child-bearing wrapper and a source-only row that
13660
13653
  already exist in a saved document also stay unnamed when the tree is re-sent — filling in a
13661
13654
  name changes the output; it does not complete the row
13662
13655
 
@@ -13673,7 +13666,9 @@ components:
13673
13666
  }
13674
13667
  ```
13675
13668
 
13676
- When parsing existing mappings, an empty `generate` inside a parent array is an inner array; an
13669
+ When parsing existing mappings, an empty `generate` on a row inside an `arrayarray` row's
13670
+ `buildArrayHelper` entry is that row's inner array (`arrayarray` fails at run time; see
13671
+ `dataType`); other unnamed rows are the wrappers and source-only rows described above; an
13677
13672
  empty `generate` on the ONLY top-level item, with `dataType: objectarray`, is the `rows [ ]` JSON
13678
13673
  structure — array output, bound as `rows` in templates — and is intentional, not a missing name.
13679
13674
  examples:
@@ -13707,17 +13702,25 @@ components:
13707
13702
  - `numberarray`: Array of numbers
13708
13703
  - `booleanarray`: Array of booleans
13709
13704
  - `objectarray`: Array of objects (most common array type)
13710
- - `arrayarray`: Array of arrays (for matrix/table structures)
13711
13705
 
13712
- Array dataTypes can be populated three ways: pass a source array
13713
- through unchanged via a JSONPath `extract` alone (when the source is
13714
- already an array of the right shape), construct/iterate via
13715
- `buildArrayHelper`, or set a constant with `hardCodedValue`.
13706
+ `arrayarray` is not a type the mapper recognizes: a save accepts it, but every record
13707
+ then fails with `Destination datatype is a required field.` Build an array of arrays
13708
+ in a script hook instead.
13709
+
13710
+ Array dataTypes are populated two ways: construct or iterate through
13711
+ `buildArrayHelper` entries, or set a constant with `hardCodedValue`. The
13712
+ row's own `extract` is never read on an array type: a primitive-array row
13713
+ that has only an `extract` (JSONPath, Handlebars or a literal) yields
13714
+ nothing, with no error, and an `objectarray` row without `buildArrayHelper`
13715
+ or `hardCodedValue` is refused with 422 ("buildArrayHelper" or
13716
+ "hardCodedValue" must be present for object array datatype.). To copy a
13717
+ source array through unchanged, use one entry that iterates it
13718
+ (`buildArrayHelper: [{"extract": "$.items[*]"}]`).
13716
13719
 
13717
13720
  IMPORTANT: The dataType controls which additional fields are relevant:
13718
13721
  - For date-like string fields: extractDateFormat, generateDateFormat, etc. become relevant
13719
13722
  - For object types: 'mappings' array becomes relevant
13720
- - For array types: a JSONPath `extract` alone, `buildArrayHelper`, or `hardCodedValue` (see above)
13723
+ - For array types: `buildArrayHelper` or `hardCodedValue` (see above)
13721
13724
 
13722
13725
  When analyzing existing mappings or generating new ones, always check dataType first
13723
13726
  to understand what additional fields should be present.
@@ -13736,7 +13739,6 @@ components:
13736
13739
  - numberarray
13737
13740
  - booleanarray
13738
13741
  - objectarray
13739
- - arrayarray
13740
13742
  x-enumDescriptions:
13741
13743
  string: Text values; converts other types to their string representation.
13742
13744
  number: Numeric values; attempts conversion from strings.
@@ -13746,7 +13748,6 @@ components:
13746
13748
  numberarray: Array of numeric values.
13747
13749
  booleanarray: Array of boolean values.
13748
13750
  objectarray: Array of objects, the most common array type.
13749
- arrayarray: Array of arrays, used for matrix or table structures.
13750
13751
  examples:
13751
13752
  - string
13752
13753
  - number
@@ -13789,9 +13790,10 @@ components:
13789
13790
  - Valid on scalars and on `object` rows, where the rendered output must
13790
13791
  parse into an object. On an array row the template goes in a
13791
13792
  `buildArrayHelper` entry instead: on an `objectarray` row's own
13792
- `extract` it is refused with 422 ("buildArrayHelper" must be present
13793
- for object array datatype), and on a primitive-array row's own
13794
- `extract` it renders null without an error
13793
+ `extract` it is refused with 422 ("buildArrayHelper" or "hardCodedValue"
13794
+ must be present for object array datatype.), and on a primitive-array
13795
+ row's own `extract` it yields nothing (the field is left out) without an
13796
+ error
13795
13797
 
13796
13798
  ```json
13797
13799
  "extract": "{{record.price}} {{record.currency}}" // Combines two fields
@@ -13933,8 +13935,10 @@ components:
13933
13935
  Explicit JSON `null` is itself a valid fallback: the destination field is written as
13934
13936
  JSON null when the extract yields nothing (the Mapper UI's "Use null as default value"
13935
13937
  action). Omitting the key entirely means no fallback — the field is left out of the
13936
- output when the extract is empty (the UI's "Do nothing" action). Failing the record
13937
- instead is `conditional.when: fail_record_when_empty`, which excludes a default.
13938
+ output when the extract is missing or an empty string (the UI's "Do nothing" action),
13939
+ while a null source is still written as null unless `conditional.when` is
13940
+ `extract_not_empty`. Failing the record instead is `conditional.when:
13941
+ fail_record_when_empty`, which excludes a default.
13938
13942
  x-celigo-ai-guidance:
13939
13943
  - |-
13940
13944
  `"default": null` and `"default": ""` are distinct saved values, not
@@ -13942,11 +13946,14 @@ components:
13942
13946
  empty string renders it as `""` when the extract yields nothing.
13943
13947
  Preserve them verbatim when editing or migrating a mapping — dropping
13944
13948
  the key changes runtime behavior from "use null/empty string as
13945
- default value" to "do nothing" (field omitted from the output).
13949
+ default value" to "do nothing" (a missing or `""` source is left out
13950
+ of the output, while a null source is written as null unless
13951
+ `conditional.when` is `extract_not_empty`).
13946
13952
  - |-
13947
13953
  The four "Action to take if source field has no value" choices map to:
13948
- do nothing → no `default` key (optionally `conditional.when:
13949
- extract_not_empty`); use null → `"default": null`; use empty string or
13954
+ do nothing → no `default` key (add `conditional.when:
13955
+ extract_not_empty` to leave a null source out too; without it a null
13956
+ source is written as null); use null → `"default": null`; use empty string or
13950
13957
  a custom value → `"default": "<value>"`; cause the record to fail →
13951
13958
  `conditional.when: fail_record_when_empty` with no `default` key.
13952
13959
  examples:
@@ -14161,8 +14168,7 @@ components:
14161
14168
 
14162
14169
  **When to Use**
14163
14170
  - REQUIRED when dataType ends with "array" (stringarray, objectarray, etc.), unless the
14164
- row passes a source array through with a JSONPath `extract` alone or sets
14165
- `hardCodedValue`
14171
+ row sets `hardCodedValue`: an array row's own `extract` is never read (see `dataType`)
14166
14172
  - Each entry in this array contributes elements to the output array
14167
14173
  - Multiple entries allow combining data from different input arrays
14168
14174
 
@@ -14246,28 +14252,10 @@ components:
14246
14252
  }
14247
14253
  ```
14248
14254
 
14249
- **For Arrays of Arrays (arrayarray)**
14250
- - Similar to objectarray, but inner arrays have empty 'generate' fields
14251
- - Used for matrix/table structures
14252
- ```json
14253
- {
14254
- "generate": "matrix",
14255
- "dataType": "arrayarray",
14256
- "buildArrayHelper": [
14257
- {
14258
- "extract": "$.rows[*]", // For each row in the rows array
14259
- "mappings": [
14260
- {
14261
- "dataType": "numberarray", // Note: No generate field for inner arrays
14262
- "buildArrayHelper": [
14263
- {"extract": "$.rows.columns[*]"} // Notice: "rows" is singular in the composite object
14264
- ]
14265
- }
14266
- ]
14267
- }
14268
- ]
14269
- }
14270
- ```
14255
+ **Arrays of Arrays**
14256
+ - The mapper has no working type for them: `arrayarray` saves, but every record
14257
+ fails with `Destination datatype is a required field.` Build an array of arrays
14258
+ in a script hook instead.
14271
14259
 
14272
14260
  **Important details**
14273
14261
 
@@ -14794,6 +14782,11 @@ components:
14794
14782
  dropped fields. Either map every field downstream logic
14795
14783
  needs forward, or author Transform 2.0 with
14796
14784
  ``mode: "modify"`` instead.
14785
+ - |-
14786
+ An import's ``responseTransform`` is the exception: it accepts
14787
+ version ``"1"`` only (``"2"`` is refused with 422, verified live
14788
+ 2026-10-21), so there, map every response field that response
14789
+ mapping needs.
14797
14790
  items:
14798
14791
  type: array
14799
14792
  items:
@@ -16551,10 +16544,11 @@ components:
16551
16544
 
16552
16545
  Runtime contract: ``options.responseData[]`` (one per
16553
16546
  submitted record; ``{statusCode, errors, _json, ...}`` —
16554
- ``id`` is present on real runs but absent from the
16555
- mock-built envelopes flow test runs substitute) → array of
16556
- the same length, typically mutated to annotate or augment
16557
- per-record errors.
16547
+ ``id`` is the destination record's on real runs; flow test
16548
+ runs substitute the saved ``mockResponse`` or the placeholder
16549
+ response, whose envelope carries the mock's id, such as
16550
+ ``1234567890``) → array of the same length, typically mutated
16551
+ to annotate or augment per-record errors.
16558
16552
  allOf:
16559
16553
  - $ref: '#/components/schemas/Hook'
16560
16554
  postAggregate:
@@ -16593,21 +16587,55 @@ components:
16593
16587
  - transform
16594
16588
  description: |-
16595
16589
  Transformation that reshapes the destination system's response after records are
16596
- imported, before the response is processed by response mappings and downstream
16597
- steps. Commonly used to extract relevant fields from verbose API responses.
16590
+ imported: it runs after the postSubmit hook, on each record's response body (`_json`),
16591
+ and its output replaces that body, so response mapping can't read a field the
16592
+ transform drops. Expression rules use version `"1"` (`rules`); version `"2"` is refused
16593
+ on save. Commonly used to extract relevant fields from verbose API responses.
16598
16594
  allOf:
16599
16595
  - $ref: '#/components/schemas/Transform'
16596
+ - type: object
16597
+ properties:
16598
+ expression:
16599
+ type: object
16600
+ properties:
16601
+ version:
16602
+ type: string
16603
+ enum:
16604
+ - '1'
16605
+ x-enumDescriptions:
16606
+ '1': Transformation 1.0 rules in `rules`, the only version an import's response transform accepts.
16607
+ description: Must be `"1"` on an import's response transform; `"2"` is refused with 422.
16600
16608
  x-celigo-ai-guidance:
16609
+ - |-
16610
+ Verified live 2026-10-21 on an HTTP import in a flow run: the postSubmit hook's changes
16611
+ to `responseData[i]._json` were in the transform's input, the transform's output replaced
16612
+ `_json` (only the mapped fields were kept), and response mapping then found nothing at a
16613
+ dropped field's path. The execution-log stage is `responseTransformation`, and
16614
+ `POST /v1/imports/{_id}/invoke` returns the transformed body.
16615
+ - |-
16616
+ A save with `expression.version: "2"` (`rulesTwoDotZero`) fails with 422 "`2` is not a
16617
+ valid enum value for path `responseTransform.expression.version`." Write `version: "1"`
16618
+ rules (`[[{extract, generate}, ...]]`).
16601
16619
  - |-
16602
16620
  ## IMPORT-SPECIFIC BEHAVIOR
16603
16621
 
16604
- **Response Transformation**: Transforms the response data returned by the destination system after records have been imported. This allows you to reshape, filter, or enrich the response before it is processed by downstream flow steps or returned to the client.
16622
+ **Response Transformation**: Transforms the response data returned by the destination system after records have been imported. This allows you to reshape, filter, or enrich the response before response mapping reads it; the record passed downstream is the incoming record plus what response mapping copies out.
16605
16623
 
16606
16624
  **Common Use Cases**:
16607
16625
  - Extracting relevant fields from verbose API responses
16608
16626
  - Normalizing response formats across different destination systems
16609
16627
  - Adding computed fields based on response data
16610
16628
  - Filtering out sensitive information before logging or further processing
16629
+ - |-
16630
+ ## Transformation 1.0 rules only, and what response mapping reads
16631
+
16632
+ Expression rules here are Transformation 1.0 only (`expression.version: "1"`, the
16633
+ `rules` array) or a script: a version "2" expression is refused with 422
16634
+ (`` `2` is not a valid enum value for path `responseTransform.expression.version`. ``).
16635
+ The rules read the parsed response body, and their output replaces `_json`. v1 rules
16636
+ keep only the fields they generate, so the step's response mapping reads those
16637
+ names (at the envelope root or under `_json`) and nothing the rules dropped; `id`
16638
+ still resolves.
16611
16639
  modelMetadata:
16612
16640
  type: object
16613
16641
  description: Metadata about the destination data model captured for this import. Rarely set.
@@ -16637,6 +16665,11 @@ components:
16637
16665
  default to Mapper 2.0 at the top-level ``mappings`` (plural) field.
16638
16666
  Do not set this field unsolicited; the v2 default produces better
16639
16667
  output for modern connectors.
16668
+
16669
+ An import that carries both this field and ``mappings`` runs only
16670
+ ``mappings``: the Mapper 1.0 rows are ignored, with no error. A
16671
+ conversion to Mapper 2.0 therefore translates every row and removes
16672
+ this field in the same save.
16640
16673
  - |-
16641
16674
  Allowed (but not the default) on other import adaptors such as
16642
16675
  ``HTTPImport``, ``RDBMSImport``, ``FTPImport``, and