@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.
- package/LICENSE +21 -0
- package/README.md +119 -0
- package/dist/account.yml +592 -0
- package/dist/agent.yml +908 -0
- package/dist/ai-agent.yml +5471 -0
- package/dist/api.yml +4140 -0
- package/dist/apim.yml +1286 -0
- package/dist/asynchelper.yml +3391 -0
- package/dist/audit.yml +2006 -0
- package/dist/connection.yml +8665 -0
- package/dist/connector.yml +1406 -0
- package/dist/ediprofile.yml +911 -0
- package/dist/editransaction.yml +1210 -0
- package/dist/enduser.yml +1724 -0
- package/dist/environment.yml +568 -0
- package/dist/eventreport.yml +692 -0
- package/dist/export.yml +17610 -0
- package/dist/filedefinition.yml +1396 -0
- package/dist/filestorage.yml +3102 -0
- package/dist/flow.yml +7928 -0
- package/dist/guardrail.yml +2763 -0
- package/dist/httpconnector.yml +2277 -0
- package/dist/httpconnectorendpoint.yml +722 -0
- package/dist/httpconnectorresource.yml +396 -0
- package/dist/iclient.yml +4452 -0
- package/dist/import.yml +15381 -0
- package/dist/integration.yml +4406 -0
- package/dist/job.yml +2014 -0
- package/dist/lookupcache.yml +1325 -0
- package/dist/marketplace.yml +685 -0
- package/dist/mcp-oauth-provider.yml +590 -0
- package/dist/mcp-server.yml +2656 -0
- package/dist/notification.yml +488 -0
- package/dist/processor.yml +1253 -0
- package/dist/profile.yml +455 -0
- package/dist/recyclebin.yml +768 -0
- package/dist/script.yml +1128 -0
- package/dist/stack.yml +1291 -0
- package/dist/state.yml +894 -0
- package/dist/subscription.yml +1405 -0
- package/dist/sync.yml +4857 -0
- package/dist/tag.yml +553 -0
- package/dist/template.yml +897 -0
- package/dist/tool.yml +33656 -0
- package/dist/tradingpartnerconnector.yml +1490 -0
- package/dist/user.yml +831 -0
- package/package.json +41 -0
- 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
|