@celigo/api-specs 0.2.99 → 0.2.101

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/tool.yml CHANGED
@@ -710,14 +710,26 @@ paths:
710
710
  - Tools
711
711
  summary: Clone a tool
712
712
  description: |-
713
- Creates a copy of a tool in the target integration and returns a manifest of the
714
- resources the clone created. The clone records its lineage in `_sourceId`, which
715
- places it in the source tool's clone family.
713
+ Creates a copy of a tool in the target integration, together with the export and
714
+ import steps it references, and returns a manifest of the resources the clone
715
+ created. The clone records its lineage in `_sourceId`, which places it in the source
716
+ tool's clone family.
716
717
 
717
718
  The target integration is never inferred from the source tool — pass the source
718
- tool's own integration id to clone in place.
719
+ tool's own integration id to clone in place. When any step of the tool references a
720
+ connection, `connectionMap` is required as well: every connection the tool uses must
721
+ appear as a key, mapped to itself to reuse it or to another connection of the account
722
+ to repoint the cloned steps. A tool with no connection-bearing steps clones without it.
719
723
 
720
- Use `GET /v1/tools/{_id}/clone/preview` first to see what the clone would create.
724
+ Use `GET /v1/tools/{_id}/clone/preview` first to see what the clone would create —
725
+ each `Connection` object in the preview is a key `connectionMap` must carry.
726
+ x-celigo-ai-guidance:
727
+ - |-
728
+ Build `connectionMap` from the clone preview: one key per `Connection` object it lists,
729
+ each mapped to its own id unless the user asked to repoint the clone. Omitting the map
730
+ (or sending `{}`) when a step references a connection fails with 400
731
+ `invalid_connectionMap`; a key the tool does not reference, or a value that is not a
732
+ connection in the account, fails with 422 `invalid_connectionId` and nothing is created.
721
733
  parameters:
722
734
  - name: _id
723
735
  in: path
@@ -750,15 +762,37 @@ paths:
750
762
  description: Name for the cloned tool. Defaults to `Clone - <source tool name>` when omitted.
751
763
  examples:
752
764
  - Customer enrichment tool (copy)
765
+ connectionMap:
766
+ type: object
767
+ description: |-
768
+ Connection ids the tool's steps reference, each mapped to the connection the
769
+ cloned steps use instead. Required when any step references a connection —
770
+ omitted or empty, the clone fails with 400 `invalid_connectionMap`. Map an id
771
+ to itself to keep the connection; every key must be a connection the tool
772
+ references and every value a connection in the account.
773
+ additionalProperties:
774
+ type: string
775
+ format: objectId
776
+ examples:
777
+ - 6ac1ef4a38b24d95ffac2545: 6ac1ef4a38b24d95ffac2545
753
778
  examples:
754
779
  default:
755
- summary: Clone into the same integration
780
+ summary: Clone a tool with no connection-bearing steps into the same integration
756
781
  value:
757
782
  _integrationId: 6a429af50547257e3301246c
758
783
  name: Customer enrichment tool (copy)
784
+ with_connection_map:
785
+ summary: Clone a tool whose lookup step uses a connection, reusing that connection
786
+ value:
787
+ _integrationId: 6a429af50547257e3301246c
788
+ name: Customer enrichment tool (copy)
789
+ connectionMap:
790
+ 6ac1ef4a38b24d95ffac2545: 6ac1ef4a38b24d95ffac2545
759
791
  responses:
760
792
  '201':
761
- description: The clone was created. Returns a manifest of the resources the clone created.
793
+ description: |-
794
+ The clone was created. Returns a manifest of every resource the clone created —
795
+ the new tool plus the export and import steps it copied.
762
796
  content:
763
797
  application/json:
764
798
  schema:
@@ -769,7 +803,7 @@ paths:
769
803
  properties:
770
804
  model:
771
805
  type: string
772
- description: Model name of the created resource (e.g. `Tool`).
806
+ description: Model name of the created resource (e.g. `Tool`, `Export`, `Import`).
773
807
  examples:
774
808
  - Tool
775
809
  _id:
@@ -780,12 +814,22 @@ paths:
780
814
  - 6a869d2f3ae8ccee42a45c44
781
815
  examples:
782
816
  default:
783
- summary: Clone created a tool
817
+ summary: Clone created a tool with no steps
784
818
  value:
785
819
  - model: Tool
786
820
  _id: 6a869d2f3ae8ccee42a45c44
821
+ with_steps:
822
+ summary: Clone created a tool and the lookup export it references
823
+ value:
824
+ - model: Export
825
+ _id: 6ac1ef8a38b24d95ffac2d64
826
+ - model: Tool
827
+ _id: 6ac1ef8a38b24d95ffac2d78
787
828
  '400':
788
- description: The body omits `_integrationId` (`required_field_missing`).
829
+ description: |-
830
+ The body omits `_integrationId` (`required_field_missing`), or the tool's steps
831
+ reference a connection and `connectionMap` is missing or empty
832
+ (`invalid_connectionMap`).
789
833
  content:
790
834
  application/json:
791
835
  schema:
@@ -797,10 +841,40 @@ paths:
797
841
  errors:
798
842
  - code: required_field_missing
799
843
  message: 'required field: _integrationId is missing'
844
+ missingConnectionMap:
845
+ summary: A step references a connection but no connectionMap was sent
846
+ value:
847
+ errors:
848
+ - code: invalid_connectionMap
849
+ message: The resource which you are trying to create requires a connectionMap.
800
850
  '401':
801
851
  $ref: '#/components/responses/401-unauthorized'
802
852
  '404':
803
853
  $ref: '#/components/responses/404-not-found'
854
+ '422':
855
+ description: |-
856
+ `connectionMap` does not match the tool: a value is not a connection in the account,
857
+ or a key is not a connection the tool's steps reference (the unmapped connection is
858
+ reported alongside). Nothing is created.
859
+ content:
860
+ application/json:
861
+ schema:
862
+ $ref: '#/components/schemas/Error'
863
+ examples:
864
+ unknownTargetConnection:
865
+ summary: A mapped value is not a connection in the account
866
+ value:
867
+ errors:
868
+ - code: invalid_connectionId
869
+ message: 'The _connectionId provided for the key ''6ac1ef4a38b24d95ffac2545'': ''000000000000000000000001'' is invalid.'
870
+ keyNotReferenced:
871
+ summary: A key is not one of the tool's connections, so the real one is unmapped
872
+ value:
873
+ errors:
874
+ - code: invalid_connectionId
875
+ message: The key '000000000000000000000001' in connectionMap doesn't match with any of the _id's of the connection documents.
876
+ - code: invalid_connectionId
877
+ message: 'The _connectionId provided for the key ''6ac1ef4a38b24d95ffac2545'': '''' is invalid.'
804
878
  /v1/tools/{_id}/clone/preview:
805
879
  get:
806
880
  x-internal: false
@@ -1199,6 +1273,10 @@ paths:
1199
1273
  broader history. Use an entry's `executionId` with
1200
1274
  `GET /v1/tools/{_id}/invocations/{executionId}` to drill into its steps.
1201
1275
 
1276
+ Entries are written asynchronously: a run appears here a few seconds after
1277
+ `POST /v1/tools/{_id}/invoke` returns, so re-read before concluding that a run
1278
+ was not logged.
1279
+
1202
1280
  Sandbox Tools return `403`. Custom roles only see invocations whose
1203
1281
  `_invokerIntegrationId` is in their accessible integrations.
1204
1282
  parameters:
@@ -1214,7 +1292,9 @@ paths:
1214
1292
  - 65a98d1ef2b40000098c3a4d
1215
1293
  - name: pageSize
1216
1294
  in: query
1217
- description: Number of entries per page. Larger values are clamped to 100.
1295
+ description: |-
1296
+ Number of entries per page. Larger values are clamped to 100; `0` or a non-numeric
1297
+ value returns `400` `invalid_url`.
1218
1298
  schema:
1219
1299
  type: integer
1220
1300
  minimum: 1
@@ -1380,7 +1460,11 @@ paths:
1380
1460
  nextPageUrl: null
1381
1461
  prevPageUrl: null
1382
1462
  '400':
1383
- description: Invalid query parameter, for example a `status` token outside the enum.
1463
+ description: |-
1464
+ Invalid query parameter: a `status` token outside the enum (`invalid_status`), a
1465
+ `sortOrder` other than `asc`/`desc` (`invalid_sort_order`), a `time_gte`/`time_lte`
1466
+ that is not a timestamp (`invalid_field`), or a `pageSize` below 1 or non-numeric
1467
+ (`invalid_url`).
1384
1468
  content:
1385
1469
  application/json:
1386
1470
  schema:
@@ -1391,6 +1475,23 @@ paths:
1391
1475
  errors:
1392
1476
  - code: invalid_status
1393
1477
  message: Status should be either success, error or ignore.
1478
+ invalid_sort_order:
1479
+ value:
1480
+ errors:
1481
+ - code: invalid_sort_order
1482
+ message: Sort order should be either asc or desc.
1483
+ invalid_time:
1484
+ summary: '`time_gte` is not a timestamp'
1485
+ value:
1486
+ errors:
1487
+ - code: invalid_field
1488
+ message: 'The value provided for the field: ''time_gte'' is invalid.'
1489
+ invalid_page_size:
1490
+ summary: '`pageSize` is 0 or not a number'
1491
+ value:
1492
+ errors:
1493
+ - code: invalid_url
1494
+ message: pageSize is not valid.
1394
1495
  '401':
1395
1496
  $ref: '#/components/responses/401-unauthorized'
1396
1497
  '403':
@@ -1432,14 +1533,16 @@ paths:
1432
1533
  - name: time_gte
1433
1534
  in: query
1434
1535
  required: true
1435
- description: Start of the deletion window. Omitting it returns `400` `invalid_query_params`.
1536
+ description: |-
1537
+ Start of the deletion window. Must be earlier than `time_lte`; omitting either bound
1538
+ returns `400` `invalid_query_params`.
1436
1539
  schema:
1437
1540
  type: string
1438
1541
  format: date-time
1439
1542
  - name: time_lte
1440
1543
  in: query
1441
1544
  required: true
1442
- description: End of the deletion window. Must not be in the future.
1545
+ description: End of the deletion window. Neither bound may be in the future.
1443
1546
  schema:
1444
1547
  type: string
1445
1548
  format: date-time
@@ -1447,7 +1550,9 @@ paths:
1447
1550
  '202':
1448
1551
  description: Deletion request accepted for asynchronous processing. No body.
1449
1552
  '400':
1450
- description: Missing or invalid window parameters.
1553
+ description: |-
1554
+ Missing or invalid window parameters — a bound is omitted, a bound is in the future,
1555
+ or `time_gte` is not before `time_lte`. Nothing is deleted.
1451
1556
  content:
1452
1557
  application/json:
1453
1558
  schema:
@@ -1458,6 +1563,21 @@ paths:
1458
1563
  errors:
1459
1564
  - code: invalid_query_params
1460
1565
  message: time_gte query parameter is required for deleting logs.
1566
+ missing_time_lte:
1567
+ value:
1568
+ errors:
1569
+ - code: invalid_query_params
1570
+ message: time_lte query parameter is required for deleting logs.
1571
+ future_window:
1572
+ value:
1573
+ errors:
1574
+ - code: invalid_query_params
1575
+ message: time_gte and time_lte cannot be in the future.
1576
+ inverted_window:
1577
+ value:
1578
+ errors:
1579
+ - code: invalid_query_params
1580
+ message: time_gte must be before time_lte.
1461
1581
  '401':
1462
1582
  $ref: '#/components/responses/401-unauthorized'
1463
1583
  '403':
@@ -1479,8 +1599,12 @@ paths:
1479
1599
  `recordId` with the log-data endpoint to read the payload it processed.
1480
1600
 
1481
1601
  When the invocation is missing or not visible under the caller's integration ACL,
1482
- the endpoint returns `204 No Content`. `404` applies only to an unknown or inaccessible
1483
- Tool `_id`. A malformed `executionId` returns `422`. Sandbox Tools return `403`.
1602
+ the endpoint returns `204 No Content`. The trace is written asynchronously: for a few
1603
+ seconds after `POST /v1/tools/{_id}/invoke` returns, a valid `invocationId` also answers
1604
+ `204`, and the header can then appear before its step records, with an empty `steps`
1605
+ array. Re-read before treating a run as unknown or as failed before its first step.
1606
+ `404` applies only to an unknown or inaccessible Tool `_id`. A malformed `executionId`
1607
+ returns `422`. Sandbox Tools return `403`.
1484
1608
  parameters:
1485
1609
  - name: _id
1486
1610
  in: path
@@ -1556,7 +1680,9 @@ paths:
1556
1680
  logMode: debug
1557
1681
  steps: []
1558
1682
  '204':
1559
- description: Invocation not found or not visible under the caller's integration ACL.
1683
+ description: |-
1684
+ Invocation not found, not visible under the caller's integration ACL, or not yet
1685
+ written — a run answers `204` for a few seconds after the invoke returns.
1560
1686
  '401':
1561
1687
  $ref: '#/components/responses/401-unauthorized'
1562
1688
  '403':
@@ -1727,9 +1853,17 @@ paths:
1727
1853
  came out — selected by `_expOrImpId`, `stage`, `groupId`, and `recordId` from the
1728
1854
  trace-metadata response. The input and output bubbles store their payload under the
1729
1855
  `schemaValidation` stage; a lookup step stores the response it merged under
1730
- `responseMapping`. A selector that matches nothing returns `200` with an empty `logs`
1731
- array. Large payloads are not inlined — the entry carries an `externalReference` whose
1732
- `s3Key` you pass to the signed-URL endpoint.
1856
+ `responseMapping`; a step that makes an outbound API call, such as an HTTP lookup,
1857
+ stores each request it sent under `apiCall`, one entry per attempt, so a retried
1858
+ request shows each failed attempt before the one that succeeded. Large payloads are
1859
+ not inlined — the entry carries an `externalReference` whose `s3Key` you pass to the
1860
+ signed-URL endpoint.
1861
+
1862
+ A selector that matches nothing returns `200` with an empty `logs` array — a stage
1863
+ the step never ran for that record, a `groupId` from another step, and a step that
1864
+ recorded no request all look the same. Payloads are written after the trace's step
1865
+ records, so for a run that just finished an empty array can also mean the payload has
1866
+ not landed yet; re-query before concluding nothing was stored.
1733
1867
 
1734
1868
  For nested Tools, set `stage` to `tool` with the nested ToolImport id to fetch the
1735
1869
  composed input/output payload.
@@ -1812,6 +1946,43 @@ paths:
1812
1946
  orderId: SO-1043
1813
1947
  errors: []
1814
1948
  errors: []
1949
+ apiCall:
1950
+ summary: HTTP lookup requests — a failed attempt, then the retry that succeeded
1951
+ value:
1952
+ logs:
1953
+ - log:
1954
+ apiCallTraceKeyId: M3bsB9KB
1955
+ stage: apiCall
1956
+ apiCallType: lookupexport
1957
+ status: failed
1958
+ request:
1959
+ method: GET
1960
+ uri: https://api.example.com/v1/orders
1961
+ headers:
1962
+ accept: application/json
1963
+ Authorization: Bearer ********
1964
+ response:
1965
+ statusCode: 503
1966
+ headers:
1967
+ content-type: text/html
1968
+ body: <html><head><title>503 Service Temporarily Unavailable</title></head></html>
1969
+ - log:
1970
+ apiCallTraceKeyId: cI09faBo
1971
+ stage: apiCall
1972
+ apiCallType: lookupexport
1973
+ status: success
1974
+ request:
1975
+ method: GET
1976
+ uri: https://api.example.com/v1/orders
1977
+ headers:
1978
+ accept: application/json
1979
+ Authorization: Bearer ********
1980
+ response:
1981
+ statusCode: 200
1982
+ headers:
1983
+ content-type: application/json; charset=utf-8
1984
+ body: '[{"_id":"6a50f177a8d85436a4a890db","name":"SO-1043"}]'
1985
+ errors: []
1815
1986
  noMatch:
1816
1987
  summary: Selector matched no stored payload
1817
1988
  value:
@@ -3320,7 +3491,11 @@ components:
3320
3491
  - For regular fields: Set to the exact property name (e.g., "firstName", "price", "isActive")
3321
3492
  - For object fields: Set to the object property name, then add child mappings in the 'mappings' array
3322
3493
  - For array fields: Set to the array property name, then configure 'buildArrayHelper'
3323
- - For arrays within arrays: Leave EMPTY for the inner array mappings, as they don't have field names
3494
+ - Two structural blanks: the inner array item of an array of arrays (it has no field name),
3495
+ and the single top-level `objectarray` item of a `rows [ ]` mapping (the array output
3496
+ structure — see the array's description). A child-bearing wrapper and a source-only row that
3497
+ already exist in a saved document also stay unnamed when the tree is re-sent — filling in a
3498
+ name changes the output; it does not complete the row
3324
3499
 
3325
3500
  IMPORTANT: Do NOT use dot notation (e.g., "customer.firstName") in this field. Instead, create proper
3326
3501
  hierarchical structure with nested mappings:
@@ -3335,8 +3510,9 @@ components:
3335
3510
  }
3336
3511
  ```
3337
3512
 
3338
- When parsing existing mappings, empty 'generate' fields almost always indicate inner array structures
3339
- within a parent array.
3513
+ When parsing existing mappings, an empty `generate` inside a parent array is an inner array; an
3514
+ empty `generate` on the ONLY top-level item, with `dataType: objectarray`, is the `rows [ ]` JSON
3515
+ structure — array output, bound as `rows` in templates — and is intentional, not a missing name.
3340
3516
  examples:
3341
3517
  - name
3342
3518
  - address
@@ -4317,6 +4493,12 @@ components:
4317
4493
  object-array row left with no source, no destination and no remaining child `mappings` or
4318
4494
  `buildArrayHelper` entries; a row with only one of the two, and a source-less, destination-less
4319
4495
  wrapper that still has children, are kept.
4496
+
4497
+ The shape of the array is the mapper's **JSON structure**. Named top-level items produce an object
4498
+ record (`record { }`). Exactly one top-level item with `dataType: objectarray` and no `generate` is
4499
+ the `rows [ ]` structure: the mapped record is an array — usually one element per element of the
4500
+ source array that root's `buildArrayHelper` iterates — Handlebars templates such as `http.body`
4501
+ bind it as `rows` instead of `record`, and the mapping editor shows that row's destination disabled.
4320
4502
  x-celigo-ai-guidance:
4321
4503
  - |-
4322
4504
  Rows that exist in the saved document — including `Draft` and `Inactive` rows and
@@ -4325,6 +4507,14 @@ components:
4325
4507
  them. Only a row with neither source nor destination — and, for an object or
4326
4508
  object-array row, no remaining children — can be left out; the save would drop it
4327
4509
  anyway. A wrapper with children but no `generate` is kept by the save, so keep it.
4510
+ - |-
4511
+ A single unnamed top-level `objectarray` item is the `rows [ ]` JSON structure, not a
4512
+ missing destination: keep it unnamed when editing (naming it turns the output into an
4513
+ object, and a template that iterates `rows` then renders nothing), and author that
4514
+ shape only when the request body must be an array or a template iterates `rows`.
4515
+ The editor's save check accepts the unnamed root only in the `rows [ ]` structure;
4516
+ any other row with a source and no `generate` fails with "One or more destination
4517
+ field values not entered".
4328
4518
  items:
4329
4519
  type: object
4330
4520
  properties:
@@ -4340,7 +4530,11 @@ components:
4340
4530
  - For regular fields: Set to the exact property name (e.g., "firstName", "price", "isActive")
4341
4531
  - For object fields: Set to the object property name, then add child mappings in the 'mappings' array
4342
4532
  - For array fields: Set to the array property name, then configure 'buildArrayHelper'
4343
- - For arrays within arrays: Leave EMPTY for the inner array mappings, as they don't have field names
4533
+ - Two structural blanks: the inner array item of an array of arrays (it has no field name),
4534
+ and the single top-level `objectarray` item of a `rows [ ]` mapping (the array output
4535
+ structure — see the array's description). A child-bearing wrapper and a source-only row that
4536
+ already exist in a saved document also stay unnamed when the tree is re-sent — filling in a
4537
+ name changes the output; it does not complete the row
4344
4538
 
4345
4539
  IMPORTANT: Do NOT use dot notation (e.g., "customer.firstName") in this field. Instead, create proper
4346
4540
  hierarchical structure with nested mappings:
@@ -4355,8 +4549,9 @@ components:
4355
4549
  }
4356
4550
  ```
4357
4551
 
4358
- When parsing existing mappings, empty 'generate' fields almost always indicate inner array structures
4359
- within a parent array.
4552
+ When parsing existing mappings, an empty `generate` inside a parent array is an inner array; an
4553
+ empty `generate` on the ONLY top-level item, with `dataType: objectarray`, is the `rows [ ]` JSON
4554
+ structure — array output, bound as `rows` in templates — and is intentional, not a missing name.
4360
4555
  examples:
4361
4556
  - name
4362
4557
  - address
@@ -24907,6 +25102,23 @@ components:
24907
25102
  per-mode contract. Handlebars expressions in ``extract`` always
24908
25103
  reference ``{{record.field}}`` regardless — only JSONPath
24909
25104
  behavior flips with ``inputContext``.
25105
+ - |-
25106
+ ## JSON structure — record { } or rows [ ]
25107
+
25108
+ The shape of this array is the mapper's JSON structure. Named
25109
+ top-level items produce an object record; ``http.body`` and the
25110
+ other templates bind it as ``record``. Exactly one top-level item
25111
+ with ``dataType: objectarray`` and no ``generate`` is the
25112
+ ``rows [ ]`` structure: the mapped record is an array — one
25113
+ element per element the item's ``buildArrayHelper`` iterates —
25114
+ and templates bind it as ``rows`` (``{{#each rows}}``), with
25115
+ ``record.*`` undefined. The mapping editor shows that row's
25116
+ destination disabled; its save check accepts the unnamed root
25117
+ only in the ``rows [ ]`` structure and fails any other row that
25118
+ has a source and no ``generate`` with "One or more destination
25119
+ field values not entered". Keep the root unnamed when editing a
25120
+ ``rows [ ]`` mapping — naming it turns the output into an object
25121
+ and a ``{{#each rows}}`` body renders nothing.
24910
25122
  - |-
24911
25123
  ## IMPORT-SPECIFIC BEHAVIOR
24912
25124
 
@@ -30365,7 +30577,10 @@ components:
30365
30577
  - '{"records": [{"id": "{{record.id}}", "exported": true}]}'
30366
30578
  paging:
30367
30579
  type: object
30368
- description: Controls how the export requests subsequent pages when the API returns multi-page responses. The `method` field determines which companion fields are required and how each next page is requested. For the page, skip, and token methods, reference the matching pagination variable (`{{export.http.paging.page}}`, `{{export.http.paging.skip}}`, or `{{export.http.paging.token}}`) in the relative URI or request body — misconfigured pagination is a common cause of incomplete data retrieval.
30580
+ description: |-
30581
+ Controls how the export requests subsequent pages when the API returns multi-page responses. The `method` field determines which companion fields are required and how each next page is requested. For the page, skip, and token methods, reference the matching pagination variable (`{{export.http.paging.page}}`, `{{export.http.paging.skip}}`, or `{{export.http.paging.token}}`) in the relative URI or request body — misconfigured pagination is a common cause of incomplete data retrieval.
30582
+
30583
+ When this export is the first lookup of a builder-mode API with `pagination.enabled` set, it is that API's volume driver: saving the export (even unchanged) invalidates the API's issued cursors, so a caller mid-walk gets an empty final page, and removing `paging` is accepted on save but makes every call to the API fail with `400 api_pagination_source_not_paged` until paging is restored or the API's flag is turned off.
30369
30584
  x-celigo-ai-guidance:
30370
30585
  - Configuration object for navigating through multi-page API responses.
30371
30586
  - |-
@@ -37196,7 +37411,10 @@ components:
37196
37411
  - '2026-09-22T03:27:29.411000Z'
37197
37412
  timeTaken:
37198
37413
  type: integer
37199
- description: Total processing time in milliseconds.
37414
+ description: |-
37415
+ Wall-clock duration of the invocation in milliseconds, from request to response.
37416
+ It also counts time spent outside the steps, so it exceeds the sum of the step
37417
+ `timeTaken` values on the trace.
37200
37418
  examples:
37201
37419
  - 1025
37202
37420
  logMode:
@@ -37369,7 +37587,10 @@ components:
37369
37587
  - '2026-09-22T03:27:29.411000Z'
37370
37588
  timeTaken:
37371
37589
  type: integer
37372
- description: Total processing time in milliseconds.
37590
+ description: |-
37591
+ Wall-clock duration of the invocation in milliseconds, from request to response.
37592
+ It also counts time spent outside the steps, so it exceeds the sum of the step
37593
+ `timeTaken` values — use the step sum when apportioning time across steps.
37373
37594
  examples:
37374
37595
  - 1025
37375
37596
  traceKey:
@@ -37415,7 +37636,8 @@ components:
37415
37636
  type: array
37416
37637
  description: |-
37417
37638
  Step records in execution order — input bubble, branch steps, output bubble.
37418
- Empty when the run failed before its first step.
37639
+ Empty when the run failed before its first step. Step records are written after
37640
+ the header, so a run read seconds after it finished can also return an empty array.
37419
37641
  items:
37420
37642
  $ref: '#/components/schemas/ToolInvocationStep'
37421
37643
  ToolChildrenResponse:
@@ -37467,10 +37689,14 @@ components:
37467
37689
  description: |-
37468
37690
  Processing stage whose payload to fetch. The input and output bubbles store their
37469
37691
  payload under `schemaValidation`; a lookup step stores the merged response under
37470
- `responseMapping`; use `tool` for a nested ToolImport's composed payload.
37692
+ `responseMapping`; a step that makes an outbound API call, such as an HTTP lookup,
37693
+ stores each request it sent under `apiCall`; use `tool` for a nested ToolImport's
37694
+ composed payload. A stage the step never ran for this record returns an empty
37695
+ `logs` array, the same as a record that stored nothing.
37471
37696
  examples:
37472
37697
  - schemaValidation
37473
37698
  - responseMapping
37699
+ - apiCall
37474
37700
  - tool
37475
37701
  groupId:
37476
37702
  type: string
@@ -37496,12 +37722,19 @@ components:
37496
37722
  Small payloads are inlined under `log`; a large payload is replaced by an
37497
37723
  `externalReference[]` whose `source.s3Key` you pass to
37498
37724
  `GET /v1/tools/{_id}/invocations/{executionId}/logs/signedURL` to download it.
37725
+ A bubble or mapping stage returns one entry per record; the `apiCall` stage
37726
+ returns one entry per request the step sent, in order, so a retried request shows
37727
+ each failed attempt before the one that succeeded.
37499
37728
  items:
37500
37729
  type: object
37501
37730
  properties:
37502
37731
  log:
37503
37732
  type: object
37504
- description: Inlined payload for the selected record and stage.
37733
+ description: |-
37734
+ Inlined payload for the selected record and stage. Record-level stages such
37735
+ as `schemaValidation` and `responseMapping` carry the timestamp, selector echo
37736
+ and `input` / `output` / `errors`; the `apiCall` stage carries the request sent
37737
+ and the response received instead.
37505
37738
  properties:
37506
37739
  timestamp:
37507
37740
  type: string
@@ -37551,6 +37784,71 @@ components:
37551
37784
  items:
37552
37785
  type: object
37553
37786
  additionalProperties: true
37787
+ apiCallTraceKeyId:
37788
+ type: string
37789
+ description: Identifier of one request attempt. Present when `stage` is `apiCall`.
37790
+ examples:
37791
+ - M3bsB9KB
37792
+ apiCallType:
37793
+ type: string
37794
+ description: Kind of step that sent the request, such as a lookup export. Present when `stage` is `apiCall`.
37795
+ examples:
37796
+ - lookupexport
37797
+ status:
37798
+ type: string
37799
+ enum:
37800
+ - success
37801
+ - failed
37802
+ x-enumDescriptions:
37803
+ success: The attempt received a response the step accepted
37804
+ failed: The attempt was rejected or errored; a later entry may carry the retry
37805
+ description: Outcome of this request attempt. Present when `stage` is `apiCall`.
37806
+ request:
37807
+ type: object
37808
+ description: |-
37809
+ The request the step sent on this attempt — `method`, `uri` and `headers`.
37810
+ Credential headers are masked. Present when `stage` is `apiCall`.
37811
+ properties:
37812
+ method:
37813
+ type: string
37814
+ description: HTTP method of the attempt.
37815
+ uri:
37816
+ type: string
37817
+ description: Full URL the attempt called.
37818
+ headers:
37819
+ type: object
37820
+ additionalProperties: true
37821
+ description: Request headers as sent, with credential values masked.
37822
+ additionalProperties: true
37823
+ response:
37824
+ type: object
37825
+ description: |-
37826
+ The response this attempt received — `statusCode`, `headers`, and the raw
37827
+ `body` as a string when the endpoint sent one. Present when `stage` is
37828
+ `apiCall`.
37829
+ properties:
37830
+ statusCode:
37831
+ type: integer
37832
+ description: HTTP status the endpoint returned.
37833
+ headers:
37834
+ type: object
37835
+ additionalProperties: true
37836
+ description: Response headers as received.
37837
+ body:
37838
+ type: string
37839
+ description: Raw response body; JSON arrives as a serialized string.
37840
+ additionalProperties: true
37841
+ if:
37842
+ properties:
37843
+ stage:
37844
+ const: apiCall
37845
+ required:
37846
+ - stage
37847
+ then:
37848
+ required:
37849
+ - status
37850
+ - request
37851
+ - response
37554
37852
  additionalProperties: true
37555
37853
  externalReference:
37556
37854
  type: array
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@celigo/api-specs",
3
- "version": "0.2.99",
3
+ "version": "0.2.101",
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": "6feafe65",
4
+ "iasCommit": "33fb4992",
5
5
  "generatedAt": "2026-10-12"
6
6
  },
7
7
  "roots": {