@celigo/api-specs 0.2.149 → 0.2.150

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/ai-agent.yml CHANGED
@@ -5689,19 +5689,27 @@ components:
5689
5689
  properties:
5690
5690
  function:
5691
5691
  type: string
5692
- description: Function to invoke within the referenced script.
5692
+ description: |-
5693
+ Function to invoke: one in the script named by `_scriptId`, or one the code deployed on
5694
+ the stack named by `_stackId` exposes.
5693
5695
  examples:
5694
5696
  - transformRecords
5695
5697
  _scriptId:
5696
5698
  type: string
5697
5699
  format: objectId
5698
5700
  x-celigo-refModel: scripts
5699
- description: Script containing the hook function named in `function`.
5701
+ description: Script containing the hook function named in `function`. Send this or `_stackId`, not both.
5700
5702
  _stackId:
5701
5703
  type: string
5702
5704
  format: objectId
5703
5705
  x-celigo-refModel: stacks
5704
- description: Stack that hosts the hook logic, used instead of a script for stack-based deployments.
5706
+ description: |-
5707
+ Stack that hosts the hook logic, used instead of a script for stack-based deployments.
5708
+ The API doesn't enforce the either/or: a save carrying both `_scriptId` and `_stackId`
5709
+ answers 200 and stores both, and the script and the stack then each list the step as a
5710
+ dependent.
5711
+ x-celigo-ai-guidance:
5712
+ - When moving a hook onto a stack, remove `_scriptId` and set `function` to the stack's function in the same update.
5705
5713
  configuration:
5706
5714
  type:
5707
5715
  - object
package/dist/api.yml CHANGED
@@ -1683,12 +1683,19 @@ paths:
1683
1683
 
1684
1684
  The response carries a `metadata` map keyed by step id (each value is the ordered list of
1685
1685
  stage names that ran for that step), the parent `flowJob`, and the per-step `childJobs[]`.
1686
- Inspect a specific step's stages with `GET /v1/apis/{_id}/test/run/{runId}/{_stepId}`, where
1687
- `runId` is the parent `flowJob._id`.
1686
+ The response the run selected appears in `metadata` too, keyed by its `id` (`success`,
1687
+ `fail`, or a custom response's `id`). Inspect a specific step's stages with
1688
+ `GET /v1/apis/{_id}/test/run/{runId}/{_stepId}`, where `runId` is the parent `flowJob._id`.
1688
1689
 
1689
1690
  Test-run invocations do **not** surface in `GET /v1/apis/{_id}/logs`.
1690
1691
 
1691
- A test run is not free of outside calls: lookups call their sources live. Imports never
1692
+ A test run is not free of outside calls: a lookup export with no saved `mockOutput` calls
1693
+ its source live, and the run then saves that response on the export as its `mockOutput`
1694
+ (the export's `lastModified` changes). Every later test run that uses the export, from any
1695
+ API or Tool and whatever its request, answers that lookup from the saved `mockOutput`
1696
+ instead of calling the source: the lookup's `request` stage shows the request rendered
1697
+ from the new record, and its `response` stage holds the saved records. Remove `mockOutput`
1698
+ from the export to call the source again. Real calls to the API don't read it. Imports never
1692
1699
  send; each returns its saved `mockResponse`, or a placeholder response when none is saved
1693
1700
  (see `mockResponse` on imports).
1694
1701
 
@@ -1748,10 +1755,10 @@ paths:
1748
1755
  summary: Run without test input (the first step gets an empty record)
1749
1756
  value: {}
1750
1757
  withMockRequest:
1751
- summary: Run with an explicit test request
1758
+ summary: Run with an explicit test request (only the body reaches the first step)
1752
1759
  value:
1753
1760
  mockRequest:
1754
- queryParams:
1761
+ body:
1755
1762
  sku: SKU-001
1756
1763
  responses:
1757
1764
  '200':
@@ -1765,7 +1772,8 @@ paths:
1765
1772
  type: object
1766
1773
  description: |-
1767
1774
  Map keyed by step id; each value is the ordered list of stage names that ran for
1768
- that step.
1775
+ that step. The selected response is one of the keys (`success`, `fail`, or a
1776
+ custom response's `id`), so it names the response the run returned.
1769
1777
  additionalProperties:
1770
1778
  type: array
1771
1779
  items:
@@ -1787,6 +1795,11 @@ paths:
1787
1795
  - parse
1788
1796
  main:
1789
1797
  - router
1798
+ apiRouter:
1799
+ - router
1800
+ success:
1801
+ - mapping
1802
+ - response
1790
1803
  flowJob:
1791
1804
  _id: 6a2e23bbcf5b64ca6b93b757
1792
1805
  type: flow
@@ -2793,8 +2806,9 @@ components:
2793
2806
  type: object
2794
2807
  description: |-
2795
2808
  Sample request saved with the API for testing. `POST /v1/apis/{_id}/test/run` doesn't
2796
- read it; send it as that call's `mockRequest`. A test run still makes outside calls:
2797
- its lookups call their sources live.
2809
+ read it; send it as that call's `mockRequest`. A test run still makes outside calls: a
2810
+ lookup with no saved `mockOutput` calls its source live, and the run saves that response
2811
+ as the lookup's `mockOutput`, which later test runs answer from.
2798
2812
  properties:
2799
2813
  body:
2800
2814
  type: object
@@ -2813,9 +2827,10 @@ components:
2813
2827
  - |-
2814
2828
  Saving a mockRequest doesn't make test runs use it: a test run without its own
2815
2829
  mockRequest starts from an empty record. A test run isn't free of outside calls
2816
- either: lookups run live, and only imports are kept from sending (each returns its
2817
- mockResponse or a placeholder). Can include body, headers, pathParams, and
2818
- queryParams.
2830
+ either: a lookup without a saved mockOutput runs live (and the run then saves its
2831
+ response as that mockOutput), and only imports are kept from sending (each returns
2832
+ its mockResponse or a placeholder). Can include body, headers, pathParams, and
2833
+ queryParams; only the body reaches the record the steps see.
2819
2834
  transform:
2820
2835
  type: object
2821
2836
  description: |-
@@ -3269,17 +3284,19 @@ components:
3269
3284
  - fail
3270
3285
  - custom
3271
3286
  x-enumDescriptions:
3272
- success: Default response returned when the API operation completes successfully.
3273
- fail: Default response returned when the API operation encounters an error.
3274
- custom: Additional response for specific scenarios, routed via the response router.
3275
- description: Response type.
3287
+ success: The happy-path response; returned when it's the first response, in list order, whose `inputFilter` matches.
3288
+ fail: The error response; returned when a step fails and that step's `proceedOnFailure` is off.
3289
+ custom: Additional response for specific scenarios, selected by its own `inputFilter`.
3290
+ description: |-
3291
+ Response type. `success` isn't a fallback checked after the `custom` responses: list
3292
+ `custom` responses before it (see `inputFilter`).
3276
3293
  examples:
3277
3294
  - success
3278
3295
  x-celigo-ai-guidance:
3279
3296
  - |-
3280
- - **success**: Default response for successful operations (required, exactly one)
3281
- - **fail**: Default response for errors (required, exactly one)
3282
- - **custom**: Additional responses for specific scenarios (optional, multiple allowed)
3297
+ - **success**: Response for successful operations (required, exactly one)
3298
+ - **fail**: Response for errors (required, exactly one)
3299
+ - **custom**: Additional responses for specific scenarios (optional, multiple allowed), listed before `success`
3283
3300
  statusCode:
3284
3301
  type: integer
3285
3302
  minimum: 100
@@ -3320,7 +3337,13 @@ components:
3320
3337
  - Content type of the response body
3321
3338
  inputFilter:
3322
3339
  type: object
3323
- description: Filter criteria for response selection by the response router.
3340
+ description: |-
3341
+ Filter criteria for response selection by the response router, which returns the first
3342
+ response in `responses` whose filter matches. A response without an `inputFilter` matches
3343
+ every request, so a `success` listed first answers requests a later `custom` filter
3344
+ matches; the typed `context.success` filter doesn't prevent that, because
3345
+ `context.success` is true whenever no step failed, including when a lookup found nothing.
3346
+ A step that fails with `proceedOnFailure` off selects the `fail` response.
3324
3347
  properties:
3325
3348
  version:
3326
3349
  type: string
@@ -3334,19 +3357,20 @@ components:
3334
3357
  description: Celigo expression-based filter rules.
3335
3358
  items: {}
3336
3359
  examples:
3337
- - - equals
3338
- - - boolean
3339
- - - context
3340
- - success
3341
- - true
3360
+ - - empty
3361
+ - - string
3362
+ - - extract
3363
+ - customerId
3342
3364
  - - and
3343
- - - equals
3344
- - - get
3345
- - statusCode
3346
- - 200
3347
- - - exists
3348
- - - get
3349
- - data
3365
+ - - notempty
3366
+ - - string
3367
+ - - extract
3368
+ - orderId
3369
+ - - greaterthan
3370
+ - - number
3371
+ - - extract
3372
+ - amount
3373
+ - 1000
3350
3374
  x-celigo-ai-guidance:
3351
3375
  - |-
3352
3376
  Array-based DSL where the first element is an operator (e.g., "equals", "and", "or"),
@@ -3552,6 +3576,9 @@ components:
3552
3576
  - Exactly one 'success' response (for successful operations)
3553
3577
  - Exactly one 'fail' response (for errors)
3554
3578
  - Zero or more 'custom' responses (for specific scenarios)
3579
+ The response router returns the first response whose `inputFilter` matches, and a
3580
+ response without one matches every request, so list the 'custom' responses ahead of
3581
+ 'success'.
3555
3582
  Builder:
3556
3583
  type: object
3557
3584
  description: Builder-mode configuration defining request structure, routing, and response mapping.
@@ -3573,13 +3600,16 @@ components:
3573
3600
  type: array
3574
3601
  description: |-
3575
3602
  Response configurations. Must include exactly one `success` and one `fail`
3576
- response; additional `custom` responses are optional.
3603
+ response; additional `custom` responses are optional. Order matters: the response
3604
+ router returns the first response whose `inputFilter` matches, and a response without
3605
+ one matches every request.
3577
3606
  items:
3578
3607
  $ref: '#/components/schemas/ApiResponse'
3579
3608
  x-celigo-ai-guidance:
3580
3609
  - |-
3581
3610
  Must include exactly one 'success' response and one 'fail' response.
3582
- Additional custom responses can be added for specific scenarios.
3611
+ Additional custom responses can be added for specific scenarios; list them before
3612
+ 'success', which otherwise answers the requests their filters match.
3583
3613
  x-celigo-ai-guidance:
3584
3614
  - |-
3585
3615
  The builder mode allows you to define your API using visual configuration:
@@ -207,6 +207,11 @@ paths:
207
207
  For EDI formats (`delimited/x12` or `delimited/edifact`), a valid `globalId`
208
208
  is required when the account has an EDI license enabled. The `globalId` must
209
209
  reference a known standard document definition.
210
+ - |-
211
+ For `format: fixed`, send `version`, `fixed.rowDelimiter` and `fixed.paddingChar`;
212
+ without them the create fails with 422 and nothing is saved. Columns are read in
213
+ element order, so declare every column (a placeholder element for a gap) and parse a
214
+ sample with `POST /v1/processors/structuredFileParser` before linking the definition.
210
215
  /v1/filedefinitions/{_id}:
211
216
  get:
212
217
  x-internal: false
@@ -1016,7 +1021,7 @@ components:
1016
1021
  description: |
1017
1022
  Configuration specific to fixed-width format files.
1018
1023
 
1019
- Used when `format` is "fixed".
1024
+ Used when `format` is "fixed", which requires `rowDelimiter` and `paddingChar`.
1020
1025
  properties:
1021
1026
  rowSuffix:
1022
1027
  type: string
@@ -1028,14 +1033,20 @@ components:
1028
1033
  rowDelimiter:
1029
1034
  type: string
1030
1035
  description: |
1031
- Character(s) used to delimit rows during parsing.
1036
+ Character(s) used to delimit rows during parsing. Required when `format` is "fixed".
1037
+
1038
+ A delimiter after the last row is read as one more, empty row: a required row
1039
+ rule then fails the parse at that line ("Required rule must have the respective
1040
+ row in the source file"), and an optional one adds an empty `{}` record. Set
1041
+ `skipIntermittentEmptyLines: true` to drop it.
1032
1042
  examples:
1033
1043
  - \n
1034
1044
  - \r\n
1035
1045
  paddingChar:
1036
1046
  type: string
1037
1047
  description: |
1038
- Character used to pad fixed-width fields to their required length.
1048
+ Character used to pad fixed-width fields to their required length. Required when
1049
+ `format` is "fixed".
1039
1050
  examples:
1040
1051
  - ' '
1041
1052
  - '0'
@@ -1090,7 +1101,8 @@ components:
1090
1101
  skipIntermittentEmptyLines:
1091
1102
  type: boolean
1092
1103
  description: |
1093
- Whether to remove empty rows found in the file content during parsing.
1104
+ Whether to remove empty rows found in the file content during parsing. On a
1105
+ fixed-width definition this includes the empty row a trailing line break adds.
1094
1106
  escapeReleaseChar:
1095
1107
  type: boolean
1096
1108
  description: |
@@ -1213,6 +1225,11 @@ components:
1213
1225
  type: object
1214
1226
  description: |
1215
1227
  Request schema for creating or updating a file definition.
1228
+
1229
+ A fixed-width definition (`format: fixed`) also needs `fixed.rowDelimiter` and
1230
+ `fixed.paddingChar`: a create or full update without either fails with 422
1231
+ ("rowDelimiter is a required field for fixed file definitions.", "paddingChar is a
1232
+ required field for fixed width file definitions.") and saves nothing.
1216
1233
  required:
1217
1234
  - name
1218
1235
  - version
@@ -1220,6 +1237,20 @@ components:
1220
1237
  - rules
1221
1238
  allOf:
1222
1239
  - $ref: '#/components/schemas/FileDefinitionBase'
1240
+ if:
1241
+ properties:
1242
+ format:
1243
+ const: fixed
1244
+ required:
1245
+ - format
1246
+ then:
1247
+ required:
1248
+ - fixed
1249
+ properties:
1250
+ fixed:
1251
+ required:
1252
+ - rowDelimiter
1253
+ - paddingChar
1223
1254
  x-celigo-ai-guidance:
1224
1255
  - |-
1225
1256
  File definitions describe the structure and parsing/generation rules for
@@ -25,6 +25,14 @@ tags:
25
25
  CRUD operations use the `/v1/imports` endpoints. The `guardrail` object
26
26
  holds the type-specific configuration.
27
27
 
28
+ A guardrail returns a verdict for each record and never changes the
29
+ record. The verdict fields are at the top level of the result:
30
+ `flagged`, plus `masked` (a `pii` guardrail with `mask: true`) or
31
+ `reasoning` (an `ai_agent` guardrail), while `_json` is empty when a saved
32
+ guardrail is invoked by id. In a flow, the guardrail step's response
33
+ mapping copies them onto the record (`{"extract": "masked", "generate":
34
+ "description"}`), and routers branch on the mapped `flagged`.
35
+
28
36
  ## Guardrail schema
29
37
 
30
38
  {% openapi-schemas spec="guardrail" schemas="Guardrail" grouped="true" %}
@@ -1762,10 +1770,15 @@ components:
1762
1770
  type: boolean
1763
1771
  default: false
1764
1772
  description: |-
1765
- When true, detected PII is replaced with masked values.
1766
- When false, PII is flagged without modification.
1773
+ When true, the result also carries `masked`: the evaluated input with each detected
1774
+ value replaced by asterisks. The record itself is unchanged. With whole-record input
1775
+ (no `mapping`, and no top-level `text` field on the record), `masked` is the record
1776
+ serialized as one JSON string. When false, PII is flagged only.
1767
1777
  x-celigo-ai-guidance:
1768
- - Whether to mask detected PII values in the output.
1778
+ - |-
1779
+ Masking doesn't rewrite the record. To pass masked text on, select the field as the
1780
+ `text` input (`mapping`) and response-map `masked` back onto that field on the
1781
+ guardrail's flow step (`{"extract": "masked", "generate": "<field>"}`).
1769
1782
  moderation:
1770
1783
  type: object
1771
1784
  required:
@@ -2152,8 +2165,10 @@ components:
2152
2165
  mapping:
2153
2166
  type: object
2154
2167
  description: |-
2155
- Mapper 1.0 input mapping. Served only when populated — a
2156
- guardrail created without one has no `mapping` in responses.
2168
+ Mapper 1.0 input mapping that selects the field evaluated as `text`.
2169
+ Served only when populated — a guardrail created without one has no
2170
+ `mapping` in responses, and evaluates the whole record (or the
2171
+ record's own top-level `text` field, when it has one).
2157
2172
  properties:
2158
2173
  fields:
2159
2174
  type: array
@@ -2211,7 +2226,11 @@ components:
2211
2226
  - []
2212
2227
  mockResponse:
2213
2228
  type: array
2214
- description: Sample evaluation results stored with the guardrail. The UI populates these from a preview run; accepted on create and update.
2229
+ description: |-
2230
+ Sample evaluation results stored with the guardrail. The UI populates these from a
2231
+ preview run; accepted on create and update. Each item has the shape of the result a
2232
+ run produces for one record, with the verdict fields (`flagged`, `masked`,
2233
+ `reasoning`) at the top level.
2215
2234
  items:
2216
2235
  type: object
2217
2236
  properties:
@@ -2225,6 +2244,23 @@ components:
2225
2244
  description: When true, the sample input tripped the guardrail.
2226
2245
  examples:
2227
2246
  - true
2247
+ reasoning:
2248
+ type: string
2249
+ description: |-
2250
+ The model's explanation of the verdict. Returned by `ai_agent` guardrails,
2251
+ whatever output format the guardrail stores.
2252
+ examples:
2253
+ - The discount is 45% on an account opened 30 days ago, so the order is flagged.
2254
+ _json:
2255
+ type: object
2256
+ description: |-
2257
+ Empty (`{}`) in the result of a saved guardrail invoked by id. A preview's result
2258
+ carries the raw verdict under `_json.data`: `flagged`, `reasoning` and
2259
+ `confidence` for `ai_agent`, or `flagged`, `masked` and `entities_detected`
2260
+ for `pii`. Read the top-level fields, not `_json`.
2261
+ additionalProperties: true
2262
+ examples:
2263
+ - {}
2228
2264
  ignored:
2229
2265
  type: boolean
2230
2266
  description: When true, the result fell below `confidenceThreshold` and was disregarded.
@@ -2303,9 +2339,17 @@ components:
2303
2339
  Mapper 1.0 mapping that selects the guardrail's input from the
2304
2340
  incoming record. The UI writes a single field entry that maps a
2305
2341
  record field to the `text` input (e.g.
2306
- `{"fields": [{"extract": "employeeSummary", "generate": "text"}]}`).
2307
- Optional — when omitted the whole record is evaluated. The server
2342
+ `{"fields": [{"extract": "employeeSummary", "generate": "text"}]}`);
2343
+ only that field is evaluated, and fields outside it are neither
2344
+ scanned nor masked. Optional — when omitted the whole record is
2345
+ evaluated, serialized as JSON, unless the record has its own
2346
+ top-level `text` field, which is then evaluated alone. The server
2308
2347
  serves this field only when populated.
2348
+ x-celigo-ai-guidance:
2349
+ - |-
2350
+ Send the input selection here as `mapping`, not as Mapper 2.0
2351
+ `mappings` rows. Map the field explicitly when records carry their
2352
+ own `text` field.
2309
2353
  properties:
2310
2354
  fields:
2311
2355
  type: array
package/dist/import.yml CHANGED
@@ -11854,10 +11854,15 @@ components:
11854
11854
  type: boolean
11855
11855
  default: false
11856
11856
  description: |-
11857
- When true, detected PII is replaced with masked values.
11858
- When false, PII is flagged without modification.
11857
+ When true, the result also carries `masked`: the evaluated input with each detected
11858
+ value replaced by asterisks. The record itself is unchanged. With whole-record input
11859
+ (no `mapping`, and no top-level `text` field on the record), `masked` is the record
11860
+ serialized as one JSON string. When false, PII is flagged only.
11859
11861
  x-celigo-ai-guidance:
11860
- - Whether to mask detected PII values in the output.
11862
+ - |-
11863
+ Masking doesn't rewrite the record. To pass masked text on, select the field as the
11864
+ `text` input (`mapping`) and response-map `masked` back onto that field on the
11865
+ guardrail's flow step (`{"extract": "masked", "generate": "<field>"}`).
11861
11866
  moderation:
11862
11867
  type: object
11863
11868
  required:
@@ -12492,19 +12497,27 @@ components:
12492
12497
  properties:
12493
12498
  function:
12494
12499
  type: string
12495
- description: Function to invoke within the referenced script.
12500
+ description: |-
12501
+ Function to invoke: one in the script named by `_scriptId`, or one the code deployed on
12502
+ the stack named by `_stackId` exposes.
12496
12503
  examples:
12497
12504
  - transformRecords
12498
12505
  _scriptId:
12499
12506
  type: string
12500
12507
  format: objectId
12501
12508
  x-celigo-refModel: scripts
12502
- description: Script containing the hook function named in `function`.
12509
+ description: Script containing the hook function named in `function`. Send this or `_stackId`, not both.
12503
12510
  _stackId:
12504
12511
  type: string
12505
12512
  format: objectId
12506
12513
  x-celigo-refModel: stacks
12507
- description: Stack that hosts the hook logic, used instead of a script for stack-based deployments.
12514
+ description: |-
12515
+ Stack that hosts the hook logic, used instead of a script for stack-based deployments.
12516
+ The API doesn't enforce the either/or: a save carrying both `_scriptId` and `_stackId`
12517
+ answers 200 and stores both, and the script and the stack then each list the step as a
12518
+ dependent.
12519
+ x-celigo-ai-guidance:
12520
+ - When moving a hook onto a stack, remove `_scriptId` and set `function` to the stack's function in the same update.
12508
12521
  configuration:
12509
12522
  type:
12510
12523
  - object
@@ -547,6 +547,8 @@ paths:
547
547
  description: |-
548
548
  Returns every revision entry (snapshots, pulls, reverts) for the integration, newest first.
549
549
  An integration with no revision history returns an empty response (204), not `[]`.
550
+ x-celigo-ai-guidance:
551
+ - To roll back a pull, find its revision here (its diff shows what it changed) and have the user revert it in the integration's Revisions tab with **Revert to before this revision**. The API can't start a revert, and writing old values back to the resources by hand misses what the pull created or deleted and records no revert.
550
552
  parameters:
551
553
  - name: _id
552
554
  in: path
@@ -4698,8 +4700,8 @@ components:
4698
4700
  - pull
4699
4701
  - revert
4700
4702
  x-enumDescriptions:
4701
- snapshot: Point-in-time capture of the current integration state.
4702
- pull: Changes pulled in from a related integration in another environment or clone.
4703
+ snapshot: Point-in-time capture of the current integration state, taken when a user (or `POST /v1/integrations/{_id}/revisions/create`) asks for one.
4704
+ pull: Changes pulled in from a related integration in another environment or clone. The pull's own revision keeps the state from before and after the merge (`beforeRevisionHash`, `afterRevisionHash`); no separate snapshot revisions are written for it.
4703
4705
  revert: Restoration of the integration to a prior revision state.
4704
4706
  status:
4705
4707
  type: string
@@ -4724,7 +4726,11 @@ components:
4724
4726
  - Stable baseline before deploying v2
4725
4727
  beforeRevisionHash:
4726
4728
  type: string
4727
- description: Content hash of the integration state prior to this revision.
4729
+ description: |-
4730
+ Content hash of the integration state prior to this revision. On a `pull` it is the
4731
+ restore point that the Revisions tab's **Revert to before this revision** returns to:
4732
+ the revert names the pull in `_revertToRevisionId` and copies this hash into
4733
+ `revertToRevisionHash`.
4728
4734
  examples:
4729
4735
  - 34b7ae8d56563e242bc0bd42fd28874442657e58
4730
4736
  transactionHash:
package/dist/template.yml CHANGED
@@ -331,9 +331,20 @@ paths:
331
331
  Check `type` on the `GET /v1/templates/{_id}/preview` response first.
332
332
 
333
333
  This one-shot install doesn't run a template's own install steps. A
334
- template whose preview `Integration` object lists `installSteps` is
335
- refused with nothing created; install it from the integrator.io
336
- marketplace, whose installer runs those steps.
334
+ template whose preview `Integration` object lists a `template_zip`
335
+ install step (most published templates have one) is refused with 422
336
+ and nothing is created; install it from the integrator.io marketplace,
337
+ whose installer runs those steps.
338
+
339
+ Every request that reaches the platform starts a new install — there is
340
+ no idempotency key, so a retry after a timeout or an ambiguous failure
341
+ creates a second integration with its own flows, exports and imports.
342
+ Before retrying, look for the integration the first request created: one
343
+ carrying this template's `_templateId`, named like the preview's
344
+ `Integration` object, with a `createdAt` near the request.
345
+ x-celigo-ai-guidance:
346
+ - Read `GET /v1/templates/{_id}/preview` first. Every `Connection` object's `_id` must be a key of `connectionMap`, and an `installSteps` entry with `type` `template_zip` on the `Integration` object means this endpoint refuses the template — send the user to the marketplace installer instead.
347
+ - Never retry this POST after a timeout or an ambiguous failure without first listing integrations for one carrying this template's `_templateId`, created by the earlier request. If it exists, the install went through; a second request installs a duplicate.
337
348
  parameters:
338
349
  - name: _id
339
350
  in: path
@@ -446,8 +457,8 @@ paths:
446
457
  '422':
447
458
  description: |-
448
459
  Connection IDs in `connectionMap` do not match the template's
449
- expected connection IDs, or the template has its own install steps
450
- (a `template_zip` step this install doesn't run). Nothing is created.
460
+ expected connection IDs, or the template's install steps include a
461
+ `template_zip` step, which this install doesn't run. Nothing is created.
451
462
  content:
452
463
  application/json:
453
464
  schema:
package/dist/tool.yml CHANGED
@@ -1124,7 +1124,13 @@ paths:
1124
1124
  properties:
1125
1125
  connections:
1126
1126
  type: array
1127
- description: Connection bindings, one per connection the Tool's steps reference.
1127
+ description: |-
1128
+ Connection bindings, one per connection the Tool's steps reference. Name the
1129
+ connection to run with in `_id`: a binding with only `_abstractId`, or with
1130
+ the connection in `_connectionId` instead, is refused with 422 "Invalid
1131
+ override at overrides.connections[0]. Connection override must include at
1132
+ least one of: _id, _borrowConcurrencyFromConnectionId,
1133
+ requiresEndUserCredentials."
1128
1134
  items:
1129
1135
  type: object
1130
1136
  required:
@@ -1224,9 +1230,12 @@ paths:
1224
1230
  $ref: '#/components/responses/404-not-found'
1225
1231
  '422':
1226
1232
  description: |-
1227
- A step failed, or the Tool was refused before any step ran because its branches
1228
- don't all merge back (`tool_dangling_branch`). Either way the response includes
1229
- `invocationId` when logging is active, so the run can be opened in the run history.
1233
+ A step failed, or the Tool was refused before any step ran: a connection binding is
1234
+ missing (`connection_not_overridden`) or has no `_id`, or its branches don't all merge
1235
+ back (`tool_dangling_branch`). A failed step answers 422 even when it has
1236
+ `proceedOnFailure: true`: the later steps still run, but the response carries the error,
1237
+ not the output. Either way the response includes `invocationId` when logging is active,
1238
+ so the run can be opened in the run history.
1230
1239
  content:
1231
1240
  application/json:
1232
1241
  schema:
@@ -1256,6 +1265,11 @@ paths:
1256
1265
  code: connection_not_overridden
1257
1266
  message: 'Missing connection overrides. The following connection IDs must be overridden: 6ab1f5657b3d01a9084253a5.'
1258
1267
  invocationId: 6ab1f5877cd5cdd66da1cc8b
1268
+ binding_without_id:
1269
+ summary: A connection binding without `_id`
1270
+ value:
1271
+ errors:
1272
+ - message: 'Invalid override at overrides.connections[0]. Connection override must include at least one of: _id, _borrowConcurrencyFromConnectionId, requiresEndUserCredentials.'
1259
1273
  /v1/tools/{_id}/invocations:
1260
1274
  get:
1261
1275
  x-internal: false
@@ -2399,10 +2413,16 @@ paths:
2399
2413
  `GET /v1/tools/{_id}/test/run/{runId}/{_stepId}` to inspect stage-by-stage
2400
2414
  results. The run id for follow-up calls is the `flowJob._id` value.
2401
2415
 
2402
- A test run is not free of outside calls: lookups call their sources live. Imports never
2403
- send; each returns its saved `mockResponse`, or a placeholder response when none is saved
2404
- (see `mockResponse` on imports). A second test run started while one is still running is
2405
- refused with `test_run_not_allowed`.
2416
+ A test run is not free of outside calls: a lookup export with no saved `mockOutput` calls
2417
+ its source live, and the run then saves that response on the export as its `mockOutput`
2418
+ (the export's `lastModified` changes). Every later test run that uses the export, from any
2419
+ Tool or API and whatever its input, answers that lookup from the saved `mockOutput` instead
2420
+ of calling the source: the lookup's `request` stage shows the request rendered from the new
2421
+ input, and its `response` stage holds the saved records. Remove `mockOutput` from the export
2422
+ to call the source again. `POST /v1/tools/{_id}/invoke` neither reads nor writes it. Imports
2423
+ never send; each returns its saved `mockResponse`, or a placeholder response when none is
2424
+ saved (see `mockResponse` on imports). A second test run started while one is still running
2425
+ is refused with `test_run_not_allowed`.
2406
2426
 
2407
2427
  Test runs are a separate, short-lived history from normal runs — capture
2408
2428
  any follow-up step or log details soon after the run completes.
@@ -6373,10 +6393,9 @@ components:
6373
6393
  mockInput:
6374
6394
  type: object
6375
6395
  description: |
6376
- Mock data for testing the tool's input processing.
6377
-
6378
- Provides sample input to test transformation logic and routing
6379
- without requiring live data. Maximum size: 1MB.
6396
+ Sample input saved with the tool. `POST /v1/tools/{_id}/test/run` doesn't read it:
6397
+ send it as that call's `input`, or the run starts from an empty record. Maximum
6398
+ size: 1MB.
6380
6399
  additionalProperties: true
6381
6400
  Output:
6382
6401
  type: object
@@ -6720,16 +6739,19 @@ components:
6720
6739
  items: {}
6721
6740
  examples:
6722
6741
  - - equals
6723
- - - get
6724
- - customerType
6742
+ - - string
6743
+ - - extract
6744
+ - customerType
6725
6745
  - premium
6726
6746
  - - and
6727
- - - exists
6728
- - - get
6729
- - orderId
6730
- - - greaterThan
6731
- - - get
6732
- - amount
6747
+ - - notempty
6748
+ - - string
6749
+ - - extract
6750
+ - orderId
6751
+ - - greaterthan
6752
+ - - number
6753
+ - - extract
6754
+ - amount
6733
6755
  - 1000
6734
6756
  nextRouterId:
6735
6757
  type: string
@@ -6780,9 +6802,11 @@ components:
6780
6802
  - 60a2c4e6f321d800129a1a3c
6781
6803
  proceedOnFailure:
6782
6804
  type: boolean
6783
- description: |
6784
- Whether to continue processing subsequent steps if this
6785
- processor fails.
6805
+ description: |-
6806
+ When true, the later steps and the output stage still run after this
6807
+ processor fails; when false, they're skipped. Either way a direct
6808
+ `POST /v1/tools/{_id}/invoke` answers 422 with the failed step's error,
6809
+ without the output.
6786
6810
  setupInProgress:
6787
6811
  type: boolean
6788
6812
  description: |
@@ -23242,10 +23266,15 @@ components:
23242
23266
  type: boolean
23243
23267
  default: false
23244
23268
  description: |-
23245
- When true, detected PII is replaced with masked values.
23246
- When false, PII is flagged without modification.
23269
+ When true, the result also carries `masked`: the evaluated input with each detected
23270
+ value replaced by asterisks. The record itself is unchanged. With whole-record input
23271
+ (no `mapping`, and no top-level `text` field on the record), `masked` is the record
23272
+ serialized as one JSON string. When false, PII is flagged only.
23247
23273
  x-celigo-ai-guidance:
23248
- - Whether to mask detected PII values in the output.
23274
+ - |-
23275
+ Masking doesn't rewrite the record. To pass masked text on, select the field as the
23276
+ `text` input (`mapping`) and response-map `masked` back onto that field on the
23277
+ guardrail's flow step (`{"extract": "masked", "generate": "<field>"}`).
23249
23278
  moderation:
23250
23279
  type: object
23251
23280
  required:
@@ -23880,19 +23909,27 @@ components:
23880
23909
  properties:
23881
23910
  function:
23882
23911
  type: string
23883
- description: Function to invoke within the referenced script.
23912
+ description: |-
23913
+ Function to invoke: one in the script named by `_scriptId`, or one the code deployed on
23914
+ the stack named by `_stackId` exposes.
23884
23915
  examples:
23885
23916
  - transformRecords
23886
23917
  _scriptId:
23887
23918
  type: string
23888
23919
  format: objectId
23889
23920
  x-celigo-refModel: scripts
23890
- description: Script containing the hook function named in `function`.
23921
+ description: Script containing the hook function named in `function`. Send this or `_stackId`, not both.
23891
23922
  _stackId:
23892
23923
  type: string
23893
23924
  format: objectId
23894
23925
  x-celigo-refModel: stacks
23895
- description: Stack that hosts the hook logic, used instead of a script for stack-based deployments.
23926
+ description: |-
23927
+ Stack that hosts the hook logic, used instead of a script for stack-based deployments.
23928
+ The API doesn't enforce the either/or: a save carrying both `_scriptId` and `_stackId`
23929
+ answers 200 and stores both, and the script and the stack then each list the step as a
23930
+ dependent.
23931
+ x-celigo-ai-guidance:
23932
+ - When moving a hook onto a stack, remove `_scriptId` and set `function` to the stack's function in the same update.
23896
23933
  configuration:
23897
23934
  type:
23898
23935
  - object
package/dist/user.yml CHANGED
@@ -577,13 +577,14 @@ paths:
577
577
  - user2@example.com
578
578
  accessLevel: monitor
579
579
  integrationOnly:
580
- summary: Invite with per-integration access
580
+ summary: Invite with access to one integration only, MFA required
581
581
  value:
582
582
  emails:
583
583
  - contractor@example.com
584
584
  integrationAccessLevel:
585
585
  - _integrationId: 68f52162f00a35a1b26eaafb
586
586
  accessLevel: manage
587
+ accountMFARequired: true
587
588
  responses:
588
589
  '200':
589
590
  description: Array of results, one per email.
@@ -666,6 +667,11 @@ components:
666
667
  yourself — omit `accessLevel` and use `integrationAccessLevel` for integration-only access.
667
668
  x-celigo-ai-guidance:
668
669
  - Choose the `accessLevel` value based on what the user should be able to do across the account.
670
+ - |-
671
+ For access to specific integrations only, omit `accessLevel` entirely. Any account-wide
672
+ value, `monitor` included, covers every integration in the account, including ones
673
+ created later, so pairing it with `integrationAccessLevel` widens access rather than
674
+ limiting it.
669
675
  - |-
670
676
  On PUT, "omit" means "clear" for integrationAccessLevel and accountMFARequired — GET the
671
677
  record first and resend both with the new accessLevel. accountSSORequired keeps its stored
@@ -731,6 +737,7 @@ components:
731
737
  omitted on update — resend it with every `PUT /v1/ashares/{_id}`.
732
738
  x-celigo-ai-guidance:
733
739
  - Whether the invited user must use MFA to access this account.
740
+ - The invite body takes it too, so require MFA in the invite itself rather than with a follow-up update, which must resend `integrationAccessLevel` and this flag or clears them.
734
741
  allowAccessToAPIM:
735
742
  type: boolean
736
743
  description: When true, the user can access API Management (APIM) features for this account.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@celigo/api-specs",
3
- "version": "0.2.149",
3
+ "version": "0.2.150",
4
4
  "private": false,
5
5
  "description": "Public OpenAPI bundles (dist/) and the celigo-cli lint schema pack (schemas.json).",
6
6
  "keywords": [
package/schemas.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "provenance": {
3
3
  "repo": "celigo/integrator-api-specs",
4
- "iasCommit": "4808eca1",
4
+ "iasCommit": "4f24ed04",
5
5
  "generatedAt": "2026-10-21"
6
6
  },
7
7
  "roots": {
@@ -1563,11 +1563,13 @@
1563
1563
  "object"
1564
1564
  ],
1565
1565
  "p": {
1566
+ "_json": 10,
1566
1567
  "dataURI": 1,
1567
1568
  "errors": 132,
1568
1569
  "flagged": 9,
1569
1570
  "ignored": 9,
1570
1571
  "masked": 1,
1572
+ "reasoning": 1,
1571
1573
  "statusCode": 124
1572
1574
  }
1573
1575
  },