@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
package/dist/sync.yml ADDED
@@ -0,0 +1,4857 @@
1
+ openapi: 3.2.0
2
+ info:
3
+ version: 1.0.0
4
+ title: Syncs
5
+ description: API for building and running Celigo syncs and monitoring their jobs, datasets, events, and errors.
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: Syncs
19
+ description: |-
20
+ Syncs continuously replicate data from source applications into a data warehouse.
21
+ A sync belongs to an integration and pairs a source connection with a destination
22
+ database/schema; its **datasets** choose which tables and columns to replicate and
23
+ how records are loaded. Use these endpoints to create and configure syncs and
24
+ their datasets, discover the supported source and destination applications and
25
+ their tables, review change history and schema-drift events, and track usage.
26
+
27
+ ## Sync and dataset schemas
28
+
29
+ {% openapi-schemas spec="sync" schemas="Sync,Dataset" grouped="true" %}
30
+ - name: Sync Jobs
31
+ description: |-
32
+ Every sync run produces a read-only sync job that tracks extraction, loading, and
33
+ error counts across the sync's tables. Use these endpoints to trigger runs,
34
+ monitor job progress and per-table families, retrieve run errors, and cancel
35
+ in-flight jobs.
36
+
37
+ ## Sync job schema
38
+
39
+ {% openapi-schemas spec="sync" schemas="SyncJob" grouped="true" %}
40
+ paths:
41
+ /v1/syncs:
42
+ get:
43
+ x-internal: false
44
+ summary: List syncs
45
+ description: |-
46
+ Returns all syncs in the account, sorted by name. Filter to one integration with
47
+ the `_integrationId` query parameter (equivalent to
48
+ `GET /v1/integrations/{_integrationId}/syncs`).
49
+ operationId: listSyncs
50
+ tags:
51
+ - Syncs
52
+ parameters:
53
+ - name: _integrationId
54
+ in: query
55
+ required: false
56
+ description: Only return syncs that belong to this integration.
57
+ schema:
58
+ type: string
59
+ format: objectId
60
+ x-celigo-refModel: integrations
61
+ examples:
62
+ - 69f4ffd395ec28be9cb8c12e
63
+ - name: limit
64
+ in: query
65
+ required: false
66
+ description: Maximum number of syncs to return per page.
67
+ schema:
68
+ type: integer
69
+ minimum: 1
70
+ maximum: 1000
71
+ default: 1000
72
+ examples:
73
+ - 100
74
+ - name: after
75
+ in: query
76
+ required: false
77
+ description: |-
78
+ Opaque pagination cursor for the next page. Take it from the `after` value in
79
+ the `Link` response header's `rel="next"` URL rather than constructing it.
80
+ schema:
81
+ type: string
82
+ examples:
83
+ - WyIiLCI2OTdiZDAwNDFhMWJiMDdhZWY4NmRmNDciXQ
84
+ - $ref: '#/components/parameters/Include'
85
+ - $ref: '#/components/parameters/Exclude'
86
+ responses:
87
+ '200':
88
+ description: Array of sync objects.
89
+ headers:
90
+ Link:
91
+ description: |-
92
+ RFC 5988 pagination links. When more pages remain, includes a
93
+ `<...>; rel="next"` entry with an `after` cursor; absent on the
94
+ final page.
95
+ schema:
96
+ type: string
97
+ content:
98
+ application/json:
99
+ schema:
100
+ type: array
101
+ items:
102
+ $ref: '#/components/schemas/Sync'
103
+ examples:
104
+ default:
105
+ value:
106
+ - _id: 6a4b8bfb731a7a5cae9bd364
107
+ _userId: 68c821306f5d848c881da205
108
+ _integrationId: 69f4ffd395ec28be9cb8c12e
109
+ name: Salesforce Demo Sync
110
+ disabled: false
111
+ schedule: '? 0 */8 * * *'
112
+ timezone: Asia/Calcutta
113
+ historicDateTime: '2022-07-04T18:30:00.000Z'
114
+ source:
115
+ _connectionId: 6a2a95909e994395f3c2a4e6
116
+ destination:
117
+ _connectionId: 68d02dbe0839a514623c1d6d
118
+ database: ANALYTICS_DB
119
+ schema: salesforce_raw
120
+ driftPolicy:
121
+ dataset:
122
+ added: automate
123
+ removed: automate
124
+ element:
125
+ added: automate
126
+ objectAdded: preserve
127
+ arrayAdded: preserve
128
+ removed: automate
129
+ reduced: automate
130
+ expanded: automate
131
+ - _id: 6966b5bd344490b470099978
132
+ _userId: 68c821306f5d848c881da205
133
+ _integrationId: 6966b587dfb77eaae13110c7
134
+ name: Order Analytics
135
+ disabled: true
136
+ historicDateTime: '1970-01-01T00:00:00.000Z'
137
+ source:
138
+ _connectionId: 68db4afe97bf4f4942a3b92c
139
+ destination: {}
140
+ driftPolicy:
141
+ dataset: {}
142
+ element: {}
143
+ '204':
144
+ description: No syncs exist in the account.
145
+ '401':
146
+ $ref: '#/components/responses/401-unauthorized'
147
+ '422':
148
+ $ref: '#/components/responses/422-unprocessable-entity'
149
+ post:
150
+ x-internal: false
151
+ summary: Create a sync
152
+ description: |-
153
+ Creates a sync inside an integration. Only `_integrationId` and
154
+ `source._connectionId` are required — new syncs start as disabled drafts, so the
155
+ destination, datasets, and schedule can be configured with later requests. Creating
156
+ a sync also registers its connections for the platform's replication runtime.
157
+ operationId: createSync
158
+ tags:
159
+ - Syncs
160
+ requestBody:
161
+ required: true
162
+ content:
163
+ application/json:
164
+ schema:
165
+ $ref: '#/components/schemas/Request'
166
+ examples:
167
+ draft:
168
+ summary: Minimal draft sync
169
+ value:
170
+ _integrationId: 6966b587dfb77eaae13110c7
171
+ source:
172
+ _connectionId: 6a2a95909e994395f3c2a4e6
173
+ configured:
174
+ summary: Fully configured sync
175
+ value:
176
+ _integrationId: 6966b587dfb77eaae13110c7
177
+ name: Salesforce Demo Sync
178
+ schedule: '? 0 */6 * * *'
179
+ timezone: America/New_York
180
+ historicDateTime: '2022-07-04T18:30:00.000Z'
181
+ source:
182
+ _connectionId: 6a2a95909e994395f3c2a4e6
183
+ destination:
184
+ _connectionId: 68d02dbe0839a514623c1d6d
185
+ database: ANALYTICS_DB
186
+ schema: salesforce_raw
187
+ driftPolicy:
188
+ dataset:
189
+ added: automate
190
+ removed: automate
191
+ element:
192
+ added: automate
193
+ objectAdded: preserve
194
+ arrayAdded: preserve
195
+ removed: automate
196
+ reduced: automate
197
+ expanded: automate
198
+ responses:
199
+ '201':
200
+ description: Created sync.
201
+ content:
202
+ application/json:
203
+ schema:
204
+ $ref: '#/components/schemas/Sync'
205
+ examples:
206
+ draft:
207
+ summary: Created draft sync
208
+ value:
209
+ _id: 6a559b5185efa7502eefd439
210
+ _userId: 68c821306f5d848c881da205
211
+ _integrationId: 6966b587dfb77eaae13110c7
212
+ name: ''
213
+ disabled: true
214
+ source:
215
+ _connectionId: 6a2a95909e994395f3c2a4e6
216
+ destination: {}
217
+ driftPolicy:
218
+ dataset: {}
219
+ element: {}
220
+ '400':
221
+ description: |-
222
+ Bad request. `_integrationId` is missing (`missing_integration_id`), the body
223
+ contains `_id` or `_userId` (`id_and_userId_in_request`), or a connection
224
+ reference is not a valid id.
225
+ content:
226
+ application/json:
227
+ schema:
228
+ $ref: '#/components/schemas/Error'
229
+ examples:
230
+ missing_integration_id:
231
+ summary: Missing _integrationId
232
+ value:
233
+ errors:
234
+ - code: missing_integration_id
235
+ message: To create sync integration id is required. Not provided in request body.
236
+ '401':
237
+ $ref: '#/components/responses/401-unauthorized'
238
+ '422':
239
+ description: |-
240
+ Validation failed. `source._connectionId` is missing
241
+ (`missing_source_connection`), the destination duplicates another sync
242
+ (`duplicate_destination_host`), the destination connector rejected the
243
+ sync configuration (`invalid_destination_sync_config`), two enabled
244
+ datasets resolve to the same destination table
245
+ (`conflicting_table_name`), a field exceeds its size limit
246
+ (`size_limit_exceeded`), or the drift policy is inconsistent
247
+ (`drift_policy_invalid_setup`).
248
+ content:
249
+ application/json:
250
+ schema:
251
+ $ref: '#/components/schemas/Error'
252
+ examples:
253
+ missing_source_connection:
254
+ summary: Missing source connection
255
+ value:
256
+ errors:
257
+ - code: missing_source_connection
258
+ message: Source connection is missing in the request
259
+ /v1/syncs/{_id}:
260
+ get:
261
+ x-internal: false
262
+ summary: Get a sync
263
+ description: Returns a single sync by ID.
264
+ operationId: getSync
265
+ tags:
266
+ - Syncs
267
+ parameters:
268
+ - name: _id
269
+ in: path
270
+ required: true
271
+ description: Sync id.
272
+ schema:
273
+ type: string
274
+ format: objectId
275
+ x-celigo-refModel: syncs
276
+ examples:
277
+ - 6a4b8bfb731a7a5cae9bd364
278
+ responses:
279
+ '200':
280
+ description: Sync object.
281
+ content:
282
+ application/json:
283
+ schema:
284
+ $ref: '#/components/schemas/Sync'
285
+ examples:
286
+ configured:
287
+ summary: Configured, enabled sync
288
+ value:
289
+ _id: 6a4b8bfb731a7a5cae9bd364
290
+ _userId: 68c821306f5d848c881da205
291
+ _integrationId: 69f4ffd395ec28be9cb8c12e
292
+ name: Salesforce Demo Sync
293
+ disabled: false
294
+ schedule: '? 0 */8 * * *'
295
+ timezone: Asia/Calcutta
296
+ historicDateTime: '2022-07-04T18:30:00.000Z'
297
+ source:
298
+ _connectionId: 6a2a95909e994395f3c2a4e6
299
+ destination:
300
+ _connectionId: 68d02dbe0839a514623c1d6d
301
+ database: ANALYTICS_DB
302
+ schema: salesforce_raw
303
+ driftPolicy:
304
+ dataset:
305
+ added: automate
306
+ removed: automate
307
+ element:
308
+ added: automate
309
+ objectAdded: preserve
310
+ arrayAdded: preserve
311
+ removed: automate
312
+ reduced: automate
313
+ expanded: automate
314
+ '401':
315
+ $ref: '#/components/responses/401-unauthorized'
316
+ '404':
317
+ $ref: '#/components/responses/404-not-found'
318
+ put:
319
+ x-internal: false
320
+ summary: Update a sync
321
+ description: |-
322
+ Replaces a sync's configuration. Send the complete desired state: omitted optional
323
+ fields (`schedule`, `timezone`, destination details, `driftPolicy`) are cleared, not
324
+ preserved. `_integrationId` cannot be sent — the integration is fixed at creation.
325
+
326
+ Set `disabled: false` to enable the sync once its source, destination, datasets, and
327
+ `historicDateTime` are configured; enabling an incomplete sync fails with
328
+ `422 sync_not_enabled`.
329
+ operationId: updateSync
330
+ tags:
331
+ - Syncs
332
+ parameters:
333
+ - name: _id
334
+ in: path
335
+ required: true
336
+ description: Sync id.
337
+ schema:
338
+ type: string
339
+ format: objectId
340
+ x-celigo-refModel: syncs
341
+ examples:
342
+ - 6a4b8bfb731a7a5cae9bd364
343
+ requestBody:
344
+ required: true
345
+ content:
346
+ application/json:
347
+ schema:
348
+ $ref: '#/components/schemas/Request'
349
+ examples:
350
+ configure:
351
+ summary: Name the sync and set its destination
352
+ value:
353
+ name: Salesforce Demo Sync
354
+ schedule: '? 0 */6 * * *'
355
+ timezone: America/New_York
356
+ historicDateTime: '2022-07-04T18:30:00.000Z'
357
+ source:
358
+ _connectionId: 6a2a95909e994395f3c2a4e6
359
+ destination:
360
+ _connectionId: 68d02dbe0839a514623c1d6d
361
+ database: ANALYTICS_DB
362
+ schema: salesforce_raw
363
+ driftPolicy:
364
+ dataset:
365
+ added: automate
366
+ removed: automate
367
+ element:
368
+ added: automate
369
+ objectAdded: preserve
370
+ arrayAdded: preserve
371
+ removed: automate
372
+ reduced: automate
373
+ expanded: automate
374
+ responses:
375
+ '200':
376
+ description: Updated sync.
377
+ content:
378
+ application/json:
379
+ schema:
380
+ $ref: '#/components/schemas/Sync'
381
+ examples:
382
+ configured:
383
+ summary: Updated sync
384
+ value:
385
+ _id: 6a4b8bfb731a7a5cae9bd364
386
+ _userId: 68c821306f5d848c881da205
387
+ _integrationId: 69f4ffd395ec28be9cb8c12e
388
+ name: Salesforce Demo Sync
389
+ disabled: true
390
+ schedule: '? 0 */6 * * *'
391
+ timezone: America/New_York
392
+ historicDateTime: '2022-07-04T18:30:00.000Z'
393
+ source:
394
+ _connectionId: 6a2a95909e994395f3c2a4e6
395
+ destination:
396
+ _connectionId: 68d02dbe0839a514623c1d6d
397
+ database: ANALYTICS_DB
398
+ schema: salesforce_raw
399
+ driftPolicy:
400
+ dataset:
401
+ added: automate
402
+ removed: automate
403
+ element:
404
+ added: automate
405
+ objectAdded: preserve
406
+ arrayAdded: preserve
407
+ removed: automate
408
+ reduced: automate
409
+ expanded: automate
410
+ '400':
411
+ description: |-
412
+ Bad request. The body contains `_integrationId` (`sync_integration_id_update`)
413
+ or `_id`/`_userId` (`id_and_userId_in_request`).
414
+ content:
415
+ application/json:
416
+ schema:
417
+ $ref: '#/components/schemas/Error'
418
+ examples:
419
+ integration_locked:
420
+ summary: Attempt to change the integration
421
+ value:
422
+ errors:
423
+ - code: sync_integration_id_update
424
+ message: Integration Id cannot be updated in sync once assigned.
425
+ '401':
426
+ $ref: '#/components/responses/401-unauthorized'
427
+ '404':
428
+ $ref: '#/components/responses/404-not-found'
429
+ '422':
430
+ description: |-
431
+ Validation failed. `source._connectionId` is missing
432
+ (`missing_source_connection`), the sync is not ready to enable
433
+ (`sync_not_enabled`), the destination duplicates another sync
434
+ (`duplicate_destination_host`), the destination connector rejected the
435
+ sync configuration (`invalid_destination_sync_config`), two enabled
436
+ datasets resolve to the same destination table
437
+ (`conflicting_table_name`), a field exceeds its size limit
438
+ (`size_limit_exceeded`), or the drift policy is inconsistent
439
+ (`drift_policy_invalid_setup`).
440
+ content:
441
+ application/json:
442
+ schema:
443
+ $ref: '#/components/schemas/Error'
444
+ examples:
445
+ not_ready_to_enable:
446
+ summary: Enabling an incomplete sync
447
+ value:
448
+ errors:
449
+ - field: disabled
450
+ code: sync_not_enabled
451
+ message: Sync can be enabled only when source, destinations are properly defined.
452
+ delete:
453
+ x-internal: false
454
+ summary: Delete a sync
455
+ description: |-
456
+ Deletes a sync and tears down its replication resources, including its datasets.
457
+ The sync must be disabled first — deleting an enabled sync fails with
458
+ `400 sync_delete_not_allowed`. Syncs are not recoverable through the recycle bin.
459
+ operationId: deleteSync
460
+ tags:
461
+ - Syncs
462
+ parameters:
463
+ - name: _id
464
+ in: path
465
+ required: true
466
+ description: Sync id.
467
+ schema:
468
+ type: string
469
+ format: objectId
470
+ x-celigo-refModel: syncs
471
+ examples:
472
+ - 6a559b5185efa7502eefd439
473
+ responses:
474
+ '204':
475
+ description: Sync deleted.
476
+ '400':
477
+ description: |-
478
+ The sync is still enabled.
479
+ Error code: `sync_delete_not_allowed`.
480
+ content:
481
+ application/json:
482
+ schema:
483
+ $ref: '#/components/schemas/Error'
484
+ examples:
485
+ enabled:
486
+ summary: Sync still enabled
487
+ value:
488
+ errors:
489
+ - code: sync_delete_not_allowed
490
+ message: Cannot delete an enabled sync. Please disable the sync before deletion.
491
+ '401':
492
+ $ref: '#/components/responses/401-unauthorized'
493
+ '404':
494
+ $ref: '#/components/responses/404-not-found'
495
+ /v1/integrations/{_integrationId}/syncs:
496
+ get:
497
+ x-internal: false
498
+ summary: List syncs in an integration
499
+ description: |-
500
+ Returns the syncs that belong to one integration, sorted by name. Equivalent to
501
+ `GET /v1/syncs?_integrationId={_integrationId}`.
502
+ operationId: listSyncsForIntegration
503
+ tags:
504
+ - Syncs
505
+ parameters:
506
+ - name: _integrationId
507
+ in: path
508
+ required: true
509
+ description: Integration id.
510
+ schema:
511
+ type: string
512
+ format: objectId
513
+ x-celigo-refModel: integrations
514
+ examples:
515
+ - 6966b587dfb77eaae13110c7
516
+ - name: limit
517
+ in: query
518
+ required: false
519
+ description: Maximum number of syncs to return per page.
520
+ schema:
521
+ type: integer
522
+ minimum: 1
523
+ maximum: 1000
524
+ default: 1000
525
+ examples:
526
+ - 100
527
+ - name: after
528
+ in: query
529
+ required: false
530
+ description: |-
531
+ Opaque pagination cursor for the next page. Take it from the `after` value in
532
+ the `Link` response header's `rel="next"` URL rather than constructing it.
533
+ schema:
534
+ type: string
535
+ examples:
536
+ - WyIiLCI2OTdiZDAwNDFhMWJiMDdhZWY4NmRmNDciXQ
537
+ - $ref: '#/components/parameters/Include'
538
+ - $ref: '#/components/parameters/Exclude'
539
+ responses:
540
+ '200':
541
+ description: Array of sync objects.
542
+ headers:
543
+ Link:
544
+ description: |-
545
+ RFC 5988 pagination links. When more pages remain, includes a
546
+ `<...>; rel="next"` entry with an `after` cursor; absent on the
547
+ final page.
548
+ schema:
549
+ type: string
550
+ content:
551
+ application/json:
552
+ schema:
553
+ type: array
554
+ items:
555
+ $ref: '#/components/schemas/Sync'
556
+ examples:
557
+ default:
558
+ value:
559
+ - _id: 6966b5bd344490b470099978
560
+ _userId: 68c821306f5d848c881da205
561
+ _integrationId: 6966b587dfb77eaae13110c7
562
+ name: Order Analytics
563
+ disabled: true
564
+ schedule: '? 0 */1 * * *'
565
+ timezone: America/New_York
566
+ historicDateTime: '1970-01-01T00:00:00.000Z'
567
+ source:
568
+ _connectionId: 68db4afe97bf4f4942a3b92c
569
+ destination:
570
+ _connectionId: 68d02dbe0839a514623c1d6d
571
+ database: ANALYTICS_DB
572
+ schema: orders_raw
573
+ driftPolicy:
574
+ dataset: {}
575
+ element: {}
576
+ '204':
577
+ description: The integration has no syncs, or the integration does not exist.
578
+ '401':
579
+ $ref: '#/components/responses/401-unauthorized'
580
+ '422':
581
+ $ref: '#/components/responses/422-unprocessable-entity'
582
+ /v1/syncs/{_syncId}/datasets:
583
+ get:
584
+ x-internal: false
585
+ summary: List datasets for a sync
586
+ description: |-
587
+ Returns the datasets configured on a sync — the tables/objects it replicates —
588
+ sorted by name. Export-backed datasets whose export no longer uses the sync's
589
+ source connection carry `mismatchSyncConnection: true`.
590
+ operationId: listDatasetsForSync
591
+ tags:
592
+ - Syncs
593
+ parameters:
594
+ - name: _syncId
595
+ in: path
596
+ required: true
597
+ description: Sync id.
598
+ schema:
599
+ type: string
600
+ format: objectId
601
+ x-celigo-refModel: syncs
602
+ examples:
603
+ - 6a55970bdb54be366c858bc9
604
+ - name: limit
605
+ in: query
606
+ required: false
607
+ description: Maximum number of datasets to return per page.
608
+ schema:
609
+ type: integer
610
+ minimum: 1
611
+ maximum: 1000
612
+ default: 1000
613
+ examples:
614
+ - 100
615
+ - name: after
616
+ in: query
617
+ required: false
618
+ description: |-
619
+ Opaque pagination cursor for the next page. Take it from the `after` value in
620
+ the `Link` response header's `rel="next"` URL rather than constructing it.
621
+ schema:
622
+ type: string
623
+ examples:
624
+ - WyJBY2NvdW50IiwiNmE1NTk3MGM1Zjk0OThhMTc1OGEwYWQzIl0
625
+ - $ref: '#/components/parameters/Include'
626
+ - $ref: '#/components/parameters/Exclude'
627
+ responses:
628
+ '200':
629
+ description: Array of dataset objects.
630
+ headers:
631
+ Link:
632
+ description: |-
633
+ RFC 5988 pagination links. When more pages remain, includes a
634
+ `<...>; rel="next"` entry with an `after` cursor; absent on the
635
+ final page.
636
+ schema:
637
+ type: string
638
+ content:
639
+ application/json:
640
+ schema:
641
+ type: array
642
+ items:
643
+ $ref: '#/components/schemas/Dataset'
644
+ examples:
645
+ default:
646
+ value:
647
+ - _id: 6a559b547885d8f93921c2ba
648
+ _userId: 68c821306f5d848c881da205
649
+ _syncId: 6a55970bdb54be366c858bc9
650
+ name: Account
651
+ externalId: Account
652
+ enable: true
653
+ enableAllDataElements: false
654
+ ingestionMode: merge
655
+ userActionRequired: false
656
+ exportProperties:
657
+ type: delta
658
+ delta: {}
659
+ driftPolicy:
660
+ element: {}
661
+ dataElements:
662
+ - name: Id
663
+ enable: true
664
+ mask: false
665
+ isPrimaryKey: true
666
+ children: []
667
+ - name: Name
668
+ enable: true
669
+ mask: false
670
+ children: []
671
+ - _id: 6a55974edb54be366c858d26
672
+ _userId: 68c821306f5d848c881da205
673
+ _syncId: 6a55970bdb54be366c858bc9
674
+ name: Pull Salesforce Records
675
+ externalId: 6a3e7c54c2387aaa87881b80
676
+ enable: true
677
+ enableAllDataElements: false
678
+ ingestionMode: merge
679
+ tableName: pull_salesforce_records
680
+ isExport: true
681
+ userActionRequired: false
682
+ exportProperties:
683
+ delta: {}
684
+ driftPolicy:
685
+ element: {}
686
+ dataElements:
687
+ - name: Id
688
+ enable: true
689
+ mask: false
690
+ isPrimaryKey: true
691
+ children: []
692
+ mismatchSyncConnection: true
693
+ '204':
694
+ description: The sync has no datasets, or the sync does not exist.
695
+ '401':
696
+ $ref: '#/components/responses/401-unauthorized'
697
+ '422':
698
+ $ref: '#/components/responses/422-unprocessable-entity'
699
+ put:
700
+ x-internal: false
701
+ summary: Create or update datasets for a sync
702
+ description: |-
703
+ Creates and updates a sync's datasets in one batch. Each array item either creates
704
+ a dataset (identified by `externalId`) or updates one (identified by `_id`); a
705
+ single request can mix both. Updates fully replace each dataset's writable fields.
706
+ The response body is empty — read back the saved datasets with
707
+ `GET /v1/syncs/{_syncId}/datasets`.
708
+ operationId: upsertDatasetsForSync
709
+ tags:
710
+ - Syncs
711
+ parameters:
712
+ - name: _syncId
713
+ in: path
714
+ required: true
715
+ description: Sync id.
716
+ schema:
717
+ type: string
718
+ format: objectId
719
+ x-celigo-refModel: syncs
720
+ examples:
721
+ - 6a55970bdb54be366c858bc9
722
+ requestBody:
723
+ required: true
724
+ content:
725
+ application/json:
726
+ schema:
727
+ type: array
728
+ minItems: 1
729
+ items:
730
+ $ref: '#/components/schemas/DatasetUpsertItem'
731
+ examples:
732
+ create:
733
+ summary: Create two datasets
734
+ value:
735
+ - name: Account
736
+ externalId: Account
737
+ enable: true
738
+ ingestionMode: merge
739
+ exportProperties:
740
+ type: all
741
+ dataElements:
742
+ - name: Id
743
+ enable: true
744
+ mask: false
745
+ isPrimaryKey: true
746
+ - name: Name
747
+ enable: true
748
+ mask: false
749
+ - name: Contact
750
+ externalId: Contact
751
+ enable: false
752
+ ingestionMode: merge
753
+ exportProperties:
754
+ type: delta
755
+ update:
756
+ summary: Switch an existing dataset to append mode
757
+ value:
758
+ - _id: 6a559b547885d8f93921c2ba
759
+ name: Account
760
+ enable: true
761
+ ingestionMode: append
762
+ dataElements:
763
+ - name: Id
764
+ enable: true
765
+ isPrimaryKey: true
766
+ - name: Name
767
+ enable: true
768
+ responses:
769
+ '201':
770
+ description: Datasets created/updated. The response has no body.
771
+ '400':
772
+ description: |-
773
+ Bad request. The body is not a non-empty array (`INVALID_REQUEST_BODY` /
774
+ `EMPTY_REQUEST_BODY`), an item has both or neither of `_id`/`externalId`
775
+ (`dataset_externalId_id_required`), an `externalId` already exists or an `_id`
776
+ does not belong to the sync, `tableName` values collide
777
+ (`duplicate_dataset_table_names`), or an export dataset's export uses a
778
+ different connection than the sync (`connection_mismatch`).
779
+ content:
780
+ application/json:
781
+ schema:
782
+ $ref: '#/components/schemas/Error'
783
+ examples:
784
+ both_ids:
785
+ summary: Item with both _id and externalId
786
+ value:
787
+ errors:
788
+ - code: dataset_externalId_id_required
789
+ message: For creation externalId should be provide and for update dataset id should be provided but not both.
790
+ '401':
791
+ $ref: '#/components/responses/401-unauthorized'
792
+ '422':
793
+ description: |-
794
+ Validation failed. An enabled dataset is missing `ingestionMode`
795
+ (`ingestion_mode_required_for_enabled_datasets`), a `merge` dataset has no
796
+ primary key, a `tableName` is already taken, two source columns sanitize to
797
+ the same destination column name (`duplicate_sanitized_column_names` — rename
798
+ or disable the conflicting source columns), or a data-element combination is
799
+ invalid (e.g. `transformMode` without children, or `isPrimaryKey` with `mask`).
800
+ content:
801
+ application/json:
802
+ schema:
803
+ $ref: '#/components/schemas/Error'
804
+ examples:
805
+ missing_ingestion_mode:
806
+ summary: Enabled dataset without ingestionMode
807
+ value:
808
+ errors:
809
+ - field: ingestionMode
810
+ code: ingestion_mode_required_for_enabled_datasets
811
+ message: ingestionMode field is required for enabled datasets.
812
+ /v1/syncs/{_syncId}/datasets/{_id}:
813
+ get:
814
+ x-internal: false
815
+ summary: Get a dataset
816
+ description: Returns a single dataset of a sync by ID.
817
+ operationId: getDataset
818
+ tags:
819
+ - Syncs
820
+ parameters:
821
+ - name: _syncId
822
+ in: path
823
+ required: true
824
+ description: Sync id.
825
+ schema:
826
+ type: string
827
+ format: objectId
828
+ x-celigo-refModel: syncs
829
+ examples:
830
+ - 6a55970bdb54be366c858bc9
831
+ - name: _id
832
+ in: path
833
+ required: true
834
+ description: Dataset id.
835
+ schema:
836
+ type: string
837
+ format: objectId
838
+ examples:
839
+ - 6a559b547885d8f93921c2ba
840
+ responses:
841
+ '200':
842
+ description: Dataset object.
843
+ content:
844
+ application/json:
845
+ schema:
846
+ $ref: '#/components/schemas/Dataset'
847
+ examples:
848
+ selectedColumns:
849
+ summary: Dataset with an explicit column selection
850
+ value:
851
+ _id: 6a559b547885d8f93921c2ba
852
+ _userId: 68c821306f5d848c881da205
853
+ _syncId: 6a55970bdb54be366c858bc9
854
+ name: Account
855
+ externalId: Account
856
+ enable: true
857
+ enableAllDataElements: false
858
+ ingestionMode: merge
859
+ userActionRequired: false
860
+ exportProperties:
861
+ type: delta
862
+ delta: {}
863
+ driftPolicy:
864
+ element: {}
865
+ dataElements:
866
+ - name: Id
867
+ enable: true
868
+ mask: false
869
+ isPrimaryKey: true
870
+ children: []
871
+ - name: Name
872
+ enable: true
873
+ mask: false
874
+ children: []
875
+ '401':
876
+ $ref: '#/components/responses/401-unauthorized'
877
+ '404':
878
+ $ref: '#/components/responses/404-not-found'
879
+ /v1/syncs/{_syncId}/run:
880
+ post:
881
+ x-internal: false
882
+ operationId: runSync
883
+ tags:
884
+ - Sync Jobs
885
+ summary: Trigger a sync run
886
+ description: |-
887
+ Queues an on-demand run of a sync and returns identifiers for the new sync job. The
888
+ run is **asynchronous**: the response returns as soon as the job is queued. Use
889
+ `GET /v1/syncJobs/{_syncJobId}` or `GET /v1/syncs/{_syncId}/syncJobs` to poll for terminal status.
890
+
891
+ By default the run type is `"normal"` (incremental delta). Pass `runType: "resync"` to force a
892
+ full re-extraction from the source, which drops the delta checkpoint and reloads all data.
893
+
894
+ Preconditions enforced by the platform:
895
+ - The sync must not be disabled (`422 invalid_sync`).
896
+ - There must not be a job already queued for this sync (`409 sync_job_already_queued`).
897
+
898
+ The returned `flowExecutionGroupId` is a correlation key across jobs and errors. For
899
+ multi-table syncs, a single run creates one parent job with per-table children visible via
900
+ `GET /v1/syncJobs/{_syncJobId}/family`.
901
+ parameters:
902
+ - name: _syncId
903
+ in: path
904
+ required: true
905
+ description: Sync id.
906
+ schema:
907
+ type: string
908
+ format: objectId
909
+ x-celigo-refModel: syncs
910
+ requestBody:
911
+ required: false
912
+ content:
913
+ application/json:
914
+ schema:
915
+ $ref: '#/components/schemas/SyncRunRequest'
916
+ examples:
917
+ default:
918
+ summary: Default incremental run
919
+ value: {}
920
+ resync:
921
+ summary: Full resync from source
922
+ value:
923
+ runType: resync
924
+ responses:
925
+ '200':
926
+ description: Sync run accepted and queued.
927
+ content:
928
+ application/json:
929
+ schema:
930
+ $ref: '#/components/schemas/SyncRunResponse'
931
+ examples:
932
+ default:
933
+ summary: Successful run trigger
934
+ value:
935
+ syncId: 682094fa7eb7fc3e7ab7a4a0
936
+ flowExecutionGroupId: 6821c01c39db7c2b9cdc0e29
937
+ '400':
938
+ description: |-
939
+ Bad request. Invalid `runType` value.
940
+ Error code: `invalid_parameter`.
941
+ content:
942
+ application/json:
943
+ schema:
944
+ $ref: '#/components/schemas/Error'
945
+ examples:
946
+ invalid_run_type:
947
+ summary: Invalid runType parameter
948
+ value:
949
+ errors:
950
+ - code: invalid_parameter
951
+ message: Invalid value for runType.
952
+ '401':
953
+ $ref: '#/components/responses/401-unauthorized'
954
+ '404':
955
+ description: |-
956
+ Sync not found.
957
+ Error code: `invalid_ref`.
958
+ content:
959
+ application/json:
960
+ schema:
961
+ $ref: '#/components/schemas/Error'
962
+ examples:
963
+ sync_not_found:
964
+ summary: Sync does not exist
965
+ value:
966
+ errors:
967
+ - code: invalid_ref
968
+ message: Sync not found.
969
+ '409':
970
+ description: |-
971
+ A sync job is already queued or running for this sync.
972
+ Error code: `sync_job_already_queued`.
973
+ content:
974
+ application/json:
975
+ schema:
976
+ $ref: '#/components/schemas/Error'
977
+ examples:
978
+ already_queued:
979
+ summary: Job already in progress
980
+ value:
981
+ errors:
982
+ - code: sync_job_already_queued
983
+ message: A sync job is already queued for this sync.
984
+ '422':
985
+ description: |-
986
+ The sync is disabled and cannot be run.
987
+ Error code: `invalid_sync`.
988
+ content:
989
+ application/json:
990
+ schema:
991
+ $ref: '#/components/schemas/Error'
992
+ examples:
993
+ disabled:
994
+ summary: Sync is disabled
995
+ value:
996
+ errors:
997
+ - code: invalid_sync
998
+ message: The sync is disabled.
999
+ /v1/syncs/{_syncId}/syncJobs:
1000
+ get:
1001
+ x-internal: false
1002
+ operationId: listSyncJobs
1003
+ tags:
1004
+ - Sync Jobs
1005
+ summary: List sync jobs for a sync
1006
+ description: |-
1007
+ Returns all sync job records for the given sync, ordered by creation time (most recent first).
1008
+ The response wraps the array in a `data` field alongside a `totalCount`.
1009
+
1010
+ Note: although the response shape suggests pagination (`totalCount`), the `limit`, `offset`,
1011
+ and `status` query parameters are silently ignored by the server as of this writing. The
1012
+ endpoint always returns the complete list of jobs.
1013
+ parameters:
1014
+ - name: _syncId
1015
+ in: path
1016
+ required: true
1017
+ description: Sync id.
1018
+ schema:
1019
+ type: string
1020
+ format: objectId
1021
+ x-celigo-refModel: syncs
1022
+ responses:
1023
+ '200':
1024
+ description: List of sync jobs.
1025
+ content:
1026
+ application/json:
1027
+ schema:
1028
+ $ref: '#/components/schemas/SyncJobsResponse'
1029
+ examples:
1030
+ with_jobs:
1031
+ summary: Sync with two completed jobs
1032
+ value:
1033
+ data:
1034
+ - _id: 6821c01c39db7c2b9cdc0e30
1035
+ flowExecutionGroupId: 6821c01c39db7c2b9cdc0e29
1036
+ _integrationId: 67d7b6e69e4b1371e5d1e2a1
1037
+ _syncId: 682094fa7eb7fc3e7ab7a4a0
1038
+ createdAt: '2026-04-28T14:30:00.000Z'
1039
+ startedAt: '2026-04-28T14:30:01.123Z'
1040
+ endedAt: '2026-04-28T14:35:12.456Z'
1041
+ purgeAt: '2026-07-28T14:35:12.456Z'
1042
+ status: completed
1043
+ numErrors: 0
1044
+ numLoadedRecords: 12450
1045
+ numExtractedRecords: 12450
1046
+ numTablesSynced: 3
1047
+ triggeredBy: user:tyler.lamparter@celigo.com
1048
+ runType: normal
1049
+ - _id: 6821b00a39db7c2b9cdc0d10
1050
+ flowExecutionGroupId: 6821b00a39db7c2b9cdc0d09
1051
+ _integrationId: 67d7b6e69e4b1371e5d1e2a1
1052
+ _syncId: 682094fa7eb7fc3e7ab7a4a0
1053
+ createdAt: '2026-04-27T08:00:00.000Z'
1054
+ startedAt: '2026-04-27T08:00:02.000Z'
1055
+ endedAt: '2026-04-27T08:12:45.000Z'
1056
+ purgeAt: '2026-07-27T08:12:45.000Z'
1057
+ status: completed
1058
+ numErrors: 2
1059
+ numLoadedRecords: 11980
1060
+ numExtractedRecords: 11982
1061
+ numTablesSynced: 3
1062
+ triggeredBy: schedule
1063
+ runType: normal
1064
+ totalCount: 2
1065
+ '401':
1066
+ $ref: '#/components/responses/401-unauthorized'
1067
+ '404':
1068
+ description: |-
1069
+ Sync not found.
1070
+ Error code: `invalid_ref`.
1071
+ content:
1072
+ application/json:
1073
+ schema:
1074
+ $ref: '#/components/schemas/Error'
1075
+ examples:
1076
+ not_found:
1077
+ summary: Invalid sync id
1078
+ value:
1079
+ errors:
1080
+ - code: invalid_ref
1081
+ message: Sync not found.
1082
+ /v1/syncs/{_syncId}/syncJobs/cancel:
1083
+ put:
1084
+ x-internal: false
1085
+ operationId: cancelSyncJobs
1086
+ tags:
1087
+ - Sync Jobs
1088
+ summary: Cancel all running sync jobs for a sync
1089
+ description: |-
1090
+ Cancels all currently running or queued sync jobs for the given sync. This is a bulk cancel
1091
+ that affects every in-progress job associated with the sync.
1092
+
1093
+ If there are no cancellable jobs (all jobs are already in a terminal state), the request
1094
+ is rejected. To cancel a single specific job instead, use
1095
+ `PUT /v1/syncJobs/{_syncJobId}/cancel`.
1096
+ parameters:
1097
+ - name: _syncId
1098
+ in: path
1099
+ required: true
1100
+ description: Sync id.
1101
+ schema:
1102
+ type: string
1103
+ format: objectId
1104
+ x-celigo-refModel: syncs
1105
+ responses:
1106
+ '204':
1107
+ description: All running sync jobs have been canceled. No response body.
1108
+ '401':
1109
+ $ref: '#/components/responses/401-unauthorized'
1110
+ '404':
1111
+ description: |-
1112
+ No cancellable jobs found for this sync.
1113
+ Error code: `sync_jobs_not_found`.
1114
+ content:
1115
+ application/json:
1116
+ schema:
1117
+ $ref: '#/components/schemas/Error'
1118
+ examples:
1119
+ no_jobs:
1120
+ summary: No running jobs to cancel
1121
+ value:
1122
+ errors:
1123
+ - code: sync_jobs_not_found
1124
+ message: No cancellable sync jobs found.
1125
+ /v1/syncJobs/{_syncJobId}:
1126
+ get:
1127
+ x-internal: false
1128
+ operationId: getSyncJobById
1129
+ tags:
1130
+ - Sync Jobs
1131
+ summary: Get a sync job
1132
+ description: |-
1133
+ Returns a single sync job record. Sync jobs are read-only records created by the platform when
1134
+ a sync run is triggered. The record includes status, timing, record counts, and error counts.
1135
+ A gap between `numExtractedRecords` and `numLoadedRecords` indicates records that failed
1136
+ during loading -- see `numErrors`.
1137
+ parameters:
1138
+ - name: _syncJobId
1139
+ in: path
1140
+ required: true
1141
+ description: Sync job id.
1142
+ schema:
1143
+ type: string
1144
+ format: objectId
1145
+ x-celigo-refModel: syncJobs
1146
+ responses:
1147
+ '200':
1148
+ description: The sync job record.
1149
+ content:
1150
+ application/json:
1151
+ schema:
1152
+ $ref: '#/components/schemas/SyncJob'
1153
+ examples:
1154
+ completed:
1155
+ summary: A completed sync job
1156
+ value:
1157
+ _id: 6821c01c39db7c2b9cdc0e30
1158
+ flowExecutionGroupId: 6821c01c39db7c2b9cdc0e29
1159
+ _integrationId: 67d7b6e69e4b1371e5d1e2a1
1160
+ _syncId: 682094fa7eb7fc3e7ab7a4a0
1161
+ createdAt: '2026-04-28T14:30:00.000Z'
1162
+ startedAt: '2026-04-28T14:30:01.123Z'
1163
+ endedAt: '2026-04-28T14:35:12.456Z'
1164
+ purgeAt: '2026-07-28T14:35:12.456Z'
1165
+ status: completed
1166
+ numErrors: 0
1167
+ numLoadedRecords: 12450
1168
+ numExtractedRecords: 12450
1169
+ numTablesSynced: 3
1170
+ triggeredBy: user:tyler.lamparter@celigo.com
1171
+ runType: normal
1172
+ running:
1173
+ summary: A currently running sync job
1174
+ value:
1175
+ _id: 6821d11d39db7c2b9cdc0f40
1176
+ flowExecutionGroupId: 6821d11d39db7c2b9cdc0f39
1177
+ _integrationId: 67d7b6e69e4b1371e5d1e2a1
1178
+ _syncId: 682094fa7eb7fc3e7ab7a4a0
1179
+ createdAt: '2026-04-30T09:00:00.000Z'
1180
+ startedAt: '2026-04-30T09:00:01.500Z'
1181
+ purgeAt: '2026-07-30T09:00:00.000Z'
1182
+ status: running
1183
+ numErrors: 0
1184
+ numLoadedRecords: 3200
1185
+ numExtractedRecords: 5100
1186
+ numTablesSynced: 2
1187
+ triggeredBy: schedule
1188
+ runType: normal
1189
+ '401':
1190
+ $ref: '#/components/responses/401-unauthorized'
1191
+ '404':
1192
+ $ref: '#/components/responses/404-not-found'
1193
+ /v1/syncJobs/{_syncJobId}/family:
1194
+ get:
1195
+ x-internal: false
1196
+ operationId: getSyncJobFamily
1197
+ tags:
1198
+ - Sync Jobs
1199
+ summary: Get a sync job and its table-level children
1200
+ description: |-
1201
+ Returns the parent sync job with all of its per-table child jobs inlined under a `tables` array.
1202
+ Each table entry contains its own status, record counts, error counts, and timing.
1203
+
1204
+ A sync job family maps to one sync execution: the parent is the overall sync job and the children
1205
+ represent each table that was synced as part of that run. Parent-level counters are the
1206
+ authoritative totals; `tables[]` provides the per-table breakdown. `tables` may be empty if
1207
+ the job was canceled before any table work started.
1208
+ parameters:
1209
+ - name: _syncJobId
1210
+ in: path
1211
+ required: true
1212
+ description: Sync job id (parent job).
1213
+ schema:
1214
+ type: string
1215
+ format: objectId
1216
+ x-celigo-refModel: syncJobs
1217
+ responses:
1218
+ '200':
1219
+ description: Sync job family (parent with per-table children).
1220
+ content:
1221
+ application/json:
1222
+ schema:
1223
+ $ref: '#/components/schemas/SyncJobFamily'
1224
+ examples:
1225
+ completed_family:
1226
+ summary: Completed sync with two tables
1227
+ value:
1228
+ _id: 6821c01c39db7c2b9cdc0e30
1229
+ flowExecutionGroupId: 6821c01c39db7c2b9cdc0e29
1230
+ _integrationId: 67d7b6e69e4b1371e5d1e2a1
1231
+ _syncId: 682094fa7eb7fc3e7ab7a4a0
1232
+ createdAt: '2026-04-28T14:30:00.000Z'
1233
+ startedAt: '2026-04-28T14:30:01.123Z'
1234
+ endedAt: '2026-04-28T14:35:12.456Z'
1235
+ purgeAt: '2026-07-28T14:35:12.456Z'
1236
+ status: completed
1237
+ numErrors: 0
1238
+ numLoadedRecords: 12450
1239
+ numExtractedRecords: 12450
1240
+ numTablesSynced: 2
1241
+ triggeredBy: schedule
1242
+ runType: normal
1243
+ tables:
1244
+ - _id: 6821c01c39db7c2b9cdc0e31
1245
+ tableName: contacts
1246
+ createdAt: '2026-04-28T14:30:01.200Z'
1247
+ status: completed
1248
+ numErrors: 0
1249
+ numLoadedRecords: 8200
1250
+ numExtractedRecords: 8200
1251
+ startedAt: '2026-04-28T14:30:01.300Z'
1252
+ endedAt: '2026-04-28T14:33:45.100Z'
1253
+ - _id: 6821c01c39db7c2b9cdc0e32
1254
+ tableName: accounts
1255
+ createdAt: '2026-04-28T14:30:01.250Z'
1256
+ status: completed
1257
+ numErrors: 0
1258
+ numLoadedRecords: 4250
1259
+ numExtractedRecords: 4250
1260
+ startedAt: '2026-04-28T14:30:01.350Z'
1261
+ endedAt: '2026-04-28T14:35:12.400Z'
1262
+ '401':
1263
+ $ref: '#/components/responses/401-unauthorized'
1264
+ '404':
1265
+ $ref: '#/components/responses/404-not-found'
1266
+ /v1/syncJobs/{_parentJobId}/errors:
1267
+ get:
1268
+ x-internal: false
1269
+ operationId: listSyncJobErrors
1270
+ tags:
1271
+ - Sync Jobs
1272
+ summary: List errors for a sync job
1273
+ description: |-
1274
+ Returns an array of error records for the given parent sync job. Errors are produced during
1275
+ extraction or loading and are scoped to individual tables.
1276
+
1277
+ The response includes an `x-total-count` header with the total number of errors (useful when
1278
+ filtering by child job).
1279
+
1280
+ Use the `_childJobId` query parameter to filter errors to a single table's child job. Without
1281
+ it, errors across all tables in the run are returned. To find a child job id, call
1282
+ `GET /v1/syncJobs/{_syncJobId}/family` and read `tables[]._id`. Each error also carries a
1283
+ `tableName` field for client-side grouping. The response is a bare array, not wrapped in a
1284
+ `data` envelope.
1285
+ parameters:
1286
+ - name: _parentJobId
1287
+ in: path
1288
+ required: true
1289
+ description: Parent sync job id.
1290
+ schema:
1291
+ type: string
1292
+ format: objectId
1293
+ x-celigo-refModel: syncJobs
1294
+ - name: _childJobId
1295
+ in: query
1296
+ required: false
1297
+ description: |-
1298
+ Optional child (table-level) job id to filter errors to a single table.
1299
+ Obtain this from the `tables[]._id` field in the job family response.
1300
+ schema:
1301
+ type: string
1302
+ format: objectId
1303
+ examples:
1304
+ - 6821c01c39db7c2b9cdc0e31
1305
+ responses:
1306
+ '200':
1307
+ description: Array of sync error records.
1308
+ headers:
1309
+ x-total-count:
1310
+ description: Total number of errors matching the query.
1311
+ schema:
1312
+ type: integer
1313
+ content:
1314
+ application/json:
1315
+ schema:
1316
+ type: array
1317
+ items:
1318
+ $ref: '#/components/schemas/SyncError'
1319
+ examples:
1320
+ with_errors:
1321
+ summary: Two errors from different tables
1322
+ value:
1323
+ - scope: extract
1324
+ source: salesforce
1325
+ code: INVALID_FIELD
1326
+ message: No such column 'Custom_Field__c' on entity 'Account'.
1327
+ _datasetId: 6821c01c39db7c2b9cdc0e35
1328
+ _syncId: 682094fa7eb7fc3e7ab7a4a0
1329
+ _parentSyncJobId: 6821c01c39db7c2b9cdc0e30
1330
+ _childSyncJobId: 6821c01c39db7c2b9cdc0e31
1331
+ flowExecutionGroupId: 6821c01c39db7c2b9cdc0e29
1332
+ stage: extraction
1333
+ datasetName: Salesforce Accounts
1334
+ tableName: accounts
1335
+ occurredAt: '2026-04-28T14:31:22.789Z'
1336
+ - scope: load
1337
+ source: snowflake
1338
+ code: DUPLICATE_KEY
1339
+ message: Duplicate key value violates unique constraint on 'contacts.email'.
1340
+ _datasetId: 6821c01c39db7c2b9cdc0e36
1341
+ _syncId: 682094fa7eb7fc3e7ab7a4a0
1342
+ _parentSyncJobId: 6821c01c39db7c2b9cdc0e30
1343
+ _childSyncJobId: 6821c01c39db7c2b9cdc0e32
1344
+ flowExecutionGroupId: 6821c01c39db7c2b9cdc0e29
1345
+ stage: loading
1346
+ datasetName: Salesforce Contacts
1347
+ tableName: contacts
1348
+ occurredAt: '2026-04-28T14:32:05.123Z'
1349
+ empty:
1350
+ summary: No errors
1351
+ value: []
1352
+ '401':
1353
+ $ref: '#/components/responses/401-unauthorized'
1354
+ '404':
1355
+ $ref: '#/components/responses/404-not-found'
1356
+ /v1/syncJobs/{_syncJobId}/cancel:
1357
+ put:
1358
+ x-internal: false
1359
+ operationId: cancelSyncJob
1360
+ tags:
1361
+ - Sync Jobs
1362
+ summary: Cancel a single sync job
1363
+ description: |-
1364
+ Cancels a specific sync job by id.
1365
+
1366
+ Only jobs that are still in progress (`running`) can be canceled. Jobs already in a terminal
1367
+ state (`completed`, `failed`, `canceled`) cannot be canceled. To cancel all running jobs for
1368
+ a sync at once, use `PUT /v1/syncs/{_syncId}/syncJobs/cancel` instead.
1369
+ parameters:
1370
+ - name: _syncJobId
1371
+ in: path
1372
+ required: true
1373
+ description: Sync job id to cancel.
1374
+ schema:
1375
+ type: string
1376
+ format: objectId
1377
+ x-celigo-refModel: syncJobs
1378
+ responses:
1379
+ '204':
1380
+ description: Sync job canceled successfully. No response body.
1381
+ '401':
1382
+ $ref: '#/components/responses/401-unauthorized'
1383
+ '403':
1384
+ description: |-
1385
+ The sync job is already in a terminal state and cannot be canceled.
1386
+ Error code: `sync_job_not_cancellable`.
1387
+ content:
1388
+ application/json:
1389
+ schema:
1390
+ $ref: '#/components/schemas/Error'
1391
+ examples:
1392
+ not_cancellable:
1393
+ summary: Job already completed
1394
+ value:
1395
+ errors:
1396
+ - code: sync_job_not_cancellable
1397
+ message: The sync job is not in a cancellable state.
1398
+ '404':
1399
+ $ref: '#/components/responses/404-not-found'
1400
+ /v1/integrations/{_integrationId}/syncJobs/latest:
1401
+ get:
1402
+ x-internal: false
1403
+ operationId: getLatestSyncJobsForIntegration
1404
+ tags:
1405
+ - Sync Jobs
1406
+ summary: Get the latest sync job for each sync in an integration
1407
+ description: |-
1408
+ Returns the most recent sync job for each sync resource belonging to the given integration.
1409
+ The response is a bare JSON array with one `SyncJob` entry per sync.
1410
+
1411
+ Returns an empty response when no sync jobs exist for any sync in the integration. Each entry
1412
+ in the array represents the latest run of a different sync; use `_syncId` on each returned job
1413
+ to correlate back to the sync resource. The response is a bare array, not wrapped in a `data`
1414
+ envelope.
1415
+ parameters:
1416
+ - name: _integrationId
1417
+ in: path
1418
+ required: true
1419
+ description: Integration id.
1420
+ schema:
1421
+ type: string
1422
+ format: objectId
1423
+ x-celigo-refModel: integrations
1424
+ responses:
1425
+ '200':
1426
+ description: Array of latest sync jobs (one per sync in the integration).
1427
+ content:
1428
+ application/json:
1429
+ schema:
1430
+ type: array
1431
+ items:
1432
+ $ref: '#/components/schemas/SyncJob'
1433
+ examples:
1434
+ two_syncs:
1435
+ summary: Integration with two syncs
1436
+ value:
1437
+ - _id: 6821c01c39db7c2b9cdc0e30
1438
+ flowExecutionGroupId: 6821c01c39db7c2b9cdc0e29
1439
+ _integrationId: 67d7b6e69e4b1371e5d1e2a1
1440
+ _syncId: 682094fa7eb7fc3e7ab7a4a0
1441
+ createdAt: '2026-04-28T14:30:00.000Z'
1442
+ startedAt: '2026-04-28T14:30:01.123Z'
1443
+ endedAt: '2026-04-28T14:35:12.456Z'
1444
+ purgeAt: '2026-07-28T14:35:12.456Z'
1445
+ status: completed
1446
+ numErrors: 0
1447
+ numLoadedRecords: 12450
1448
+ numExtractedRecords: 12450
1449
+ numTablesSynced: 3
1450
+ triggeredBy: schedule
1451
+ runType: normal
1452
+ - _id: 6821d22e39db7c2b9cdc1050
1453
+ flowExecutionGroupId: 6821d22e39db7c2b9cdc1049
1454
+ _integrationId: 67d7b6e69e4b1371e5d1e2a1
1455
+ _syncId: 682094fb7eb7fc3e7ab7a4b1
1456
+ createdAt: '2026-04-29T02:00:00.000Z'
1457
+ startedAt: '2026-04-29T02:00:01.000Z'
1458
+ endedAt: '2026-04-29T02:08:33.000Z'
1459
+ purgeAt: '2026-07-29T02:08:33.000Z'
1460
+ status: completed
1461
+ numErrors: 1
1462
+ numLoadedRecords: 5600
1463
+ numExtractedRecords: 5601
1464
+ numTablesSynced: 2
1465
+ triggeredBy: schedule
1466
+ runType: normal
1467
+ '204':
1468
+ description: No sync jobs exist for any sync in this integration.
1469
+ '401':
1470
+ $ref: '#/components/responses/401-unauthorized'
1471
+ '404':
1472
+ description: |-
1473
+ Integration not found or not sync-enabled.
1474
+ Error codes: `sync_job_invalid_integration_id` (integration exists but has no syncs),
1475
+ `sync_job_missing_integration` (integration does not exist).
1476
+ content:
1477
+ application/json:
1478
+ schema:
1479
+ $ref: '#/components/schemas/Error'
1480
+ examples:
1481
+ not_sync_enabled:
1482
+ summary: Integration has no syncs
1483
+ value:
1484
+ errors:
1485
+ - code: sync_job_invalid_integration_id
1486
+ message: The integration is not sync-enabled.
1487
+ missing:
1488
+ summary: Integration does not exist
1489
+ value:
1490
+ errors:
1491
+ - code: sync_job_missing_integration
1492
+ message: Integration not found.
1493
+ /v1/syncs/{_syncId}/audit:
1494
+ get:
1495
+ x-internal: false
1496
+ summary: Get audit log for a sync
1497
+ description: |-
1498
+ Returns the change history for a sync. Entries cover the sync itself **and** the related
1499
+ resources it depends on — its datasets (the tables being replicated) and the source and
1500
+ destination connections it uses — so a single response interleaves `sync`, `dataset`, and
1501
+ `connection` events. Read `resourceType` on each entry to tell them apart.
1502
+ tags:
1503
+ - Syncs
1504
+ operationId: getSyncAudit
1505
+ parameters:
1506
+ - name: _syncId
1507
+ in: path
1508
+ description: Sync id.
1509
+ required: true
1510
+ schema:
1511
+ type: string
1512
+ format: objectId
1513
+ x-celigo-refModel: syncs
1514
+ examples:
1515
+ - 6a1889b0c7b977adc441bc0d
1516
+ - name: limit
1517
+ in: query
1518
+ description: Maximum number of audit entries to return per page.
1519
+ required: false
1520
+ schema:
1521
+ type: integer
1522
+ minimum: 1
1523
+ maximum: 1000
1524
+ default: 1000
1525
+ examples:
1526
+ - 100
1527
+ - name: after
1528
+ in: query
1529
+ required: false
1530
+ description: |-
1531
+ Opaque pagination cursor for the next page. Take it from the `after` value in the `Link`
1532
+ response header's `rel="next"` URL rather than constructing it.
1533
+ schema:
1534
+ type: string
1535
+ examples:
1536
+ - W3siJGRhdGUiOiIyMDI2LTA1LTAxVDAwOjAwOjAwLjAwMFoifSwiNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0
1537
+ - name: from
1538
+ in: query
1539
+ required: false
1540
+ description: Only return entries at or after this timestamp.
1541
+ schema:
1542
+ type: string
1543
+ format: date-time
1544
+ examples:
1545
+ - '2026-05-01T00:00:00.000Z'
1546
+ - name: to
1547
+ in: query
1548
+ required: false
1549
+ description: Only return entries at or before this timestamp.
1550
+ schema:
1551
+ type: string
1552
+ format: date-time
1553
+ examples:
1554
+ - '2026-05-31T23:59:59.999Z'
1555
+ - name: action
1556
+ in: query
1557
+ required: false
1558
+ description: Filter by the change type. Maps to the `event` field on each entry.
1559
+ schema:
1560
+ type: string
1561
+ enum:
1562
+ - create
1563
+ - update
1564
+ - delete
1565
+ - view
1566
+ - restore
1567
+ - purge
1568
+ - signin
1569
+ - signout
1570
+ - purgelogs
1571
+ examples:
1572
+ - update
1573
+ x-enumDescriptions:
1574
+ create: A resource was created.
1575
+ update: A resource was modified.
1576
+ delete: A resource was deleted (moved to recycle bin).
1577
+ view: A resource was viewed or accessed.
1578
+ restore: A resource was restored from the recycle bin.
1579
+ purge: A resource was permanently purged from the recycle bin.
1580
+ signin: A user signed in to the account.
1581
+ signout: A user signed out of the account.
1582
+ purgelogs: Execution logs were purged for a resource.
1583
+ - name: source
1584
+ in: query
1585
+ required: false
1586
+ description: Filter by how the change was initiated.
1587
+ schema:
1588
+ type: string
1589
+ enum:
1590
+ - ui
1591
+ - api
1592
+ - system
1593
+ - connector
1594
+ - script
1595
+ - sso
1596
+ examples:
1597
+ - ui
1598
+ x-enumDescriptions:
1599
+ ui: Change made through the Celigo web UI.
1600
+ api: Change made via the REST API.
1601
+ system: Change made automatically by the platform.
1602
+ connector: Change made by an Integration App (connector) process.
1603
+ script: Change made by a custom script execution.
1604
+ sso: Change triggered by an SSO authentication event.
1605
+ - name: _byUserId
1606
+ in: query
1607
+ required: false
1608
+ description: Filter to changes performed by a single user.
1609
+ schema:
1610
+ type: string
1611
+ format: objectId
1612
+ x-celigo-refModel: users
1613
+ examples:
1614
+ - 624cb0346309dc3a543733a2
1615
+ - name: resourceType
1616
+ in: query
1617
+ required: false
1618
+ description: |-
1619
+ Narrow the aggregated results to a single resource kind — e.g. `sync` for only the sync's
1620
+ own changes, excluding its datasets and connections.
1621
+ schema:
1622
+ type: string
1623
+ enum:
1624
+ - sync
1625
+ - dataset
1626
+ - connection
1627
+ examples:
1628
+ - sync
1629
+ x-enumDescriptions:
1630
+ sync: Only changes to the sync resource itself.
1631
+ dataset: Only changes to the sync's datasets.
1632
+ connection: Only changes to the sync's source or destination connections.
1633
+ - name: _resourceId
1634
+ in: query
1635
+ required: false
1636
+ description: |-
1637
+ Filter to a single resource's entries. Must be sent together with `resourceType`;
1638
+ sending it alone returns `400 invalid_id`.
1639
+ schema:
1640
+ type: string
1641
+ format: objectId
1642
+ examples:
1643
+ - 682094fa7eb7fc3e7ab7a4a0
1644
+ responses:
1645
+ '200':
1646
+ description: Array of audit entries, newest first.
1647
+ headers:
1648
+ Link:
1649
+ description: |-
1650
+ RFC 5988 pagination link. Includes `<...>; rel="next"` with an
1651
+ `after` cursor when more entries exist; absent on the final page.
1652
+ schema:
1653
+ type: string
1654
+ content:
1655
+ application/json:
1656
+ schema:
1657
+ type: array
1658
+ items:
1659
+ type: object
1660
+ description: A single change recorded against the sync or one of its related resources.
1661
+ properties:
1662
+ _id:
1663
+ type: string
1664
+ format: objectId
1665
+ description: Unique identifier for this audit entry.
1666
+ examples:
1667
+ - 6a1889e4c7b977adc441cb3f
1668
+ resourceType:
1669
+ type: string
1670
+ description: |-
1671
+ Which resource the entry describes. The endpoint aggregates the sync and the
1672
+ resources it references, so a single response mixes all three values.
1673
+ enum:
1674
+ - sync
1675
+ - dataset
1676
+ - connection
1677
+ examples:
1678
+ - sync
1679
+ x-enumDescriptions:
1680
+ sync: A change to the sync resource itself (name, schedule, drift policy, etc.).
1681
+ dataset: A change to one of the sync's datasets (the tables being replicated).
1682
+ connection: A change to a source or destination connection the sync uses.
1683
+ _resourceId:
1684
+ type: string
1685
+ format: objectId
1686
+ description: ID of the resource this entry belongs to. Matches `resourceType`.
1687
+ examples:
1688
+ - 682094fa7eb7fc3e7ab7a4a0
1689
+ event:
1690
+ type: string
1691
+ description: Type of change that occurred.
1692
+ enum:
1693
+ - create
1694
+ - update
1695
+ - delete
1696
+ examples:
1697
+ - update
1698
+ x-enumDescriptions:
1699
+ create: Resource was created.
1700
+ update: Resource was modified.
1701
+ delete: Resource was soft-deleted (moved to recycle bin).
1702
+ source:
1703
+ type: string
1704
+ description: How the change was initiated.
1705
+ enum:
1706
+ - ui
1707
+ - system
1708
+ examples:
1709
+ - ui
1710
+ x-enumDescriptions:
1711
+ ui: Change made through the Celigo UI.
1712
+ system: Change made by an automated platform process.
1713
+ time:
1714
+ type: string
1715
+ format: date-time
1716
+ description: When the change occurred.
1717
+ examples:
1718
+ - '2026-05-28T18:31:00.861Z'
1719
+ byUser:
1720
+ type: object
1721
+ description: |-
1722
+ User the change is attributed to; always present. For `ui` changes this is the
1723
+ user who made it; for `system` changes it is the account owner the automated
1724
+ process ran as.
1725
+ properties:
1726
+ _id:
1727
+ type: string
1728
+ format: objectId
1729
+ x-celigo-refModel: users
1730
+ description: User ID.
1731
+ examples:
1732
+ - 624cb0346309dc3a543733a2
1733
+ email:
1734
+ type: string
1735
+ format: email
1736
+ description: User email address.
1737
+ examples:
1738
+ - user@example.com
1739
+ name:
1740
+ type: string
1741
+ description: User display name.
1742
+ examples:
1743
+ - Tyler Lamparter
1744
+ fieldChanges:
1745
+ type: array
1746
+ description: Fields that were modified. Dot-notation paths reach into nested objects.
1747
+ items:
1748
+ type: object
1749
+ description: One modified field, with its values before and after the change.
1750
+ properties:
1751
+ fieldPath:
1752
+ type: string
1753
+ description: Dot-notation path of the changed field.
1754
+ examples:
1755
+ - schedule
1756
+ oldValue:
1757
+ description: The field's value before the change. Absent on `create` events. Type matches the changed field.
1758
+ newValue:
1759
+ description: The field's value after the change. Absent on `delete` events. Type matches the changed field.
1760
+ deletedInfo:
1761
+ type: object
1762
+ description: Metadata about the deleted resource. Present on `delete` events.
1763
+ properties:
1764
+ name:
1765
+ type: string
1766
+ description: Name of the resource at the time of deletion.
1767
+ examples:
1768
+ - Order Analytics
1769
+ _integrationId:
1770
+ type: string
1771
+ format: objectId
1772
+ x-celigo-refModel: integrations
1773
+ description: Integration the deleted resource belonged to.
1774
+ examples:
1775
+ - 6985ccd4dab90f9cbe9080dd
1776
+ examples:
1777
+ default:
1778
+ summary: A sync update and a connection update
1779
+ value:
1780
+ - _id: 6a1889e4c7b977adc441cb3f
1781
+ resourceType: sync
1782
+ _resourceId: 682094fa7eb7fc3e7ab7a4a0
1783
+ source: ui
1784
+ event: update
1785
+ time: '2026-05-28T18:31:00.861Z'
1786
+ byUser:
1787
+ _id: 624cb0346309dc3a543733a2
1788
+ email: user@example.com
1789
+ name: Tyler Lamparter
1790
+ fieldChanges:
1791
+ - fieldPath: name
1792
+ oldValue: ''
1793
+ newValue: Order Analytics
1794
+ - fieldPath: schedule
1795
+ newValue: '? 0 */1 * * *'
1796
+ - fieldPath: timezone
1797
+ newValue: Etc/UTC
1798
+ - _id: 6a1889c9c7b977adc441c27a
1799
+ resourceType: connection
1800
+ _resourceId: 68c8213f8ece256d4c9fa351
1801
+ source: system
1802
+ event: update
1803
+ time: '2026-05-28T18:30:32.891Z'
1804
+ byUser:
1805
+ _id: 624cb0346309dc3a543733a2
1806
+ email: user@example.com
1807
+ name: Tyler Lamparter
1808
+ fieldChanges:
1809
+ - fieldPath: salesforce.refreshToken
1810
+ newValue: '********'
1811
+ '204':
1812
+ description: No audit entries match the query.
1813
+ '400':
1814
+ $ref: '#/components/responses/400-bad-request'
1815
+ '401':
1816
+ $ref: '#/components/responses/401-unauthorized'
1817
+ '404':
1818
+ $ref: '#/components/responses/404-not-found'
1819
+ '422':
1820
+ $ref: '#/components/responses/422-unprocessable-entity'
1821
+ /v1/di/resource/syncs/{_syncId}/events:
1822
+ get:
1823
+ x-internal: false
1824
+ summary: List events for a sync
1825
+ description: |-
1826
+ Returns the events recorded for a sync across all of its runs — schema drift the
1827
+ platform detected or applied, and data-catalog activity — newest first. Events are
1828
+ retained per the account's data retention period; a `time_lte` older than the
1829
+ retention window returns an empty list.
1830
+ operationId: listSyncEvents
1831
+ tags:
1832
+ - Syncs
1833
+ parameters:
1834
+ - name: _syncId
1835
+ in: path
1836
+ required: true
1837
+ description: Sync id.
1838
+ schema:
1839
+ type: string
1840
+ format: objectId
1841
+ x-celigo-refModel: syncs
1842
+ examples:
1843
+ - 6a4b8bfb731a7a5cae9bd364
1844
+ - name: limit
1845
+ in: query
1846
+ required: false
1847
+ description: Maximum number of events to return per page.
1848
+ schema:
1849
+ type: integer
1850
+ minimum: 1
1851
+ maximum: 1000
1852
+ default: 100
1853
+ examples:
1854
+ - 25
1855
+ - name: page
1856
+ in: query
1857
+ required: false
1858
+ description: 1-based page number. Combine with `limit` to page through results.
1859
+ schema:
1860
+ type: integer
1861
+ minimum: 1
1862
+ default: 1
1863
+ examples:
1864
+ - 2
1865
+ - name: time_lte
1866
+ in: query
1867
+ required: false
1868
+ description: Only return events recorded at or before this timestamp.
1869
+ schema:
1870
+ type: string
1871
+ format: date-time
1872
+ examples:
1873
+ - '2026-07-14T00:00:00.000Z'
1874
+ - name: time_gt
1875
+ in: query
1876
+ required: false
1877
+ description: |-
1878
+ Only return events recorded after this timestamp. Must not be in the future
1879
+ (`422 future_time_gt_not_allowed`).
1880
+ schema:
1881
+ type: string
1882
+ format: date-time
1883
+ examples:
1884
+ - '2026-07-07T00:00:00.000Z'
1885
+ - name: type
1886
+ in: query
1887
+ required: false
1888
+ description: Only return events of one category.
1889
+ schema:
1890
+ type: string
1891
+ enum:
1892
+ - Schema Drift
1893
+ - Data Catalog
1894
+ examples:
1895
+ - Schema Drift
1896
+ x-enumDescriptions:
1897
+ Schema Drift: Changes to the source schema that were detected or applied.
1898
+ Data Catalog: Dataset metadata activity recorded while cataloging the source.
1899
+ - name: resourceName
1900
+ in: query
1901
+ required: false
1902
+ description: Only return events for one source table/object.
1903
+ schema:
1904
+ type: string
1905
+ examples:
1906
+ - Account
1907
+ - name: flowExecutionGroupId
1908
+ in: query
1909
+ required: false
1910
+ description: |-
1911
+ Only return events from one run. Use the `flowExecutionGroupId` returned by
1912
+ `POST /v1/syncs/{_syncId}/run`.
1913
+ schema:
1914
+ type: string
1915
+ examples:
1916
+ - d0f875a575bd4b8c944533da773f350a
1917
+ responses:
1918
+ '200':
1919
+ description: Events matching the filters, newest first.
1920
+ headers:
1921
+ Link:
1922
+ description: |-
1923
+ RFC 5988 pagination links with page-based navigation: `rel="first"`,
1924
+ `rel="last"`, and — where applicable — `rel="prev"` and `rel="next"`.
1925
+ schema:
1926
+ type: string
1927
+ X-Total-Count:
1928
+ description: Total number of events matching the current filters.
1929
+ schema:
1930
+ type: string
1931
+ examples:
1932
+ - '18'
1933
+ content:
1934
+ application/json:
1935
+ schema:
1936
+ type: object
1937
+ required:
1938
+ - events
1939
+ properties:
1940
+ events:
1941
+ type: array
1942
+ items:
1943
+ $ref: '#/components/schemas/SyncEvent'
1944
+ examples:
1945
+ drift:
1946
+ summary: Schema drift recorded during extraction
1947
+ value:
1948
+ events:
1949
+ - id: 80ba31fe-b66d-4777-9b12-3177c55aab13
1950
+ _syncId: 6a4b8bfb731a7a5cae9bd364
1951
+ _userId: 68c821306f5d848c881da205
1952
+ flowExecutionGroupId: d0f875a575bd4b8c944533da773f350a
1953
+ resourceName: RelatedListDefinition
1954
+ severity: INFO
1955
+ eventTime: '2026-07-13T12:36:06.225Z'
1956
+ type: Schema Drift
1957
+ stage: Extract
1958
+ metadata:
1959
+ action: Table removed
1960
+ resourceType: Table
1961
+ '401':
1962
+ $ref: '#/components/responses/401-unauthorized'
1963
+ '403':
1964
+ description: The sync belongs to a different account owner.
1965
+ content:
1966
+ application/json:
1967
+ schema:
1968
+ $ref: '#/components/schemas/Error'
1969
+ '404':
1970
+ description: |-
1971
+ Sync not found.
1972
+ Error code: `invalid_ref`.
1973
+ content:
1974
+ application/json:
1975
+ schema:
1976
+ $ref: '#/components/schemas/Error'
1977
+ examples:
1978
+ sync_not_found:
1979
+ summary: Sync does not exist
1980
+ value:
1981
+ errors:
1982
+ - code: invalid_ref
1983
+ message: Sync doc not found for the given id '000000000000000000000000'.
1984
+ '422':
1985
+ description: |-
1986
+ Invalid filter. A timestamp value cannot be parsed, or `time_gt` is in the
1987
+ future (`future_time_gt_not_allowed`).
1988
+ content:
1989
+ application/json:
1990
+ schema:
1991
+ $ref: '#/components/schemas/Error'
1992
+ examples:
1993
+ future_time_gt:
1994
+ summary: time_gt in the future
1995
+ value:
1996
+ errors:
1997
+ - code: future_time_gt_not_allowed
1998
+ message: time_gt cannot be in the future
1999
+ /v1/syncs/usage:
2000
+ get:
2001
+ x-internal: false
2002
+ summary: Get per-sync usage for the current month
2003
+ description: |-
2004
+ Returns the number of records each sync loaded during the current calendar month
2005
+ (UTC), for the current environment. Only syncs that ran this month appear.
2006
+ Requires account-administration permission (the same level that manages account
2007
+ users); accounts without a Data Ingestion entitlement get an empty `usage` array.
2008
+ operationId: getSyncUsage
2009
+ tags:
2010
+ - Syncs
2011
+ responses:
2012
+ '200':
2013
+ description: Per-sync loaded-record volumes for the current month.
2014
+ content:
2015
+ application/json:
2016
+ schema:
2017
+ type: object
2018
+ required:
2019
+ - usage
2020
+ properties:
2021
+ usage:
2022
+ type: array
2023
+ items:
2024
+ type: object
2025
+ description: One sync's loaded-record volume this month.
2026
+ properties:
2027
+ _id:
2028
+ type: string
2029
+ format: objectId
2030
+ x-celigo-refModel: syncs
2031
+ description: Sync the volume belongs to.
2032
+ examples:
2033
+ - 6a4b8bfb731a7a5cae9bd364
2034
+ name:
2035
+ type:
2036
+ - string
2037
+ - 'null'
2038
+ description: Sync display name. Null when the sync has since been deleted.
2039
+ examples:
2040
+ - Salesforce Demo Sync
2041
+ source:
2042
+ type:
2043
+ - object
2044
+ - 'null'
2045
+ description: |-
2046
+ The sync's source connection. Null when the sync no longer
2047
+ resolves to a source.
2048
+ properties:
2049
+ _id:
2050
+ type: string
2051
+ format: objectId
2052
+ x-celigo-refModel: connections
2053
+ description: Source connection id.
2054
+ examples:
2055
+ - 6a2a95909e994395f3c2a4e6
2056
+ name:
2057
+ type:
2058
+ - string
2059
+ - 'null'
2060
+ description: Source connection display name.
2061
+ examples:
2062
+ - Salesforce Production
2063
+ destination:
2064
+ type:
2065
+ - object
2066
+ - 'null'
2067
+ description: |-
2068
+ The sync's destination connection. Null when the sync has no
2069
+ destination configured.
2070
+ properties:
2071
+ _id:
2072
+ type: string
2073
+ format: objectId
2074
+ x-celigo-refModel: connections
2075
+ description: Destination connection id.
2076
+ examples:
2077
+ - 68d02dbe0839a514623c1d6d
2078
+ name:
2079
+ type:
2080
+ - string
2081
+ - 'null'
2082
+ description: Destination connection display name.
2083
+ examples:
2084
+ - Snowflake
2085
+ volume:
2086
+ type: number
2087
+ description: Records the sync loaded this month.
2088
+ examples:
2089
+ - 1458
2090
+ examples:
2091
+ default:
2092
+ value:
2093
+ usage:
2094
+ - _id: 6a4b8bfb731a7a5cae9bd364
2095
+ name: Salesforce Demo Sync
2096
+ source:
2097
+ _id: 6a2a95909e994395f3c2a4e6
2098
+ name: Salesforce Production
2099
+ destination:
2100
+ _id: 68d02dbe0839a514623c1d6d
2101
+ name: Snowflake
2102
+ volume: 1458
2103
+ '401':
2104
+ $ref: '#/components/responses/401-unauthorized'
2105
+ /v1/syncs/usage/summary:
2106
+ get:
2107
+ x-internal: false
2108
+ summary: Get monthly sync usage history
2109
+ description: |-
2110
+ Returns account-wide sync usage by calendar month, newest first — the records
2111
+ loaded across all syncs and environments, alongside the account's Data Ingestion
2112
+ entitlement for each month. History reaches back at most 14 months. Requires
2113
+ account-administration permission (the same level that manages account users);
2114
+ accounts without a Data Ingestion entitlement get an empty array.
2115
+ operationId: getSyncUsageSummary
2116
+ tags:
2117
+ - Syncs
2118
+ parameters:
2119
+ - name: from
2120
+ in: query
2121
+ required: false
2122
+ description: |-
2123
+ First month to include, as `YYYY-MM`. Cannot be more than 14 months back
2124
+ (`400 invalid_date_range`). Defaults to 14 months before the current month.
2125
+ schema:
2126
+ type: string
2127
+ pattern: ^\d{4}-(0[1-9]|1[0-2])$
2128
+ examples:
2129
+ - 2026-05
2130
+ - name: to
2131
+ in: query
2132
+ required: false
2133
+ description: |-
2134
+ Last month to include, as `YYYY-MM`. Cannot be in the future. Defaults to the
2135
+ current month.
2136
+ schema:
2137
+ type: string
2138
+ pattern: ^\d{4}-(0[1-9]|1[0-2])$
2139
+ examples:
2140
+ - 2026-07
2141
+ responses:
2142
+ '200':
2143
+ description: Monthly usage totals, newest month first.
2144
+ content:
2145
+ application/json:
2146
+ schema:
2147
+ type: array
2148
+ items:
2149
+ type: object
2150
+ description: One month's account-wide sync usage.
2151
+ required:
2152
+ - year
2153
+ - month
2154
+ - volume
2155
+ - entitlement
2156
+ properties:
2157
+ year:
2158
+ type: integer
2159
+ description: Calendar year of the usage month.
2160
+ examples:
2161
+ - 2026
2162
+ month:
2163
+ type: integer
2164
+ minimum: 1
2165
+ maximum: 12
2166
+ description: Calendar month (1-12) of the usage.
2167
+ examples:
2168
+ - 7
2169
+ volume:
2170
+ type: string
2171
+ description: |-
2172
+ Records loaded across all syncs that month, serialized as a string
2173
+ to avoid precision loss at high volumes.
2174
+ examples:
2175
+ - '292460'
2176
+ entitlement:
2177
+ type: string
2178
+ description: |-
2179
+ Records per month the account's Data Ingestion license allows,
2180
+ serialized as a string.
2181
+ examples:
2182
+ - '100000000'
2183
+ examples:
2184
+ default:
2185
+ value:
2186
+ - year: 2026
2187
+ month: 7
2188
+ volume: '1537'
2189
+ entitlement: '100000000'
2190
+ - year: 2026
2191
+ month: 6
2192
+ volume: '292460'
2193
+ entitlement: '100000000'
2194
+ - year: 2026
2195
+ month: 5
2196
+ volume: '127448244'
2197
+ entitlement: '100000000'
2198
+ '400':
2199
+ description: |-
2200
+ Invalid date range. `from`/`to` is malformed (`invalid_date_format`), or the
2201
+ range is older than 14 months, in the future, or reversed
2202
+ (`invalid_date_range`).
2203
+ content:
2204
+ application/json:
2205
+ schema:
2206
+ $ref: '#/components/schemas/Error'
2207
+ examples:
2208
+ bad_format:
2209
+ summary: Malformed month value
2210
+ value:
2211
+ errors:
2212
+ - code: invalid_date_format
2213
+ message: Invalid date format. Expected YYYY-MM.
2214
+ '401':
2215
+ $ref: '#/components/responses/401-unauthorized'
2216
+ /v1/syncs/usage/environments:
2217
+ get:
2218
+ x-internal: false
2219
+ summary: Get sync usage by environment
2220
+ description: |-
2221
+ Returns the records loaded by syncs during the current calendar month (UTC), broken
2222
+ down by environment — production plus every additional environment in the account.
2223
+ Environments with no runs this month report a volume of 0. Requires
2224
+ account-administration permission (the same level that manages account users);
2225
+ accounts without a Data Ingestion entitlement get an empty `usage` array.
2226
+ operationId: getSyncUsageByEnvironment
2227
+ tags:
2228
+ - Syncs
2229
+ responses:
2230
+ '200':
2231
+ description: Per-environment loaded-record volumes for the current month.
2232
+ content:
2233
+ application/json:
2234
+ schema:
2235
+ type: object
2236
+ required:
2237
+ - usage
2238
+ properties:
2239
+ usage:
2240
+ type: array
2241
+ items:
2242
+ type: object
2243
+ description: One environment's loaded-record volume this month.
2244
+ required:
2245
+ - environment
2246
+ - volume
2247
+ properties:
2248
+ environment:
2249
+ type: object
2250
+ description: Environment the volume belongs to.
2251
+ properties:
2252
+ _id:
2253
+ type: string
2254
+ format: objectId
2255
+ description: |-
2256
+ Environment id. For the production entry this is the
2257
+ account owner's user id rather than an environment
2258
+ resource id.
2259
+ examples:
2260
+ - 69cc38111c25db1bb3468a62
2261
+ name:
2262
+ type: string
2263
+ description: Environment display name.
2264
+ examples:
2265
+ - Sandbox
2266
+ volume:
2267
+ type: number
2268
+ description: Records loaded in this environment this month.
2269
+ examples:
2270
+ - 1537
2271
+ examples:
2272
+ default:
2273
+ value:
2274
+ usage:
2275
+ - environment:
2276
+ _id: 68c821306f5d848c881da205
2277
+ name: Production
2278
+ volume: 1537
2279
+ - environment:
2280
+ _id: 69cc38111c25db1bb3468a62
2281
+ name: Sandbox
2282
+ volume: 0
2283
+ '401':
2284
+ $ref: '#/components/responses/401-unauthorized'
2285
+ /v1/di/metadata/sources:
2286
+ get:
2287
+ x-internal: false
2288
+ summary: List supported sync source applications
2289
+ description: |-
2290
+ Returns the catalog of applications that can be used as the **source** of a sync — the system
2291
+ a sync extracts records from. Use the returned `id` as the source application when building a
2292
+ sync, and `category` to group the options in a picker.
2293
+ tags:
2294
+ - Syncs
2295
+ operationId: listSyncSources
2296
+ responses:
2297
+ '200':
2298
+ description: Array of supported source applications.
2299
+ content:
2300
+ application/json:
2301
+ schema:
2302
+ type: array
2303
+ items:
2304
+ type: object
2305
+ description: A supported source application.
2306
+ required:
2307
+ - id
2308
+ properties:
2309
+ id:
2310
+ type: string
2311
+ description: Application identifier to use as the sync source.
2312
+ examples:
2313
+ - salesforce
2314
+ category:
2315
+ type: string
2316
+ description: |-
2317
+ Display grouping for the application in selection UIs.
2318
+ HTTP-connector-backed sources use the category
2319
+ `HTTP Connector`.
2320
+ examples:
2321
+ - Sales & Marketing
2322
+ displayName:
2323
+ type: string
2324
+ description: |-
2325
+ Human-readable application name. Present on
2326
+ HTTP-connector-backed sources.
2327
+ examples:
2328
+ - Stripe
2329
+ source:
2330
+ type: string
2331
+ description: |-
2332
+ Where the source's metadata comes from. Present on
2333
+ HTTP-connector-backed sources with the value
2334
+ `httpConnectorMetadata`.
2335
+ examples:
2336
+ - httpConnectorMetadata
2337
+ httpConnector:
2338
+ type: object
2339
+ description: |-
2340
+ Identifies the HTTP connector serving this source's
2341
+ metadata. Present only on HTTP-connector-backed sources.
2342
+ properties:
2343
+ _id:
2344
+ type: string
2345
+ format: objectId
2346
+ x-celigo-refModel: httpconnectors
2347
+ description: HTTP connector id.
2348
+ examples:
2349
+ - 63987132784a39b73aae63cd
2350
+ _apiId:
2351
+ type:
2352
+ - string
2353
+ - 'null'
2354
+ format: objectId
2355
+ description: API group id within the connector. Null for single-API connectors.
2356
+ _versionId:
2357
+ type: string
2358
+ format: objectId
2359
+ description: Connector version id used for metadata resolution.
2360
+ examples:
2361
+ default:
2362
+ value:
2363
+ - id: salesforce
2364
+ category: Sales & Marketing
2365
+ - id: netsuite
2366
+ category: Sales & Marketing
2367
+ - id: stripe
2368
+ category: HTTP Connector
2369
+ displayName: Stripe
2370
+ source: httpConnectorMetadata
2371
+ httpConnector:
2372
+ _id: 63987132784a39b73aae63cd
2373
+ _apiId: null
2374
+ _versionId: 63987132784a39b73aae63ce
2375
+ '401':
2376
+ $ref: '#/components/responses/401-unauthorized'
2377
+ /v1/di/metadata/destinations:
2378
+ get:
2379
+ x-internal: false
2380
+ summary: List supported sync destination applications
2381
+ description: |-
2382
+ Returns the catalog of applications that can be used as the **destination** of a sync — the
2383
+ data warehouse a sync loads records into. Use the returned `id` as the destination application
2384
+ when building a sync. Identifiers include `snowflake` (Snowflake), `nsaw` (NetSuite
2385
+ Analytics Warehouse), and `bigquery` (Google BigQuery).
2386
+ tags:
2387
+ - Syncs
2388
+ operationId: listSyncDestinations
2389
+ responses:
2390
+ '200':
2391
+ description: Array of supported destination applications.
2392
+ content:
2393
+ application/json:
2394
+ schema:
2395
+ type: array
2396
+ items:
2397
+ type: object
2398
+ description: A supported destination application.
2399
+ required:
2400
+ - id
2401
+ properties:
2402
+ id:
2403
+ type: string
2404
+ description: Application identifier to use as the sync destination.
2405
+ examples:
2406
+ - snowflake
2407
+ examples:
2408
+ default:
2409
+ value:
2410
+ - id: snowflake
2411
+ - id: nsaw
2412
+ '401':
2413
+ $ref: '#/components/responses/401-unauthorized'
2414
+ /v1/di/metadata/connections/{_connectionId}/datasets:
2415
+ get:
2416
+ x-internal: false
2417
+ summary: List datasets available on a connection
2418
+ description: |-
2419
+ Returns the catalog of tables/objects a connection's application exposes for
2420
+ syncing, plus the connection's existing export resources that can back
2421
+ export-based datasets. Use the returned `name` values as `externalId` when
2422
+ creating datasets via `PUT /v1/syncs/{_syncId}/datasets`.
2423
+ operationId: listConnectionDatasets
2424
+ tags:
2425
+ - Syncs
2426
+ parameters:
2427
+ - name: _connectionId
2428
+ in: path
2429
+ required: true
2430
+ description: Source connection id.
2431
+ schema:
2432
+ type: string
2433
+ format: objectId
2434
+ x-celigo-refModel: connections
2435
+ examples:
2436
+ - 6a2a95909e994395f3c2a4e6
2437
+ - name: type
2438
+ in: query
2439
+ required: false
2440
+ description: |-
2441
+ Restrict the response to one catalog. With `datasets`, only source
2442
+ tables/objects are returned; with `exports`, only export resources.
2443
+ schema:
2444
+ type: string
2445
+ enum:
2446
+ - datasets
2447
+ - exports
2448
+ - all
2449
+ default: all
2450
+ examples:
2451
+ - datasets
2452
+ x-enumDescriptions:
2453
+ datasets: Only the source application's tables/objects.
2454
+ exports: Only the connection's export resources usable as export-backed datasets.
2455
+ all: Both catalogs.
2456
+ - name: refreshCache
2457
+ in: query
2458
+ required: false
2459
+ description: |-
2460
+ When `true`, re-reads the catalog from the source application instead of
2461
+ serving the platform's cached copy. Slower; use after making schema changes
2462
+ in the source.
2463
+ schema:
2464
+ type: string
2465
+ enum:
2466
+ - 'true'
2467
+ - 'false'
2468
+ x-enumDescriptions:
2469
+ 'true': Re-read the catalog from the source application.
2470
+ 'false': Serve the platform's cached copy.
2471
+ examples:
2472
+ - 'true'
2473
+ responses:
2474
+ '200':
2475
+ description: Dataset and/or export catalogs, keyed by type.
2476
+ content:
2477
+ application/json:
2478
+ schema:
2479
+ type: object
2480
+ properties:
2481
+ datasets:
2482
+ type: array
2483
+ description: Tables/objects the source application exposes. Present unless `type` is `exports`.
2484
+ items:
2485
+ type: object
2486
+ description: One syncable table/object in the source application.
2487
+ required:
2488
+ - name
2489
+ properties:
2490
+ name:
2491
+ type: string
2492
+ description: |-
2493
+ Identifier of the table/object in the source system. Use as the
2494
+ dataset `externalId`.
2495
+ examples:
2496
+ - Account
2497
+ displayName:
2498
+ type: string
2499
+ description: Human-readable label for the table/object.
2500
+ examples:
2501
+ - Account
2502
+ exports:
2503
+ type: array
2504
+ description: |-
2505
+ Export resources on the connection, usable as export-backed datasets
2506
+ (`isExport: true`). Present unless `type` is `datasets`.
2507
+ items:
2508
+ type: object
2509
+ description: One export resource usable as a sync dataset.
2510
+ properties:
2511
+ _id:
2512
+ type: string
2513
+ format: objectId
2514
+ x-celigo-refModel: exports
2515
+ description: |-
2516
+ Export id. Use as the dataset `externalId` when creating an
2517
+ export-backed dataset.
2518
+ examples:
2519
+ - 6a3e7c54c2387aaa87881b80
2520
+ name:
2521
+ type: string
2522
+ description: Export display name.
2523
+ examples:
2524
+ - Pull Salesforce Records
2525
+ type:
2526
+ type: string
2527
+ description: Export extraction type (e.g. `delta`, `all`, `once`).
2528
+ examples:
2529
+ - delta
2530
+ adaptorType:
2531
+ type: string
2532
+ description: Adaptor the export runs on (e.g. `SalesforceExport`).
2533
+ examples:
2534
+ - SalesforceExport
2535
+ examples:
2536
+ default:
2537
+ value:
2538
+ datasets:
2539
+ - name: Account
2540
+ displayName: Account
2541
+ - name: Contact
2542
+ displayName: Contact
2543
+ exports:
2544
+ - name: Pull Salesforce Records
2545
+ _id: 6a3e7c54c2387aaa87881b80
2546
+ type: delta
2547
+ adaptorType: SalesforceExport
2548
+ '400':
2549
+ description: |-
2550
+ Bad request. The connection id is not a valid id, or `type` is not one of the
2551
+ allowed values.
2552
+ content:
2553
+ application/json:
2554
+ schema:
2555
+ $ref: '#/components/schemas/Error'
2556
+ examples:
2557
+ invalid_type:
2558
+ summary: Invalid type value
2559
+ value:
2560
+ errors:
2561
+ - source: DI-MANAGEMENT-SERVICE
2562
+ code: invalid_request
2563
+ message: '"query.type" must be one of [datasets, exports, all]'
2564
+ resolved: false
2565
+ '401':
2566
+ $ref: '#/components/responses/401-unauthorized'
2567
+ '422':
2568
+ description: |-
2569
+ The catalog could not be fetched from the source application — e.g. the
2570
+ connection is offline or rejects the request.
2571
+ Error code: `di_fetch_datasets_failure`.
2572
+ content:
2573
+ application/json:
2574
+ schema:
2575
+ $ref: '#/components/schemas/Error'
2576
+ /v1/di/metadata/connections/{_connectionId}/datasets/{datasetName}/details:
2577
+ get:
2578
+ x-internal: false
2579
+ summary: Get column details for a dataset on a connection
2580
+ description: |-
2581
+ Returns the full column/field catalog for one table/object on a connection, as read
2582
+ from the source application. Use it to build the `dataElements` selection before
2583
+ saving a dataset via `PUT /v1/syncs/{_syncId}/datasets` — each element's `name` here
2584
+ is the `name` to reference there.
2585
+ operationId: getConnectionDatasetDetails
2586
+ tags:
2587
+ - Syncs
2588
+ parameters:
2589
+ - name: _connectionId
2590
+ in: path
2591
+ required: true
2592
+ description: Source connection id.
2593
+ schema:
2594
+ type: string
2595
+ format: objectId
2596
+ x-celigo-refModel: connections
2597
+ examples:
2598
+ - 6a2a95909e994395f3c2a4e6
2599
+ - name: datasetName
2600
+ in: path
2601
+ required: true
2602
+ description: |-
2603
+ Table/object name from `GET /v1/di/metadata/connections/{_connectionId}/datasets`.
2604
+ When `isExport` is `true`, pass the export id instead.
2605
+ schema:
2606
+ type: string
2607
+ examples:
2608
+ - Account
2609
+ - name: isExport
2610
+ in: query
2611
+ required: false
2612
+ description: |-
2613
+ Set to `true` when `datasetName` is an export id, to read the export's record
2614
+ structure instead of a source table.
2615
+ schema:
2616
+ type: string
2617
+ enum:
2618
+ - 'true'
2619
+ - 'false'
2620
+ x-enumDescriptions:
2621
+ 'true': Treat `datasetName` as an export id and read the export's record structure.
2622
+ 'false': Treat `datasetName` as a source table/object name.
2623
+ examples:
2624
+ - 'false'
2625
+ - name: refreshCache
2626
+ in: query
2627
+ required: false
2628
+ description: |-
2629
+ When `true`, re-reads the columns from the source application instead of the
2630
+ platform's cached copy. Use after making schema changes in the source.
2631
+ schema:
2632
+ type: string
2633
+ enum:
2634
+ - 'true'
2635
+ - 'false'
2636
+ x-enumDescriptions:
2637
+ 'true': Re-read the columns from the source application.
2638
+ 'false': Serve the platform's cached copy.
2639
+ examples:
2640
+ - 'true'
2641
+ - name: recordType
2642
+ in: query
2643
+ required: false
2644
+ description: |-
2645
+ NetSuite record type backing the dataset, for saved-search datasets. Omit for
2646
+ other sources.
2647
+ schema:
2648
+ type: string
2649
+ examples:
2650
+ - salesorder
2651
+ - name: displayName
2652
+ in: query
2653
+ required: false
2654
+ description: NetSuite saved-search display name, sent together with `recordType`.
2655
+ schema:
2656
+ type: string
2657
+ examples:
2658
+ - Sales Orders
2659
+ responses:
2660
+ '200':
2661
+ description: The dataset's column catalog.
2662
+ content:
2663
+ application/json:
2664
+ schema:
2665
+ type: object
2666
+ required:
2667
+ - dataset
2668
+ properties:
2669
+ dataset:
2670
+ type: object
2671
+ description: Source-side description of one table/object and its columns.
2672
+ properties:
2673
+ name:
2674
+ type: string
2675
+ description: Identifier of the table/object in the source system.
2676
+ examples:
2677
+ - Account
2678
+ displayName:
2679
+ type: string
2680
+ description: Human-readable label for the table/object.
2681
+ examples:
2682
+ - Account
2683
+ platform:
2684
+ type: string
2685
+ description: Source application the metadata was read from.
2686
+ examples:
2687
+ - salesforce
2688
+ dataSetType:
2689
+ type: string
2690
+ description: Source-specific dataset classification (e.g. `Regular`).
2691
+ examples:
2692
+ - Regular
2693
+ href:
2694
+ type: string
2695
+ description: Source API path the metadata was read from.
2696
+ examples:
2697
+ - /services/data/v61.0/sobjects/Account
2698
+ nativeTerminology:
2699
+ type: object
2700
+ description: |-
2701
+ What the source application calls datasets and their columns, for
2702
+ display purposes (e.g. Salesforce "Object" / "Fields").
2703
+ properties:
2704
+ dataset:
2705
+ type: string
2706
+ description: Source term for a dataset.
2707
+ examples:
2708
+ - Object
2709
+ dataElements:
2710
+ type: string
2711
+ description: Source term for a dataset's columns.
2712
+ examples:
2713
+ - Fields
2714
+ description:
2715
+ type: string
2716
+ description: Source field that supplies column descriptions.
2717
+ examples:
2718
+ - inlineHelpText
2719
+ deltaFields:
2720
+ type: array
2721
+ description: |-
2722
+ Column names usable as the incremental-extraction cursor
2723
+ (`exportProperties.delta.dateField`).
2724
+ items:
2725
+ type: string
2726
+ examples:
2727
+ - - LastModifiedDate
2728
+ - SystemModstamp
2729
+ datasetConstraints:
2730
+ type: array
2731
+ description: Table-level constraints reported by the source.
2732
+ items:
2733
+ type: object
2734
+ properties:
2735
+ constraintType:
2736
+ type: string
2737
+ description: Constraint kind (e.g. `PRIMARY_KEY`).
2738
+ examples:
2739
+ - PRIMARY_KEY
2740
+ columns:
2741
+ type: array
2742
+ description: Columns the constraint spans.
2743
+ items:
2744
+ type: string
2745
+ examples:
2746
+ - - Id
2747
+ dataElements:
2748
+ type: array
2749
+ description: Every column/field the source exposes on this dataset.
2750
+ items:
2751
+ type: object
2752
+ description: One source column/field.
2753
+ properties:
2754
+ name:
2755
+ type: string
2756
+ description: Column/field identifier in the source system.
2757
+ examples:
2758
+ - Id
2759
+ displayName:
2760
+ type: string
2761
+ description: Human-readable label for the column.
2762
+ examples:
2763
+ - Account ID
2764
+ dataType:
2765
+ type: string
2766
+ description: Normalized platform data type.
2767
+ examples:
2768
+ - String
2769
+ nativeDataType:
2770
+ type: string
2771
+ description: Data type as reported by the source application.
2772
+ examples:
2773
+ - id
2774
+ dataLength:
2775
+ type: integer
2776
+ description: Maximum length for string-like columns; 0 when not applicable.
2777
+ examples:
2778
+ - 18
2779
+ precision:
2780
+ type: integer
2781
+ description: Numeric precision; 0 when not applicable.
2782
+ examples:
2783
+ - 0
2784
+ scale:
2785
+ type: integer
2786
+ description: Numeric scale; 0 when not applicable.
2787
+ examples:
2788
+ - 0
2789
+ constraint:
2790
+ type: string
2791
+ description: |-
2792
+ Column-level constraint reported by the source (e.g.
2793
+ `PRIMARY_KEY`, `FOREIGN_KEY`). Absent for unconstrained
2794
+ columns.
2795
+ examples:
2796
+ - PRIMARY_KEY
2797
+ isPrimaryKey:
2798
+ type: boolean
2799
+ description: Only present (as `true`) on the source's key column(s).
2800
+ examples:
2801
+ - true
2802
+ description:
2803
+ type:
2804
+ - string
2805
+ - 'null'
2806
+ description: Column help text from the source; null when the source has none.
2807
+ fullyQualifiedName:
2808
+ type: string
2809
+ description: Globally unique column identifier in the platform's data catalog.
2810
+ examples:
2811
+ - salesforce.00D30000000LHK8EAO.Account.Id
2812
+ appSpecificProperties:
2813
+ type: object
2814
+ description: Source-specific column attributes (e.g. Salesforce `calculated`).
2815
+ additionalProperties: true
2816
+ children:
2817
+ type:
2818
+ - array
2819
+ - 'null'
2820
+ description: Nested fields for object/array columns; null for scalar columns.
2821
+ items:
2822
+ type: object
2823
+ additionalProperties: true
2824
+ examples:
2825
+ account:
2826
+ summary: Salesforce Account (truncated)
2827
+ value:
2828
+ dataset:
2829
+ name: Account
2830
+ displayName: Account
2831
+ platform: salesforce
2832
+ dataSetType: Regular
2833
+ href: /services/data/v61.0/sobjects/Account
2834
+ nativeTerminology:
2835
+ dataset: Object
2836
+ dataElements: Fields
2837
+ description: inlineHelpText
2838
+ dataElements:
2839
+ - name: Id
2840
+ displayName: Account ID
2841
+ dataType: String
2842
+ nativeDataType: id
2843
+ dataLength: 18
2844
+ precision: 0
2845
+ scale: 0
2846
+ constraint: PRIMARY_KEY
2847
+ isPrimaryKey: true
2848
+ fullyQualifiedName: salesforce.00D30000000LHK8EAO.Account.Id
2849
+ appSpecificProperties:
2850
+ calculated: false
2851
+ children: null
2852
+ - name: Name
2853
+ displayName: Account Name
2854
+ dataType: String
2855
+ nativeDataType: string
2856
+ dataLength: 255
2857
+ precision: 0
2858
+ scale: 0
2859
+ fullyQualifiedName: salesforce.00D30000000LHK8EAO.Account.Name
2860
+ appSpecificProperties:
2861
+ calculated: false
2862
+ children: null
2863
+ '400':
2864
+ $ref: '#/components/responses/400-bad-request'
2865
+ '401':
2866
+ $ref: '#/components/responses/401-unauthorized'
2867
+ '422':
2868
+ description: |-
2869
+ The columns could not be fetched from the source application — e.g. the
2870
+ table/object does not exist or the connection rejects the request.
2871
+ Error code: `di_fetch_data_elements_failure`.
2872
+ content:
2873
+ application/json:
2874
+ schema:
2875
+ $ref: '#/components/schemas/Error'
2876
+ examples:
2877
+ unknown_dataset:
2878
+ summary: Table does not exist in the source
2879
+ value:
2880
+ errors:
2881
+ - source: application
2882
+ code: di_fetch_data_elements_failure
2883
+ message: 'Failed to fetch metadata for ''NoSuchObject123'' because: The requested resource does not exist'
2884
+ resolved: false
2885
+ /v1/di/metadata/sync/{_syncId}/connections/{_connectionId}/datasets:
2886
+ get:
2887
+ x-internal: false
2888
+ summary: List a connection's datasets merged with a sync's configuration
2889
+ description: |-
2890
+ Returns the connection's full dataset catalog with the sync's saved configuration
2891
+ merged in: catalog entries the sync already replicates carry their stored dataset
2892
+ fields (`_id`, `enable`, `ingestionMode`, …) plus computed `totalFieldCount` and
2893
+ `selectedFieldCount`, while unsaved entries appear with catalog fields only.
2894
+ `dataElements` arrays are stripped from every item to keep the payload small — read
2895
+ one item's columns with the sync-scoped details endpoint.
2896
+
2897
+ Use this to render or reconcile a sync's dataset selection; for just the saved
2898
+ datasets, `GET /v1/syncs/{_syncId}/datasets` is lighter.
2899
+ operationId: listSyncConnectionDatasets
2900
+ tags:
2901
+ - Syncs
2902
+ parameters:
2903
+ - name: _syncId
2904
+ in: path
2905
+ required: true
2906
+ description: Sync id.
2907
+ schema:
2908
+ type: string
2909
+ format: objectId
2910
+ x-celigo-refModel: syncs
2911
+ examples:
2912
+ - 6a55970bdb54be366c858bc9
2913
+ - name: _connectionId
2914
+ in: path
2915
+ required: true
2916
+ description: The sync's source connection id.
2917
+ schema:
2918
+ type: string
2919
+ format: objectId
2920
+ x-celigo-refModel: connections
2921
+ examples:
2922
+ - 6a2a95909e994395f3c2a4e6
2923
+ - name: type
2924
+ in: query
2925
+ required: false
2926
+ description: |-
2927
+ Restrict the response to one catalog. With `datasets`, only source
2928
+ tables/objects are returned; with `exports`, only export-backed entries.
2929
+ schema:
2930
+ type: string
2931
+ enum:
2932
+ - datasets
2933
+ - exports
2934
+ - all
2935
+ default: all
2936
+ examples:
2937
+ - datasets
2938
+ x-enumDescriptions:
2939
+ datasets: Only the source application's tables/objects.
2940
+ exports: Only export-backed entries.
2941
+ all: Both catalogs.
2942
+ - name: refreshCache
2943
+ in: query
2944
+ required: false
2945
+ description: |-
2946
+ When `true`, re-reads the catalog from the source application instead of the
2947
+ platform's cached copy.
2948
+ schema:
2949
+ type: string
2950
+ enum:
2951
+ - 'true'
2952
+ - 'false'
2953
+ x-enumDescriptions:
2954
+ 'true': Re-read the catalog from the source application.
2955
+ 'false': Serve the platform's cached copy.
2956
+ examples:
2957
+ - 'true'
2958
+ responses:
2959
+ '200':
2960
+ description: Merged dataset and/or export lists, keyed by type.
2961
+ content:
2962
+ application/json:
2963
+ schema:
2964
+ type: object
2965
+ properties:
2966
+ datasets:
2967
+ type: array
2968
+ description: |-
2969
+ Source tables/objects merged with the sync's saved datasets. Present
2970
+ unless `type` is `exports`.
2971
+ items:
2972
+ type: object
2973
+ description: |-
2974
+ One table/object. Catalog-only entries carry `name`/`displayName`
2975
+ (and default `exportProperties`); entries the sync has saved also
2976
+ carry the stored dataset fields and field counts.
2977
+ required:
2978
+ - name
2979
+ properties:
2980
+ name:
2981
+ type: string
2982
+ description: Display name of the table/object.
2983
+ examples:
2984
+ - Account
2985
+ displayName:
2986
+ type: string
2987
+ description: Human-readable label for the table/object.
2988
+ examples:
2989
+ - Account
2990
+ externalId:
2991
+ type: string
2992
+ description: Identifier of the table/object in the source system.
2993
+ examples:
2994
+ - Account
2995
+ _id:
2996
+ type: string
2997
+ format: objectId
2998
+ description: |-
2999
+ Only present when the sync has saved this dataset. Use with
3000
+ `GET /v1/syncs/{_syncId}/datasets/{_id}`.
3001
+ examples:
3002
+ - 6a55970c5f9498a1758a0ad3
3003
+ enable:
3004
+ type: boolean
3005
+ description: When true, the sync replicates this dataset.
3006
+ examples:
3007
+ - true
3008
+ enableAllDataElements:
3009
+ type: boolean
3010
+ description: When true, every column is replicated (no explicit selection saved).
3011
+ examples:
3012
+ - false
3013
+ ingestionMode:
3014
+ type: string
3015
+ enum:
3016
+ - append
3017
+ - replace
3018
+ - merge
3019
+ description: How extracted records are written into the destination table.
3020
+ x-enumDescriptions:
3021
+ append: Add extracted records to the destination table, keeping prior rows.
3022
+ replace: Drop and reload the destination table with each run's records.
3023
+ merge: Upsert records into the destination table by primary key.
3024
+ examples:
3025
+ - merge
3026
+ exportProperties:
3027
+ type: object
3028
+ description: |-
3029
+ Extraction behavior. Catalog-only entries carry the source's
3030
+ default (e.g. `{type: delta}`).
3031
+ properties:
3032
+ type:
3033
+ type: string
3034
+ enum:
3035
+ - delta
3036
+ - all
3037
+ description: Extraction strategy for each run.
3038
+ x-enumDescriptions:
3039
+ delta: Extract only records changed since the previous run.
3040
+ all: Extract every record on every run.
3041
+ examples:
3042
+ - delta
3043
+ userActionRequired:
3044
+ type: boolean
3045
+ description: |-
3046
+ When true, unhandled schema drift needs a user decision before
3047
+ the dataset can be modified or replicated again.
3048
+ examples:
3049
+ - false
3050
+ totalFieldCount:
3051
+ type: integer
3052
+ description: |-
3053
+ Total number of columns in the dataset, counted recursively
3054
+ through nested children. 0 for saved datasets that replicate
3055
+ all columns without an explicit selection.
3056
+ examples:
3057
+ - 49
3058
+ selectedFieldCount:
3059
+ type: integer
3060
+ description: |-
3061
+ Number of enabled columns, counted recursively through nested
3062
+ children.
3063
+ examples:
3064
+ - 35
3065
+ exports:
3066
+ type: array
3067
+ description: |-
3068
+ Export-backed entries merged with the sync's saved export datasets.
3069
+ Present unless `type` is `datasets`.
3070
+ items:
3071
+ type: object
3072
+ description: One export usable as (or already saved as) an export-backed dataset.
3073
+ properties:
3074
+ name:
3075
+ type: string
3076
+ description: Export display name.
3077
+ examples:
3078
+ - Pull Salesforce Records
3079
+ externalId:
3080
+ type: string
3081
+ description: Export id backing this entry.
3082
+ examples:
3083
+ - 6a3e7c54c2387aaa87881b80
3084
+ _id:
3085
+ type: string
3086
+ format: objectId
3087
+ description: Only present when the sync has saved this export as a dataset.
3088
+ examples:
3089
+ - 6a55974edb54be366c858d26
3090
+ type:
3091
+ type: string
3092
+ description: Export extraction type (e.g. `delta`).
3093
+ examples:
3094
+ - delta
3095
+ adaptorType:
3096
+ type: string
3097
+ description: Adaptor the export runs on (e.g. `SalesforceExport`).
3098
+ examples:
3099
+ - SalesforceExport
3100
+ tableName:
3101
+ type: string
3102
+ description: Destination table the export dataset loads into.
3103
+ examples:
3104
+ - pull_salesforce_records
3105
+ enable:
3106
+ type: boolean
3107
+ description: When true, the sync replicates this export dataset.
3108
+ examples:
3109
+ - true
3110
+ ingestionMode:
3111
+ type: string
3112
+ enum:
3113
+ - append
3114
+ - replace
3115
+ - merge
3116
+ description: How extracted records are written into the destination table.
3117
+ x-enumDescriptions:
3118
+ append: Add extracted records to the destination table, keeping prior rows.
3119
+ replace: Drop and reload the destination table with each run's records.
3120
+ merge: Upsert records into the destination table by primary key.
3121
+ examples:
3122
+ - merge
3123
+ isExport:
3124
+ type: boolean
3125
+ description: Always true for entries in this list.
3126
+ examples:
3127
+ - true
3128
+ userActionRequired:
3129
+ type: boolean
3130
+ description: |-
3131
+ When true, unhandled schema drift needs a user decision before
3132
+ the dataset can be modified or replicated again.
3133
+ examples:
3134
+ - false
3135
+ mismatchSyncConnection:
3136
+ type: boolean
3137
+ description: |-
3138
+ Only present (as `true`) when the export no longer uses the
3139
+ sync's source connection.
3140
+ examples:
3141
+ - true
3142
+ totalFieldCount:
3143
+ type: integer
3144
+ description: Total number of fields in the export's record structure.
3145
+ examples:
3146
+ - 16
3147
+ selectedFieldCount:
3148
+ type: integer
3149
+ description: Number of enabled fields.
3150
+ examples:
3151
+ - 16
3152
+ examples:
3153
+ merged:
3154
+ summary: Saved and unsaved entries side by side
3155
+ value:
3156
+ datasets:
3157
+ - name: Account
3158
+ displayName: Account
3159
+ externalId: Account
3160
+ _id: 6a55970c5f9498a1758a0ad3
3161
+ enable: true
3162
+ enableAllDataElements: false
3163
+ ingestionMode: append
3164
+ exportProperties:
3165
+ type: all
3166
+ userActionRequired: false
3167
+ totalFieldCount: 49
3168
+ selectedFieldCount: 35
3169
+ - name: Contact
3170
+ displayName: Contact
3171
+ exportProperties:
3172
+ type: delta
3173
+ exports:
3174
+ - name: Pull Salesforce Records
3175
+ externalId: 6a3e7c54c2387aaa87881b80
3176
+ _id: 6a55974edb54be366c858d26
3177
+ type: delta
3178
+ adaptorType: SalesforceExport
3179
+ tableName: pull_salesforce_records
3180
+ enable: true
3181
+ ingestionMode: merge
3182
+ isExport: true
3183
+ userActionRequired: false
3184
+ totalFieldCount: 16
3185
+ selectedFieldCount: 16
3186
+ '400':
3187
+ $ref: '#/components/responses/400-bad-request'
3188
+ '401':
3189
+ $ref: '#/components/responses/401-unauthorized'
3190
+ '403':
3191
+ description: The sync or connection belongs to a different account owner.
3192
+ content:
3193
+ application/json:
3194
+ schema:
3195
+ $ref: '#/components/schemas/Error'
3196
+ '422':
3197
+ description: |-
3198
+ The catalog could not be fetched or merged — e.g. the connection is offline or
3199
+ the sync/connection pair does not match.
3200
+ content:
3201
+ application/json:
3202
+ schema:
3203
+ $ref: '#/components/schemas/Error'
3204
+ /v1/di/metadata/sync/{_syncId}/connections/{_connectionId}/datasets/{datasetName}/details:
3205
+ get:
3206
+ x-internal: false
3207
+ summary: Get column details for a dataset in a sync's context
3208
+ description: |-
3209
+ Returns one table/object's full column catalog from the source, merged with the
3210
+ sync's saved dataset state — enablement, `ingestionMode`, `exportProperties`, drift
3211
+ policy, and per-column selections. Use it to edit a dataset's `dataElements` with
3212
+ the current source schema and saved selections in one payload.
3213
+ operationId: getSyncConnectionDatasetDetails
3214
+ tags:
3215
+ - Syncs
3216
+ parameters:
3217
+ - name: _syncId
3218
+ in: path
3219
+ required: true
3220
+ description: Sync id.
3221
+ schema:
3222
+ type: string
3223
+ format: objectId
3224
+ x-celigo-refModel: syncs
3225
+ examples:
3226
+ - 6a55970bdb54be366c858bc9
3227
+ - name: _connectionId
3228
+ in: path
3229
+ required: true
3230
+ description: The sync's source connection id.
3231
+ schema:
3232
+ type: string
3233
+ format: objectId
3234
+ x-celigo-refModel: connections
3235
+ examples:
3236
+ - 6a2a95909e994395f3c2a4e6
3237
+ - name: datasetName
3238
+ in: path
3239
+ required: true
3240
+ description: |-
3241
+ Table/object name from the merged catalog. When `isExport` is `true`, pass the
3242
+ saved dataset's `_id` instead.
3243
+ schema:
3244
+ type: string
3245
+ examples:
3246
+ - Account
3247
+ - name: isExport
3248
+ in: query
3249
+ required: false
3250
+ description: |-
3251
+ Set to `true` when `datasetName` identifies an export-backed dataset, to read
3252
+ the export's record structure instead of a source table.
3253
+ schema:
3254
+ type: string
3255
+ enum:
3256
+ - 'true'
3257
+ - 'false'
3258
+ x-enumDescriptions:
3259
+ 'true': Treat `datasetName` as an export-backed dataset and read the export's record structure.
3260
+ 'false': Treat `datasetName` as a source table/object name.
3261
+ examples:
3262
+ - 'false'
3263
+ - name: refreshCache
3264
+ in: query
3265
+ required: false
3266
+ description: |-
3267
+ When `true`, re-reads the columns from the source application instead of the
3268
+ platform's cached copy.
3269
+ schema:
3270
+ type: string
3271
+ enum:
3272
+ - 'true'
3273
+ - 'false'
3274
+ x-enumDescriptions:
3275
+ 'true': Re-read the columns from the source application.
3276
+ 'false': Serve the platform's cached copy.
3277
+ examples:
3278
+ - 'true'
3279
+ - name: recordType
3280
+ in: query
3281
+ required: false
3282
+ description: |-
3283
+ NetSuite record type backing the dataset, for saved-search datasets. Omit for
3284
+ other sources.
3285
+ schema:
3286
+ type: string
3287
+ examples:
3288
+ - salesorder
3289
+ - name: displayName
3290
+ in: query
3291
+ required: false
3292
+ description: NetSuite saved-search display name, sent together with `recordType`.
3293
+ schema:
3294
+ type: string
3295
+ examples:
3296
+ - Sales Orders
3297
+ responses:
3298
+ '200':
3299
+ description: The dataset's column catalog merged with the sync's saved state.
3300
+ content:
3301
+ application/json:
3302
+ schema:
3303
+ type: object
3304
+ required:
3305
+ - dataset
3306
+ properties:
3307
+ dataset:
3308
+ type: object
3309
+ description: |-
3310
+ The source column catalog (same shape as
3311
+ `GET /v1/di/metadata/connections/{_connectionId}/datasets/{datasetName}/details`)
3312
+ extended with the sync's saved dataset state when one exists: `_id`,
3313
+ `enable`, `isExport`, `ingestionMode`, `exportProperties`,
3314
+ `driftPolicy`, `tableName`, and per-element `enable`/`mask`/
3315
+ `isPrimaryKey`/`transformMode` selections merged into `dataElements`.
3316
+ additionalProperties: true
3317
+ examples:
3318
+ merged:
3319
+ summary: Account merged with saved selections (truncated)
3320
+ value:
3321
+ dataset:
3322
+ _id: 6a55970c5f9498a1758a0ad3
3323
+ name: Account
3324
+ displayName: Account
3325
+ platform: salesforce
3326
+ enable: true
3327
+ isExport: false
3328
+ ingestionMode: append
3329
+ exportProperties:
3330
+ type: all
3331
+ dataElements:
3332
+ - name: Id
3333
+ displayName: Account ID
3334
+ dataType: String
3335
+ nativeDataType: id
3336
+ dataLength: 18
3337
+ enable: true
3338
+ isPrimaryKey: true
3339
+ - name: Name
3340
+ displayName: Account Name
3341
+ dataType: String
3342
+ nativeDataType: string
3343
+ dataLength: 255
3344
+ enable: true
3345
+ '400':
3346
+ $ref: '#/components/responses/400-bad-request'
3347
+ '401':
3348
+ $ref: '#/components/responses/401-unauthorized'
3349
+ '403':
3350
+ description: The sync or connection belongs to a different account owner.
3351
+ content:
3352
+ application/json:
3353
+ schema:
3354
+ $ref: '#/components/schemas/Error'
3355
+ '422':
3356
+ description: |-
3357
+ The columns could not be fetched or merged — e.g. the table/object does not
3358
+ exist in the source or the connection rejects the request.
3359
+ Error code: `di_fetch_data_elements_failure`.
3360
+ content:
3361
+ application/json:
3362
+ schema:
3363
+ $ref: '#/components/schemas/Error'
3364
+ components:
3365
+ securitySchemes:
3366
+ bearerAuth:
3367
+ type: http
3368
+ scheme: bearer
3369
+ parameters:
3370
+ Include:
3371
+ name: include
3372
+ in: query
3373
+ required: false
3374
+ description: |-
3375
+ Comma-separated list of fields to project into each returned record.
3376
+ Triggers summary projection: the response contains a minimal identity
3377
+ set (`_id`, `name`, plus resource-specific fields) with the requested
3378
+ fields added on top. Supports dot notation for nested fields.
3379
+ Mutually exclusive with `exclude`.
3380
+ schema:
3381
+ type: string
3382
+ example: _integrationId,disabled,lastModified
3383
+ Exclude:
3384
+ name: exclude
3385
+ in: query
3386
+ required: false
3387
+ description: |-
3388
+ Comma-separated list of fields to strip from the default response.
3389
+ Unlike `include`, does not trigger summary projection — returns the
3390
+ full record with the named fields removed. Protected identity fields
3391
+ (e.g. `name`) cannot be stripped. Mutually exclusive with `include`.
3392
+ schema:
3393
+ type: string
3394
+ example: createdAt,lastModified
3395
+ schemas:
3396
+ ElementDriftPolicy:
3397
+ type: object
3398
+ description: |-
3399
+ How the sync reacts when columns/fields change in the source schema between runs.
3400
+ `objectAdded` and `arrayAdded` refine what "automate" means for new nested structures and
3401
+ are only valid when `added` is `automate` — otherwise the save fails with
3402
+ `422 drift_policy_invalid_setup`.
3403
+ properties:
3404
+ added:
3405
+ type: string
3406
+ enum:
3407
+ - automate
3408
+ - ignore
3409
+ description: |-
3410
+ Handling for columns/fields that appear in the source after the sync
3411
+ was configured. Choose `ignore` to keep destination tables stable and
3412
+ opt in to new fields manually.
3413
+ x-enumDescriptions:
3414
+ automate: Automatically add the new column to the destination and start loading it.
3415
+ ignore: Skip new columns until a user enables them explicitly.
3416
+ examples:
3417
+ - automate
3418
+ objectAdded:
3419
+ type: string
3420
+ enum:
3421
+ - preserve
3422
+ - flatten
3423
+ description: Shape given to a newly added **object** field when `added` is `automate`.
3424
+ x-enumDescriptions:
3425
+ preserve: Load the object as a single semi-structured column.
3426
+ flatten: Expand the object's keys into individual columns.
3427
+ examples:
3428
+ - preserve
3429
+ arrayAdded:
3430
+ type: string
3431
+ enum:
3432
+ - preserve
3433
+ - normalize
3434
+ description: Shape given to a newly added **array** field when `added` is `automate`.
3435
+ x-enumDescriptions:
3436
+ preserve: Load the array as a single semi-structured column.
3437
+ normalize: Split the array into a child table keyed back to the parent record.
3438
+ examples:
3439
+ - preserve
3440
+ removed:
3441
+ type: string
3442
+ enum:
3443
+ - automate
3444
+ description: |-
3445
+ Handling for columns/fields deleted from the source. Only automatic
3446
+ propagation is supported.
3447
+ x-enumDescriptions:
3448
+ automate: Stop loading the column and reflect the removal downstream.
3449
+ examples:
3450
+ - automate
3451
+ reduced:
3452
+ type: string
3453
+ enum:
3454
+ - automate
3455
+ description: |-
3456
+ Handling for columns whose source data type shrank (e.g. a shorter
3457
+ string length). Only automatic propagation is supported.
3458
+ x-enumDescriptions:
3459
+ automate: Adjust the destination column to the reduced type automatically.
3460
+ examples:
3461
+ - automate
3462
+ expanded:
3463
+ type: string
3464
+ enum:
3465
+ - automate
3466
+ description: |-
3467
+ Handling for columns whose source data type grew (e.g. a wider numeric
3468
+ precision). Only automatic propagation is supported.
3469
+ x-enumDescriptions:
3470
+ automate: Widen the destination column automatically.
3471
+ examples:
3472
+ - automate
3473
+ if:
3474
+ anyOf:
3475
+ - required:
3476
+ - objectAdded
3477
+ - required:
3478
+ - arrayAdded
3479
+ then:
3480
+ properties:
3481
+ added:
3482
+ const: automate
3483
+ required:
3484
+ - added
3485
+ SyncDriftPolicy:
3486
+ type: object
3487
+ description: |-
3488
+ How the sync reacts when the source schema changes between runs (schema drift).
3489
+ `dataset` covers whole tables/objects appearing or disappearing; `element` covers
3490
+ individual columns/fields. Drift the policy automates is logged as `Schema Drift`
3491
+ events, readable via `GET /v1/di/resource/syncs/{_syncId}/events`.
3492
+ properties:
3493
+ dataset:
3494
+ type: object
3495
+ description: Drift handling for whole tables/objects in the source.
3496
+ properties:
3497
+ added:
3498
+ type: string
3499
+ enum:
3500
+ - automate
3501
+ - ignore
3502
+ description: |-
3503
+ Handling for tables/objects that appear in the source after the sync was
3504
+ configured. Choose `ignore` to keep the replicated set fixed and add new
3505
+ tables manually.
3506
+ x-enumDescriptions:
3507
+ automate: Automatically add newly discovered tables to the sync and start replicating them.
3508
+ ignore: Leave newly discovered tables out of the sync until a user enables them.
3509
+ examples:
3510
+ - automate
3511
+ removed:
3512
+ type: string
3513
+ enum:
3514
+ - automate
3515
+ description: |-
3516
+ Handling for tables/objects deleted from the source. Only automatic
3517
+ propagation is supported.
3518
+ x-enumDescriptions:
3519
+ automate: Stop replicating the removed table automatically.
3520
+ examples:
3521
+ - automate
3522
+ element:
3523
+ $ref: '#/components/schemas/ElementDriftPolicy'
3524
+ Sync:
3525
+ type: object
3526
+ description: |-
3527
+ A sync continuously replicates data from a source application into a data warehouse.
3528
+ New syncs start as disabled drafts; a sync can only be enabled once its source,
3529
+ destination, and datasets are fully configured.
3530
+ required:
3531
+ - _id
3532
+ - _userId
3533
+ - _integrationId
3534
+ - name
3535
+ - disabled
3536
+ - source
3537
+ - destination
3538
+ - driftPolicy
3539
+ properties:
3540
+ _id:
3541
+ type: string
3542
+ format: objectId
3543
+ readOnly: true
3544
+ description: Unique identifier for the sync.
3545
+ examples:
3546
+ - 6a4b8bfb731a7a5cae9bd364
3547
+ _userId:
3548
+ type: string
3549
+ format: objectId
3550
+ x-celigo-refModel: users
3551
+ readOnly: true
3552
+ description: Account owner the sync belongs to.
3553
+ examples:
3554
+ - 68c821306f5d848c881da205
3555
+ _integrationId:
3556
+ type: string
3557
+ format: objectId
3558
+ x-celigo-refModel: integrations
3559
+ description: |-
3560
+ Integration the sync lives in. Required when creating; cannot be changed
3561
+ afterwards — sending it on an update fails with `400 sync_integration_id_update`.
3562
+ examples:
3563
+ - 69f4ffd395ec28be9cb8c12e
3564
+ name:
3565
+ type: string
3566
+ maxLength: 150
3567
+ description: |-
3568
+ Display name shown in the UI. Defaults to an empty string when not
3569
+ provided at creation.
3570
+ examples:
3571
+ - Salesforce Demo Sync
3572
+ description:
3573
+ type: string
3574
+ maxLength: 5120
3575
+ description: Free-form notes about what the sync replicates and why.
3576
+ examples:
3577
+ - Replicates core CRM objects into the analytics warehouse.
3578
+ disabled:
3579
+ type: boolean
3580
+ default: true
3581
+ description: |-
3582
+ When true, the sync neither runs on schedule nor accepts on-demand runs. New syncs
3583
+ start disabled. Enabling requires a fully configured sync — source and destination
3584
+ connections plus a destination database and schema — and a `historicDateTime`;
3585
+ otherwise the update fails with `422 sync_not_enabled`.
3586
+ examples:
3587
+ - false
3588
+ schedule:
3589
+ type: string
3590
+ description: |-
3591
+ Cron expression that controls automatic runs, e.g. `? 0 */6 * * *` for every
3592
+ six hours. Empty or omitted means the sync only runs on demand via
3593
+ `POST /v1/syncs/{_syncId}/run`. Evaluated in the sync's `timezone`.
3594
+ examples:
3595
+ - '? 0 */6 * * *'
3596
+ timezone:
3597
+ type: string
3598
+ description: IANA time zone name (e.g. `America/New_York`) the `schedule` is evaluated in.
3599
+ examples:
3600
+ - America/New_York
3601
+ historicDateTime:
3602
+ type: string
3603
+ format: date-time
3604
+ description: |-
3605
+ Earliest record timestamp to backfill from the source. The first run extracts
3606
+ history from this point forward; later runs are incremental. Must be set before
3607
+ the sync can be enabled.
3608
+ examples:
3609
+ - '2022-07-04T18:30:00.000Z'
3610
+ source:
3611
+ type: object
3612
+ description: Application the sync extracts records from.
3613
+ required:
3614
+ - _connectionId
3615
+ properties:
3616
+ _connectionId:
3617
+ type: string
3618
+ format: objectId
3619
+ x-celigo-refModel: connections
3620
+ description: |-
3621
+ Connection to the source application. The application must be one of the
3622
+ supported sync sources returned by `GET /v1/di/metadata/sources`.
3623
+ examples:
3624
+ - 6a2a95909e994395f3c2a4e6
3625
+ destination:
3626
+ type: object
3627
+ description: |-
3628
+ Data warehouse the sync loads records into. Empty (`{}`) on a draft that has no
3629
+ destination yet. Each source + destination host/database/schema combination must
3630
+ be unique across syncs — reusing one fails with `422 duplicate_destination_host` —
3631
+ and all syncs in an integration must target the same destination application type.
3632
+ properties:
3633
+ _connectionId:
3634
+ type: string
3635
+ format: objectId
3636
+ x-celigo-refModel: connections
3637
+ description: |-
3638
+ Connection to the destination warehouse. The application must be one of the
3639
+ supported sync destinations returned by `GET /v1/di/metadata/destinations`.
3640
+ examples:
3641
+ - 68d02dbe0839a514623c1d6d
3642
+ database:
3643
+ type: string
3644
+ description: Database in the destination warehouse the sync loads into.
3645
+ examples:
3646
+ - ANALYTICS_DB
3647
+ schema:
3648
+ type: string
3649
+ description: Schema within `database` where the sync creates and loads tables.
3650
+ examples:
3651
+ - salesforce_raw
3652
+ tablePrefix:
3653
+ type: string
3654
+ description: |-
3655
+ Prefix prepended to the name of every table the sync creates in the
3656
+ destination schema. Omit to use unprefixed table names.
3657
+ examples:
3658
+ - sf_
3659
+ driftPolicy:
3660
+ $ref: '#/components/schemas/SyncDriftPolicy'
3661
+ Error:
3662
+ type: object
3663
+ description: Standard error response envelope returned by integrator.io APIs.
3664
+ properties:
3665
+ errors:
3666
+ type: array
3667
+ description: List of errors that occurred while processing the request.
3668
+ items:
3669
+ type: object
3670
+ properties:
3671
+ code:
3672
+ oneOf:
3673
+ - type: string
3674
+ - type: integer
3675
+ description: |-
3676
+ Machine-readable error code. Usually a string like
3677
+ `invalid_ref`, `missing_required_field`, or `unauthorized`;
3678
+ may be an **integer** when the error mirrors an upstream HTTP
3679
+ status (e.g. `500`) — most commonly returned by connection-ping
3680
+ and adaptor-proxy responses.
3681
+ message:
3682
+ type: string
3683
+ description: Human-readable description of the error.
3684
+ field:
3685
+ type: string
3686
+ description: |-
3687
+ Optional pointer to the document field that caused the error.
3688
+ Used by structural validation errors (`missing_required_field`,
3689
+ `invalid_ref`) to indicate which field is at fault
3690
+ (e.g. `_id`, `type`, `http.baseURI`).
3691
+ source:
3692
+ type: string
3693
+ description: |-
3694
+ Optional origin layer for the error — e.g. `application` when
3695
+ the error came from the remote system the adaptor called,
3696
+ `connector` when the adaptor itself rejected the request.
3697
+ required:
3698
+ - message
3699
+ required:
3700
+ - errors
3701
+ Request:
3702
+ type: object
3703
+ description: |-
3704
+ Writable sync fields for `POST /v1/syncs` and `PUT /v1/syncs/{_id}`. Updates are full
3705
+ replacements: omitted optional fields (`schedule`, `timezone`, `destination` details,
3706
+ `driftPolicy`) are cleared, not preserved, so send the complete desired configuration
3707
+ on every PUT.
3708
+ required:
3709
+ - source
3710
+ x-celigo-ai-guidance:
3711
+ - |-
3712
+ POST requires _integrationId (omitting it fails with 400 "To create sync integration id
3713
+ is required") and source._connectionId (omitting it fails with 422 "Source connection is
3714
+ missing in the request"). PUT requires source._connectionId too, and rejects
3715
+ _integrationId with 400 sync_integration_id_update.
3716
+ - |-
3717
+ Never send _id or _userId in the body — the API rejects the request with
3718
+ 400 id_and_userId_in_request.
3719
+ - |-
3720
+ When scaffolding a draft sync before the destination is known, send only
3721
+ _integrationId and source._connectionId; the sync is created disabled and the
3722
+ destination can be filled in with a later PUT.
3723
+ properties:
3724
+ _integrationId:
3725
+ type: string
3726
+ format: objectId
3727
+ x-celigo-refModel: integrations
3728
+ description: |-
3729
+ Integration to create the sync in. Required on create; forbidden on update —
3730
+ the integration cannot be changed once assigned (`400 sync_integration_id_update`).
3731
+ examples:
3732
+ - 69f4ffd395ec28be9cb8c12e
3733
+ name:
3734
+ type: string
3735
+ maxLength: 150
3736
+ description: |-
3737
+ Display name shown in the UI. Values over 150 characters fail with
3738
+ `422 size_limit_exceeded`.
3739
+ examples:
3740
+ - Salesforce Demo Sync
3741
+ description:
3742
+ type: string
3743
+ maxLength: 5120
3744
+ description: Free-form notes about what the sync replicates and why.
3745
+ examples:
3746
+ - Replicates core CRM objects into the analytics warehouse.
3747
+ disabled:
3748
+ type: boolean
3749
+ default: true
3750
+ description: |-
3751
+ When true, the sync neither runs on schedule nor accepts on-demand runs. Set to
3752
+ false only once source, destination, datasets, and `historicDateTime` are all
3753
+ configured; enabling an incomplete sync fails with `422 sync_not_enabled`.
3754
+ examples:
3755
+ - false
3756
+ schedule:
3757
+ type: string
3758
+ description: |-
3759
+ Cron expression that controls automatic runs, e.g. `? 0 */6 * * *` for every six
3760
+ hours. Send an empty string (or omit) for a sync that only runs on demand.
3761
+ Evaluated in `timezone`.
3762
+ examples:
3763
+ - '? 0 */6 * * *'
3764
+ timezone:
3765
+ type: string
3766
+ description: IANA time zone name (e.g. `America/New_York`) the `schedule` is evaluated in.
3767
+ examples:
3768
+ - America/New_York
3769
+ historicDateTime:
3770
+ type: string
3771
+ format: date-time
3772
+ description: |-
3773
+ Earliest record timestamp to backfill from the source. Must be set before the
3774
+ sync can be enabled.
3775
+ examples:
3776
+ - '2022-07-04T18:30:00.000Z'
3777
+ source:
3778
+ type: object
3779
+ description: Application the sync extracts records from.
3780
+ required:
3781
+ - _connectionId
3782
+ properties:
3783
+ _connectionId:
3784
+ type: string
3785
+ format: objectId
3786
+ x-celigo-refModel: connections
3787
+ description: |-
3788
+ Connection to the source application. The application must be one of the
3789
+ supported sync sources returned by `GET /v1/di/metadata/sources`. Omitting
3790
+ it fails with `422 missing_source_connection`.
3791
+ examples:
3792
+ - 6a2a95909e994395f3c2a4e6
3793
+ destination:
3794
+ type: object
3795
+ description: |-
3796
+ Data warehouse the sync loads records into. Omit while drafting; a complete
3797
+ destination (connection, database, schema) is required before the sync can be
3798
+ enabled. The source + destination host/database/schema combination must be unique
3799
+ across syncs (`422 duplicate_destination_host`), and all syncs in an integration
3800
+ must target the same destination application type.
3801
+ properties:
3802
+ _connectionId:
3803
+ type: string
3804
+ format: objectId
3805
+ x-celigo-refModel: connections
3806
+ description: |-
3807
+ Connection to the destination warehouse. The application must be one of the
3808
+ supported sync destinations returned by `GET /v1/di/metadata/destinations`.
3809
+ examples:
3810
+ - 68d02dbe0839a514623c1d6d
3811
+ database:
3812
+ type: string
3813
+ description: Database in the destination warehouse the sync loads into.
3814
+ examples:
3815
+ - ANALYTICS_DB
3816
+ schema:
3817
+ type: string
3818
+ description: Schema within `database` where the sync creates and loads tables.
3819
+ examples:
3820
+ - salesforce_raw
3821
+ tablePrefix:
3822
+ type: string
3823
+ description: |-
3824
+ Prefix prepended to the name of every table the sync creates in the
3825
+ destination schema. Omit to use unprefixed table names.
3826
+ examples:
3827
+ - sf_
3828
+ driftPolicy:
3829
+ $ref: '#/components/schemas/SyncDriftPolicy'
3830
+ DataElement:
3831
+ type: object
3832
+ description: |-
3833
+ Per-column/field replication settings inside a dataset. Elements with nested
3834
+ structure (objects or arrays) carry a `transformMode` and a `children` array;
3835
+ scalar elements carry neither.
3836
+ properties:
3837
+ name:
3838
+ type: string
3839
+ description: |-
3840
+ Column/field name exactly as it appears in the source dataset. Discover the
3841
+ available names via
3842
+ `GET /v1/di/metadata/connections/{_connectionId}/datasets/{datasetName}/details`.
3843
+ examples:
3844
+ - Id
3845
+ enable:
3846
+ type: boolean
3847
+ description: |-
3848
+ When true, the sync extracts and loads this column. Disabled columns are left
3849
+ out of the destination table.
3850
+ examples:
3851
+ - true
3852
+ mask:
3853
+ type: boolean
3854
+ description: |-
3855
+ When true, the value is masked before loading so the raw source value never
3856
+ lands in the destination. Cannot be combined with `isPrimaryKey`.
3857
+ examples:
3858
+ - false
3859
+ isPrimaryKey:
3860
+ type: boolean
3861
+ description: |-
3862
+ When true, marks the column as (part of) the record key. Required on at least
3863
+ one enabled scalar column when the dataset's `ingestionMode` is `merge`, and
3864
+ used as the parent key for arrays normalized into child tables under `append`
3865
+ and `replace`. The element must also be enabled, and cannot carry `mask` or a
3866
+ `transformMode`.
3867
+ examples:
3868
+ - true
3869
+ transformMode:
3870
+ type: string
3871
+ enum:
3872
+ - preserve
3873
+ - flatten
3874
+ - normalize
3875
+ description: |-
3876
+ Only set on elements with `children` — it controls how the nested structure is
3877
+ loaded. Setting it on a scalar element fails validation, as does omitting it on
3878
+ an element that has children. Children nested under a `preserve` parent cannot
3879
+ override it with another mode.
3880
+ x-enumDescriptions:
3881
+ preserve: Load the nested structure as a single semi-structured column.
3882
+ flatten: Expand object keys into individual columns on the same table.
3883
+ normalize: Split array items into a child table keyed back to the parent record.
3884
+ examples:
3885
+ - flatten
3886
+ children:
3887
+ type: array
3888
+ description: |-
3889
+ Nested elements of an object or array field. Present together with
3890
+ `transformMode`; empty for scalar columns.
3891
+ items:
3892
+ $ref: '#/components/schemas/DataElement'
3893
+ Dataset:
3894
+ type: object
3895
+ description: |-
3896
+ One table/object a sync replicates, with its per-column selections and load behavior.
3897
+ Datasets are scoped to a single sync and are created and updated in bulk via
3898
+ `PUT /v1/syncs/{_syncId}/datasets`.
3899
+ required:
3900
+ - _id
3901
+ - _userId
3902
+ - _syncId
3903
+ - name
3904
+ - externalId
3905
+ - enable
3906
+ - enableAllDataElements
3907
+ - userActionRequired
3908
+ - exportProperties
3909
+ - driftPolicy
3910
+ properties:
3911
+ _id:
3912
+ type: string
3913
+ format: objectId
3914
+ readOnly: true
3915
+ description: Unique identifier for the dataset.
3916
+ examples:
3917
+ - 6a559b547885d8f93921c2ba
3918
+ _userId:
3919
+ type: string
3920
+ format: objectId
3921
+ x-celigo-refModel: users
3922
+ readOnly: true
3923
+ description: Account owner the dataset belongs to.
3924
+ examples:
3925
+ - 68c821306f5d848c881da205
3926
+ _syncId:
3927
+ type: string
3928
+ format: objectId
3929
+ x-celigo-refModel: syncs
3930
+ readOnly: true
3931
+ description: Sync this dataset belongs to. Assigned from the request path at creation.
3932
+ examples:
3933
+ - 6a559b5185efa7502eefd439
3934
+ name:
3935
+ type: string
3936
+ description: |-
3937
+ Display name of the dataset, typically the source's human-readable label
3938
+ (e.g. a Salesforce object's display name). Empty string when never set.
3939
+ examples:
3940
+ - Account
3941
+ externalId:
3942
+ type: string
3943
+ description: |-
3944
+ Identifier of the dataset in the source system — the table/object name for
3945
+ application sources, or the export ID when `isExport` is true. Immutable after
3946
+ creation.
3947
+ examples:
3948
+ - Account
3949
+ enable:
3950
+ type: boolean
3951
+ description: |-
3952
+ When true, the sync replicates this dataset on each run. Disabled datasets stay
3953
+ configured but are skipped.
3954
+ examples:
3955
+ - true
3956
+ enableAllDataElements:
3957
+ type: boolean
3958
+ readOnly: true
3959
+ description: |-
3960
+ When true, every column in the source dataset is replicated. Computed by the
3961
+ platform: true while the dataset has no explicit `dataElements` selection,
3962
+ false once one is saved.
3963
+ examples:
3964
+ - false
3965
+ ingestionMode:
3966
+ type: string
3967
+ enum:
3968
+ - append
3969
+ - replace
3970
+ - merge
3971
+ description: |-
3972
+ How each run's extracted records are written into the destination table.
3973
+ Required once the dataset is enabled (`422
3974
+ ingestion_mode_required_for_enabled_datasets`). `merge` additionally requires a
3975
+ primary-key column in `dataElements`.
3976
+ x-enumDescriptions:
3977
+ append: Add extracted records to the destination table, keeping prior rows.
3978
+ replace: Drop and reload the destination table with each run's records.
3979
+ merge: Upsert records into the destination table by primary key.
3980
+ examples:
3981
+ - merge
3982
+ tableName:
3983
+ type: string
3984
+ description: |-
3985
+ Destination table name override. Must be unique among the sync's datasets
3986
+ (`422 table_name_already_exists`); required when `isExport` is true. Omit to
3987
+ let the platform derive the table name from the dataset.
3988
+ examples:
3989
+ - account
3990
+ isExport:
3991
+ type: boolean
3992
+ description: |-
3993
+ When true, the dataset's records come from an existing export resource instead
3994
+ of a source table; `externalId` then holds the export ID, and the export must
3995
+ use the sync's source connection. Export datasets require `tableName` and an
3996
+ explicit `dataElements` selection, and do not accept `exportProperties`.
3997
+ examples:
3998
+ - false
3999
+ exportProperties:
4000
+ type: object
4001
+ description: |-
4002
+ Extraction behavior for the dataset. Only configurable on source-table
4003
+ datasets — sending it on an export dataset (`isExport: true`) fails
4004
+ validation; export-backed datasets return a platform-generated stub
4005
+ (`{"delta": {}}`, no `type`) because extraction follows the export's own
4006
+ configuration.
4007
+ properties:
4008
+ type:
4009
+ type: string
4010
+ enum:
4011
+ - delta
4012
+ - all
4013
+ description: |-
4014
+ Extraction strategy for each run. Use `delta` for incremental extraction of
4015
+ changed records and `all` to re-extract every record on every run.
4016
+ x-enumDescriptions:
4017
+ delta: Extract only records changed since the previous run.
4018
+ all: Extract every record on every run.
4019
+ examples:
4020
+ - delta
4021
+ delta:
4022
+ type: object
4023
+ description: Incremental-extraction settings. Only used when `type` is `delta`.
4024
+ properties:
4025
+ dateField:
4026
+ type: string
4027
+ description: |-
4028
+ Source field that carries each record's last-modified timestamp, used as
4029
+ the delta cursor. Required for NetSuite datasets that extract via a
4030
+ `netsuite.recordType`; Salesforce datasets derive it automatically.
4031
+ examples:
4032
+ - lastmodifieddate
4033
+ netsuite:
4034
+ type: object
4035
+ description: NetSuite-specific extraction settings. Omit for other sources.
4036
+ properties:
4037
+ recordType:
4038
+ type: string
4039
+ description: |-
4040
+ NetSuite record type backing a saved-search dataset. When set with
4041
+ `exportProperties.type: delta`, a `delta.dateField` is required.
4042
+ examples:
4043
+ - salesorder
4044
+ driftPolicy:
4045
+ type: object
4046
+ description: |-
4047
+ Per-dataset override of the sync's `driftPolicy` for column/field drift. Empty
4048
+ (`{element: {}}`) when the dataset follows the sync-level policy.
4049
+ properties:
4050
+ element:
4051
+ $ref: '#/components/schemas/ElementDriftPolicy'
4052
+ dataElements:
4053
+ type: array
4054
+ description: |-
4055
+ Per-column replication selections. Absent while `enableAllDataElements` is true
4056
+ (every column replicated).
4057
+ items:
4058
+ $ref: '#/components/schemas/DataElement'
4059
+ userActionRequired:
4060
+ type: boolean
4061
+ readOnly: true
4062
+ description: |-
4063
+ When true, the platform detected a schema change that needs a user decision
4064
+ before the dataset can be modified or replicated again — typically drift the
4065
+ `driftPolicy` does not automate. Updates to the dataset are rejected until the
4066
+ conflict is resolved (in the UI) in the same save that clears the flag.
4067
+ examples:
4068
+ - false
4069
+ mismatchSyncConnection:
4070
+ type: boolean
4071
+ readOnly: true
4072
+ description: |-
4073
+ Only present (as `true`) in list responses, on export-backed datasets whose
4074
+ export no longer uses the sync's source connection. Repoint the export or
4075
+ recreate the dataset to resume replicating it.
4076
+ examples:
4077
+ - true
4078
+ DatasetUpsertItem:
4079
+ type: object
4080
+ description: |-
4081
+ One dataset to create or update in a `PUT /v1/syncs/{_syncId}/datasets` batch.
4082
+ Send `externalId` (without `_id`) to create, or `_id` (without `externalId`) to
4083
+ update — providing both or neither fails with `400 dataset_externalId_id_required`.
4084
+ Updates are full replacements of the writable fields.
4085
+ x-celigo-ai-guidance:
4086
+ - |-
4087
+ Create items with externalId only; update items with _id only. Sending both on one
4088
+ item fails the whole batch with 400 dataset_externalId_id_required, as does creating
4089
+ a dataset whose externalId already exists on the sync (400) or updating an _id that
4090
+ does not belong to the sync (400).
4091
+ - |-
4092
+ enable: true requires ingestionMode (422 ingestion_mode_required_for_enabled_datasets),
4093
+ and ingestionMode merge requires at least one enabled dataElement with
4094
+ isPrimaryKey: true (422).
4095
+ - |-
4096
+ To scaffold a dataset without replicating it yet, send name, externalId, enable: false
4097
+ and no dataElements — the platform then replicates all columns once enabled.
4098
+ properties:
4099
+ _id:
4100
+ type: string
4101
+ format: objectId
4102
+ description: |-
4103
+ Dataset to update. The dataset must already belong to the sync in the request
4104
+ path. Omit when creating.
4105
+ examples:
4106
+ - 6a559b547885d8f93921c2ba
4107
+ externalId:
4108
+ type: string
4109
+ description: |-
4110
+ Identifier of the dataset in the source system — the table/object name from
4111
+ `GET /v1/di/metadata/connections/{_connectionId}/datasets`, or an export ID when
4112
+ `isExport` is true. Set when creating; immutable afterwards. A dataset with the
4113
+ same `externalId` must not already exist on the sync.
4114
+ examples:
4115
+ - Account
4116
+ name:
4117
+ type: string
4118
+ description: Display name of the dataset, typically the source's human-readable label.
4119
+ examples:
4120
+ - Account
4121
+ enable:
4122
+ type: boolean
4123
+ description: |-
4124
+ When true, the sync replicates this dataset on each run. Required (with an
4125
+ `ingestionMode`) to activate the dataset; datasets created with `enable: false`
4126
+ stay configured but skipped.
4127
+ examples:
4128
+ - true
4129
+ ingestionMode:
4130
+ type: string
4131
+ enum:
4132
+ - append
4133
+ - replace
4134
+ - merge
4135
+ description: |-
4136
+ How extracted records are written into the destination table. Required when
4137
+ `enable` is true. `merge` requires a primary key in `dataElements`.
4138
+ x-enumDescriptions:
4139
+ append: Add extracted records to the destination table, keeping prior rows.
4140
+ replace: Drop and reload the destination table with each run's records.
4141
+ merge: Upsert records into the destination table by primary key.
4142
+ examples:
4143
+ - merge
4144
+ tableName:
4145
+ type: string
4146
+ description: |-
4147
+ Destination table name override. Must be unique among the sync's datasets —
4148
+ duplicates within the batch or with existing datasets fail with `400
4149
+ duplicate_dataset_table_names` / `422 table_name_already_exists`. Required when
4150
+ `isExport` is true.
4151
+ examples:
4152
+ - account
4153
+ isExport:
4154
+ type: boolean
4155
+ description: |-
4156
+ When true, the dataset's records come from an existing export resource:
4157
+ `externalId` must be the export's ID, the export must use the sync's source
4158
+ connection (`400 connection_mismatch`), and the item must include `tableName`
4159
+ and `dataElements` but no `exportProperties`.
4160
+ examples:
4161
+ - false
4162
+ exportProperties:
4163
+ type: object
4164
+ description: |-
4165
+ Extraction behavior for the dataset. Only for source-table datasets — sending it
4166
+ with `isExport: true` fails validation.
4167
+ properties:
4168
+ type:
4169
+ type: string
4170
+ enum:
4171
+ - delta
4172
+ - all
4173
+ description: |-
4174
+ Extraction strategy for each run. Use `delta` for incremental extraction of
4175
+ changed records and `all` to re-extract every record on every run.
4176
+ x-enumDescriptions:
4177
+ delta: Extract only records changed since the previous run.
4178
+ all: Extract every record on every run.
4179
+ examples:
4180
+ - delta
4181
+ delta:
4182
+ type: object
4183
+ description: Incremental-extraction settings. Only used when `type` is `delta`.
4184
+ properties:
4185
+ dateField:
4186
+ type: string
4187
+ description: |-
4188
+ Source field carrying each record's last-modified timestamp, used as the
4189
+ delta cursor. Required for NetSuite datasets extracted via a
4190
+ `netsuite.recordType`; Salesforce datasets derive it automatically.
4191
+ examples:
4192
+ - lastmodifieddate
4193
+ netsuite:
4194
+ type: object
4195
+ description: NetSuite-specific extraction settings. Omit for other sources.
4196
+ properties:
4197
+ recordType:
4198
+ type: string
4199
+ description: |-
4200
+ NetSuite record type backing a saved-search dataset. When set with
4201
+ `exportProperties.type: delta`, a `delta.dateField` is required.
4202
+ examples:
4203
+ - salesorder
4204
+ driftPolicy:
4205
+ type: object
4206
+ description: |-
4207
+ Per-dataset override of the sync's `driftPolicy` for column/field drift. Omit
4208
+ to follow the sync-level policy.
4209
+ properties:
4210
+ element:
4211
+ $ref: '#/components/schemas/ElementDriftPolicy'
4212
+ dataElements:
4213
+ type: array
4214
+ description: |-
4215
+ Per-column replication selections. Omit to replicate every column
4216
+ (`enableAllDataElements` stays true). When provided, the array replaces the
4217
+ dataset's previous selection entirely.
4218
+ items:
4219
+ $ref: '#/components/schemas/DataElement'
4220
+ SyncRunRequest:
4221
+ type: object
4222
+ description: |-
4223
+ Optional request body for triggering a sync run. When omitted or sent as `{}`, the sync runs
4224
+ with `runType: "normal"` (incremental delta). Pass `runType: "resync"` to force a full re-extraction
4225
+ from the source system, discarding the current delta checkpoint.
4226
+ properties:
4227
+ runType:
4228
+ type: string
4229
+ description: Controls whether the run is incremental or a full resync.
4230
+ enum:
4231
+ - normal
4232
+ - resync
4233
+ x-enumDescriptions:
4234
+ normal: Incremental delta sync extracting only records modified since the last run.
4235
+ resync: Full resync re-extracting all records from the source system.
4236
+ default: normal
4237
+ examples:
4238
+ - runType: normal
4239
+ - runType: resync
4240
+ SyncRunResponse:
4241
+ type: object
4242
+ description: |-
4243
+ Response from `POST /v1/syncs/{_syncId}/run`. Contains identifiers for the newly queued sync run.
4244
+ Use `syncId` with `GET /v1/syncs/{_syncId}/syncJobs` or `flowExecutionGroupId` with
4245
+ `GET /v1/syncJobs/{_syncJobId}` to poll for run completion.
4246
+ properties:
4247
+ syncId:
4248
+ type: string
4249
+ format: objectId
4250
+ x-celigo-refModel: syncs
4251
+ readOnly: true
4252
+ description: The sync resource id that was triggered.
4253
+ examples:
4254
+ - 682094fa7eb7fc3e7ab7a4a0
4255
+ flowExecutionGroupId:
4256
+ type: string
4257
+ readOnly: true
4258
+ description: |-
4259
+ Correlation id for this execution group. Groups the parent sync job and all child
4260
+ table-level jobs spawned by this run.
4261
+ examples:
4262
+ - 6821c01c39db7c2b9cdc0e29
4263
+ examples:
4264
+ - syncId: 682094fa7eb7fc3e7ab7a4a0
4265
+ flowExecutionGroupId: 6821c01c39db7c2b9cdc0e29
4266
+ SyncJob:
4267
+ type: object
4268
+ required:
4269
+ - _id
4270
+ - _syncId
4271
+ - _integrationId
4272
+ - status
4273
+ - runType
4274
+ - createdAt
4275
+ description: |-
4276
+ A sync job represents one execution of a sync. Sync jobs are read-only records
4277
+ created by the platform when a sync run is triggered (manually or on schedule). The job tracks
4278
+ extraction, loading, and error counts across all tables in the sync. `numTablesSynced` reflects
4279
+ only the tables that actively participated in this run -- for a delta run it may be lower than
4280
+ the total table count.
4281
+ properties:
4282
+ _id:
4283
+ type: string
4284
+ format: objectId
4285
+ readOnly: true
4286
+ description: Sync job id.
4287
+ examples:
4288
+ - 6821c01c39db7c2b9cdc0e30
4289
+ flowExecutionGroupId:
4290
+ type: string
4291
+ readOnly: true
4292
+ description: Correlation id grouping this job with its child table jobs.
4293
+ examples:
4294
+ - 6821c01c39db7c2b9cdc0e29
4295
+ _integrationId:
4296
+ type: string
4297
+ format: objectId
4298
+ x-celigo-refModel: integrations
4299
+ readOnly: true
4300
+ description: Integration id this sync belongs to.
4301
+ examples:
4302
+ - 67d7b6e69e4b1371e5d1e2a1
4303
+ _syncId:
4304
+ type: string
4305
+ format: objectId
4306
+ x-celigo-refModel: syncs
4307
+ readOnly: true
4308
+ description: Sync resource id.
4309
+ examples:
4310
+ - 682094fa7eb7fc3e7ab7a4a0
4311
+ createdAt:
4312
+ type: string
4313
+ format: date-time
4314
+ readOnly: true
4315
+ description: When the sync job record was created (queued).
4316
+ examples:
4317
+ - '2026-04-28T14:30:00.000Z'
4318
+ startedAt:
4319
+ type: string
4320
+ format: date-time
4321
+ readOnly: true
4322
+ description: When execution actually began. Absent while the job is still queued.
4323
+ examples:
4324
+ - '2026-04-28T14:30:01.123Z'
4325
+ endedAt:
4326
+ type: string
4327
+ format: date-time
4328
+ readOnly: true
4329
+ description: When execution completed. Absent while the job is still running.
4330
+ examples:
4331
+ - '2026-04-28T14:35:12.456Z'
4332
+ purgeAt:
4333
+ type: string
4334
+ format: date-time
4335
+ readOnly: true
4336
+ description: When the job record will be purged from storage.
4337
+ examples:
4338
+ - '2026-07-28T14:35:12.456Z'
4339
+ status:
4340
+ type: string
4341
+ readOnly: true
4342
+ description: |-
4343
+ Current lifecycle state. Jobs start as `queued` when a run is accepted, move to
4344
+ `running` once a worker picks them up, and end as `completed`, `failed`, or
4345
+ `canceled`.
4346
+ enum:
4347
+ - queued
4348
+ - running
4349
+ - completed
4350
+ - failed
4351
+ - canceled
4352
+ x-enumDescriptions:
4353
+ queued: Run accepted and waiting for a worker to start execution.
4354
+ running: Sync is currently executing.
4355
+ completed: Sync finished successfully.
4356
+ failed: Sync finished with a fatal error.
4357
+ canceled: Sync was canceled by a user or the system.
4358
+ numErrors:
4359
+ type: integer
4360
+ readOnly: true
4361
+ description: Total number of errors produced across all tables in this run.
4362
+ examples:
4363
+ - 0
4364
+ numLoadedRecords:
4365
+ type: integer
4366
+ readOnly: true
4367
+ description: Total number of records loaded (written) to the data warehouse.
4368
+ examples:
4369
+ - 12450
4370
+ numExtractedRecords:
4371
+ type: integer
4372
+ readOnly: true
4373
+ description: Total number of records extracted from the source system.
4374
+ examples:
4375
+ - 12450
4376
+ numTablesSynced:
4377
+ type: integer
4378
+ readOnly: true
4379
+ description: Number of tables that were synced in this run.
4380
+ examples:
4381
+ - 3
4382
+ triggeredBy:
4383
+ type: string
4384
+ readOnly: true
4385
+ description: Who or what triggered this sync run (e.g. `"user:email"`, `"schedule"`).
4386
+ examples:
4387
+ - user:tyler.lamparter@celigo.com
4388
+ canceledBy:
4389
+ type: string
4390
+ readOnly: true
4391
+ description: Who or what canceled this run. Only present when `status` is `canceled`.
4392
+ examples:
4393
+ - user:tyler.lamparter@celigo.com
4394
+ runType:
4395
+ type: string
4396
+ readOnly: true
4397
+ description: Whether this was a normal (delta) or full resync run.
4398
+ enum:
4399
+ - normal
4400
+ - resync
4401
+ x-enumDescriptions:
4402
+ normal: Incremental delta sync extracting only records modified since the last run.
4403
+ resync: Full resync re-extracting all records from the source system.
4404
+ examples:
4405
+ - _id: 6821c01c39db7c2b9cdc0e30
4406
+ flowExecutionGroupId: 6821c01c39db7c2b9cdc0e29
4407
+ _integrationId: 67d7b6e69e4b1371e5d1e2a1
4408
+ _syncId: 682094fa7eb7fc3e7ab7a4a0
4409
+ createdAt: '2026-04-28T14:30:00.000Z'
4410
+ startedAt: '2026-04-28T14:30:01.123Z'
4411
+ endedAt: '2026-04-28T14:35:12.456Z'
4412
+ purgeAt: '2026-07-28T14:35:12.456Z'
4413
+ status: completed
4414
+ numErrors: 0
4415
+ numLoadedRecords: 12450
4416
+ numExtractedRecords: 12450
4417
+ numTablesSynced: 3
4418
+ triggeredBy: user:tyler.lamparter@celigo.com
4419
+ runType: normal
4420
+ SyncJobsResponse:
4421
+ type: object
4422
+ description: |-
4423
+ Paginated list of sync jobs for a given sync. Contains the array of job records and a total count.
4424
+
4425
+ Note: although the response includes `totalCount`, the `limit` and `offset` query parameters
4426
+ on the list endpoint are silently ignored by the server as of this writing. The response always
4427
+ returns all jobs.
4428
+ properties:
4429
+ data:
4430
+ type: array
4431
+ description: Array of sync job records.
4432
+ items:
4433
+ $ref: '#/components/schemas/SyncJob'
4434
+ totalCount:
4435
+ type: integer
4436
+ readOnly: true
4437
+ description: Total number of sync jobs for this sync (across all pages).
4438
+ examples:
4439
+ - 1
4440
+ examples:
4441
+ - data:
4442
+ - _id: 6821c01c39db7c2b9cdc0e30
4443
+ flowExecutionGroupId: 6821c01c39db7c2b9cdc0e29
4444
+ _integrationId: 67d7b6e69e4b1371e5d1e2a1
4445
+ _syncId: 682094fa7eb7fc3e7ab7a4a0
4446
+ createdAt: '2026-04-28T14:30:00.000Z'
4447
+ startedAt: '2026-04-28T14:30:01.123Z'
4448
+ endedAt: '2026-04-28T14:35:12.456Z'
4449
+ purgeAt: '2026-07-28T14:35:12.456Z'
4450
+ status: completed
4451
+ numErrors: 0
4452
+ numLoadedRecords: 12450
4453
+ numExtractedRecords: 12450
4454
+ numTablesSynced: 3
4455
+ triggeredBy: user:tyler.lamparter@celigo.com
4456
+ runType: normal
4457
+ totalCount: 1
4458
+ SyncTableJob:
4459
+ type: object
4460
+ description: |-
4461
+ A child job representing one table's extraction and load within a parent sync run. Each table
4462
+ job tracks its own record counts, error counts, and timing independently.
4463
+ properties:
4464
+ _id:
4465
+ type: string
4466
+ format: objectId
4467
+ readOnly: true
4468
+ description: Child table job id.
4469
+ examples:
4470
+ - 6821c01c39db7c2b9cdc0e31
4471
+ tableName:
4472
+ type: string
4473
+ readOnly: true
4474
+ description: Name of the table being synced (e.g. `"contacts"`, `"orders"`).
4475
+ examples:
4476
+ - contacts
4477
+ createdAt:
4478
+ type: string
4479
+ format: date-time
4480
+ readOnly: true
4481
+ description: When this child job was created.
4482
+ examples:
4483
+ - '2026-04-28T14:30:01.200Z'
4484
+ status:
4485
+ type: string
4486
+ readOnly: true
4487
+ description: |-
4488
+ Current lifecycle state of this table's sync. Table jobs start as `queued`, move
4489
+ to `running` when extraction begins, and end as `completed`, `failed`, or
4490
+ `canceled`.
4491
+ enum:
4492
+ - queued
4493
+ - running
4494
+ - completed
4495
+ - failed
4496
+ - canceled
4497
+ x-enumDescriptions:
4498
+ queued: Table sync is waiting for a worker to start.
4499
+ running: Table sync is currently executing.
4500
+ completed: Table sync finished successfully.
4501
+ failed: Table sync finished with a fatal error.
4502
+ canceled: Table sync was canceled.
4503
+ numErrors:
4504
+ type: integer
4505
+ readOnly: true
4506
+ description: Number of errors encountered syncing this table.
4507
+ examples:
4508
+ - 0
4509
+ numLoadedRecords:
4510
+ type: integer
4511
+ readOnly: true
4512
+ description: Number of records loaded into the warehouse for this table.
4513
+ examples:
4514
+ - 8200
4515
+ numExtractedRecords:
4516
+ type: integer
4517
+ readOnly: true
4518
+ description: Number of records extracted from the source for this table.
4519
+ examples:
4520
+ - 8200
4521
+ isNormalizedTable:
4522
+ type: boolean
4523
+ readOnly: true
4524
+ description: |-
4525
+ When true, this table is a normalized child table split out from
4526
+ nested data in the source dataset rather than a source table itself.
4527
+ Present only when true — omitted from the response when false.
4528
+ startedAt:
4529
+ type: string
4530
+ format: date-time
4531
+ readOnly: true
4532
+ description: When extraction began for this table. Absent if not yet started.
4533
+ examples:
4534
+ - '2026-04-28T14:30:01.300Z'
4535
+ endedAt:
4536
+ type: string
4537
+ format: date-time
4538
+ readOnly: true
4539
+ description: When loading completed for this table. Absent if still running.
4540
+ examples:
4541
+ - '2026-04-28T14:33:45.100Z'
4542
+ examples:
4543
+ - _id: 6821c01c39db7c2b9cdc0e31
4544
+ tableName: contacts
4545
+ createdAt: '2026-04-28T14:30:01.200Z'
4546
+ status: completed
4547
+ numErrors: 0
4548
+ numLoadedRecords: 8200
4549
+ numExtractedRecords: 8200
4550
+ startedAt: '2026-04-28T14:30:01.300Z'
4551
+ endedAt: '2026-04-28T14:33:45.100Z'
4552
+ SyncJobFamily:
4553
+ type: object
4554
+ description: |-
4555
+ A sync job family consisting of the parent sync job and its per-table child jobs. Each entry in
4556
+ `tables` represents one table that was synced as part of this run, with its own status, record
4557
+ counts, and timing. The parent-level counters are the authoritative totals; `tables[]` provides
4558
+ the per-table breakdown. `tables` may be empty if the job was canceled before any table work
4559
+ started.
4560
+ allOf:
4561
+ - $ref: '#/components/schemas/SyncJob'
4562
+ - type: object
4563
+ properties:
4564
+ tables:
4565
+ type: array
4566
+ description: Per-table child job records for this sync run.
4567
+ items:
4568
+ $ref: '#/components/schemas/SyncTableJob'
4569
+ SyncError:
4570
+ type: object
4571
+ description: |-
4572
+ An individual error record from a sync run. Errors are scoped to a specific table (identified by
4573
+ `tableName` and `_datasetId`) within a sync execution. `_parentSyncJobId` links to the parent
4574
+ sync job and `_childSyncJobId` links to the table-level child.
4575
+ properties:
4576
+ scope:
4577
+ type: string
4578
+ readOnly: true
4579
+ description: Pipeline scope where the error occurred (e.g. `"extract"`, `"load"`).
4580
+ examples:
4581
+ - extract
4582
+ source:
4583
+ type: string
4584
+ readOnly: true
4585
+ description: System or component that produced the error.
4586
+ examples:
4587
+ - salesforce
4588
+ code:
4589
+ type: string
4590
+ readOnly: true
4591
+ description: Machine-readable error code.
4592
+ examples:
4593
+ - INVALID_FIELD
4594
+ message:
4595
+ type: string
4596
+ readOnly: true
4597
+ description: Human-readable error message.
4598
+ examples:
4599
+ - No such column 'Custom_Field__c' on entity 'Account'.
4600
+ _datasetId:
4601
+ type: string
4602
+ format: objectId
4603
+ readOnly: true
4604
+ description: Dataset id associated with this error.
4605
+ examples:
4606
+ - 6821c01c39db7c2b9cdc0e35
4607
+ _syncId:
4608
+ type: string
4609
+ format: objectId
4610
+ x-celigo-refModel: syncs
4611
+ readOnly: true
4612
+ description: Sync resource id.
4613
+ examples:
4614
+ - 682094fa7eb7fc3e7ab7a4a0
4615
+ _parentSyncJobId:
4616
+ type: string
4617
+ format: objectId
4618
+ readOnly: true
4619
+ description: Parent sync job id.
4620
+ examples:
4621
+ - 6821c01c39db7c2b9cdc0e30
4622
+ _childSyncJobId:
4623
+ type: string
4624
+ format: objectId
4625
+ readOnly: true
4626
+ description: Child (table-level) sync job id.
4627
+ examples:
4628
+ - 6821c01c39db7c2b9cdc0e31
4629
+ flowExecutionGroupId:
4630
+ type: string
4631
+ readOnly: true
4632
+ description: Correlation id for the execution group.
4633
+ examples:
4634
+ - 6821c01c39db7c2b9cdc0e29
4635
+ stage:
4636
+ type: string
4637
+ readOnly: true
4638
+ description: Pipeline stage where the error occurred.
4639
+ examples:
4640
+ - extraction
4641
+ datasetName:
4642
+ type: string
4643
+ readOnly: true
4644
+ description: Human-readable dataset name.
4645
+ examples:
4646
+ - Salesforce Accounts
4647
+ tableName:
4648
+ type: string
4649
+ readOnly: true
4650
+ description: Table name where the error occurred.
4651
+ examples:
4652
+ - accounts
4653
+ occurredAt:
4654
+ type: string
4655
+ format: date-time
4656
+ readOnly: true
4657
+ description: When the error occurred.
4658
+ examples:
4659
+ - '2026-04-28T14:31:22.789Z'
4660
+ examples:
4661
+ - scope: extract
4662
+ source: salesforce
4663
+ code: INVALID_FIELD
4664
+ message: No such column 'Custom_Field__c' on entity 'Account'.
4665
+ _datasetId: 6821c01c39db7c2b9cdc0e35
4666
+ _syncId: 682094fa7eb7fc3e7ab7a4a0
4667
+ _parentSyncJobId: 6821c01c39db7c2b9cdc0e30
4668
+ _childSyncJobId: 6821c01c39db7c2b9cdc0e31
4669
+ flowExecutionGroupId: 6821c01c39db7c2b9cdc0e29
4670
+ stage: extraction
4671
+ datasetName: Salesforce Accounts
4672
+ tableName: accounts
4673
+ occurredAt: '2026-04-28T14:31:22.789Z'
4674
+ SyncEvent:
4675
+ type: object
4676
+ description: |-
4677
+ One event recorded while a sync runs — schema drift the platform detected or
4678
+ handled, and data-catalog activity. Events are retained per the account's data
4679
+ retention period and ordered newest first.
4680
+ properties:
4681
+ id:
4682
+ type: string
4683
+ format: uuid
4684
+ description: Unique identifier for the event.
4685
+ examples:
4686
+ - 80ba31fe-b66d-4777-9b12-3177c55aab13
4687
+ _userId:
4688
+ type: string
4689
+ format: objectId
4690
+ x-celigo-refModel: users
4691
+ description: Account owner the event belongs to.
4692
+ examples:
4693
+ - 68c821306f5d848c881da205
4694
+ _syncId:
4695
+ type: string
4696
+ format: objectId
4697
+ x-celigo-refModel: syncs
4698
+ description: Sync the event was recorded for.
4699
+ examples:
4700
+ - 6a4b8bfb731a7a5cae9bd364
4701
+ flowExecutionGroupId:
4702
+ type: string
4703
+ description: |-
4704
+ Run the event belongs to. Matches the `flowExecutionGroupId` returned by
4705
+ `POST /v1/syncs/{_syncId}/run` and carried on the run's sync jobs, so events
4706
+ can be correlated with jobs and errors from the same execution.
4707
+ examples:
4708
+ - d0f875a575bd4b8c944533da773f350a
4709
+ resourceName:
4710
+ type: string
4711
+ description: Source table/object the event is about.
4712
+ examples:
4713
+ - Account
4714
+ severity:
4715
+ type: string
4716
+ enum:
4717
+ - INFO
4718
+ - WARN
4719
+ - ERROR
4720
+ description: |-
4721
+ How much attention the event needs. Informational drift the policy handled
4722
+ automatically is `INFO`; conditions requiring user action surface as `WARN`
4723
+ or `ERROR`.
4724
+ x-enumDescriptions:
4725
+ INFO: Informational; the platform handled the event automatically.
4726
+ WARN: The event may need review but did not stop the sync.
4727
+ ERROR: The event blocked part of the sync and needs user action.
4728
+ examples:
4729
+ - INFO
4730
+ eventTime:
4731
+ type: string
4732
+ format: date-time
4733
+ description: Timestamp when the event was recorded.
4734
+ examples:
4735
+ - '2026-07-13T12:36:06.225Z'
4736
+ type:
4737
+ type: string
4738
+ enum:
4739
+ - Schema Drift
4740
+ - Data Catalog
4741
+ description: |-
4742
+ Event category. Filter the list to one category with the `type` query
4743
+ parameter.
4744
+ x-enumDescriptions:
4745
+ Schema Drift: A change to the source schema was detected or applied (e.g. table added, column removed).
4746
+ Data Catalog: Dataset metadata activity recorded while cataloging the source.
4747
+ examples:
4748
+ - Schema Drift
4749
+ stage:
4750
+ type: string
4751
+ enum:
4752
+ - Extract
4753
+ - Transform
4754
+ - Load
4755
+ - ''
4756
+ description: |-
4757
+ Pipeline stage the event was recorded in. Empty when the event is not tied to
4758
+ a specific stage.
4759
+ x-enumDescriptions:
4760
+ Extract: While reading records or schema from the source.
4761
+ Transform: While reshaping records between source and destination.
4762
+ Load: While writing records or applying schema changes in the destination.
4763
+ '': Not tied to a specific pipeline stage.
4764
+ examples:
4765
+ - Extract
4766
+ metadata:
4767
+ description: |-
4768
+ Event-specific detail. For `Schema Drift` events this is an object with an
4769
+ `action` (e.g. `Table added`, `Table removed`, `Column added`, `Column removed`,
4770
+ `Column expanded`, `Column reduced`, `Column constraint updated`), the
4771
+ `resourceType` affected, and — for column-level drift — fields like `fieldName`,
4772
+ `oldValue`, `newValue`, or the applied DDL under `query`.
4773
+ oneOf:
4774
+ - title: object
4775
+ type: object
4776
+ additionalProperties: true
4777
+ - title: string
4778
+ type: string
4779
+ examples:
4780
+ - action: Table removed
4781
+ resourceType: Table
4782
+ responses:
4783
+ 401-unauthorized:
4784
+ description: |-
4785
+ Unauthorized. The request lacks a valid bearer token, or the provided token
4786
+ failed to authenticate.
4787
+
4788
+ Note: the 401 response is produced by the auth middleware **before** the
4789
+ request reaches the endpoint handler, so it does **not** follow the
4790
+ standard `{errors: [...]}` envelope. Instead the body is a bare
4791
+ `{message: string}` object with no `code`, no `errors` array. Callers
4792
+ handling 401s should key off the HTTP status and the `message` string,
4793
+ not try to destructure an `errors[]`.
4794
+ content:
4795
+ application/json:
4796
+ schema:
4797
+ type: object
4798
+ properties:
4799
+ message:
4800
+ type: string
4801
+ description: |-
4802
+ Human-readable description of the auth failure. Known values:
4803
+ - `"Unauthorized"` — no `Authorization` header on the request.
4804
+ - `"Bearer Authentication Failed"` — header present but token
4805
+ is invalid, revoked, or expired.
4806
+ required:
4807
+ - message
4808
+ examples:
4809
+ missing_token:
4810
+ summary: No Authorization header sent
4811
+ value:
4812
+ message: Unauthorized
4813
+ invalid_token:
4814
+ summary: Bearer token invalid or revoked
4815
+ value:
4816
+ message: Bearer Authentication Failed
4817
+ 422-unprocessable-entity:
4818
+ description: |
4819
+ Unprocessable entity. The request was well-formed but was unable to be followed due to semantic errors.
4820
+ content:
4821
+ application/json:
4822
+ schema:
4823
+ $ref: '#/components/schemas/Error'
4824
+ examples:
4825
+ default:
4826
+ value:
4827
+ errors:
4828
+ - code: unprocessable_entity
4829
+ message: The request could not be processed due to a semantic error.
4830
+ 404-not-found:
4831
+ description: |
4832
+ Not found. The requested resource does not exist or is not visible to the caller.
4833
+ content:
4834
+ application/json:
4835
+ schema:
4836
+ $ref: '#/components/schemas/Error'
4837
+ examples:
4838
+ default:
4839
+ value:
4840
+ errors:
4841
+ - code: not_found
4842
+ message: The requested resource was not found.
4843
+ 400-bad-request:
4844
+ description: |
4845
+ Bad request. The server could not understand the request because of malformed syntax or invalid parameters.
4846
+ content:
4847
+ application/json:
4848
+ schema:
4849
+ $ref: '#/components/schemas/Error'
4850
+ examples:
4851
+ default:
4852
+ value:
4853
+ errors:
4854
+ - code: invalid_request
4855
+ message: The request body failed validation.
4856
+ x-enable-proxy: true
4857
+ x-internal: false