@celigo/api-specs 0.2.113 → 0.2.115

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/api.yml CHANGED
@@ -6470,6 +6470,7 @@ components:
6470
6470
  but a decimal is rejected with 422 `invalid_field_value` on every write (the same rule applies to every
6471
6471
  adaptor's `concurrencyLevel` and `targetConcurrencyLevel`, and to `ftp.multiThreadCount`).
6472
6472
  Platform-managed while `autoRecoverRateLimitErrors` is true — a PUT ignores the value and the recovery machinery moves it toward the target; set `targetConcurrencyLevel` instead.
6473
+ At level 1 an import's pages run one at a time, so a record's existence lookup and write finish before the next record's start (measured on a single import); the import's `idLockTemplate` serializes only same-key records and leaves the rest parallel.
6473
6474
  minimum: 1
6474
6475
  maximum: 50
6475
6476
  default: 25
@@ -5581,6 +5581,7 @@ components:
5581
5581
  but a decimal is rejected with 422 `invalid_field_value` on every write (the same rule applies to every
5582
5582
  adaptor's `concurrencyLevel` and `targetConcurrencyLevel`, and to `ftp.multiThreadCount`).
5583
5583
  Platform-managed while `autoRecoverRateLimitErrors` is true — a PUT ignores the value and the recovery machinery moves it toward the target; set `targetConcurrencyLevel` instead.
5584
+ At level 1 an import's pages run one at a time, so a record's existence lookup and write finish before the next record's start (measured on a single import); the import's `idLockTemplate` serializes only same-key records and leaves the rest parallel.
5584
5585
  minimum: 1
5585
5586
  maximum: 50
5586
5587
  default: 25
package/dist/enduser.yml CHANGED
@@ -3682,6 +3682,7 @@ components:
3682
3682
  but a decimal is rejected with 422 `invalid_field_value` on every write (the same rule applies to every
3683
3683
  adaptor's `concurrencyLevel` and `targetConcurrencyLevel`, and to `ftp.multiThreadCount`).
3684
3684
  Platform-managed while `autoRecoverRateLimitErrors` is true — a PUT ignores the value and the recovery machinery moves it toward the target; set `targetConcurrencyLevel` instead.
3685
+ At level 1 an import's pages run one at a time, so a record's existence lookup and write finish before the next record's start (measured on a single import); the import's `idLockTemplate` serializes only same-key records and leaves the rest parallel.
3685
3686
  minimum: 1
3686
3687
  maximum: 50
3687
3688
  default: 25
package/dist/export.yml CHANGED
@@ -2074,6 +2074,7 @@ components:
2074
2074
  x-celigo-ai-guidance:
2075
2075
  - 'Set this only when the records sit inside an object (`{"data": {"items": [...]}}` → `data.items`). A sender that already posts a top-level array needs nothing here; a sender that posts an object with no path configured delivers exactly one record per request — the whole object — which is also the way to make one request one record on purpose.'
2076
2076
  - 'Records are paged per request at the export''s `pageSize` (default 20) before any hook, filter, or downstream step runs: a 25-element array is a page of 20 records followed by a page of 5, and a `preSavePage` hook receives one page (up to `pageSize` records) per call. A hook that groups rows by order therefore groups only the rows on the same page — an order whose rows span two pages comes out as two grouped records, the second after the first was already processed. To keep a request''s rows together, have the sender wrap them in an object (one record, rows under `record.<path>`) or raise `pageSize` above the largest request — never `groupByFields`, which the listener applies per page after paging.'
2077
+ - 'Requests that arrive together, or while the listener''s current run is still collecting, become additional pages of that same run; a request that arrives after the run has stopped collecting starts a new run. Nothing on the listener de-duplicates: a sender that fires the same event twice (a retry, a button clicked twice) delivers two records, and the step that writes the effect has to be made idempotent — `ignoreExisting` or a keyed upsert under the import''s `idLockTemplate`.'
2077
2078
  examples:
2078
2079
  - events
2079
2080
  - data.items
@@ -16060,9 +16061,25 @@ components:
16060
16061
  Handlebars template that overrides how each record's unique trace key is generated, used
16061
16062
  to track records through the flow and match retries to prior errors (e.g.
16062
16063
  `{{join "_" record.customerId record.orderId}}`). When omitted, the system picks a unique
16063
- field automatically. If a transform reshapes the data first, omit the `record.` prefix.
16064
- Trace keys are capped at 256 characters; a longer key is stored truncated from the middle,
16065
- keeping the beginning and end of the value.
16064
+ field automatically from the record's top level, by exact field name (`GET
16065
+ /v1/flows/{_id}/traceKey` serves the pattern). The rendered value of a template is stamped
16066
+ on each record as `io_custom_trace_key` and travels downstream with it. If a transform
16067
+ reshapes the data first, omit the `record.` prefix. Trace keys are capped at 256 characters;
16068
+ a longer key is stored truncated from the middle, keeping the beginning and end of the
16069
+ value. Downstream imports use the trace key as their default concurrency lock key (a blank
16070
+ key means no lock); it never de-duplicates — a record emitted twice with the same key is
16071
+ processed twice.
16072
+ x-celigo-ai-guidance:
16073
+ - |-
16074
+ The default derivation reads these top-level fields in order and takes the first present
16075
+ (a record carrying `id` and `internalId` is keyed on `id` alone) — `id`, `Id`, `ID`,
16076
+ `internalid`, `Internalid`, `internalId`, `InternalId`, `INTERNALID`, `_id`, `_Id`, `_ID`,
16077
+ `internal_id`, `internal_Id`, `Internal_id`, `Internal_Id`, `INTERNAL_ID`, `identifier`,
16078
+ `IDENTIFIER` — then a `*anything` rule the platform does not document.
16079
+ - |-
16080
+ A record in flight through the flow carries `io_custom_trace_key` when a template is set
16081
+ — that value is the downstream imports' default lock key; without a template the record
16082
+ carries no trace-key field (the key is derived, not stored on the record).
16066
16083
  examples:
16067
16084
  - '{{record.id}}'
16068
16085
  - '{{join "_" record.customerId record.orderId}}'
package/dist/flow.yml CHANGED
@@ -835,8 +835,10 @@ paths:
835
835
  To trace a run end-to-end, arm debug logging before calling this, then use the returned
836
836
  `_jobId` with the execution-log endpoints. For delta backfills, prefer passing explicit
837
837
  `startDate`/`endDate` over editing the export's `lastExportDateTime` — the override is
838
- scoped to one run. A 200 with `_jobId` absent means the request was accepted but no job
839
- was queued, usually because another run is already in progress.
838
+ scoped to one run. A flow runs one instance at a time: a run requested while another
839
+ instance is queued or running is refused with `409 job_already_queued` ("Another instance
840
+ for this flow is already queued or running"), and a run-next-flow trigger that arrives in
841
+ that state is dropped rather than queued.
840
842
  parameters:
841
843
  - name: _id
842
844
  in: path
@@ -890,6 +892,20 @@ paths:
890
892
  $ref: '#/components/responses/401-unauthorized'
891
893
  '404':
892
894
  $ref: '#/components/responses/404-not-found'
895
+ '409':
896
+ description: |-
897
+ Another instance of this flow is already queued or running. Wait for it to
898
+ finish (poll `GET /v1/flows/{_id}/jobs/latest`) and request the run again.
899
+ content:
900
+ application/json:
901
+ schema:
902
+ $ref: '#/components/schemas/Error'
903
+ examples:
904
+ default:
905
+ value:
906
+ errors:
907
+ - code: job_already_queued
908
+ message: Another instance for this flow is already queued or running. Please try again later.
893
909
  '422':
894
910
  $ref: '#/components/responses/422-unprocessable-entity'
895
911
  /v1/flows/{_flowId}/runs/stats:
@@ -5531,7 +5547,9 @@ components:
5531
5547
  description: |-
5532
5548
  Flow IDs to trigger after this flow completes successfully. Accepts null as
5533
5549
  equivalent to an empty list (the server also serves null on documents saved
5534
- that way).
5550
+ that way). The trigger starts the next flow from its own source steps and passes
5551
+ it no records; a trigger that fires while the next flow is already queued or running
5552
+ is dropped, not queued, so several completions in quick succession start it once.
5535
5553
  items:
5536
5554
  type: string
5537
5555
  format: objectId
package/dist/import.yml CHANGED
@@ -5639,12 +5639,20 @@ components:
5639
5639
  type:
5640
5640
  - string
5641
5641
  - 'null'
5642
- description: Name of the lookup used to determine which records to ignore when ignore-existing is enabled.
5642
+ description: |-
5643
+ Name of an entry in `lookups` that probes the database per record to decide whether it
5644
+ already exists, so `ignoreExisting` can skip it (or `ignoreMissing` can skip records with
5645
+ no match). Use it when existence must be read from the database; use `ignoreExtract` when
5646
+ the incoming record already carries the field that signals existence.
5643
5647
  ignoreExtract:
5644
5648
  type:
5645
5649
  - string
5646
5650
  - 'null'
5647
- description: Path used to extract the value that determines whether a record is ignored when ignore-existing is enabled.
5651
+ description: |-
5652
+ Path to a field on the incoming record whose presence decides the skip: with
5653
+ `ignoreExisting`, a populated value marks the record as existing and it is skipped; with
5654
+ `ignoreMissing`, an empty value marks it as missing and it is skipped. Zero per-record
5655
+ overhead; set exactly one of `ignoreExtract` / `ignoreLookupName`.
5648
5656
  if:
5649
5657
  not:
5650
5658
  propertyNames:
@@ -15925,17 +15933,49 @@ components:
15925
15933
  type: boolean
15926
15934
  description: |-
15927
15935
  When true, records that do not already exist in the destination system are silently
15928
- skipped instead of producing errors — used for update-only operations.
15936
+ skipped instead of producing errors — used for update-only operations. Existing records
15937
+ are identified the same way as for `ignoreExisting`: the adaptor's ignore lookup
15938
+ (`ignoreLookupName`) or a populated `ignoreExtract` field on the incoming record.
15929
15939
  idLockTemplate:
15930
15940
  type:
15931
15941
  - string
15932
15942
  - 'null'
15933
15943
  description: |-
15934
- Handlebars template that generates a lock key for each record so records resolving to
15935
- the same key are not submitted concurrently, preventing duplicate or conflicting writes
15936
- to the same target record.
15944
+ Handlebars template that generates a concurrency lock key for each record: records that
15945
+ render the same key are never submitted at the same time, while records with different
15946
+ keys are processed in parallel. When omitted, the record's trace key is the lock key (a
15947
+ blank trace key means no lock; a custom `traceKeyTemplate` upstream arrives on the record
15948
+ as `io_custom_trace_key`); a template replaces that default rather than adding to it.
15949
+ The template is rendered from the record as it arrives at the import — before the import's
15950
+ own lookups and mapping run — so a key built from one of the import's lookup results
15951
+ (`{{lookup.<name>}}`) or from a mapped field renders empty, and an empty key is no lock at
15952
+ all; a field added upstream by a lookup step's response mapping is on the record and works.
15953
+ x-celigo-ai-guidance:
15954
+ - |-
15955
+ The lock is scoped to this import resource across every page and every concurrent run
15956
+ that submits through it — including other flows sharing the import — not to one page,
15957
+ and not to the connection: two different imports rendering the same key on the same
15958
+ connection still run in parallel. Records within a single page are
15959
+ sent one at a time regardless, so the lock matters when same-key records sit in different
15960
+ pages or runs.
15961
+ - |-
15962
+ With `ignoreExisting` and an ignore lookup, the existence lookup runs inside the lock:
15963
+ lookup-then-write for one key does not interleave with another record's lookup-then-write
15964
+ for the same key. That pairing is the duplicate-prevention pattern for destinations that
15965
+ can be queried but do not reject duplicates — key the lock on the business identifier the
15966
+ write is keyed on. With the check but no lock, concurrent same-key pages all read a miss
15967
+ before any write lands and all create. Connection `concurrencyLevel: 1` also closes that
15968
+ race for the import (measured on a single import: its pages ran one at a time and the
15969
+ same-key pages created once) — the lock is the per-key tool that leaves unrelated records
15970
+ parallel.
15971
+ - |-
15972
+ Key it on a field the record carries when it reaches this import (`{{{record.externalId}}}-GR`,
15973
+ or a field an upstream lookup step added through its response mapping), never on one of
15974
+ this import's own lookup results; the key must render non-empty for the records that
15975
+ matter, or those records have no lock.
15937
15976
  examples:
15938
15977
  - '{{record.customerId}}'
15978
+ - '{{{record.externalId}}}-GR'
15939
15979
  dataURITemplate:
15940
15980
  type:
15941
15981
  - string
@@ -16055,7 +16095,9 @@ components:
16055
16095
  Handlebars template that overrides how each record's unique trace key is generated,
16056
16096
  used to track records through the flow and match errors to records. Trace keys are
16057
16097
  capped at 256 characters; a longer key is stored truncated from the middle, keeping
16058
- the beginning and end of the value.
16098
+ the beginning and end of the value. The trace key is also the import's default
16099
+ concurrency lock key when `idLockTemplate` is not set; it never de-duplicates — a record
16100
+ that arrives twice with the same key is processed twice.
16059
16101
  x-celigo-ai-guidance:
16060
16102
  - |-
16061
16103
  ## CRITICAL: ONLY VALID WHEN ``oneToMany: true``
@@ -410,7 +410,12 @@ paths:
410
410
  summary: Upsert entries into a lookup cache
411
411
  description: |-
412
412
  Writes key-value entries to a lookup cache. Keys that already exist are
413
- overwritten; new keys are created. Values may be null, numbers, booleans,
413
+ overwritten; new keys are created. There is no insert-only, create-if-absent or
414
+ compare-and-set mode — a write never fails because the key exists, so a
415
+ "first writer wins" claim cannot be built on this call alone: make the claim
416
+ on the flow's import step instead (`ignoreExisting` with a `getData` lookup on
417
+ the key, under `idLockTemplate` on the same key), which serializes
418
+ read-then-write per key. Values may be null, numbers, booleans,
414
419
  strings, or objects — arrays at the top level are rejected (wrap them in an
415
420
  object). One invalid entry fails the entire batch and nothing in it is written:
416
421
  a bad value returns `400 invalid_value`, and an empty, missing, or over-length
@@ -5507,6 +5507,7 @@ components:
5507
5507
  but a decimal is rejected with 422 `invalid_field_value` on every write (the same rule applies to every
5508
5508
  adaptor's `concurrencyLevel` and `targetConcurrencyLevel`, and to `ftp.multiThreadCount`).
5509
5509
  Platform-managed while `autoRecoverRateLimitErrors` is true — a PUT ignores the value and the recovery machinery moves it toward the target; set `targetConcurrencyLevel` instead.
5510
+ At level 1 an import's pages run one at a time, so a record's existence lookup and write finish before the next record's start (measured on a single import); the import's `idLockTemplate` serializes only same-key records and leaves the rest parallel.
5510
5511
  minimum: 1
5511
5512
  maximum: 50
5512
5513
  default: 25
package/dist/tool.yml CHANGED
@@ -8836,6 +8836,7 @@ components:
8836
8836
  but a decimal is rejected with 422 `invalid_field_value` on every write (the same rule applies to every
8837
8837
  adaptor's `concurrencyLevel` and `targetConcurrencyLevel`, and to `ftp.multiThreadCount`).
8838
8838
  Platform-managed while `autoRecoverRateLimitErrors` is true — a PUT ignores the value and the recovery machinery moves it toward the target; set `targetConcurrencyLevel` instead.
8839
+ At level 1 an import's pages run one at a time, so a record's existence lookup and write finish before the next record's start (measured on a single import); the import's `idLockTemplate` serializes only same-key records and leaves the rest parallel.
8839
8840
  minimum: 1
8840
8841
  maximum: 50
8841
8842
  default: 25
@@ -16949,12 +16950,20 @@ components:
16949
16950
  type:
16950
16951
  - string
16951
16952
  - 'null'
16952
- description: Name of the lookup used to determine which records to ignore when ignore-existing is enabled.
16953
+ description: |-
16954
+ Name of an entry in `lookups` that probes the database per record to decide whether it
16955
+ already exists, so `ignoreExisting` can skip it (or `ignoreMissing` can skip records with
16956
+ no match). Use it when existence must be read from the database; use `ignoreExtract` when
16957
+ the incoming record already carries the field that signals existence.
16953
16958
  ignoreExtract:
16954
16959
  type:
16955
16960
  - string
16956
16961
  - 'null'
16957
- description: Path used to extract the value that determines whether a record is ignored when ignore-existing is enabled.
16962
+ description: |-
16963
+ Path to a field on the incoming record whose presence decides the skip: with
16964
+ `ignoreExisting`, a populated value marks the record as existing and it is skipped; with
16965
+ `ignoreMissing`, an empty value marks it as missing and it is skipped. Zero per-record
16966
+ overhead; set exactly one of `ignoreExtract` / `ignoreLookupName`.
16958
16967
  if:
16959
16968
  not:
16960
16969
  propertyNames:
@@ -24792,17 +24801,49 @@ components:
24792
24801
  type: boolean
24793
24802
  description: |-
24794
24803
  When true, records that do not already exist in the destination system are silently
24795
- skipped instead of producing errors — used for update-only operations.
24804
+ skipped instead of producing errors — used for update-only operations. Existing records
24805
+ are identified the same way as for `ignoreExisting`: the adaptor's ignore lookup
24806
+ (`ignoreLookupName`) or a populated `ignoreExtract` field on the incoming record.
24796
24807
  idLockTemplate:
24797
24808
  type:
24798
24809
  - string
24799
24810
  - 'null'
24800
24811
  description: |-
24801
- Handlebars template that generates a lock key for each record so records resolving to
24802
- the same key are not submitted concurrently, preventing duplicate or conflicting writes
24803
- to the same target record.
24812
+ Handlebars template that generates a concurrency lock key for each record: records that
24813
+ render the same key are never submitted at the same time, while records with different
24814
+ keys are processed in parallel. When omitted, the record's trace key is the lock key (a
24815
+ blank trace key means no lock; a custom `traceKeyTemplate` upstream arrives on the record
24816
+ as `io_custom_trace_key`); a template replaces that default rather than adding to it.
24817
+ The template is rendered from the record as it arrives at the import — before the import's
24818
+ own lookups and mapping run — so a key built from one of the import's lookup results
24819
+ (`{{lookup.<name>}}`) or from a mapped field renders empty, and an empty key is no lock at
24820
+ all; a field added upstream by a lookup step's response mapping is on the record and works.
24821
+ x-celigo-ai-guidance:
24822
+ - |-
24823
+ The lock is scoped to this import resource across every page and every concurrent run
24824
+ that submits through it — including other flows sharing the import — not to one page,
24825
+ and not to the connection: two different imports rendering the same key on the same
24826
+ connection still run in parallel. Records within a single page are
24827
+ sent one at a time regardless, so the lock matters when same-key records sit in different
24828
+ pages or runs.
24829
+ - |-
24830
+ With `ignoreExisting` and an ignore lookup, the existence lookup runs inside the lock:
24831
+ lookup-then-write for one key does not interleave with another record's lookup-then-write
24832
+ for the same key. That pairing is the duplicate-prevention pattern for destinations that
24833
+ can be queried but do not reject duplicates — key the lock on the business identifier the
24834
+ write is keyed on. With the check but no lock, concurrent same-key pages all read a miss
24835
+ before any write lands and all create. Connection `concurrencyLevel: 1` also closes that
24836
+ race for the import (measured on a single import: its pages ran one at a time and the
24837
+ same-key pages created once) — the lock is the per-key tool that leaves unrelated records
24838
+ parallel.
24839
+ - |-
24840
+ Key it on a field the record carries when it reaches this import (`{{{record.externalId}}}-GR`,
24841
+ or a field an upstream lookup step added through its response mapping), never on one of
24842
+ this import's own lookup results; the key must render non-empty for the records that
24843
+ matter, or those records have no lock.
24804
24844
  examples:
24805
24845
  - '{{record.customerId}}'
24846
+ - '{{{record.externalId}}}-GR'
24806
24847
  dataURITemplate:
24807
24848
  type:
24808
24849
  - string
@@ -24922,7 +24963,9 @@ components:
24922
24963
  Handlebars template that overrides how each record's unique trace key is generated,
24923
24964
  used to track records through the flow and match errors to records. Trace keys are
24924
24965
  capped at 256 characters; a longer key is stored truncated from the middle, keeping
24925
- the beginning and end of the value.
24966
+ the beginning and end of the value. The trace key is also the import's default
24967
+ concurrency lock key when `idLockTemplate` is not set; it never de-duplicates — a record
24968
+ that arrives twice with the same key is processed twice.
24926
24969
  x-celigo-ai-guidance:
24927
24970
  - |-
24928
24971
  ## CRITICAL: ONLY VALID WHEN ``oneToMany: true``
@@ -26682,6 +26725,7 @@ components:
26682
26725
  x-celigo-ai-guidance:
26683
26726
  - 'Set this only when the records sit inside an object (`{"data": {"items": [...]}}` → `data.items`). A sender that already posts a top-level array needs nothing here; a sender that posts an object with no path configured delivers exactly one record per request — the whole object — which is also the way to make one request one record on purpose.'
26684
26727
  - 'Records are paged per request at the export''s `pageSize` (default 20) before any hook, filter, or downstream step runs: a 25-element array is a page of 20 records followed by a page of 5, and a `preSavePage` hook receives one page (up to `pageSize` records) per call. A hook that groups rows by order therefore groups only the rows on the same page — an order whose rows span two pages comes out as two grouped records, the second after the first was already processed. To keep a request''s rows together, have the sender wrap them in an object (one record, rows under `record.<path>`) or raise `pageSize` above the largest request — never `groupByFields`, which the listener applies per page after paging.'
26728
+ - 'Requests that arrive together, or while the listener''s current run is still collecting, become additional pages of that same run; a request that arrives after the run has stopped collecting starts a new run. Nothing on the listener de-duplicates: a sender that fires the same event twice (a retry, a button clicked twice) delivers two records, and the step that writes the effect has to be made idempotent — `ignoreExisting` or a keyed upsert under the import''s `idLockTemplate`.'
26685
26729
  examples:
26686
26730
  - events
26687
26731
  - data.items
@@ -36913,9 +36957,25 @@ components:
36913
36957
  Handlebars template that overrides how each record's unique trace key is generated, used
36914
36958
  to track records through the flow and match retries to prior errors (e.g.
36915
36959
  `{{join "_" record.customerId record.orderId}}`). When omitted, the system picks a unique
36916
- field automatically. If a transform reshapes the data first, omit the `record.` prefix.
36917
- Trace keys are capped at 256 characters; a longer key is stored truncated from the middle,
36918
- keeping the beginning and end of the value.
36960
+ field automatically from the record's top level, by exact field name (`GET
36961
+ /v1/flows/{_id}/traceKey` serves the pattern). The rendered value of a template is stamped
36962
+ on each record as `io_custom_trace_key` and travels downstream with it. If a transform
36963
+ reshapes the data first, omit the `record.` prefix. Trace keys are capped at 256 characters;
36964
+ a longer key is stored truncated from the middle, keeping the beginning and end of the
36965
+ value. Downstream imports use the trace key as their default concurrency lock key (a blank
36966
+ key means no lock); it never de-duplicates — a record emitted twice with the same key is
36967
+ processed twice.
36968
+ x-celigo-ai-guidance:
36969
+ - |-
36970
+ The default derivation reads these top-level fields in order and takes the first present
36971
+ (a record carrying `id` and `internalId` is keyed on `id` alone) — `id`, `Id`, `ID`,
36972
+ `internalid`, `Internalid`, `internalId`, `InternalId`, `INTERNALID`, `_id`, `_Id`, `_ID`,
36973
+ `internal_id`, `internal_Id`, `Internal_id`, `Internal_Id`, `INTERNAL_ID`, `identifier`,
36974
+ `IDENTIFIER` — then a `*anything` rule the platform does not document.
36975
+ - |-
36976
+ A record in flight through the flow carries `io_custom_trace_key` when a template is set
36977
+ — that value is the downstream imports' default lock key; without a template the record
36978
+ carries no trace-key field (the key is derived, not stored on the record).
36919
36979
  examples:
36920
36980
  - '{{record.id}}'
36921
36981
  - '{{join "_" record.customerId record.orderId}}'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@celigo/api-specs",
3
- "version": "0.2.113",
3
+ "version": "0.2.115",
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": "af39c6bc",
4
+ "iasCommit": "d2a71cdf",
5
5
  "generatedAt": "2026-10-15"
6
6
  },
7
7
  "roots": {