@celigo/api-specs 0.2.1

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.
Files changed (48) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +119 -0
  3. package/dist/account.yml +592 -0
  4. package/dist/agent.yml +908 -0
  5. package/dist/ai-agent.yml +5471 -0
  6. package/dist/api.yml +4140 -0
  7. package/dist/apim.yml +1286 -0
  8. package/dist/asynchelper.yml +3391 -0
  9. package/dist/audit.yml +2006 -0
  10. package/dist/connection.yml +8665 -0
  11. package/dist/connector.yml +1406 -0
  12. package/dist/ediprofile.yml +911 -0
  13. package/dist/editransaction.yml +1210 -0
  14. package/dist/enduser.yml +1724 -0
  15. package/dist/environment.yml +568 -0
  16. package/dist/eventreport.yml +692 -0
  17. package/dist/export.yml +17610 -0
  18. package/dist/filedefinition.yml +1396 -0
  19. package/dist/filestorage.yml +3102 -0
  20. package/dist/flow.yml +7928 -0
  21. package/dist/guardrail.yml +2763 -0
  22. package/dist/httpconnector.yml +2277 -0
  23. package/dist/httpconnectorendpoint.yml +722 -0
  24. package/dist/httpconnectorresource.yml +396 -0
  25. package/dist/iclient.yml +4452 -0
  26. package/dist/import.yml +15381 -0
  27. package/dist/integration.yml +4406 -0
  28. package/dist/job.yml +2014 -0
  29. package/dist/lookupcache.yml +1325 -0
  30. package/dist/marketplace.yml +685 -0
  31. package/dist/mcp-oauth-provider.yml +590 -0
  32. package/dist/mcp-server.yml +2656 -0
  33. package/dist/notification.yml +488 -0
  34. package/dist/processor.yml +1253 -0
  35. package/dist/profile.yml +455 -0
  36. package/dist/recyclebin.yml +768 -0
  37. package/dist/script.yml +1128 -0
  38. package/dist/stack.yml +1291 -0
  39. package/dist/state.yml +894 -0
  40. package/dist/subscription.yml +1405 -0
  41. package/dist/sync.yml +4857 -0
  42. package/dist/tag.yml +553 -0
  43. package/dist/template.yml +897 -0
  44. package/dist/tool.yml +33656 -0
  45. package/dist/tradingpartnerconnector.yml +1490 -0
  46. package/dist/user.yml +831 -0
  47. package/package.json +41 -0
  48. package/schemas.json +8420 -0
@@ -0,0 +1,897 @@
1
+ openapi: 3.2.0
2
+ info:
3
+ version: 1.0.0
4
+ title: Templates
5
+ description: API for managing Celigo integration templates — pre-built configurations Partners publish to the marketplace.
6
+ servers:
7
+ - url: https://api.integrator.io
8
+ description: Production (US / default region)
9
+ - url: https://api.eu.integrator.io
10
+ description: Production (EU region)
11
+ - url: https://api.au.integrator.io
12
+ description: Production (AU region)
13
+ - url: https://api.ca.integrator.io
14
+ description: Production (CA region)
15
+ security:
16
+ - bearerAuth: []
17
+ tags:
18
+ - name: Templates
19
+ description: |-
20
+ Templates are pre-built integration configurations that Partners
21
+ publish to the Celigo marketplace for other users to install.
22
+
23
+ The template lifecycle is: create → upload zip (via `GET /v1/s3SignedURL`) → publish.
24
+
25
+ All endpoints require a **Partner account** — non-partner callers
26
+ receive 403 `access_restricted`.
27
+
28
+ ## Template schema
29
+
30
+ {% openapi-schemas spec="template" schemas="Template" grouped="true" %}
31
+ paths:
32
+ /v1/templates:
33
+ get:
34
+ x-internal: false
35
+ operationId: listTemplates
36
+ tags:
37
+ - Templates
38
+ parameters:
39
+ - name: limit
40
+ in: query
41
+ description: Maximum number of records to return per page.
42
+ schema:
43
+ type: integer
44
+ minimum: 1
45
+ examples:
46
+ - 100
47
+ - $ref: '#/components/parameters/After'
48
+ summary: List templates
49
+ description: |-
50
+ Returns all templates owned by the authenticated Partner account.
51
+ The response is a flat JSON array with no pagination.
52
+ responses:
53
+ '200':
54
+ description: Array of template resources.
55
+ headers:
56
+ Link:
57
+ description: |-
58
+ RFC-5988 pagination links. When more pages remain, includes a `<...>; rel="next"` entry;
59
+ absent on the final page.
60
+ schema:
61
+ type: string
62
+ content:
63
+ application/json:
64
+ schema:
65
+ type: array
66
+ items:
67
+ $ref: '#/components/schemas/Template'
68
+ examples:
69
+ default:
70
+ value:
71
+ - _id: 67ffe71a4432714ded99e81b
72
+ name: Salesforce to NetSuite sync
73
+ description: Bi-directional sync of contacts between Salesforce and NetSuite.
74
+ websiteURL: https://example.com/templates/sf-ns
75
+ contactEmail: partner@example.com
76
+ published: true
77
+ lastModified: '2026-05-05T17:09:48.338Z'
78
+ applications:
79
+ - salesforce
80
+ - netsuite
81
+ free: false
82
+ numInstalls: 42
83
+ - _id: 68a2b3c4d5e6f70089012345
84
+ name: Shopify order import
85
+ lastModified: '2026-04-20T10:15:00.000Z'
86
+ applications:
87
+ - shopify
88
+ free: false
89
+ numInstalls: 0
90
+ '401':
91
+ $ref: '#/components/responses/401-unauthorized'
92
+ '403':
93
+ $ref: '#/components/responses/403-forbidden'
94
+ post:
95
+ x-internal: false
96
+ operationId: createTemplate
97
+ tags:
98
+ - Templates
99
+ summary: Create a template
100
+ description: |-
101
+ Creates a new integration template. Only `name` is required; all
102
+ other fields are optional. Upload a zip via `GET /v1/s3SignedURL`
103
+ before attempting to publish.
104
+ requestBody:
105
+ required: true
106
+ content:
107
+ application/json:
108
+ schema:
109
+ $ref: '#/components/schemas/TemplateInput'
110
+ examples:
111
+ minimal:
112
+ summary: Minimal create
113
+ value:
114
+ name: Salesforce to NetSuite sync
115
+ full:
116
+ summary: All optional fields
117
+ value:
118
+ name: Salesforce to NetSuite sync
119
+ description: Bi-directional sync of contacts between Salesforce and NetSuite.
120
+ websiteURL: https://example.com/templates/sf-ns
121
+ contactEmail: partner@example.com
122
+ imageURL: https://example.com/images/sf-ns.png
123
+ applications:
124
+ - salesforce
125
+ - netsuite
126
+ responses:
127
+ '201':
128
+ description: Template created.
129
+ content:
130
+ application/json:
131
+ schema:
132
+ $ref: '#/components/schemas/Template'
133
+ examples:
134
+ default:
135
+ value:
136
+ _id: 68a2b3c4d5e6f70089012345
137
+ name: Salesforce to NetSuite sync
138
+ lastModified: '2026-05-16T02:33:22.573Z'
139
+ applications: []
140
+ free: false
141
+ numInstalls: 0
142
+ '401':
143
+ $ref: '#/components/responses/401-unauthorized'
144
+ '403':
145
+ $ref: '#/components/responses/403-forbidden'
146
+ '422':
147
+ $ref: '#/components/responses/422-unprocessable-entity'
148
+ /v1/templates/{_id}:
149
+ get:
150
+ x-internal: false
151
+ operationId: getTemplateById
152
+ tags:
153
+ - Templates
154
+ summary: Get a template
155
+ description: Returns a single template by ID.
156
+ parameters:
157
+ - name: _id
158
+ in: path
159
+ required: true
160
+ schema:
161
+ type: string
162
+ format: objectId
163
+ x-celigo-refModel: templates
164
+ examples:
165
+ - 67ffe71a4432714ded99e81b
166
+ responses:
167
+ '200':
168
+ description: The template resource.
169
+ content:
170
+ application/json:
171
+ schema:
172
+ $ref: '#/components/schemas/Template'
173
+ examples:
174
+ published:
175
+ summary: Published template
176
+ value:
177
+ _id: 67ffe71a4432714ded99e81b
178
+ name: Salesforce to NetSuite sync
179
+ description: Bi-directional sync of contacts between Salesforce and NetSuite.
180
+ websiteURL: https://example.com/templates/sf-ns
181
+ contactEmail: partner@example.com
182
+ published: true
183
+ lastModified: '2026-05-05T17:09:48.338Z'
184
+ applications:
185
+ - salesforce
186
+ - netsuite
187
+ free: false
188
+ numInstalls: 42
189
+ unpublished:
190
+ summary: Unpublished template (published field omitted)
191
+ value:
192
+ _id: 68a2b3c4d5e6f70089012345
193
+ name: Draft template
194
+ lastModified: '2026-04-20T10:15:00.000Z'
195
+ applications: []
196
+ free: false
197
+ numInstalls: 0
198
+ '401':
199
+ $ref: '#/components/responses/401-unauthorized'
200
+ '403':
201
+ $ref: '#/components/responses/403-forbidden'
202
+ '404':
203
+ $ref: '#/components/responses/404-not-found'
204
+ put:
205
+ x-internal: false
206
+ operationId: updateTemplate
207
+ tags:
208
+ - Templates
209
+ summary: Update a template
210
+ description: |-
211
+ Replaces the template's fields with the values in the request body.
212
+ Omitted optional fields retain their current values. `name` is
213
+ required on every PUT, even if unchanged.
214
+ parameters:
215
+ - name: _id
216
+ in: path
217
+ required: true
218
+ schema:
219
+ type: string
220
+ format: objectId
221
+ x-celigo-refModel: templates
222
+ examples:
223
+ - 67ffe71a4432714ded99e81b
224
+ requestBody:
225
+ required: true
226
+ content:
227
+ application/json:
228
+ schema:
229
+ $ref: '#/components/schemas/TemplateInput'
230
+ examples:
231
+ updateMetadata:
232
+ summary: Update metadata
233
+ value:
234
+ name: Salesforce to NetSuite sync
235
+ description: Updated description for the marketplace listing.
236
+ contactEmail: new-contact@example.com
237
+ publish:
238
+ summary: Publish to marketplace
239
+ value:
240
+ name: Salesforce to NetSuite sync
241
+ published: true
242
+ responses:
243
+ '200':
244
+ description: Updated template.
245
+ content:
246
+ application/json:
247
+ schema:
248
+ $ref: '#/components/schemas/Template'
249
+ examples:
250
+ updated:
251
+ summary: Template after a metadata update (Partner account)
252
+ value:
253
+ _id: 67ffe71a4432714ded99e81b
254
+ name: Salesforce to NetSuite sync
255
+ description: Updated description for the marketplace listing.
256
+ websiteURL: https://example.com/templates/sf-ns
257
+ contactEmail: new-contact@example.com
258
+ published: true
259
+ lastModified: '2026-06-09T18:21:05.114Z'
260
+ applications:
261
+ - salesforce
262
+ - netsuite
263
+ free: false
264
+ numInstalls: 42
265
+ '400':
266
+ $ref: '#/components/responses/400-bad-request'
267
+ '401':
268
+ $ref: '#/components/responses/401-unauthorized'
269
+ '403':
270
+ $ref: '#/components/responses/403-forbidden'
271
+ '404':
272
+ $ref: '#/components/responses/404-not-found'
273
+ '422':
274
+ description: Template zip has not been uploaded yet.
275
+ content:
276
+ application/json:
277
+ schema:
278
+ $ref: '#/components/schemas/Error'
279
+ examples:
280
+ template_not_found:
281
+ summary: Attempting to publish without a zip
282
+ value:
283
+ errors:
284
+ - code: template_not_found
285
+ message: Template zip must be uploaded before publishing.
286
+ delete:
287
+ x-internal: false
288
+ operationId: deleteTemplate
289
+ tags:
290
+ - Templates
291
+ summary: Delete a template
292
+ description: Permanently deletes a template.
293
+ parameters:
294
+ - name: _id
295
+ in: path
296
+ required: true
297
+ schema:
298
+ type: string
299
+ format: objectId
300
+ x-celigo-refModel: templates
301
+ examples:
302
+ - 67ffe71a4432714ded99e81b
303
+ responses:
304
+ '204':
305
+ description: Template deleted.
306
+ '401':
307
+ $ref: '#/components/responses/401-unauthorized'
308
+ '403':
309
+ $ref: '#/components/responses/403-forbidden'
310
+ '404':
311
+ $ref: '#/components/responses/404-not-found'
312
+ /v1/integrations/template/{_id}:
313
+ post:
314
+ x-internal: false
315
+ operationId: installTemplate
316
+ tags:
317
+ - Templates
318
+ summary: Install an integration from a template
319
+ description: |-
320
+ Installs an integration from a published template. The caller provides a
321
+ `connectionMap` that maps each template-defined connection ID to an actual
322
+ connection ID in the caller's account. Every template connection must
323
+ appear as a key in `connectionMap`.
324
+ parameters:
325
+ - name: _id
326
+ in: path
327
+ required: true
328
+ description: The template ID to install from.
329
+ schema:
330
+ type: string
331
+ format: objectId
332
+ x-celigo-refModel: templates
333
+ examples:
334
+ - 67ffe71a4432714ded99e81b
335
+ requestBody:
336
+ required: true
337
+ content:
338
+ application/json:
339
+ schema:
340
+ type: object
341
+ description: |-
342
+ Connection mapping from template connection IDs to the caller's
343
+ real connection IDs.
344
+ properties:
345
+ connectionMap:
346
+ type: object
347
+ description: |-
348
+ Keys are connection `_id` values from the template; values are
349
+ the caller's own connection `_id` values that should replace
350
+ them during install.
351
+ additionalProperties:
352
+ type: string
353
+ example:
354
+ 61f92026dd053843b5d72350: 64a1234567890abcdef12345
355
+ 61f92026dd053843b5d72351: 64a1234567890abcdef12346
356
+ required:
357
+ - connectionMap
358
+ examples:
359
+ twoConnections:
360
+ summary: Map two template connections to real ones
361
+ value:
362
+ connectionMap:
363
+ 61f92026dd053843b5d72350: 64a1234567890abcdef12345
364
+ 61f92026dd053843b5d72351: 64a1234567890abcdef12346
365
+ responses:
366
+ '200':
367
+ description: Template installed successfully.
368
+ content:
369
+ application/json:
370
+ schema:
371
+ type: object
372
+ description: The created integration and related resources.
373
+ additionalProperties: true
374
+ examples:
375
+ installed:
376
+ summary: Integration created from the template
377
+ value:
378
+ _integrationId: 6405b9d73496e05ff253d587
379
+ '400':
380
+ description: Missing or empty `connectionMap`.
381
+ content:
382
+ application/json:
383
+ schema:
384
+ $ref: '#/components/schemas/Error'
385
+ examples:
386
+ missingConnectionMap:
387
+ value:
388
+ errors:
389
+ - code: invalid_connectionMap
390
+ message: connectionMap is required.
391
+ '401':
392
+ $ref: '#/components/responses/401-unauthorized'
393
+ '403':
394
+ $ref: '#/components/responses/403-forbidden'
395
+ '404':
396
+ description: Template not found.
397
+ content:
398
+ application/json:
399
+ schema:
400
+ $ref: '#/components/schemas/Error'
401
+ examples:
402
+ invalidRef:
403
+ value:
404
+ errors:
405
+ - code: invalid_ref
406
+ message: Template not found.
407
+ '422':
408
+ description: |-
409
+ Connection IDs in `connectionMap` do not match the template's
410
+ expected connection IDs.
411
+ content:
412
+ application/json:
413
+ schema:
414
+ $ref: '#/components/schemas/Error'
415
+ examples:
416
+ invalidConnectionId:
417
+ value:
418
+ errors:
419
+ - code: invalid_connectionId
420
+ message: Invalid connection ID in connectionMap.
421
+ /v1/integrations/template/preview:
422
+ get:
423
+ x-internal: false
424
+ operationId: previewTemplateInstall
425
+ tags:
426
+ - Templates
427
+ summary: Preview a template install from an uploaded zip
428
+ description: |-
429
+ Previews the resources that would be created by installing a template
430
+ from an uploaded zip file. The `runKey` query parameter ties this request
431
+ to a previously uploaded zip (obtained from `GET /v1/s3SignedURL`).
432
+ parameters:
433
+ - name: runKey
434
+ in: query
435
+ required: true
436
+ description: |-
437
+ The `runKey` returned by `GET /v1/s3SignedURL` after uploading the
438
+ template zip file.
439
+ schema:
440
+ type: string
441
+ examples:
442
+ - abc123def456
443
+ responses:
444
+ '200':
445
+ description: Preview of resources the template would create.
446
+ content:
447
+ application/json:
448
+ schema:
449
+ type: object
450
+ description: Preview envelope with resource docs.
451
+ additionalProperties: true
452
+ examples:
453
+ preview:
454
+ summary: Template that creates an integration and one connection
455
+ value:
456
+ stackRequired: false
457
+ objects:
458
+ - model: Integration
459
+ doc:
460
+ _id: 6405b9d73496e05ff253d587
461
+ name: Shopify - NetSuite
462
+ description: Sync Abandoned Checkouts, Collects, … between Shopify and NetSuite.
463
+ - model: Connection
464
+ doc:
465
+ _id: 61f92026dd053843b5d72350
466
+ type: netsuite
467
+ name: NetSuite Connection
468
+ netsuite:
469
+ wsdlVersion: '2020.2'
470
+ concurrencyLevel: 1
471
+ '400':
472
+ description: Missing required `runKey` query parameter.
473
+ content:
474
+ application/json:
475
+ schema:
476
+ $ref: '#/components/schemas/Error'
477
+ examples:
478
+ missingRunKey:
479
+ value:
480
+ errors:
481
+ - code: missing_required_field
482
+ message: runKey is required.
483
+ '401':
484
+ $ref: '#/components/responses/401-unauthorized'
485
+ '403':
486
+ $ref: '#/components/responses/403-forbidden'
487
+ '404':
488
+ description: The `runKey` does not match any uploaded zip.
489
+ content:
490
+ application/json:
491
+ schema:
492
+ $ref: '#/components/schemas/Error'
493
+ examples:
494
+ invalidKey:
495
+ value:
496
+ errors:
497
+ - code: invalid_key
498
+ message: The specified runKey was not found.
499
+ /v1/integrations/template:
500
+ post:
501
+ x-internal: false
502
+ operationId: installTemplateFromZip
503
+ tags:
504
+ - Templates
505
+ summary: Install a template from an uploaded zip
506
+ description: |-
507
+ Installs a template from a previously uploaded zip file. The `runKey`
508
+ in the request body ties this request to the zip upload (obtained from
509
+ `GET /v1/s3SignedURL`).
510
+ requestBody:
511
+ required: true
512
+ content:
513
+ application/json:
514
+ schema:
515
+ type: object
516
+ description: The `runKey` from the zip upload.
517
+ properties:
518
+ runKey:
519
+ type: string
520
+ description: |-
521
+ The `runKey` returned by `GET /v1/s3SignedURL` after uploading
522
+ the template zip file.
523
+ examples:
524
+ - abc123def456
525
+ required:
526
+ - runKey
527
+ examples:
528
+ default:
529
+ value:
530
+ runKey: abc123def456
531
+ responses:
532
+ '200':
533
+ description: Template installed from uploaded zip.
534
+ content:
535
+ application/json:
536
+ schema:
537
+ type: object
538
+ description: The created integration and related resources.
539
+ additionalProperties: true
540
+ examples:
541
+ installed:
542
+ summary: Integration created from the uploaded zip
543
+ value:
544
+ _integrationId: 6405b9d73496e05ff253d587
545
+ '400':
546
+ description: Missing required `runKey` in request body.
547
+ content:
548
+ application/json:
549
+ schema:
550
+ $ref: '#/components/schemas/Error'
551
+ examples:
552
+ missingRunKey:
553
+ value:
554
+ errors:
555
+ - code: missing_required_field
556
+ message: runKey is required.
557
+ '401':
558
+ $ref: '#/components/responses/401-unauthorized'
559
+ '403':
560
+ $ref: '#/components/responses/403-forbidden'
561
+ '404':
562
+ description: The `runKey` does not match any uploaded zip.
563
+ content:
564
+ application/json:
565
+ schema:
566
+ $ref: '#/components/schemas/Error'
567
+ examples:
568
+ invalidKey:
569
+ value:
570
+ errors:
571
+ - code: invalid_key
572
+ message: The specified runKey was not found.
573
+ components:
574
+ securitySchemes:
575
+ bearerAuth:
576
+ type: http
577
+ scheme: bearer
578
+ parameters:
579
+ After:
580
+ name: after
581
+ in: query
582
+ required: false
583
+ description: |-
584
+ Opaque cursor for forward pagination. Pass the value from the `Link`
585
+ response header (`rel="next"`) to fetch the next page.
586
+ schema:
587
+ type: string
588
+ schemas:
589
+ ResourceResponse:
590
+ type: object
591
+ description: Response
592
+ x-celigo-ai-guidance:
593
+ - Core response fields shared by all Celigo resources
594
+ properties:
595
+ _id:
596
+ type: string
597
+ format: objectId
598
+ readOnly: true
599
+ description: Unique identifier for the resource. Format is a 24-character hexadecimal string.
600
+ x-celigo-ai-guidance:
601
+ - |-
602
+ The _id is used in:
603
+ - API endpoints that operate on a specific resource (e.g., GET, PUT, DELETE)
604
+ - References from other resources (e.g., flows that use this resource)
605
+ - Job history and error tracking
606
+ examples:
607
+ - 5f8d43a1b9e5a80011a35f2c
608
+ createdAt:
609
+ type: string
610
+ format: date-time
611
+ readOnly: true
612
+ description: Timestamp when the resource was created. Set automatically and cannot be modified.
613
+ x-celigo-ai-guidance:
614
+ - Recorded in ISO 8601 with a UTC timezone (Z suffix).
615
+ examples:
616
+ - '2023-04-01T09:15:32Z'
617
+ lastModified:
618
+ type: string
619
+ format: date-time
620
+ readOnly: true
621
+ description: Timestamp when the resource was last updated. Changes whenever any property is modified.
622
+ x-celigo-ai-guidance:
623
+ - Recorded in ISO 8601 with a UTC timezone (Z suffix); always equal to or later than `createdAt`.
624
+ examples:
625
+ - '2023-04-15T14:30:15Z'
626
+ deletedAt:
627
+ type:
628
+ - string
629
+ - 'null'
630
+ format: date-time
631
+ readOnly: true
632
+ description: Timestamp when the resource was soft-deleted. When null or absent, the resource is active.
633
+ x-celigo-ai-guidance:
634
+ - Non-null means the resource is soft-deleted (in the recycle bin) — recoverable within the retention period before permanent removal.
635
+ examples:
636
+ - '2023-05-20T11:45:32Z'
637
+ required:
638
+ - _id
639
+ Template:
640
+ type: object
641
+ required:
642
+ - _id
643
+ - name
644
+ - lastModified
645
+ description: |-
646
+ A template resource as returned by the API.
647
+
648
+ Fields that are `false` or empty may be omitted from the response
649
+ (e.g. `published` is omitted when the template is unpublished,
650
+ `imageURL` is omitted when not set).
651
+ allOf:
652
+ - $ref: '#/components/schemas/ResourceResponse'
653
+ - type: object
654
+ properties:
655
+ name:
656
+ type: string
657
+ maxLength: 100
658
+ description: Display name of the template.
659
+ examples:
660
+ - Salesforce to NetSuite sync
661
+ description:
662
+ type: string
663
+ description: Longer description shown in the marketplace.
664
+ examples:
665
+ - Bi-directional sync of contacts between Salesforce and NetSuite.
666
+ imageURL:
667
+ type: string
668
+ description: |-
669
+ URL of the template's marketplace image. Omitted when never
670
+ set; may be an empty string when the field was cleared.
671
+ examples:
672
+ - https://example.com/images/sf-ns.png
673
+ websiteURL:
674
+ type: string
675
+ description: |-
676
+ URL to the partner's website or template landing page. May be
677
+ an empty string when the field was cleared; legacy values may
678
+ lack a scheme (e.g. `www.example.com`).
679
+ examples:
680
+ - https://example.com/templates/sf-ns
681
+ contactEmail:
682
+ type: string
683
+ description: |-
684
+ Contact email(s) for template support — a single address or a
685
+ comma-separated list of addresses.
686
+ examples:
687
+ - partner@example.com
688
+ - support@example.com,ops@example.com
689
+ published:
690
+ type: boolean
691
+ description: |-
692
+ Whether the template is published to the marketplace. Omitted
693
+ from the response when `false`. Can only be set to `true` after
694
+ a template zip file has been uploaded via `GET /v1/s3SignedURL`.
695
+ applications:
696
+ type: array
697
+ items:
698
+ type: string
699
+ description: |-
700
+ Application identifiers associated with this template.
701
+ Values may be application slugs (e.g. `salesforce`) or
702
+ Mongo ObjectIds.
703
+ free:
704
+ type: boolean
705
+ description: When true, the template is free to install with no license requirement.
706
+ readOnly: true
707
+ numInstalls:
708
+ type: integer
709
+ description: Number of times this template has been installed.
710
+ readOnly: true
711
+ minimum: 0
712
+ examples:
713
+ - 42
714
+ Error:
715
+ type: object
716
+ description: Standard error response envelope returned by integrator.io APIs.
717
+ properties:
718
+ errors:
719
+ type: array
720
+ description: List of errors that occurred while processing the request.
721
+ items:
722
+ type: object
723
+ properties:
724
+ code:
725
+ oneOf:
726
+ - type: string
727
+ - type: integer
728
+ description: |-
729
+ Machine-readable error code. Usually a string like
730
+ `invalid_ref`, `missing_required_field`, or `unauthorized`;
731
+ may be an **integer** when the error mirrors an upstream HTTP
732
+ status (e.g. `500`) — most commonly returned by connection-ping
733
+ and adaptor-proxy responses.
734
+ message:
735
+ type: string
736
+ description: Human-readable description of the error.
737
+ field:
738
+ type: string
739
+ description: |-
740
+ Optional pointer to the document field that caused the error.
741
+ Used by structural validation errors (`missing_required_field`,
742
+ `invalid_ref`) to indicate which field is at fault
743
+ (e.g. `_id`, `type`, `http.baseURI`).
744
+ source:
745
+ type: string
746
+ description: |-
747
+ Optional origin layer for the error — e.g. `application` when
748
+ the error came from the remote system the adaptor called,
749
+ `connector` when the adaptor itself rejected the request.
750
+ required:
751
+ - message
752
+ required:
753
+ - errors
754
+ TemplateInput:
755
+ type: object
756
+ description: |-
757
+ Request body for creating or updating a template. `name` is always
758
+ required, even on PUT. `published` can only be set to `true` after
759
+ uploading a template zip via `GET /v1/s3SignedURL`.
760
+ required:
761
+ - name
762
+ properties:
763
+ name:
764
+ type: string
765
+ maxLength: 100
766
+ description: Display name of the template.
767
+ examples:
768
+ - Salesforce to NetSuite sync
769
+ description:
770
+ type: string
771
+ description: Longer description shown in the marketplace.
772
+ examples:
773
+ - Bi-directional sync of contacts between Salesforce and NetSuite.
774
+ imageURL:
775
+ type: string
776
+ description: |-
777
+ URL of the template's marketplace image. Send an empty string to
778
+ clear it.
779
+ examples:
780
+ - https://example.com/images/sf-ns.png
781
+ websiteURL:
782
+ type: string
783
+ description: |-
784
+ URL to the partner's website or template landing page. Send an
785
+ empty string to clear it.
786
+ examples:
787
+ - https://example.com/templates/sf-ns
788
+ contactEmail:
789
+ type: string
790
+ description: |-
791
+ Contact email(s) for template support — a single address or a
792
+ comma-separated list of addresses.
793
+ examples:
794
+ - partner@example.com
795
+ - support@example.com,ops@example.com
796
+ published:
797
+ type: boolean
798
+ description: |-
799
+ Set to `true` to publish the template to the marketplace (requires
800
+ a zip upload first). Set to `false` to unpublish.
801
+ applications:
802
+ type: array
803
+ items:
804
+ type: string
805
+ description: |-
806
+ Application identifiers to associate with this template.
807
+ Values may be application slugs (e.g. `salesforce`) or
808
+ Mongo ObjectIds.
809
+ responses:
810
+ 401-unauthorized:
811
+ description: |-
812
+ Unauthorized. The request lacks a valid bearer token, or the provided token
813
+ failed to authenticate.
814
+
815
+ Note: the 401 response is produced by the auth middleware **before** the
816
+ request reaches the endpoint handler, so it does **not** follow the
817
+ standard `{errors: [...]}` envelope. Instead the body is a bare
818
+ `{message: string}` object with no `code`, no `errors` array. Callers
819
+ handling 401s should key off the HTTP status and the `message` string,
820
+ not try to destructure an `errors[]`.
821
+ content:
822
+ application/json:
823
+ schema:
824
+ type: object
825
+ properties:
826
+ message:
827
+ type: string
828
+ description: |-
829
+ Human-readable description of the auth failure. Known values:
830
+ - `"Unauthorized"` — no `Authorization` header on the request.
831
+ - `"Bearer Authentication Failed"` — header present but token
832
+ is invalid, revoked, or expired.
833
+ required:
834
+ - message
835
+ examples:
836
+ missing_token:
837
+ summary: No Authorization header sent
838
+ value:
839
+ message: Unauthorized
840
+ invalid_token:
841
+ summary: Bearer token invalid or revoked
842
+ value:
843
+ message: Bearer Authentication Failed
844
+ 403-forbidden:
845
+ description: |
846
+ Forbidden. The authenticated caller does not have permission to perform this operation.
847
+ content:
848
+ application/json:
849
+ schema:
850
+ $ref: '#/components/schemas/Error'
851
+ examples:
852
+ default:
853
+ value:
854
+ errors:
855
+ - code: forbidden
856
+ message: You do not have permission to access this resource.
857
+ 422-unprocessable-entity:
858
+ description: |
859
+ Unprocessable entity. The request was well-formed but was unable to be followed due to semantic errors.
860
+ content:
861
+ application/json:
862
+ schema:
863
+ $ref: '#/components/schemas/Error'
864
+ examples:
865
+ default:
866
+ value:
867
+ errors:
868
+ - code: unprocessable_entity
869
+ message: The request could not be processed due to a semantic error.
870
+ 404-not-found:
871
+ description: |
872
+ Not found. The requested resource does not exist or is not visible to the caller.
873
+ content:
874
+ application/json:
875
+ schema:
876
+ $ref: '#/components/schemas/Error'
877
+ examples:
878
+ default:
879
+ value:
880
+ errors:
881
+ - code: not_found
882
+ message: The requested resource was not found.
883
+ 400-bad-request:
884
+ description: |
885
+ Bad request. The server could not understand the request because of malformed syntax or invalid parameters.
886
+ content:
887
+ application/json:
888
+ schema:
889
+ $ref: '#/components/schemas/Error'
890
+ examples:
891
+ default:
892
+ value:
893
+ errors:
894
+ - code: invalid_request
895
+ message: The request body failed validation.
896
+ x-enable-proxy: true
897
+ x-internal: false