@celigo/api-specs 0.2.148 → 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:
package/dist/export.yml CHANGED
@@ -16405,8 +16405,11 @@ components:
16405
16405
  filter, before the page is sent to downstream steps; commonly used to flatten
16406
16406
  structures, drop unwanted records, or add computed fields. It receives the page as
16407
16407
  `options.data` (with `errors`, `pageIndex`, `configuration` and `settings`) and returns
16408
- `{data, errors, abort, newErrorsAndRetryData}`. An exception thrown here fails every
16409
- record on that page, each with its own retry data, and later pages still run.
16408
+ `{data, errors, abort, newErrorsAndRetryData}`. Return that object, not the array: a
16409
+ hook that returns `options.data` itself, or a filtered copy, drops the page without an
16410
+ error, and the run completes with 0 records, 0 errors and 0 pages. An exception thrown
16411
+ here fails every record on that page, each with its own retry data, and later pages
16412
+ still run.
16410
16413
  properties:
16411
16414
  function:
16412
16415
  type: string
@@ -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
package/dist/flow.yml CHANGED
@@ -4226,7 +4226,10 @@ components:
4226
4226
  type: string
4227
4227
  description: |-
4228
4228
  Cron expression for this specific generator, overriding the flow's main schedule.
4229
- When omitted, the generator inherits the flow's schedule.
4229
+ When omitted, the generator inherits the flow's schedule. It is read in the flow's
4230
+ `timezone`, and a flow with no flow-level `schedule` still runs on it. PATCH reaches
4231
+ the flow-level `/schedule` and `/timezone` but not this field, so changing it is a full
4232
+ update of the flow.
4230
4233
  examples:
4231
4234
  - '? 5 0,6,12,18 ? * *'
4232
4235
  - '? 30 2 ? * *'
@@ -4236,6 +4239,10 @@ components:
4236
4239
  - Overrides the flow's main schedule for this generator
4237
4240
  - Allows different data sources to refresh at different intervals
4238
4241
  - Useful for sources with varying update frequencies
4242
+ - |-
4243
+ Check for one before rescheduling a flow: a flow-level `schedule` change succeeds
4244
+ but leaves a generator that has its own `schedule` running at its old times. Change
4245
+ the generator's `schedule` instead, with a PUT of the whole flow.
4239
4246
  skipRetries:
4240
4247
  type: boolean
4241
4248
  default: false
@@ -4650,7 +4657,16 @@ components:
4650
4657
  Filter criteria that determines which records match this branch.
4651
4658
 
4652
4659
  Only used when the router's `routeRecordsUsing` is `input_filters`.
4653
- Records matching these criteria will be routed to this branch.
4660
+ Records matching these criteria will be routed to this branch. A branch
4661
+ without an `inputFilter` matches every record, so under
4662
+ `first_matching_branch` the catch-all branch goes last.
4663
+
4664
+ Send `version` and `rules` directly on `inputFilter` — not inside the
4665
+ `{type: "expression", expression: {...}}` wrapper that export and import
4666
+ filters use. A wrapped filter is saved without an error, but the branch is
4667
+ stored with no `inputFilter` and takes every record.
4668
+ x-celigo-ai-guidance:
4669
+ - Read the flow back after saving a branching router and check that each filtered branch still has its `inputFilter`; a filter sent in the export-filter wrapper is dropped on save without an error.
4654
4670
  properties:
4655
4671
  version:
4656
4672
  type: string
@@ -4679,6 +4695,11 @@ components:
4679
4695
  logical operators (`and`, `or`, `not`), field access (`extract`, `settings`)
4680
4696
  and type conversions (`string`, `number`, `boolean`, `epochtime`).
4681
4697
 
4698
+ Every `extract` must be wrapped in a type conversion. A bare
4699
+ `["extract", "<field>"]` is refused when the flow is saved, with 422 "Field
4700
+ operation extract must be called by a Type Conversion Operation but was called
4701
+ by equals." (the message names the operator that held it).
4702
+
4682
4703
  Example — route records whose `isDeleted` field is the string "false":
4683
4704
  ```json
4684
4705
  ["equals", ["string", ["extract", "isDeleted"]], "false"]
@@ -4782,7 +4803,7 @@ components:
4782
4803
  examples:
4783
4804
  - first_matching_branch
4784
4805
  x-celigo-ai-guidance:
4785
- - Set this and `routeRecordsUsing` together on every router that decides between branches; setting only one of the two is rejected with 422 `invalid_flow_router_config`.
4806
+ - Set this and `routeRecordsUsing` together on every router that decides between branches; setting only one of the two is rejected with 422 `invalid_flow_router_config` ("Either both the routeRecordsTo and routeRecordsUsing fields or none of them should be defined on the router.").
4786
4807
  - Leave both unset on a one-branch pass-through router (the steps before the first branching router, or a merge point). Setting them there still runs, but Flow Builder shows a router node with one branch and no rules. A router with neither field and more than one branch is rejected with 422 `invalid_flow_router_branch`.
4787
4808
  routeRecordsUsing:
4788
4809
  type: string
@@ -5432,7 +5453,9 @@ components:
5432
5453
  Writable flow fields shared by the request and response schemas.
5433
5454
 
5434
5455
  Use `pageProcessors` for simple linear flows or `routers` for conditional branching — never
5435
- include both: a flow with both arrays non-empty is rejected with 422 `invalid_branched_flow_config`.
5456
+ include both: a flow with both arrays non-empty is rejected with 422 `invalid_branched_flow_config`
5457
+ ("Either routers or pageProcessors should be present in the flow configuration and not both.").
5458
+ Turning a linear flow into a branching one moves its top-level steps into the branches.
5436
5459
  The same import can be a step only once per flow: a second `pageProcessors` entry with its
5437
5460
  `_importId`, in the same array or another branch, fails with 422 `invalid_flow` ("… already
5438
5461
  included as a pageProcessor"). The `schedule` field uses Celigo's 6-field cron format (not
@@ -5491,7 +5514,15 @@ components:
5491
5514
  Build `schedule` as a Celigo 6-field cron:
5492
5515
  `? minute hour day-of-month month day-of-week`.
5493
5516
  The seconds field is always `?`; day-of-month is usually `?`, month `*`,
5494
- and day-of-week `*` (or specific days, 0=Sun..6=Sat).
5517
+ and day-of-week `*` (or specific days, 0=Sun..6=Sat — weekdays are `1-5`,
5518
+ `1,2,3,4,5` or `MON-FRI`; `2-6` is Tuesday to Saturday).
5519
+ - |-
5520
+ The hours are read in the flow's `timezone`. Keep a user's local times as
5521
+ they are and set their IANA zone; never convert them to UTC, which is an hour
5522
+ off for half the year in a zone with daylight saving and shifts them twice
5523
+ when paired with the local `timezone`. Before changing when a flow runs, read
5524
+ `pageGenerators[]`: a generator with its own `schedule` keeps it after a
5525
+ flow-level change.
5495
5526
  - |-
5496
5527
  Disabling a flow does not bypass schedule validation: POST, PUT, and PATCH
5497
5528
  all reject free text or a sub-minute expression (`not a cron`, `* * * * * *`)
@@ -5526,7 +5557,10 @@ components:
5526
5557
  type:
5527
5558
  - string
5528
5559
  - 'null'
5529
- description: IANA timezone for the schedule (e.g. `America/New_York`). Defaults to UTC.
5560
+ description: |-
5561
+ IANA timezone for the schedule (e.g. `America/New_York`). Defaults to UTC. The flow's
5562
+ `schedule` and each page generator's own `schedule` are read in this timezone; a page
5563
+ generator has no timezone of its own.
5530
5564
  examples:
5531
5565
  - America/New_York
5532
5566
  - Europe/London
@@ -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
@@ -16408,7 +16421,11 @@ components:
16408
16421
  - script
16409
16422
  description: |-
16410
16423
  Hook that runs on each page of records before the import's mappings are applied.
16411
- Commonly used to reshape or filter records ahead of mapping.
16424
+ Commonly used to reshape or filter records ahead of mapping. Its changes shape only
16425
+ the request this import sends: the next step receives the record as it arrived here,
16426
+ plus whatever this step's response mapping merges back. A value later steps need
16427
+ belongs in the source export's `preSavePage`, in this step's `postResponseMap` hook on
16428
+ the flow, or in the later import's own `preMap`.
16412
16429
  x-celigo-ai-guidance:
16413
16430
  - |-
16414
16431
  Pre-map JavaScript hook — runs once per page BEFORE the
@@ -16430,7 +16447,8 @@ components:
16430
16447
  description: |-
16431
16448
  Hook that runs after the import's mappings are applied but before records are sent
16432
16449
  to the destination system. Commonly used for adjustments that need the mapped
16433
- (destination-shaped) record.
16450
+ (destination-shaped) record. Like `preMap`, its changes shape only the request this
16451
+ import sends; the next step never sees them.
16434
16452
  x-celigo-ai-guidance:
16435
16453
  - |-
16436
16454
  Post-map JavaScript hook — runs once per page AFTER the
@@ -16453,7 +16471,11 @@ components:
16453
16471
  description: |-
16454
16472
  Hook that runs after the destination system responds, with access to both the
16455
16473
  submitted records and the destination's responses. Commonly used to inspect results
16456
- or adjust the response data passed downstream.
16474
+ or adjust the response data passed downstream. Each `options.responseData` entry is
16475
+ one submitted record's result, in order: `statusCode`, `errors` (`{code, message,
16476
+ source}`, empty on success), `ignored`, `id`, and `_json` — the destination's parsed
16477
+ response body, where its own error detail sits (`_headers` holds the response
16478
+ headers).
16457
16479
  x-celigo-ai-guidance:
16458
16480
  - |-
16459
16481
  Post-submit JavaScript hook — runs AFTER each batch of
@@ -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
@@ -25289,7 +25326,11 @@ components:
25289
25326
  - script
25290
25327
  description: |-
25291
25328
  Hook that runs on each page of records before the import's mappings are applied.
25292
- Commonly used to reshape or filter records ahead of mapping.
25329
+ Commonly used to reshape or filter records ahead of mapping. Its changes shape only
25330
+ the request this import sends: the next step receives the record as it arrived here,
25331
+ plus whatever this step's response mapping merges back. A value later steps need
25332
+ belongs in the source export's `preSavePage`, in this step's `postResponseMap` hook on
25333
+ the flow, or in the later import's own `preMap`.
25293
25334
  x-celigo-ai-guidance:
25294
25335
  - |-
25295
25336
  Pre-map JavaScript hook — runs once per page BEFORE the
@@ -25311,7 +25352,8 @@ components:
25311
25352
  description: |-
25312
25353
  Hook that runs after the import's mappings are applied but before records are sent
25313
25354
  to the destination system. Commonly used for adjustments that need the mapped
25314
- (destination-shaped) record.
25355
+ (destination-shaped) record. Like `preMap`, its changes shape only the request this
25356
+ import sends; the next step never sees them.
25315
25357
  x-celigo-ai-guidance:
25316
25358
  - |-
25317
25359
  Post-map JavaScript hook — runs once per page AFTER the
@@ -25334,7 +25376,11 @@ components:
25334
25376
  description: |-
25335
25377
  Hook that runs after the destination system responds, with access to both the
25336
25378
  submitted records and the destination's responses. Commonly used to inspect results
25337
- or adjust the response data passed downstream.
25379
+ or adjust the response data passed downstream. Each `options.responseData` entry is
25380
+ one submitted record's result, in order: `statusCode`, `errors` (`{code, message,
25381
+ source}`, empty on success), `ignored`, `id`, and `_json` — the destination's parsed
25382
+ response body, where its own error detail sits (`_headers` holds the response
25383
+ headers).
25338
25384
  x-celigo-ai-guidance:
25339
25385
  - |-
25340
25386
  Post-submit JavaScript hook — runs AFTER each batch of
@@ -37412,8 +37458,11 @@ components:
37412
37458
  filter, before the page is sent to downstream steps; commonly used to flatten
37413
37459
  structures, drop unwanted records, or add computed fields. It receives the page as
37414
37460
  `options.data` (with `errors`, `pageIndex`, `configuration` and `settings`) and returns
37415
- `{data, errors, abort, newErrorsAndRetryData}`. An exception thrown here fails every
37416
- record on that page, each with its own retry data, and later pages still run.
37461
+ `{data, errors, abort, newErrorsAndRetryData}`. Return that object, not the array: a
37462
+ hook that returns `options.data` itself, or a filtered copy, drops the page without an
37463
+ error, and the run completes with 0 records, 0 errors and 0 pages. An exception thrown
37464
+ here fails every record on that page, each with its own retry data, and later pages
37465
+ still run.
37417
37466
  properties:
37418
37467
  function:
37419
37468
  type: string
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.148",
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": "c5f16e90",
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
  },