@celigo/api-specs 0.2.201 → 0.2.203

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.
@@ -1174,8 +1174,10 @@ paths:
1174
1174
 
1175
1175
  `data` is the template's root context: `{{name}}` reads `data.name`. A template written for a
1176
1176
  step reads the record as `{{record.<field>}}`, so send the record under `record`
1177
- (`"data": {"record": {...}}`). Double braces HTML-escape the value (`&` renders as `&amp;`);
1178
- triple braces insert it unchanged. A `timestamp` with no time zone renders in UTC.
1177
+ (`"data": {"record": {...}}`). Double braces HTML-escape the value (`&` renders as `&amp;`),
1178
+ or URI-encode it when `options` carries an `http` connection and `fieldPath`
1179
+ `http.relativeURI`; triple braces insert it unchanged. A `timestamp` with no time zone
1180
+ renders in UTC.
1179
1181
 
1180
1182
  A null value, or a field under an object that is null, renders empty here. An HTTP import
1181
1183
  escapes values its own way, at run time and in the import preview: in its JSON body a
@@ -1189,6 +1191,11 @@ paths:
1189
1191
  entry's `helperFunctions`, but that list is not complete: `eq` and `truncateWords`, for
1190
1192
  example, render although it omits them, so render a doubtful helper once here before relying
1191
1193
  on it.
1194
+
1195
+ By default `lookup` doesn't resolve here: each call renders a placeholder such as
1196
+ `{$ASYNCID$0$0$}`, Handlebars' own `{{lookup object key}}` form included, and the placeholder
1197
+ is truthy, so `{{#if (lookup …)}}` always takes its first branch. `options` resolves an HTTP
1198
+ import's static lookups instead (see `options`).
1192
1199
  requestBody:
1193
1200
  required: true
1194
1201
  content:
@@ -1214,6 +1221,63 @@ paths:
1214
1221
  description: Form of the result; `text` returns the rendered string.
1215
1222
  examples:
1216
1223
  - text
1224
+ options:
1225
+ type: object
1226
+ description: |-
1227
+ Step context for a template that calls `{{lookup '<name>' <key>}}`. Send the saved
1228
+ `import`, its `connection` with `type` `http`, and `fieldPath` to resolve the
1229
+ import's static lookups (those with a `map`) instead of rendering placeholders. A
1230
+ template that also calls a dynamic lookup still renders every lookup as a
1231
+ placeholder, as does an `import` sent without `connection` or a connection of type
1232
+ `rdbms`, `rest`, `ftp`, `netsuite` or `salesforce`.
1233
+ properties:
1234
+ fieldPath:
1235
+ type: string
1236
+ description: |-
1237
+ Field the template belongs to, such as `http.body` or `http.relativeURI`. Required
1238
+ whenever `connection.type` is `http`, and with that connection `http.relativeURI`
1239
+ URI-encodes double-brace values instead of HTML-escaping them.
1240
+ examples:
1241
+ - http.body
1242
+ x-celigo-ai-guidance:
1243
+ - |-
1244
+ A 422 with an empty `{}` body from this route means `options.connection.type` is
1245
+ `http` and `options.fieldPath` is missing: every template fails that way until
1246
+ `fieldPath` names the step field the template belongs to, such as `http.body`.
1247
+ connection:
1248
+ type: object
1249
+ additionalProperties: true
1250
+ description: The import's connection; `type` `http` turns static lookup resolution on.
1251
+ properties:
1252
+ type:
1253
+ type: string
1254
+ description: Connection type of the import; static lookups resolve with `http`.
1255
+ examples:
1256
+ - http
1257
+ import:
1258
+ type: object
1259
+ additionalProperties: true
1260
+ description: |-
1261
+ The saved import whose `http.lookups` the template calls by name. A key found in
1262
+ a lookup's `map` renders the mapped value, and any other key renders the lookup's
1263
+ `default`, or empty when it has none. Failures answer 422 with an `errors` array:
1264
+ `cannot_evaluate_static_lookup` for a key not in the map when the lookup sets
1265
+ `allowFailures: false`, `lookup_not_found` for a name the import doesn't define
1266
+ (Handlebars' own `{{lookup object key}}` form included), and
1267
+ `lookup_data_not_defined` for a key that is missing, empty or the number `0`.
1268
+ if:
1269
+ properties:
1270
+ connection:
1271
+ properties:
1272
+ type:
1273
+ const: http
1274
+ required:
1275
+ - type
1276
+ required:
1277
+ - connection
1278
+ then:
1279
+ required:
1280
+ - fieldPath
1217
1281
  data:
1218
1282
  type: object
1219
1283
  additionalProperties: true
@@ -1228,6 +1292,27 @@ paths:
1228
1292
  data:
1229
1293
  record:
1230
1294
  name: Smith & Sons
1295
+ static_lookup:
1296
+ summary: Resolve an HTTP import's static lookup
1297
+ value:
1298
+ rules:
1299
+ template: '{{lookup ''statusMap'' record.status}}'
1300
+ resultMode: text
1301
+ data:
1302
+ record:
1303
+ status: '1'
1304
+ options:
1305
+ fieldPath: http.body
1306
+ connection:
1307
+ type: http
1308
+ import:
1309
+ http:
1310
+ lookups:
1311
+ - name: statusMap
1312
+ map:
1313
+ '1': active
1314
+ '2': inactive
1315
+ default: unknown
1231
1316
  responses:
1232
1317
  '200':
1233
1318
  description: The rendered template.
@@ -1256,6 +1341,12 @@ paths:
1256
1341
  mediaType: text
1257
1342
  data: Smith &amp; Sons | Smith & Sons
1258
1343
  duration: 0
1344
+ static_lookup:
1345
+ summary: Result of the static lookup request example
1346
+ value:
1347
+ mediaType: text
1348
+ data: active
1349
+ duration: 1
1259
1350
  '401':
1260
1351
  $ref: '#/components/responses/401-unauthorized'
1261
1352
  '422':
package/dist/template.yml CHANGED
@@ -511,6 +511,12 @@ paths:
511
511
  Previews the resources that would be created by installing a template
512
512
  from an uploaded zip file. The `runKey` query parameter ties this request
513
513
  to a previously uploaded zip (obtained from `GET /v1/s3SignedURL`).
514
+
515
+ The zip must be at most 1 MB, and its entries at most 64 MB once
516
+ uncompressed; the preview applies the same checks as
517
+ `POST /v1/integrations/template`. An MCP server template (a zip with a
518
+ root `mcpserver.json`) is refused here: preview it with
519
+ `GET /v1/mcpservers/template/preview`.
514
520
  parameters:
515
521
  - name: runKey
516
522
  in: query
@@ -535,6 +541,7 @@ paths:
535
541
  preview:
536
542
  summary: Template that creates an integration and one connection
537
543
  value:
544
+ type: integration
538
545
  stackRequired: false
539
546
  objects:
540
547
  - model: Integration
@@ -551,7 +558,10 @@ paths:
551
558
  wsdlVersion: '2020.2'
552
559
  concurrencyLevel: 1
553
560
  '400':
554
- description: Missing required `runKey` query parameter.
561
+ description: |-
562
+ Missing required `runKey` query parameter, the uploaded zip is larger
563
+ than 1 MB (`invalid_zip`), or the zip is an MCP server template
564
+ (`invalid_template`).
555
565
  content:
556
566
  application/json:
557
567
  schema:
@@ -562,6 +572,17 @@ paths:
562
572
  errors:
563
573
  - code: missing_required_field
564
574
  message: runKey is required.
575
+ zipTooLarge:
576
+ value:
577
+ errors:
578
+ - code: invalid_zip
579
+ message: Template can't be imported as the maximum allowed zip file size is 1 MB. Please re-import a new zip file.
580
+ mcpServerTemplate:
581
+ summary: A zip with a root mcpserver.json
582
+ value:
583
+ errors:
584
+ - code: invalid_template
585
+ message: MCP server templates cannot be installed through the Integration template path. Use Upload MCP.
565
586
  '401':
566
587
  $ref: '#/components/responses/401-unauthorized'
567
588
  '403':
@@ -577,7 +598,26 @@ paths:
577
598
  value:
578
599
  errors:
579
600
  - code: invalid_key
580
- message: The specified runKey was not found.
601
+ message: We couldn't find any integration template zip file.
602
+ '422':
603
+ description: |-
604
+ The zip's entries exceed 64 MB uncompressed (`invalid_zip`), or an entry
605
+ is corrupted (`corrupted_file`).
606
+ content:
607
+ application/json:
608
+ schema:
609
+ $ref: '#/components/schemas/Error'
610
+ examples:
611
+ uncompressedTooLarge:
612
+ value:
613
+ errors:
614
+ - code: invalid_zip
615
+ message: Template can't be imported as the uncompressed zip contents exceed the maximum allowed size. Please re-import a smaller zip file.
616
+ corrupted:
617
+ value:
618
+ errors:
619
+ - code: corrupted_file
620
+ message: Looks like the uploaded zip is corrupted. Please contact Celigo support if the issue persists.
581
621
  /v1/integrations/template:
582
622
  post:
583
623
  x-internal: false
@@ -594,6 +634,12 @@ paths:
594
634
  installed integration receives new connection `_id`s. Configure each
595
635
  connection in the new integration before running its flows; connection
596
636
  `_id`s that existed only in the zip are not preserved.
637
+
638
+ The zip must be at most 1 MB, and its entries at most 64 MB once
639
+ uncompressed. A zip that breaks either limit, or holds a corrupted entry,
640
+ is refused before anything is created. So is an MCP server template (a
641
+ zip with a root `mcpserver.json`): install it with
642
+ `POST /v1/mcpservers/template`.
597
643
  requestBody:
598
644
  required: true
599
645
  content:
@@ -626,21 +672,43 @@ paths:
626
672
  value:
627
673
  runKey: abc123def456
628
674
  responses:
629
- '200':
630
- description: Template installed from uploaded zip.
675
+ '201':
676
+ description: |-
677
+ Template installed. Each entry names a document the install created;
678
+ the `Integration` entry is the new integration.
631
679
  content:
632
680
  application/json:
633
681
  schema:
634
- type: object
635
- description: The created integration and related resources.
636
- additionalProperties: true
682
+ type: array
683
+ items:
684
+ type: object
685
+ required:
686
+ - model
687
+ - _id
688
+ properties:
689
+ model:
690
+ type: string
691
+ description: Model of the created document.
692
+ examples:
693
+ - Integration
694
+ _id:
695
+ type: string
696
+ format: objectId
697
+ description: Id of the created document.
698
+ examples:
699
+ - 6405b9d73496e05ff253d587
637
700
  examples:
638
701
  installed:
639
702
  summary: Integration created from the uploaded zip
640
703
  value:
641
- _integrationId: 6405b9d73496e05ff253d587
704
+ - model: Integration
705
+ _id: 6405b9d73496e05ff253d587
642
706
  '400':
643
- description: Missing required `runKey` in request body.
707
+ description: |-
708
+ Missing required `runKey` in request body, the uploaded zip is larger
709
+ than 1 MB (`invalid_zip`), the zip is an MCP server template
710
+ (`invalid_template`), or the preview reports `stackRequired: true` and
711
+ the body has no `_stackId` (`stack_not_found`).
644
712
  content:
645
713
  application/json:
646
714
  schema:
@@ -651,12 +719,31 @@ paths:
651
719
  errors:
652
720
  - code: missing_required_field
653
721
  message: runKey is required.
722
+ zipTooLarge:
723
+ value:
724
+ errors:
725
+ - code: invalid_zip
726
+ message: Template can't be imported as the maximum allowed zip file size is 1 MB. Please re-import a new zip file.
727
+ mcpServerTemplate:
728
+ summary: A zip with a root mcpserver.json
729
+ value:
730
+ errors:
731
+ - code: invalid_template
732
+ message: MCP server templates cannot be installed through the Integration template path. Use Upload MCP.
733
+ stackMissing:
734
+ summary: The zip has a stack hook and the body has no _stackId
735
+ value:
736
+ errors:
737
+ - code: stack_not_found
738
+ message: The integration template has stack reference but _stackId not found in the request body.
654
739
  '401':
655
740
  $ref: '#/components/responses/401-unauthorized'
656
741
  '403':
657
742
  $ref: '#/components/responses/403-cannot-install'
658
743
  '404':
659
- description: The `runKey` does not match any uploaded zip.
744
+ description: |-
745
+ The `runKey` does not match any uploaded zip (`invalid_key`), or
746
+ `_stackId` matches no stack (`stack_not_found`).
660
747
  content:
661
748
  application/json:
662
749
  schema:
@@ -666,7 +753,31 @@ paths:
666
753
  value:
667
754
  errors:
668
755
  - code: invalid_key
669
- message: The specified runKey was not found.
756
+ message: We couldn't find any integration template zip file.
757
+ unknownStack:
758
+ value:
759
+ errors:
760
+ - code: stack_not_found
761
+ message: 'Failed to create the integration using the integration template provided as no stack found with _id: ''000000000000000000000000''.'
762
+ '422':
763
+ description: |-
764
+ The zip's entries exceed 64 MB uncompressed (`invalid_zip`), or an entry
765
+ is corrupted (`corrupted_file`). Nothing is installed.
766
+ content:
767
+ application/json:
768
+ schema:
769
+ $ref: '#/components/schemas/Error'
770
+ examples:
771
+ uncompressedTooLarge:
772
+ value:
773
+ errors:
774
+ - code: invalid_zip
775
+ message: Template can't be imported as the uncompressed zip contents exceed the maximum allowed size. Please re-import a smaller zip file.
776
+ corrupted:
777
+ value:
778
+ errors:
779
+ - code: corrupted_file
780
+ message: Looks like the uploaded zip is corrupted. Please contact Celigo support if the issue persists.
670
781
  components:
671
782
  securitySchemes:
672
783
  bearerAuth:
package/dist/tool.yml CHANGED
@@ -1241,8 +1241,8 @@ paths:
1241
1241
  '422':
1242
1242
  description: |-
1243
1243
  A step failed, or the Tool was refused before any step ran: a connection binding is
1244
- missing (`connection_not_overridden`) or has no `_id`, its branches don't all merge
1245
- back (`tool_dangling_branch`), or the input fails `input.schema` (a missing `required`
1244
+ missing (`connection_not_overridden`), its branches don't all merge back
1245
+ (`tool_dangling_branch`), or the input fails `input.schema` (a missing `required`
1246
1246
  property answers `tool_input_schema_validation_failed`). The output stage answers 422 too when the stored
1247
1247
  `output.schema` holds `additionalProperties: false` and the output mappings write a field
1248
1248
  it doesn't list ("Tool output validation failed: must NOT have additional properties").
@@ -1250,6 +1250,14 @@ paths:
1250
1250
  `proceedOnFailure: true`: the later steps still run, but the response carries the error,
1251
1251
  not the output. Either way the response includes `invocationId` when logging is active,
1252
1252
  so the run can be opened in the run history.
1253
+
1254
+ Once the Tool is found and has steps, a malformed `overrides` block is refused with
1255
+ `invalid_override` ("Invalid override at <path>. <reason>") before any step runs:
1256
+ `overrides` is not an object, a `connections`/`exports`/`imports`/`routers` value is not
1257
+ an array or holds a non-object entry, a connection binding has no `_abstractId`, names
1258
+ none of `_id`, `_borrowConcurrencyFromConnectionId`, or `requiresEndUserCredentials`, or
1259
+ sets both `_id` and `_borrowConcurrencyFromConnectionId`. These refusals carry only `code`
1260
+ and `message`, and no `invocationId` even with `x-log-mode: debug`.
1253
1261
  content:
1254
1262
  application/json:
1255
1263
  schema:
@@ -1259,7 +1267,7 @@ paths:
1259
1267
  properties:
1260
1268
  errors:
1261
1269
  type: array
1262
- description: Execution errors, each with a `code`, `message`, `source`, and epoch-millisecond `time`.
1270
+ description: Execution errors, each with a `code`, `message`, `source`, and epoch-millisecond `time`. An `invalid_override` refusal has only `code` and `message`.
1263
1271
  items:
1264
1272
  type: object
1265
1273
  additionalProperties: true
@@ -1280,10 +1288,23 @@ paths:
1280
1288
  message: 'Missing connection overrides. The following connection IDs must be overridden: 6ab1f5657b3d01a9084253a5.'
1281
1289
  invocationId: 6ab1f5877cd5cdd66da1cc8b
1282
1290
  binding_without_id:
1283
- summary: A connection binding without `_id`
1291
+ summary: A connection binding with only `_abstractId`
1292
+ value:
1293
+ errors:
1294
+ - code: invalid_override
1295
+ message: 'Invalid override at overrides.connections[0]. Connection override must include at least one of: _id, _borrowConcurrencyFromConnectionId, requiresEndUserCredentials.'
1296
+ binding_without_abstract_id:
1297
+ summary: A connection binding without `_abstractId`
1298
+ value:
1299
+ errors:
1300
+ - code: invalid_override
1301
+ message: Invalid override at overrides.connections[0]._abstractId. Missing required _abstractId.
1302
+ overrides_not_object:
1303
+ summary: '`overrides` sent as an array'
1284
1304
  value:
1285
1305
  errors:
1286
- - message: 'Invalid override at overrides.connections[0]. Connection override must include at least one of: _id, _borrowConcurrencyFromConnectionId, requiresEndUserCredentials.'
1306
+ - code: invalid_override
1307
+ message: Invalid override at overrides. Expected overrides to be an object.
1287
1308
  /v1/tools/{_id}/invocations:
1288
1309
  get:
1289
1310
  x-internal: false
@@ -1895,12 +1916,14 @@ paths:
1895
1916
  not landed yet; re-query before concluding nothing was stored.
1896
1917
 
1897
1918
  For nested Tools, set `stage` to `tool` with the nested ToolImport id to fetch the
1898
- composed input/output payload.
1919
+ composed input/output payload; `groupId` is not needed for that stage and is ignored.
1920
+ Until the nested Tool's payloads land, that entry carries only `_expOrImpId` and `stage`.
1899
1921
 
1900
1922
  When the invocation is missing or not visible under the caller's integration ACL,
1901
1923
  the endpoint returns `204 No Content`. `404` applies only to an unknown or inaccessible
1902
- Tool `_id`. A malformed `executionId` returns `422`, and a body missing any of the four
1903
- selector keys returns `400`. Sandbox Tools return `403`.
1924
+ Tool `_id`. A malformed `executionId` returns `422`, and a body missing a required
1925
+ selector key (`groupId` is required for every stage except `tool`) returns `400`.
1926
+ Sandbox Tools return `403`.
1904
1927
  parameters:
1905
1928
  - name: _id
1906
1929
  in: path
@@ -1947,7 +1970,6 @@ paths:
1947
1970
  value:
1948
1971
  _expOrImpId: 67ee026136f4d1eeb529ad63
1949
1972
  stage: tool
1950
- groupId: g-12345
1951
1973
  recordId: r-67890
1952
1974
  responses:
1953
1975
  '200':
@@ -2012,6 +2034,21 @@ paths:
2012
2034
  content-type: application/json; charset=utf-8
2013
2035
  body: '[{"_id":"6a50f177a8d85436a4a890db","name":"SO-1043"}]'
2014
2036
  errors: []
2037
+ nestedToolStage:
2038
+ summary: Nested Tool composed payload — the record it received and the record it returned
2039
+ value:
2040
+ logs:
2041
+ - log:
2042
+ _expOrImpId: 67ee026136f4d1eeb529ad63
2043
+ stage: tool
2044
+ input:
2045
+ record:
2046
+ orderId: SO-1043
2047
+ output:
2048
+ record:
2049
+ orderId: SO-1043
2050
+ title: Sample Slide Show
2051
+ errors: []
2015
2052
  noMatch:
2016
2053
  summary: Selector matched no stored payload
2017
2054
  value:
@@ -31247,7 +31284,8 @@ components:
31247
31284
  description: |-
31248
31285
  Provider-native ID of the storage root (e.g. a Google Drive shared-drive ID) the relative
31249
31286
  path resolves against; set when pathMode is relativePath. The provider's own ID, not a Celigo ID.
31250
- For Google Cloud Storage it is the bucket name.
31287
+ For Google Cloud Storage it is the bucket name, and a bucket that doesn't exist fails the
31288
+ export preview with 422 `gcs_bucket_not_found`.
31251
31289
  examples:
31252
31290
  - 1qU1hvFarBFMb4-twqKm1rR5o_6j9vs9g
31253
31291
  - erp-exports
@@ -39498,8 +39536,15 @@ components:
39498
39536
  required:
39499
39537
  - _expOrImpId
39500
39538
  - stage
39501
- - groupId
39502
39539
  - recordId
39540
+ if:
39541
+ properties:
39542
+ stage:
39543
+ not:
39544
+ const: tool
39545
+ then:
39546
+ required:
39547
+ - groupId
39503
39548
  properties:
39504
39549
  _expOrImpId:
39505
39550
  type: string
@@ -39526,7 +39571,7 @@ components:
39526
39571
  - tool
39527
39572
  groupId:
39528
39573
  type: string
39529
- description: Group identifier of the step record.
39574
+ description: Group identifier of the step record. Ignored when `stage` is `tool`.
39530
39575
  examples:
39531
39576
  - YYFuqOqC
39532
39577
  recordId:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@celigo/api-specs",
3
- "version": "0.2.201",
3
+ "version": "0.2.203",
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": "2a2728aa",
4
+ "iasCommit": "d2f3a96e",
5
5
  "generatedAt": "2026-10-28"
6
6
  },
7
7
  "roots": {