@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/job.yml ADDED
@@ -0,0 +1,2014 @@
1
+ openapi: 3.2.0
2
+ info:
3
+ version: 1.0.0
4
+ title: Jobs
5
+ description: API for querying Celigo job execution state, retrieving job families and artifacts, and cancelling or purging jobs.
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: Jobs
19
+ description: |-
20
+ Jobs are read-only records of flow, export, and import executions, created by the
21
+ platform whenever a run occurs. A parent flow job aggregates the run's counters while
22
+ child export/import jobs carry per-step counts, errors, and artifacts. Use these
23
+ endpoints to monitor running jobs, inspect job families, download result files, and
24
+ cancel or purge runs.
25
+
26
+ ## Job schema
27
+
28
+ {% openapi-schemas spec="job" schemas="Job" grouped="true" %}
29
+ paths:
30
+ /v1/jobs:
31
+ get:
32
+ x-internal: false
33
+ operationId: listJobs
34
+ tags:
35
+ - Jobs
36
+ summary: List all jobs
37
+ description: |-
38
+ Returns jobs matching the given query-parameter filters, up to 1001 per
39
+ page in descending `createdAt` order. Use `createdAt_lte` on the last
40
+ record's `createdAt` (minus 1 ms) to page forward.
41
+
42
+ There are two query modes depending on the `type` parameter:
43
+
44
+ - **Parent jobs** (`type` omitted, `flow`, `retry`, or `bulk_retry`) —
45
+ pass at least one of `_integrationId`, `_flowId`, `_exportId`,
46
+ `_importId`, `_flowJobId`, `createdAt_gte`, or `createdAt_lte` to
47
+ scope the query. Omitting all filters returns all jobs in the account.
48
+ - **Child jobs** (`type=export` or `type=import`) — requires
49
+ `_flowJobId` or a resource ID filter (`_exportId` / `_importId`).
50
+ Returns the export/import sub-jobs within a parent flow job.
51
+
52
+ Date filters accept ISO 8601, plain date, or epoch milliseconds. When
53
+ combining `numError_gte`/`numError_lte` with `_integrationId`, use full
54
+ ISO 8601 with millis (plain-date format may be rejected). To page
55
+ forward, take the `createdAt` of the last record, subtract 1 ms, and
56
+ pass it as `createdAt_lte`.
57
+
58
+ Active jobs (`queued` or `running`) are pinned to the top of the first
59
+ page even when they fall outside the date filters; `canceling` jobs are
60
+ not pinned. Account for this when paging — the first page can contain
61
+ records older filters would otherwise exclude.
62
+ parameters:
63
+ - name: _integrationId
64
+ in: query
65
+ schema:
66
+ type: string
67
+ x-celigo-refModel: integrations
68
+ examples:
69
+ - 6842261335b64c0bcb308e4f
70
+ description: Filter by integration ID. Satisfies the required-param check.
71
+ - name: _exportId
72
+ in: query
73
+ schema:
74
+ type: string
75
+ x-celigo-refModel: exports
76
+ examples:
77
+ - 69f54d6a3469e3f5597848a1
78
+ description: Filter by export ID. Satisfies the required-param check.
79
+ - name: _importId
80
+ in: query
81
+ schema:
82
+ type: string
83
+ x-celigo-refModel: imports
84
+ examples:
85
+ - 69e9953d7a8373d88147b5ec
86
+ description: Filter by import ID. Satisfies the required-param check.
87
+ - name: _flowId
88
+ in: query
89
+ schema:
90
+ type: string
91
+ x-celigo-refModel: flows
92
+ examples:
93
+ - 69f54d6b7009ea11abad707a
94
+ description: Filter by flow ID. Satisfies the required-param check.
95
+ - name: _flowJobId
96
+ in: query
97
+ schema:
98
+ type: string
99
+ x-celigo-refModel: jobs
100
+ examples:
101
+ - 69f54d6f47185f8c7a500597
102
+ description: |-
103
+ Filter by parent flow-job ID. Satisfies the required-param check.
104
+ Required when querying child jobs (`type=export` or `type=import`).
105
+ - name: _flowId_in
106
+ in: query
107
+ schema:
108
+ type: string
109
+ examples:
110
+ - 69f54d6b7009ea11abad707a,69e83e7a75f7f8c14a12916e
111
+ description: |-
112
+ Comma-separated list of flow IDs to match. Works as an additional
113
+ filter but does **not** satisfy the required-param check alone.
114
+ `flowId_in` (without underscore) is accepted as an alias.
115
+ - name: status_in
116
+ in: query
117
+ schema:
118
+ type: string
119
+ examples:
120
+ - completed,failed
121
+ description: |-
122
+ Comma-separated list of status values to match (e.g.
123
+ `completed,failed`). Works as an additional filter but does
124
+ **not** satisfy the required-param check alone.
125
+ - name: createdAt_lte
126
+ in: query
127
+ schema:
128
+ type: string
129
+ examples:
130
+ - '2026-05-02T01:03:51.757Z'
131
+ description: |-
132
+ Return jobs created at or before this timestamp. Accepts ISO 8601,
133
+ plain date, or epoch milliseconds. Satisfies the required-param
134
+ check.
135
+ - name: createdAt_gte
136
+ in: query
137
+ schema:
138
+ type: string
139
+ examples:
140
+ - '2026-05-01T00:00:00.000Z'
141
+ description: |-
142
+ Return jobs created at or after this timestamp. Accepts ISO 8601,
143
+ plain date, or epoch milliseconds. Satisfies the required-param
144
+ check.
145
+ - name: status
146
+ in: query
147
+ schema:
148
+ type: string
149
+ enum:
150
+ - queued
151
+ - running
152
+ - completed
153
+ - failed
154
+ - canceled
155
+ - canceling
156
+ - retrying
157
+ x-enumDescriptions:
158
+ queued: Job is waiting to be picked up for execution.
159
+ running: Job is currently executing.
160
+ completed: Job finished successfully.
161
+ failed: Job finished with a fatal error.
162
+ canceled: Job was canceled by a user or the system.
163
+ canceling: Job cancellation has been requested but execution has not yet stopped.
164
+ retrying: Job is being retried after a previous failure.
165
+ description: Filter by job status.
166
+ - name: numSuccess_lte
167
+ in: query
168
+ schema:
169
+ type: integer
170
+ examples:
171
+ - 100
172
+ description: Filter to jobs with success count ≤ this value.
173
+ - name: numSuccess_gte
174
+ in: query
175
+ schema:
176
+ type: integer
177
+ examples:
178
+ - 1
179
+ description: Filter to jobs with success count ≥ this value.
180
+ - name: numIgnore_lte
181
+ in: query
182
+ schema:
183
+ type: integer
184
+ examples:
185
+ - 10
186
+ description: Filter to jobs with ignore count ≤ this value.
187
+ - name: numIgnore_gte
188
+ in: query
189
+ schema:
190
+ type: integer
191
+ examples:
192
+ - 1
193
+ description: Filter to jobs with ignore count ≥ this value.
194
+ - name: numError_gte
195
+ in: query
196
+ schema:
197
+ type: integer
198
+ examples:
199
+ - 1
200
+ description: |-
201
+ Filter to jobs with error count ≥ this value. When combined with
202
+ `_integrationId`, the query may reject plain-date `createdAt`
203
+ values — use full ISO 8601.
204
+ - name: numError_lte
205
+ in: query
206
+ schema:
207
+ type: integer
208
+ examples:
209
+ - 10
210
+ description: |-
211
+ Filter to jobs with error count ≤ this value. Same date-format
212
+ caveat as `numError_gte`.
213
+ - name: type
214
+ in: query
215
+ schema:
216
+ type: string
217
+ enum:
218
+ - flow
219
+ - export
220
+ - import
221
+ - retry
222
+ - bulk_retry
223
+ x-enumDescriptions:
224
+ flow: A parent flow-run job that orchestrates the full pipeline.
225
+ export: A child job for an export step within a flow run.
226
+ import: A child job for an import step within a flow run.
227
+ retry: A retry of a single failed record from a previous job.
228
+ bulk_retry: A bulk retry of multiple failed records from a previous job.
229
+ description: |-
230
+ Filter by job type. `flow`, `retry`, and `bulk_retry` are
231
+ parent-level jobs; `export` and `import` are child jobs (require
232
+ `_flowJobId` or a resource-ID filter). Unrecognized values silently
233
+ return an empty response.
234
+ responses:
235
+ '200':
236
+ description: Array of job records matching the filters.
237
+ content:
238
+ application/json:
239
+ schema:
240
+ type: array
241
+ items:
242
+ $ref: '#/components/schemas/Job'
243
+ examples:
244
+ parent_flow_jobs:
245
+ summary: Two completed flow runs
246
+ value:
247
+ - _id: 69f54d6f47185f8c7a500597
248
+ type: flow
249
+ status: completed
250
+ _integrationId: 6842261335b64c0bcb308e4f
251
+ _flowId: 69f54d6b7009ea11abad707a
252
+ _exportId: 69f54d6a3469e3f5597848a1
253
+ startedAt: '2026-05-02T01:03:43.640Z'
254
+ endedAt: '2026-05-02T01:03:51.757Z'
255
+ createdAt: '2026-05-02T01:03:43.640Z'
256
+ lastModified: '2026-05-02T01:03:51.757Z'
257
+ lastExecutedAt: '2026-05-02T01:03:51.757Z'
258
+ numSuccess: 10
259
+ numError: 10
260
+ numOpenError: 10
261
+ numResolved: 0
262
+ numIgnore: 0
263
+ numExport: 0
264
+ numPagesGenerated: 10
265
+ numPagesProcessed: 10
266
+ doneExporting: false
267
+ logMode: basic
268
+ flowExecutionGroupId: 70f3bd04a01142b29031e36ccff9242b
269
+ purgeAt: '2026-06-01T01:03:43.577Z'
270
+ clickhousePurgeAt: '2026-06-01T01:03:43.577Z'
271
+ - _id: 69e9820a12e2a80e73166a8a
272
+ type: flow
273
+ status: failed
274
+ _integrationId: 6842261335b64c0bcb308e4f
275
+ _flowId: 69f54d6b7009ea11abad707a
276
+ _exportId: 69f54d6a3469e3f5597848a1
277
+ startedAt: '2026-04-20T14:22:18.000Z'
278
+ endedAt: '2026-04-20T14:22:25.412Z'
279
+ createdAt: '2026-04-20T14:22:18.000Z'
280
+ lastModified: '2026-04-20T14:22:25.412Z'
281
+ lastExecutedAt: '2026-04-20T14:22:25.412Z'
282
+ numSuccess: 0
283
+ numError: 5
284
+ numOpenError: 5
285
+ numResolved: 0
286
+ numIgnore: 0
287
+ numExport: 0
288
+ numPagesGenerated: 1
289
+ numPagesProcessed: 1
290
+ doneExporting: true
291
+ logMode: basic
292
+ flowExecutionGroupId: a3b1c2d4e5f6071829304050
293
+ purgeAt: '2026-05-20T14:22:18.000Z'
294
+ '204':
295
+ description: No jobs match the given filters.
296
+ '400':
297
+ description: Required query parameters are missing or invalid.
298
+ content:
299
+ application/json:
300
+ schema:
301
+ $ref: '#/components/schemas/Error'
302
+ examples:
303
+ parent_job_missing_params:
304
+ summary: Parent job query missing required filter
305
+ value:
306
+ errors:
307
+ - code: invalid_query
308
+ message: For parent jobs, query parameters must contain either "_integrationId" or "_jobId" or "createdAt"
309
+ child_job_missing_params:
310
+ summary: Child job query missing required filter
311
+ value:
312
+ errors:
313
+ - code: invalid_query
314
+ message: For child jobs, query parameters must contain either "_flowJobId" or "resourceId"
315
+ invalid_status:
316
+ summary: Invalid status enum value
317
+ value:
318
+ errors:
319
+ - code: invalid_query_param
320
+ message: The query parameter "status" has invalid value.
321
+ '401':
322
+ $ref: '#/components/responses/401-unauthorized'
323
+ /v1/jobs/current:
324
+ post:
325
+ x-internal: false
326
+ operationId: listCurrentJobs
327
+ tags:
328
+ - Jobs
329
+ summary: List in-progress jobs (dashboard)
330
+ description: |-
331
+ Returns a paginated list of currently in-progress jobs for the dashboard -- jobs whose `status` is one of
332
+ `queued`, `running`, or `canceling`. Jobs that have reached a terminal state (`completed`, `failed`,
333
+ `canceled`, `retried`) are not returned; use `POST /v1/flows/runs/stats` for run history.
334
+
335
+ The request body contains all filters -- there are no query-string parameters. Narrow to a specific flow or
336
+ integration with `_flowIds` / `_integrationIds` (AND-combined).
337
+ requestBody:
338
+ required: true
339
+ content:
340
+ application/json:
341
+ schema:
342
+ $ref: '#/components/schemas/JobsCurrentRequest'
343
+ examples:
344
+ production_all:
345
+ summary: All in-progress production jobs
346
+ value: {}
347
+ specific_flow_queued:
348
+ summary: In-progress jobs for a specific flow
349
+ value:
350
+ _flowIds:
351
+ - 69497fc443fc1f9a03d31bd9
352
+ status:
353
+ - queued
354
+ - running
355
+ responses:
356
+ '200':
357
+ description: One page of in-progress jobs.
358
+ content:
359
+ application/json:
360
+ schema:
361
+ $ref: '#/components/schemas/JobsCurrentResponse'
362
+ examples:
363
+ one_page:
364
+ summary: One queued retry job — single page, so no pagingPostBody
365
+ value:
366
+ jobs:
367
+ - _id: 69e9958f815ae7eae3d9146b
368
+ type: retry
369
+ _importId: 69e9953d7a8373d88147b5ec
370
+ _flowId: 69e99544f3a2ac489d0f7953
371
+ status: queued
372
+ numSuccess: 0
373
+ numError: 0
374
+ numResolved: 0
375
+ numOpenError: 0
376
+ createdAt: '2026-04-23T03:44:15.515Z'
377
+ lastModified: '2026-04-23T03:44:15.532Z'
378
+ '204':
379
+ description: No in-progress jobs match the filter.
380
+ '400':
381
+ $ref: '#/components/responses/400-bad-request'
382
+ '401':
383
+ $ref: '#/components/responses/401-unauthorized'
384
+ x-celigo-ai-guidance:
385
+ - |-
386
+ Returns a paged collection of currently running jobs for the dashboard.
387
+ The request body supports filtering by integration, flow, status, and
388
+ application. The platform requires ``sandbox`` in the body; Ora is
389
+ production-only so it always sends ``false``.
390
+ /v1/flows/runs/stats:
391
+ post:
392
+ x-internal: false
393
+ operationId: getFlowRunsStats
394
+ tags:
395
+ - Jobs
396
+ summary: Get per-flow run statistics (dashboard aggregates)
397
+ description: |-
398
+ Returns **per-flow aggregate** run statistics — one element of `stats[]` per flow that has at least
399
+ one run matching the request filter. Each aggregate carries totals (`numRuns`, `numSuccess`,
400
+ `numError`, `numIgnore`), the currently-open error count (`numOpenError`), resolution attribution
401
+ (`numResolvedByAuto` / `numResolvedByUser`), average runtime (`avgRuntime`), and timestamps
402
+ (`lastExecutedAt`, `lastErrorAt`) plus a minimal inlined `flow{}` object for rendering.
403
+
404
+ The Celigo dashboard uses this to paint its "All flows" summary in one call. Filters (`_flowIds`,
405
+ `_integrationIds`, `time_gt`, `time_lte`, …) narrow which runs are rolled up into each aggregate —
406
+ they do **not** filter which flows appear; flows with zero matching runs are simply omitted.
407
+
408
+ **The window is the contract.** When `time_gt` is omitted the endpoint applies its default
409
+ window (approximately the last 24 hours) rather than aggregating all history — runs older than
410
+ the window silently drop out of every aggregate. Send `time_gt` explicitly for any other range.
411
+
412
+ For individual job records rather than aggregates, use `GET /v1/jobs?_flowId=...`. For in-progress
413
+ jobs, use `POST /v1/jobs/current`.
414
+ requestBody:
415
+ required: true
416
+ content:
417
+ application/json:
418
+ schema:
419
+ $ref: '#/components/schemas/FlowRunsStatsRequest'
420
+ examples:
421
+ default_window:
422
+ summary: Default window (approximately the last 24 hours)
423
+ value: {}
424
+ last_15d_all_flows:
425
+ summary: All flows, runs in the last 15 days
426
+ value:
427
+ time_gt: 1744070400000
428
+ last_24h_for_flow:
429
+ summary: One flow, runs in the last 24 hours
430
+ value:
431
+ _flowIds:
432
+ - 69497fc443fc1f9a03d31bd9
433
+ time_gt: 1745366400000
434
+ responses:
435
+ '200':
436
+ description: One page of per-flow aggregates.
437
+ content:
438
+ application/json:
439
+ schema:
440
+ $ref: '#/components/schemas/FlowRunsStatsResponse'
441
+ examples:
442
+ two_flows:
443
+ summary: Two flows — one healthy, one with open errors
444
+ value:
445
+ stats:
446
+ - _flowId: 69497fc443fc1f9a03d31bd9
447
+ _integrationId: 69496f01615f724066afaac2
448
+ numRuns: 91
449
+ numPages: 92
450
+ numSuccess: 184
451
+ numError: 0
452
+ numIgnore: 0
453
+ numOpenError: 3
454
+ numResolvedByAuto: 7
455
+ numResolvedByUser: 0
456
+ avgRuntime: 172327.86
457
+ lastExecutedAt: '2026-04-23T02:51:52.551Z'
458
+ lastErrorAt: '2026-04-21T10:51:13.221Z'
459
+ flow:
460
+ _id: 69497fc443fc1f9a03d31bd9
461
+ name: Shopee
462
+ _integrationId: 69496f01615f724066afaac2
463
+ integrationName: Shopee
464
+ - _flowId: 69e83e7a75f7f8c14a12916e
465
+ numRuns: 2
466
+ numPages: 8
467
+ numSuccess: 276
468
+ numError: 0
469
+ numIgnore: 0
470
+ numOpenError: 0
471
+ numResolvedByAuto: 0
472
+ numResolvedByUser: 0
473
+ avgRuntime: 20904.5
474
+ lastExecutedAt: '2026-04-22T03:27:00.491Z'
475
+ flow:
476
+ _id: 69e83e7a75f7f8c14a12916e
477
+ name: New flow
478
+ '204':
479
+ description: No runs match the filter on any flow within the queried window (the ~24-hour default when no `time_gt` was sent).
480
+ '400':
481
+ $ref: '#/components/responses/400-bad-request'
482
+ '401':
483
+ $ref: '#/components/responses/401-unauthorized'
484
+ /v1/jobs/family:
485
+ post:
486
+ x-internal: false
487
+ operationId: getJobFamilyBatch
488
+ tags:
489
+ - Jobs
490
+ summary: Batch-fetch job families
491
+ description: |-
492
+ Returns job families for an array of job ids, in one request. Each item in the response array has the same
493
+ shape as a single `GET /v1/jobs/{_id}/family` call (a parent job with inlined `children`).
494
+
495
+ **Size limit: 1000 ids per request.** The server rejects requests with more than 1000 entries with HTTP
496
+ **403** (not 400) and `{code: "invalid_request", message: "Number of objects in the request exceeds
497
+ maximum allowed limit 1000"}`. The Celigo UI chunks at 50 for its own UX reasons, but the API ceiling
498
+ is 1000.
499
+
500
+ **Mixed-id behavior (asymmetric):**
501
+ - Valid + unknown 24-hex ids in the same array → **200** with only the resolved entries; unknown ids are
502
+ silently dropped (no `errors[]` alongside).
503
+ - All ids unknown → **404** with `{errors: [{code: "invalid_ref", source: "internal", message: "Job not
504
+ found: <id>"}]}`.
505
+ - Any id that isn't a 24-char hex string anywhere in the array → **400** `invalid_ref "Please provide
506
+ a valid _id."` — the whole request fails.
507
+ - Duplicate ids are **deduped** server-side (same id ×N → one entry).
508
+ - Empty array `[]` or non-array body (e.g. `{}`) → **400** `invalid_request "Request body should be an
509
+ ObjectID array."`.
510
+ - Missing `Content-Type: application/json` → **415** `{message: "Content-Type should equal
511
+ application/json"}`.
512
+
513
+ The response array has no guaranteed ordering; match items by `_id` rather than by index. Unknown ids are
514
+ silently dropped -- callers that need to detect missing ids must diff the request and response id sets.
515
+ requestBody:
516
+ required: true
517
+ content:
518
+ application/json:
519
+ schema:
520
+ $ref: '#/components/schemas/JobsFamilyBatchRequest'
521
+ examples:
522
+ default:
523
+ value:
524
+ - 69e981ee18808f3e5ed1b2fd
525
+ - 69e9820a12e2a80e73166a8a
526
+ responses:
527
+ '200':
528
+ description: An array of job families, one per **resolved** id (unknown ids silently dropped).
529
+ content:
530
+ application/json:
531
+ schema:
532
+ type: array
533
+ items:
534
+ $ref: '#/components/schemas/JobWithChildren'
535
+ examples:
536
+ resolved_families:
537
+ summary: Families for both requested ids (children trimmed for brevity)
538
+ value:
539
+ - _id: 69e981ee18808f3e5ed1b2fd
540
+ type: flow
541
+ status: completed
542
+ _flowId: 69a9aa5c54e3d9bd11b86d82
543
+ createdAt: '2026-04-23T02:51:39.812Z'
544
+ lastModified: '2026-04-23T02:52:10.115Z'
545
+ startedAt: '2026-04-23T02:51:40.000Z'
546
+ endedAt: '2026-04-23T02:52:10.000Z'
547
+ numSuccess: 42
548
+ numError: 0
549
+ numIgnore: 1
550
+ children: []
551
+ - _id: 69e9820a12e2a80e73166a8a
552
+ type: flow
553
+ status: failed
554
+ _integrationId: 6842261335b64c0bcb308e4f
555
+ _flowId: 69f54d6b7009ea11abad707a
556
+ _exportId: 69f54d6a3469e3f5597848a1
557
+ createdAt: '2026-04-20T14:22:17.804Z'
558
+ lastModified: '2026-04-20T14:22:25.598Z'
559
+ startedAt: '2026-04-20T14:22:18.000Z'
560
+ endedAt: '2026-04-20T14:22:25.412Z'
561
+ numSuccess: 0
562
+ numError: 5
563
+ numOpenError: 5
564
+ numResolved: 0
565
+ numIgnore: 0
566
+ children: []
567
+ '400':
568
+ $ref: '#/components/responses/400-bad-request'
569
+ '401':
570
+ $ref: '#/components/responses/401-unauthorized'
571
+ '403':
572
+ $ref: '#/components/responses/403-forbidden'
573
+ '404':
574
+ $ref: '#/components/responses/404-not-found'
575
+ '415':
576
+ description: 'Returned when the request is missing the `Content-Type: application/json` header.'
577
+ content:
578
+ application/json:
579
+ schema:
580
+ $ref: '#/components/schemas/Error'
581
+ /v1/jobs/{_id}:
582
+ get:
583
+ x-internal: false
584
+ operationId: getJobById
585
+ tags:
586
+ - Jobs
587
+ summary: Get a job
588
+ description: |-
589
+ Returns a single job record. Works for both parent jobs (`type=flow`, `retry`, `bulk_retry`) and child jobs
590
+ (`type=export`, `type=import`). For the full parent+children view of a flow run, use
591
+ `GET /v1/jobs/{_id}/family` instead. For a multi-job lookup, use `POST /v1/jobs/family`.
592
+ parameters:
593
+ - name: _id
594
+ in: path
595
+ required: true
596
+ description: Job id.
597
+ schema:
598
+ type: string
599
+ format: objectId
600
+ x-celigo-refModel: jobs
601
+ examples:
602
+ - 69f54d6f47185f8c7a500597
603
+ responses:
604
+ '200':
605
+ description: The job record.
606
+ content:
607
+ application/json:
608
+ schema:
609
+ $ref: '#/components/schemas/Job'
610
+ examples:
611
+ completed_flow_job:
612
+ summary: A completed parent flow job
613
+ value:
614
+ _id: 69f54d6f47185f8c7a500597
615
+ type: flow
616
+ status: completed
617
+ _integrationId: 6842261335b64c0bcb308e4f
618
+ _flowId: 69f54d6b7009ea11abad707a
619
+ _exportId: 69f54d6a3469e3f5597848a1
620
+ startedAt: '2026-05-02T01:03:43.640Z'
621
+ endedAt: '2026-05-02T01:03:51.757Z'
622
+ createdAt: '2026-05-02T01:03:43.640Z'
623
+ lastModified: '2026-05-02T01:03:51.757Z'
624
+ lastExecutedAt: '2026-05-02T01:03:51.757Z'
625
+ numSuccess: 10
626
+ numError: 10
627
+ numOpenError: 10
628
+ numResolved: 0
629
+ numIgnore: 0
630
+ numExport: 0
631
+ numPagesGenerated: 10
632
+ numPagesProcessed: 10
633
+ doneExporting: false
634
+ logMode: basic
635
+ flowExecutionGroupId: 70f3bd04a01142b29031e36ccff9242b
636
+ purgeAt: '2026-06-01T01:03:43.577Z'
637
+ clickhousePurgeAt: '2026-06-01T01:03:43.577Z'
638
+ '400':
639
+ description: The `_id` is not a valid ObjectId.
640
+ content:
641
+ application/json:
642
+ schema:
643
+ $ref: '#/components/schemas/Error'
644
+ examples:
645
+ invalid_ref:
646
+ summary: Invalid ObjectId format
647
+ value:
648
+ errors:
649
+ - code: invalid_ref
650
+ message: Please provide a valid _jobId.
651
+ '401':
652
+ $ref: '#/components/responses/401-unauthorized'
653
+ '404':
654
+ description: No job exists with the given ID.
655
+ content:
656
+ application/json:
657
+ schema:
658
+ $ref: '#/components/schemas/Error'
659
+ examples:
660
+ not_found:
661
+ summary: Job does not exist
662
+ value:
663
+ errors:
664
+ - code: invalid_ref
665
+ message: Job not found.
666
+ /v1/jobs/{_id}/family:
667
+ get:
668
+ x-internal: false
669
+ operationId: getJobFamily
670
+ tags:
671
+ - Jobs
672
+ summary: Get a job and its children
673
+ description: |-
674
+ Returns a single job record (as parent) with all of its child jobs inlined under `children`.
675
+
676
+ A "job family" maps to one flow execution: the parent is a `type: "flow"` job and the children are the
677
+ `export` / `import` / `retry` jobs that ran as part of it. For non-flow jobs (a standalone export run, or a
678
+ retry), `children` may be empty.
679
+
680
+ For fetching many families at once, batch via `POST /v1/jobs/family`. The parent's counters may not include
681
+ bulk-retry jobs spawned after the initial run -- aggregate across `children` for an accurate per-run summary.
682
+ parameters:
683
+ - name: _id
684
+ in: path
685
+ required: true
686
+ description: Job id. Typically a parent flow job id, but any job id is accepted.
687
+ schema:
688
+ type: string
689
+ format: objectId
690
+ x-celigo-refModel: jobs
691
+ examples:
692
+ - 69f54d6f47185f8c7a500597
693
+ responses:
694
+ '200':
695
+ description: Job family (parent with inlined children).
696
+ content:
697
+ application/json:
698
+ schema:
699
+ $ref: '#/components/schemas/JobWithChildren'
700
+ examples:
701
+ flow_with_children:
702
+ summary: Flow run with export and import children
703
+ value:
704
+ _id: 69f54d6f47185f8c7a500597
705
+ type: flow
706
+ status: completed
707
+ _integrationId: 6842261335b64c0bcb308e4f
708
+ _flowId: 69f54d6b7009ea11abad707a
709
+ _exportId: 69f54d6a3469e3f5597848a1
710
+ startedAt: '2026-05-02T01:03:43.640Z'
711
+ endedAt: '2026-05-02T01:03:51.757Z'
712
+ createdAt: '2026-05-02T01:03:43.640Z'
713
+ lastModified: '2026-05-02T01:03:51.757Z'
714
+ lastExecutedAt: '2026-05-02T01:03:51.757Z'
715
+ numSuccess: 10
716
+ numError: 10
717
+ numOpenError: 10
718
+ numResolved: 0
719
+ numIgnore: 0
720
+ numExport: 0
721
+ numPagesGenerated: 10
722
+ numPagesProcessed: 10
723
+ doneExporting: false
724
+ logMode: basic
725
+ flowExecutionGroupId: 70f3bd04a01142b29031e36ccff9242b
726
+ purgeAt: '2026-06-01T01:03:43.577Z'
727
+ clickhousePurgeAt: '2026-06-01T01:03:43.577Z'
728
+ children:
729
+ - _id: 69f54d6f47185f8c7a5005e9
730
+ type: export
731
+ status: completed
732
+ _parentJobId: 69f54d6f47185f8c7a500597
733
+ _expOrImpId: 69f54d6a3469e3f5597848a1
734
+ startedAt: '2026-05-02T01:03:43.813Z'
735
+ endedAt: '2026-05-02T01:03:49.930Z'
736
+ createdAt: '2026-05-02T01:03:43.813Z'
737
+ lastModified: '2026-05-02T01:03:49.930Z'
738
+ lastExecutedAt: '2026-05-02T01:03:49.930Z'
739
+ numSuccess: 10
740
+ numError: 0
741
+ numOpenError: 0
742
+ numResolved: 0
743
+ numIgnore: 0
744
+ numExport: 0
745
+ numPagesGenerated: 10
746
+ numPagesProcessed: 0
747
+ logMode: basic
748
+ purgeAt: '2026-06-01T01:03:43.577Z'
749
+ clickhousePurgeAt: '2026-06-01T01:03:43.577Z'
750
+ - _id: 69f54d6f47185f8c7a500611
751
+ type: import
752
+ status: completed
753
+ _parentJobId: 69f54d6f47185f8c7a500597
754
+ _expOrImpId: 69f54d6c1e7f3a22cc7848b2
755
+ startedAt: '2026-05-02T01:03:43.948Z'
756
+ endedAt: '2026-05-02T01:03:51.736Z'
757
+ createdAt: '2026-05-02T01:03:43.948Z'
758
+ lastModified: '2026-05-02T01:03:51.736Z'
759
+ lastExecutedAt: '2026-05-02T01:03:51.735Z'
760
+ numSuccess: 0
761
+ numError: 10
762
+ numOpenError: 10
763
+ numResolved: 0
764
+ numIgnore: 0
765
+ numExport: 0
766
+ numPagesGenerated: 0
767
+ numPagesProcessed: 10
768
+ logMode: basic
769
+ purgeAt: '2026-06-01T01:03:43.577Z'
770
+ clickhousePurgeAt: '2026-06-01T01:03:43.577Z'
771
+ '401':
772
+ $ref: '#/components/responses/401-unauthorized'
773
+ '404':
774
+ $ref: '#/components/responses/404-not-found'
775
+ /v1/jobs/{_id}/cancel:
776
+ put:
777
+ x-internal: false
778
+ operationId: cancelJob
779
+ tags:
780
+ - Jobs
781
+ summary: Cancel a job
782
+ description: |-
783
+ Requests cancellation of a running or queued job. The job's `status` transitions to `canceling` and, once the
784
+ platform has stopped in-flight work, to `canceled`. This is **not** synchronous — the response returns the
785
+ updated job record with `status: "canceling"`; consumers should poll (e.g. `GET /v1/jobs/{_id}`) to observe
786
+ the final `canceled` state.
787
+
788
+ Only jobs that are still in progress (`queued`, `running`, `retrying`) can be canceled. Canceling a job
789
+ that is already terminal returns an error.
790
+
791
+ Cancel at the flow-run (parent) level rather than individual export/import children -- child cancellations
792
+ can leave the parent in an inconsistent state.
793
+ parameters:
794
+ - name: _id
795
+ in: path
796
+ required: true
797
+ description: Job id to cancel.
798
+ schema:
799
+ type: string
800
+ format: objectId
801
+ x-celigo-refModel: jobs
802
+ examples:
803
+ - 69e9958f815ae7eae3d9146b
804
+ responses:
805
+ '200':
806
+ description: 'Updated job record with `status: "canceling"`.'
807
+ content:
808
+ application/json:
809
+ schema:
810
+ $ref: '#/components/schemas/Job'
811
+ examples:
812
+ canceling:
813
+ summary: Queued retry job transitioning to canceling
814
+ value:
815
+ _id: 69e9958f815ae7eae3d9146b
816
+ type: retry
817
+ _importId: 69e9953d7a8373d88147b5ec
818
+ _flowId: 69e99544f3a2ac489d0f7953
819
+ status: canceling
820
+ numSuccess: 0
821
+ numError: 0
822
+ numResolved: 0
823
+ numOpenError: 0
824
+ createdAt: '2026-04-23T03:44:15.515Z'
825
+ lastModified: '2026-04-23T03:45:02.118Z'
826
+ '400':
827
+ $ref: '#/components/responses/400-bad-request'
828
+ '401':
829
+ $ref: '#/components/responses/401-unauthorized'
830
+ '403':
831
+ description: |-
832
+ The job is already in a terminal state and cannot be canceled.
833
+ Error code `job_already_ended`; the message names the job's current
834
+ terminal state.
835
+ content:
836
+ application/json:
837
+ schema:
838
+ $ref: '#/components/schemas/Error'
839
+ examples:
840
+ job_already_ended:
841
+ summary: Cancel attempted on a job that already ended
842
+ value:
843
+ errors:
844
+ - code: job_already_ended
845
+ message: The job is already in failed state.
846
+ source: internal
847
+ '404':
848
+ $ref: '#/components/responses/404-not-found'
849
+ /v1/jobs/{_id}/files/signedURL:
850
+ post:
851
+ x-internal: false
852
+ operationId: getJobFilesSignedUrl
853
+ tags:
854
+ - Jobs
855
+ summary: Get signed URL(s) to download job files
856
+ description: |-
857
+ Returns short-lived S3 pre-signed URLs for downloading files produced by the job (e.g. the rows exported to
858
+ a CSV, an error-record dump, or a page-processor artifact). The URLs are typically valid for ~15 minutes.
859
+
860
+ If `fileIds` is omitted in the request body, all of the job's current file artifacts are returned. If
861
+ provided, only the matching files are included.
862
+
863
+ Inspect the job's `files[]` array first (via `GET /v1/jobs/{_id}`) to discover available file IDs. Jobs
864
+ with no files (common for `import` child jobs or jobs past `purgeAt`) return `204 No Content`. File ids
865
+ are registered per job: if none of the requested `fileIds` are registered to this job (e.g. the file id
866
+ belongs to a different job's run), the endpoint also returns `204 No Content` with an empty body rather
867
+ than an error. The URLs expire after approximately 15 minutes -- fetch immediately, do not persist.
868
+ parameters:
869
+ - name: _id
870
+ in: path
871
+ required: true
872
+ description: Job id whose files should be downloaded.
873
+ schema:
874
+ type: string
875
+ format: objectId
876
+ x-celigo-refModel: jobs
877
+ examples:
878
+ - 69f54d6f47185f8c7a500597
879
+ requestBody:
880
+ required: false
881
+ content:
882
+ application/json:
883
+ schema:
884
+ $ref: '#/components/schemas/JobFilesSignedUrlRequest'
885
+ examples:
886
+ all_files:
887
+ summary: Download every file for the job
888
+ value: {}
889
+ specific_file:
890
+ summary: Download a specific file by id
891
+ value:
892
+ fileIds:
893
+ - 694b97c4f4f1f4a1b9d9e001
894
+ responses:
895
+ '201':
896
+ description: One or more signed URLs.
897
+ content:
898
+ application/json:
899
+ schema:
900
+ $ref: '#/components/schemas/JobFilesSignedUrlResponse'
901
+ examples:
902
+ single_file:
903
+ summary: One requested file — signedURLs array with one element
904
+ value:
905
+ signedURLs:
906
+ - https://integrator-templates.s3.us-east-1.amazonaws.com/694b97c4f4f1f4a1b9d9e001.csv?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Expires=900&X-Amz-Signature=...
907
+ '204':
908
+ description: |-
909
+ Job has no downloadable files, or none of the requested `fileIds` are registered to this job; the
910
+ response body is empty.
911
+ '400':
912
+ $ref: '#/components/responses/400-bad-request'
913
+ '401':
914
+ $ref: '#/components/responses/401-unauthorized'
915
+ '404':
916
+ $ref: '#/components/responses/404-not-found'
917
+ /v1/jobs/{_id}/files:
918
+ delete:
919
+ x-internal: false
920
+ operationId: purgeJobFiles
921
+ tags:
922
+ - Jobs
923
+ summary: Purge a job's stored files
924
+ description: |-
925
+ Deletes **all** file artifacts associated with the job (exported rows, error-record dumps, page-processor
926
+ artifacts, etc.) from underlying storage. After a successful call, `GET /v1/jobs/{_id}` will show an empty
927
+ `files[]` array and `POST /v1/jobs/{_id}/files/signedURL` will return `204 No Content`.
928
+
929
+ The job record itself is retained -- only the files are purged. This is irreversible. The platform also
930
+ purges files automatically at `purgeAt` / `clickhousePurgeAt`; manual purge is only needed for
931
+ storage-quota management or compliance workflows.
932
+ parameters:
933
+ - name: _id
934
+ in: path
935
+ required: true
936
+ description: Job id whose files should be purged.
937
+ schema:
938
+ type: string
939
+ format: objectId
940
+ x-celigo-refModel: jobs
941
+ examples:
942
+ - 69f54d6f47185f8c7a500597
943
+ responses:
944
+ '204':
945
+ description: Files purged successfully.
946
+ '401':
947
+ $ref: '#/components/responses/401-unauthorized'
948
+ '404':
949
+ $ref: '#/components/responses/404-not-found'
950
+ /v1/jobs/{_id}/diagnostics:
951
+ get:
952
+ x-internal: false
953
+ operationId: getJobDiagnostics
954
+ tags:
955
+ - Jobs
956
+ summary: Get a signed URL for job diagnostics
957
+ description: |-
958
+ Returns a short-lived S3 pre-signed URL pointing to a diagnostic archive (`.zip`) for the given job. The
959
+ archive contains server-side traces/logs that Celigo support uses to debug execution failures.
960
+
961
+ The URL is typically valid for ~15 minutes (enforced by S3). Consumers should fetch the archive immediately
962
+ rather than storing the URL.
963
+
964
+ This is distinct from flow execution logs -- use `GET /v1/flows/{_id}/jobs/{_jobId}/logs` for step-level
965
+ execution logs. Jobs with no diagnostics (very recent, or past `purgeAt`) return 204.
966
+ parameters:
967
+ - name: _id
968
+ in: path
969
+ required: true
970
+ description: Job id.
971
+ schema:
972
+ type: string
973
+ format: objectId
974
+ x-celigo-refModel: jobs
975
+ examples:
976
+ - 69e981ee18808f3e5ed1b2fd
977
+ responses:
978
+ '200':
979
+ description: Signed URL for the diagnostics archive.
980
+ content:
981
+ application/json:
982
+ schema:
983
+ $ref: '#/components/schemas/JobDiagnosticsResponse'
984
+ examples:
985
+ default:
986
+ value:
987
+ signedURL: https://integrator-templates.s3.us-east-1.amazonaws.com/diagnostics-69e981ee18808f3e5ed1b2fd.zip?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Expires=900&X-Amz-Signature=...
988
+ '204':
989
+ description: No diagnostics available for this job (archive may be absent or purged).
990
+ '400':
991
+ description: |-
992
+ The job does not support diagnostics downloads (`invalid_request`) —
993
+ diagnostics can only be downloaded for jobs with an associated
994
+ diagnostics archive.
995
+ content:
996
+ application/json:
997
+ schema:
998
+ $ref: '#/components/schemas/Error'
999
+ '401':
1000
+ $ref: '#/components/responses/401-unauthorized'
1001
+ '404':
1002
+ $ref: '#/components/responses/404-not-found'
1003
+ /v1/flows/{_id}/jobs/latest:
1004
+ get:
1005
+ x-internal: false
1006
+ operationId: getLatestFlowJobs
1007
+ tags:
1008
+ - Jobs
1009
+ summary: Get the most recent job(s) for a flow
1010
+ description: |-
1011
+ Returns the most recent job record(s) for the given flow. Typically one entry (the latest flow run), though
1012
+ the platform may include related retry jobs depending on account configuration. For a richer parent+children
1013
+ view, feed the returned `_id` into `GET /v1/jobs/{_id}/family`.
1014
+ parameters:
1015
+ - name: _id
1016
+ in: path
1017
+ required: true
1018
+ description: Flow id.
1019
+ schema:
1020
+ type: string
1021
+ format: objectId
1022
+ x-celigo-refModel: flows
1023
+ examples:
1024
+ - 69f54d6b7009ea11abad707a
1025
+ - $ref: '#/components/parameters/Include'
1026
+ - $ref: '#/components/parameters/Exclude'
1027
+ responses:
1028
+ '200':
1029
+ description: Most recent job(s) for the flow. May be a single-element array.
1030
+ content:
1031
+ application/json:
1032
+ schema:
1033
+ type: array
1034
+ items:
1035
+ $ref: '#/components/schemas/Job'
1036
+ examples:
1037
+ latest_run:
1038
+ summary: Most recent flow run
1039
+ value:
1040
+ - _id: 69f54d6f47185f8c7a500597
1041
+ type: flow
1042
+ status: completed
1043
+ _integrationId: 6842261335b64c0bcb308e4f
1044
+ _flowId: 69f54d6b7009ea11abad707a
1045
+ _exportId: 69f54d6a3469e3f5597848a1
1046
+ startedAt: '2026-05-02T01:03:43.640Z'
1047
+ endedAt: '2026-05-02T01:03:51.757Z'
1048
+ createdAt: '2026-05-02T01:03:43.640Z'
1049
+ lastModified: '2026-05-02T01:03:51.757Z'
1050
+ lastExecutedAt: '2026-05-02T01:03:51.757Z'
1051
+ numSuccess: 10
1052
+ numError: 0
1053
+ numOpenError: 0
1054
+ numResolved: 0
1055
+ numIgnore: 0
1056
+ numPagesGenerated: 10
1057
+ numPagesProcessed: 10
1058
+ doneExporting: true
1059
+ logMode: basic
1060
+ flowExecutionGroupId: 70f3bd04a01142b29031e36ccff9242b
1061
+ purgeAt: '2026-06-01T01:03:43.577Z'
1062
+ '204':
1063
+ description: The flow has no recorded runs.
1064
+ '401':
1065
+ $ref: '#/components/responses/401-unauthorized'
1066
+ '404':
1067
+ $ref: '#/components/responses/404-not-found'
1068
+ /v1/integrations/{_id}/jobs/latest:
1069
+ get:
1070
+ x-internal: false
1071
+ operationId: getLatestIntegrationJobs
1072
+ tags:
1073
+ - Jobs
1074
+ summary: Get the most recent job(s) for an integration
1075
+ description: |-
1076
+ Returns the most recent job record(s) across all flows in the given integration. Useful for a top-level
1077
+ status check on an integration. The result is not filtered by status -- inspect each entry's `status` to
1078
+ distinguish success from failure.
1079
+ parameters:
1080
+ - name: _id
1081
+ in: path
1082
+ required: true
1083
+ description: Integration id.
1084
+ schema:
1085
+ type: string
1086
+ format: objectId
1087
+ x-celigo-refModel: integrations
1088
+ examples:
1089
+ - 6842261335b64c0bcb308e4f
1090
+ responses:
1091
+ '200':
1092
+ description: Most recent job(s) for the integration.
1093
+ content:
1094
+ application/json:
1095
+ schema:
1096
+ type: array
1097
+ items:
1098
+ $ref: '#/components/schemas/Job'
1099
+ examples:
1100
+ latest_across_flows:
1101
+ summary: Most recent jobs from two flows in the integration
1102
+ value:
1103
+ - _id: 69f54d6f47185f8c7a500597
1104
+ type: flow
1105
+ status: completed
1106
+ _integrationId: 6842261335b64c0bcb308e4f
1107
+ _flowId: 69f54d6b7009ea11abad707a
1108
+ _exportId: 69f54d6a3469e3f5597848a1
1109
+ startedAt: '2026-05-02T01:03:43.640Z'
1110
+ endedAt: '2026-05-02T01:03:51.757Z'
1111
+ createdAt: '2026-05-02T01:03:43.640Z'
1112
+ lastModified: '2026-05-02T01:03:51.757Z'
1113
+ numSuccess: 10
1114
+ numError: 0
1115
+ numOpenError: 0
1116
+ numResolved: 0
1117
+ numIgnore: 0
1118
+ logMode: basic
1119
+ - _id: 69e9820a12e2a80e73166a8a
1120
+ type: flow
1121
+ status: failed
1122
+ _integrationId: 6842261335b64c0bcb308e4f
1123
+ _flowId: 69e83e7a75f7f8c14a12916e
1124
+ _exportId: 69e83e7a75f7f8c14a129170
1125
+ startedAt: '2026-04-20T14:22:18.000Z'
1126
+ endedAt: '2026-04-20T14:22:25.412Z'
1127
+ createdAt: '2026-04-20T14:22:18.000Z'
1128
+ lastModified: '2026-04-20T14:22:25.412Z'
1129
+ numSuccess: 0
1130
+ numError: 5
1131
+ numOpenError: 5
1132
+ numResolved: 0
1133
+ numIgnore: 0
1134
+ logMode: basic
1135
+ '204':
1136
+ description: The integration has no recorded runs.
1137
+ '401':
1138
+ $ref: '#/components/responses/401-unauthorized'
1139
+ '404':
1140
+ $ref: '#/components/responses/404-not-found'
1141
+ components:
1142
+ securitySchemes:
1143
+ bearerAuth:
1144
+ type: http
1145
+ scheme: bearer
1146
+ schemas:
1147
+ ResourceResponse:
1148
+ type: object
1149
+ description: Response
1150
+ x-celigo-ai-guidance:
1151
+ - Core response fields shared by all Celigo resources
1152
+ properties:
1153
+ _id:
1154
+ type: string
1155
+ format: objectId
1156
+ readOnly: true
1157
+ description: Unique identifier for the resource. Format is a 24-character hexadecimal string.
1158
+ x-celigo-ai-guidance:
1159
+ - |-
1160
+ The _id is used in:
1161
+ - API endpoints that operate on a specific resource (e.g., GET, PUT, DELETE)
1162
+ - References from other resources (e.g., flows that use this resource)
1163
+ - Job history and error tracking
1164
+ examples:
1165
+ - 5f8d43a1b9e5a80011a35f2c
1166
+ createdAt:
1167
+ type: string
1168
+ format: date-time
1169
+ readOnly: true
1170
+ description: Timestamp when the resource was created. Set automatically and cannot be modified.
1171
+ x-celigo-ai-guidance:
1172
+ - Recorded in ISO 8601 with a UTC timezone (Z suffix).
1173
+ examples:
1174
+ - '2023-04-01T09:15:32Z'
1175
+ lastModified:
1176
+ type: string
1177
+ format: date-time
1178
+ readOnly: true
1179
+ description: Timestamp when the resource was last updated. Changes whenever any property is modified.
1180
+ x-celigo-ai-guidance:
1181
+ - Recorded in ISO 8601 with a UTC timezone (Z suffix); always equal to or later than `createdAt`.
1182
+ examples:
1183
+ - '2023-04-15T14:30:15Z'
1184
+ deletedAt:
1185
+ type:
1186
+ - string
1187
+ - 'null'
1188
+ format: date-time
1189
+ readOnly: true
1190
+ description: Timestamp when the resource was soft-deleted. When null or absent, the resource is active.
1191
+ x-celigo-ai-guidance:
1192
+ - Non-null means the resource is soft-deleted (in the recycle bin) — recoverable within the retention period before permanent removal.
1193
+ examples:
1194
+ - '2023-05-20T11:45:32Z'
1195
+ required:
1196
+ - _id
1197
+ JobFileRef:
1198
+ type: object
1199
+ description: Reference to a file produced by a job.
1200
+ properties:
1201
+ id:
1202
+ type: string
1203
+ description: File id in the underlying storage provider.
1204
+ examples:
1205
+ - 694b97c4f4f1f4a1b9d9e001
1206
+ host:
1207
+ type: string
1208
+ description: Storage host/provider.
1209
+ enum:
1210
+ - netsuite
1211
+ - s3
1212
+ x-enumDescriptions:
1213
+ netsuite: File stored in the NetSuite file cabinet.
1214
+ s3: File stored in Amazon S3.
1215
+ name:
1216
+ type: string
1217
+ description: Display name for the file (if available).
1218
+ examples:
1219
+ - success_records.csv
1220
+ JobLogRef:
1221
+ type: object
1222
+ description: Reference to a job log artifact.
1223
+ properties:
1224
+ id:
1225
+ type: string
1226
+ description: Log id in the underlying storage provider.
1227
+ examples:
1228
+ - '48217'
1229
+ host:
1230
+ type: string
1231
+ description: Storage host/provider.
1232
+ enum:
1233
+ - netsuite
1234
+ x-enumDescriptions:
1235
+ netsuite: Log stored in the NetSuite file cabinet.
1236
+ JobErrorFileRef:
1237
+ type: object
1238
+ description: Reference to an error file produced by a job.
1239
+ properties:
1240
+ id:
1241
+ type: string
1242
+ description: Error file id in the underlying storage provider.
1243
+ examples:
1244
+ - 694b97c4f4f1f4a1b9d9e001
1245
+ host:
1246
+ type: string
1247
+ description: Storage host/provider.
1248
+ enum:
1249
+ - s3
1250
+ x-enumDescriptions:
1251
+ s3: Error file stored in Amazon S3.
1252
+ Job:
1253
+ type: object
1254
+ required:
1255
+ - _id
1256
+ - type
1257
+ - status
1258
+ - createdAt
1259
+ - lastModified
1260
+ description: |
1261
+ A job represents one execution of a flow/export/import (or a retry) in integrator.io.
1262
+ Jobs are read-only records created by the platform when executions occur.
1263
+
1264
+ Parent jobs (`type: flow`) carry aggregate counters; child jobs (`type: export` or `import`)
1265
+ carry per-step counters -- do not sum both to avoid double-counting. `_exportId` on a parent
1266
+ flow job references the page-generator export, not all exports in the flow.
1267
+ allOf:
1268
+ - $ref: '#/components/schemas/ResourceResponse'
1269
+ - type: object
1270
+ properties:
1271
+ type:
1272
+ type: string
1273
+ readOnly: true
1274
+ description: Job type.
1275
+ enum:
1276
+ - export
1277
+ - import
1278
+ - flow
1279
+ - retry
1280
+ - bulk_retry
1281
+ x-enumDescriptions:
1282
+ export: A child job for an export step within a flow run.
1283
+ import: A child job for an import step within a flow run.
1284
+ flow: A parent flow-run job that orchestrates the full pipeline.
1285
+ retry: A retry of a single failed record from a previous job.
1286
+ bulk_retry: A bulk retry of multiple failed records from a previous job.
1287
+ x-celigo-ai-guidance:
1288
+ - |-
1289
+ - `flow`: a flow run (parent job)
1290
+ - `export` / `import`: child jobs for an export/import step
1291
+ - `retry` / `bulk_retry`: error management retries
1292
+ status:
1293
+ type: string
1294
+ readOnly: true
1295
+ description: Current job status.
1296
+ enum:
1297
+ - queued
1298
+ - running
1299
+ - retrying
1300
+ - completed
1301
+ - failed
1302
+ - canceled
1303
+ - canceling
1304
+ x-enumDescriptions:
1305
+ queued: Job is waiting to be picked up for execution.
1306
+ running: Job is currently executing.
1307
+ retrying: Job is being retried after a previous failure.
1308
+ completed: Job finished successfully.
1309
+ failed: Job finished with a fatal error.
1310
+ canceled: Job was canceled by a user or the system.
1311
+ canceling: Job cancellation has been requested but execution has not yet stopped.
1312
+ _integrationId:
1313
+ type: string
1314
+ format: objectId
1315
+ x-celigo-refModel: integrations
1316
+ readOnly: true
1317
+ description: Integration id this job belongs to (if applicable).
1318
+ examples:
1319
+ - 6842261335b64c0bcb308e4f
1320
+ _flowId:
1321
+ type: string
1322
+ format: objectId
1323
+ x-celigo-refModel: flows
1324
+ readOnly: true
1325
+ description: Flow id this job belongs to (if applicable).
1326
+ examples:
1327
+ - 69f54d6b7009ea11abad707a
1328
+ _exportId:
1329
+ type: string
1330
+ format: objectId
1331
+ x-celigo-refModel: exports
1332
+ readOnly: true
1333
+ description: |-
1334
+ Export id. Present on child export jobs and also on parent flow
1335
+ jobs (where it references the first page-generator export).
1336
+ examples:
1337
+ - 69f54d6a3469e3f5597848a1
1338
+ _importId:
1339
+ type: string
1340
+ format: objectId
1341
+ x-celigo-refModel: imports
1342
+ readOnly: true
1343
+ description: Import id for import child jobs (if applicable).
1344
+ examples:
1345
+ - 69e9953d7a8373d88147b5ec
1346
+ _expOrImpId:
1347
+ type: string
1348
+ format: objectId
1349
+ readOnly: true
1350
+ description: |-
1351
+ The export or import resource ID for this child job. Present on child
1352
+ jobs (`type: export` or `type: import`) — check `type` to determine
1353
+ whether this references an export or import resource.
1354
+ examples:
1355
+ - 69f54d6c1e7f3a22cc7848b2
1356
+ _retryOfJobId:
1357
+ type: string
1358
+ format: objectId
1359
+ x-celigo-refModel: jobs
1360
+ readOnly: true
1361
+ description: If this is a retry job, the original job id being retried.
1362
+ examples:
1363
+ - 69e9820a12e2a80e73166a8a
1364
+ _flowJobId:
1365
+ type: string
1366
+ format: objectId
1367
+ x-celigo-refModel: jobs
1368
+ readOnly: true
1369
+ description: Parent flow job id (for child jobs).
1370
+ examples:
1371
+ - 69f54d6f47185f8c7a500597
1372
+ _userId:
1373
+ type: string
1374
+ format: objectId
1375
+ x-celigo-refModel: users
1376
+ readOnly: true
1377
+ description: Owner user id for the job.
1378
+ _parentJobId:
1379
+ type: string
1380
+ format: objectId
1381
+ x-celigo-refModel: jobs
1382
+ readOnly: true
1383
+ description: Parent job id (used for branched flows / hierarchy).
1384
+ examples:
1385
+ - 69f54d6f47185f8c7a500597
1386
+ _bulkJobId:
1387
+ type: string
1388
+ format: objectId
1389
+ x-celigo-refModel: jobs
1390
+ readOnly: true
1391
+ description: Bulk retry parent job id (if applicable).
1392
+ examples:
1393
+ - 69e981ee18808f3e5ed1b2fd
1394
+ startedAt:
1395
+ type: string
1396
+ format: date-time
1397
+ readOnly: true
1398
+ description: When execution started.
1399
+ examples:
1400
+ - '2026-05-02T01:03:43.640Z'
1401
+ endedAt:
1402
+ type: string
1403
+ format: date-time
1404
+ readOnly: true
1405
+ description: When execution ended.
1406
+ examples:
1407
+ - '2026-05-02T01:03:51.757Z'
1408
+ resolvedAt:
1409
+ type: string
1410
+ format: date-time
1411
+ readOnly: true
1412
+ description: When errors for the job were fully resolved (if applicable).
1413
+ examples:
1414
+ - '2026-05-02T02:15:00.000Z'
1415
+ lastExecutedAt:
1416
+ type: string
1417
+ format: date-time
1418
+ readOnly: true
1419
+ description: Last time the job executed work (may differ from createdAt/startedAt).
1420
+ examples:
1421
+ - '2026-05-02T01:03:51.757Z'
1422
+ purgeAt:
1423
+ type: string
1424
+ format: date-time
1425
+ readOnly: true
1426
+ description: When the job should be purged from primary storage.
1427
+ examples:
1428
+ - '2026-06-01T01:03:43.577Z'
1429
+ clickhousePurgeAt:
1430
+ type: string
1431
+ format: date-time
1432
+ readOnly: true
1433
+ description: When the job's analytics data expires.
1434
+ examples:
1435
+ - '2026-06-01T01:03:43.577Z'
1436
+ triggeredBy:
1437
+ type: string
1438
+ readOnly: true
1439
+ description: Who/what triggered the job (free-form string).
1440
+ examples:
1441
+ - scheduler
1442
+ canceledBy:
1443
+ type: string
1444
+ readOnly: true
1445
+ description: Who/what requested cancellation (free-form string).
1446
+ examples:
1447
+ - user
1448
+ flowExecutionGroupId:
1449
+ type: string
1450
+ readOnly: true
1451
+ description: Groups multiple related jobs for a single flow execution.
1452
+ examples:
1453
+ - 70f3bd04a01142b29031e36ccff9242b
1454
+ numError:
1455
+ type: integer
1456
+ readOnly: true
1457
+ description: |
1458
+ Total number of errors produced by the job (including resolved ones).
1459
+ Use `numOpenError` for the count of currently unresolved errors.
1460
+ examples:
1461
+ - 10
1462
+ numOpenError:
1463
+ type: integer
1464
+ readOnly: true
1465
+ description: |
1466
+ Number of unresolved errors (equivalent to `numError - numResolved`).
1467
+ This is the value dashboards surface as "errors needing attention."
1468
+ examples:
1469
+ - 10
1470
+ numResolved:
1471
+ type: integer
1472
+ readOnly: true
1473
+ description: Number of resolved errors.
1474
+ examples:
1475
+ - 0
1476
+ numResolvedByAdaptor:
1477
+ type: integer
1478
+ readOnly: true
1479
+ description: Number of errors resolved by the adaptor.
1480
+ examples:
1481
+ - 0
1482
+ numSuccess:
1483
+ type: integer
1484
+ readOnly: true
1485
+ description: Number of successful records/pages.
1486
+ examples:
1487
+ - 10
1488
+ numIgnore:
1489
+ type: integer
1490
+ readOnly: true
1491
+ description: Number of ignored records/pages.
1492
+ examples:
1493
+ - 0
1494
+ numExport:
1495
+ type: integer
1496
+ readOnly: true
1497
+ description: |
1498
+ Legacy field used by retry logic. May be deprecated.
1499
+ examples:
1500
+ - 0
1501
+ numPagesGenerated:
1502
+ type: integer
1503
+ readOnly: true
1504
+ description: Number of pages generated by an export/page generator.
1505
+ examples:
1506
+ - 10
1507
+ doneExporting:
1508
+ type: boolean
1509
+ readOnly: true
1510
+ description: When true, all export pages have been generated.
1511
+ numPagesProcessed:
1512
+ type: integer
1513
+ readOnly: true
1514
+ description: Number of pages processed by downstream imports.
1515
+ examples:
1516
+ - 10
1517
+ oIndex:
1518
+ type: integer
1519
+ readOnly: true
1520
+ description: Branch/router index for branched flows (if applicable).
1521
+ examples:
1522
+ - 0
1523
+ retriable:
1524
+ type: boolean
1525
+ readOnly: true
1526
+ description: When true, this job is eligible for retry.
1527
+ files:
1528
+ type: array
1529
+ readOnly: true
1530
+ description: Files produced by the job (may be empty).
1531
+ items:
1532
+ $ref: '#/components/schemas/JobFileRef'
1533
+ logs:
1534
+ type: array
1535
+ readOnly: true
1536
+ description: Log artifacts associated with the job (may be empty).
1537
+ items:
1538
+ $ref: '#/components/schemas/JobLogRef'
1539
+ errorFile:
1540
+ description: Error file artifact (if any).
1541
+ allOf:
1542
+ - $ref: '#/components/schemas/JobErrorFileRef'
1543
+ - description: Error file artifact (if any).
1544
+ logMode:
1545
+ type: string
1546
+ readOnly: true
1547
+ description: |-
1548
+ Effective logging mode for this job, resolved from the flow's `logging.mode`
1549
+ and the account-level logging preference. Common values: `basic` (default),
1550
+ `off`, `on`, `debug`.
1551
+ examples:
1552
+ - basic
1553
+ __lastPageGeneratorJob:
1554
+ type: boolean
1555
+ readOnly: true
1556
+ description: When true, indicates the last page-generator job in the sequence. Internal use only.
1557
+ Error:
1558
+ type: object
1559
+ description: Standard error response envelope returned by integrator.io APIs.
1560
+ properties:
1561
+ errors:
1562
+ type: array
1563
+ description: List of errors that occurred while processing the request.
1564
+ items:
1565
+ type: object
1566
+ properties:
1567
+ code:
1568
+ oneOf:
1569
+ - type: string
1570
+ - type: integer
1571
+ description: |-
1572
+ Machine-readable error code. Usually a string like
1573
+ `invalid_ref`, `missing_required_field`, or `unauthorized`;
1574
+ may be an **integer** when the error mirrors an upstream HTTP
1575
+ status (e.g. `500`) — most commonly returned by connection-ping
1576
+ and adaptor-proxy responses.
1577
+ message:
1578
+ type: string
1579
+ description: Human-readable description of the error.
1580
+ field:
1581
+ type: string
1582
+ description: |-
1583
+ Optional pointer to the document field that caused the error.
1584
+ Used by structural validation errors (`missing_required_field`,
1585
+ `invalid_ref`) to indicate which field is at fault
1586
+ (e.g. `_id`, `type`, `http.baseURI`).
1587
+ source:
1588
+ type: string
1589
+ description: |-
1590
+ Optional origin layer for the error — e.g. `application` when
1591
+ the error came from the remote system the adaptor called,
1592
+ `connector` when the adaptor itself rejected the request.
1593
+ required:
1594
+ - message
1595
+ required:
1596
+ - errors
1597
+ JobsCurrentRequest:
1598
+ type: object
1599
+ description: |
1600
+ Request body for `POST /v1/jobs/current`.
1601
+ The UI uses this to fetch in-progress jobs for the dashboard.
1602
+ properties:
1603
+ _integrationIds:
1604
+ type: array
1605
+ description: Optional filter to only return jobs for these integration ids.
1606
+ items:
1607
+ type: string
1608
+ format: objectId
1609
+ x-celigo-refModel: integrations
1610
+ examples:
1611
+ - 6842261335b64c0bcb308e4f
1612
+ _flowIds:
1613
+ type: array
1614
+ description: Optional filter to only return jobs for these flow ids.
1615
+ items:
1616
+ type: string
1617
+ format: objectId
1618
+ x-celigo-refModel: flows
1619
+ examples:
1620
+ - 69497fc443fc1f9a03d31bd9
1621
+ status:
1622
+ type: array
1623
+ description: |
1624
+ Optional filter for in-progress job statuses.
1625
+ Terminal statuses (`completed`, `failed`, `canceled`, `retried`) are rejected with HTTP 400 by this endpoint —
1626
+ use `POST /v1/flows/runs/stats` for completed-run history.
1627
+ items:
1628
+ type: string
1629
+ enum:
1630
+ - queued
1631
+ - running
1632
+ - canceling
1633
+ x-enumDescriptions:
1634
+ queued: Job is waiting to be picked up for execution.
1635
+ running: Job is currently executing.
1636
+ canceling: Job cancellation has been requested but execution has not yet stopped.
1637
+ applicationIds:
1638
+ type: array
1639
+ description: Optional filter by application ids.
1640
+ items:
1641
+ type: string
1642
+ examples:
1643
+ - netsuite
1644
+ category:
1645
+ type: string
1646
+ description: Optional category filter (e.g., `edi`).
1647
+ examples:
1648
+ - edi
1649
+ time_gt:
1650
+ type: integer
1651
+ format: int64
1652
+ description: Optional filter for jobs with `createdAt`/time greater than this epoch milliseconds.
1653
+ examples:
1654
+ - 1745366400000
1655
+ time_lte:
1656
+ type: integer
1657
+ format: int64
1658
+ description: Optional filter for jobs with `createdAt`/time less than or equal to this epoch milliseconds.
1659
+ examples:
1660
+ - 1746147600000
1661
+ required: []
1662
+ JobWithChildren:
1663
+ allOf:
1664
+ - $ref: '#/components/schemas/Job'
1665
+ - type: object
1666
+ description: Job plus any child jobs (job family view).
1667
+ properties:
1668
+ children:
1669
+ type: array
1670
+ readOnly: true
1671
+ description: Child jobs (export/import) that are part of this job family.
1672
+ items:
1673
+ $ref: '#/components/schemas/Job'
1674
+ JobsCurrentResponse:
1675
+ type: object
1676
+ description: Response envelope for `POST /v1/jobs/current`.
1677
+ properties:
1678
+ jobs:
1679
+ type: array
1680
+ description: Current (in-progress) jobs.
1681
+ items:
1682
+ $ref: '#/components/schemas/JobWithChildren'
1683
+ pagingPostBody:
1684
+ type: object
1685
+ description: |-
1686
+ Cursor for the next page. Absent on the last (or only) page. Pagination is **body-based**:
1687
+ POST this object back to the same endpoint as the next request body to fetch the next page.
1688
+ Echoes the caller's filter plus a server-added watermark (`endedOnOrBefore`). Single-page
1689
+ responses omit this field entirely.
1690
+ properties:
1691
+ endedOnOrBefore:
1692
+ type: string
1693
+ format: date-time
1694
+ description: Server-added cursor watermark — only jobs with `endedAt <= this` are included on the next page.
1695
+ examples:
1696
+ - '2026-05-02T01:03:51.757Z'
1697
+ FlowRunsStatsRequest:
1698
+ allOf:
1699
+ - $ref: '#/components/schemas/JobsCurrentRequest'
1700
+ - type: object
1701
+ description: |-
1702
+ Request body for `POST /v1/flows/runs/stats`. Shares its filter shape with `POST /v1/jobs/current`
1703
+ (`_integrationIds`, `_flowIds`, `time_gt`, `time_lte`, …), but the response is a set of
1704
+ **per-flow aggregates** rather than individual job records. Filters narrow which runs are rolled
1705
+ up into each aggregate.
1706
+
1707
+ Omitting `time_gt` does not mean "all history" — the endpoint falls back to the dashboard's
1708
+ default window (approximately the last 24 hours), and runs older than that silently drop out
1709
+ of every aggregate. Send `time_gt` (epoch milliseconds) explicitly for any other range.
1710
+ x-celigo-ai-guidance:
1711
+ - Always send an explicit time_gt matching the window you intend to report, and never present the aggregates as covering a longer period than the time filter you sent. Without time_gt the default window (~24 hours) applies — an empty result then means "nothing ran recently", never "no runs exist".
1712
+ - A flow absent from stats[] had no runs in the window; it does not mean the flow does not exist. numOpenError counts errors open NOW, which may predate the window.
1713
+ FlowRunStatsEntry:
1714
+ type: object
1715
+ description: |-
1716
+ Per-flow aggregate across all matching runs. Produced by `POST /v1/flows/runs/stats` and used to
1717
+ populate the Celigo dashboard's per-flow summary cards.
1718
+ properties:
1719
+ _flowId:
1720
+ type: string
1721
+ format: objectId
1722
+ description: Id of the flow this entry aggregates.
1723
+ x-celigo-refModel: flows
1724
+ examples:
1725
+ - 69497fc443fc1f9a03d31bd9
1726
+ _integrationId:
1727
+ type: string
1728
+ format: objectId
1729
+ description: |-
1730
+ Id of the flow's parent integration. Omitted for standalone flows that aren't part of an
1731
+ integration.
1732
+ x-celigo-refModel: integrations
1733
+ examples:
1734
+ - 69496f01615f724066afaac2
1735
+ numRuns:
1736
+ type: integer
1737
+ minimum: 0
1738
+ description: Total number of runs that matched the request filter.
1739
+ examples:
1740
+ - 91
1741
+ numPages:
1742
+ type: integer
1743
+ minimum: 0
1744
+ description: |-
1745
+ Total pages processed across those runs (one run can produce multiple pages when the source
1746
+ export paginates).
1747
+ examples:
1748
+ - 92
1749
+ numSuccess:
1750
+ type: integer
1751
+ minimum: 0
1752
+ description: Records that completed successfully across all matched runs.
1753
+ examples:
1754
+ - 184
1755
+ numError:
1756
+ type: integer
1757
+ minimum: 0
1758
+ description: |-
1759
+ Records that failed across all matched runs. Distinct from `numOpenError` — this is the
1760
+ lifetime-of-those-runs error count, not the currently-unresolved count.
1761
+ examples:
1762
+ - 0
1763
+ numIgnore:
1764
+ type: integer
1765
+ minimum: 0
1766
+ description: Records that were ignored (filtered out by `inputFilter` / `outputFilter`) across all matched runs.
1767
+ examples:
1768
+ - 0
1769
+ numOpenError:
1770
+ type: integer
1771
+ minimum: 0
1772
+ description: Currently **open** (unresolved) errors on this flow. Drops when errors are resolved or retried.
1773
+ examples:
1774
+ - 3
1775
+ numResolvedByAuto:
1776
+ type: integer
1777
+ minimum: 0
1778
+ description: Errors that were auto-resolved by a successful retry.
1779
+ examples:
1780
+ - 7
1781
+ numResolvedByUser:
1782
+ type: integer
1783
+ minimum: 0
1784
+ description: Errors that a user manually marked resolved.
1785
+ examples:
1786
+ - 0
1787
+ avgRuntime:
1788
+ type: number
1789
+ description: Mean job runtime in milliseconds across matched runs.
1790
+ examples:
1791
+ - 172327.86
1792
+ lastExecutedAt:
1793
+ type: string
1794
+ format: date-time
1795
+ description: Timestamp of the most recent matching run (any status).
1796
+ examples:
1797
+ - '2026-04-23T02:51:52.551Z'
1798
+ lastErrorAt:
1799
+ type: string
1800
+ format: date-time
1801
+ description: Timestamp of the most recent open error. Omitted when `numOpenError` is 0.
1802
+ examples:
1803
+ - '2026-04-21T10:51:13.221Z'
1804
+ flow:
1805
+ type: object
1806
+ description: Minimal flow metadata inlined for rendering convenience — equivalent to `GET /v1/flows/{_flowId}` with most fields stripped.
1807
+ properties:
1808
+ _id:
1809
+ type: string
1810
+ format: objectId
1811
+ x-celigo-refModel: flows
1812
+ description: Flow id (matches the outer `_flowId`).
1813
+ examples:
1814
+ - 69497fc443fc1f9a03d31bd9
1815
+ name:
1816
+ type: string
1817
+ description: Flow name.
1818
+ examples:
1819
+ - Shopee
1820
+ _integrationId:
1821
+ type: string
1822
+ format: objectId
1823
+ x-celigo-refModel: integrations
1824
+ description: Parent integration id. Omitted for standalone flows.
1825
+ examples:
1826
+ - 69496f01615f724066afaac2
1827
+ integrationName:
1828
+ type: string
1829
+ description: Parent integration name. Omitted for standalone flows.
1830
+ examples:
1831
+ - Shopee
1832
+ FlowRunsStatsResponse:
1833
+ type: object
1834
+ description: |-
1835
+ One page of per-flow run-statistics aggregates. Despite the endpoint's location under `flows/runs/`,
1836
+ each element of `stats[]` is **not** an individual job record — it's the aggregated summary for one
1837
+ flow across all matching runs (counts, timings, and the most recent timestamps). The dashboard uses
1838
+ this to render its per-flow "last run / success rate / open errors" cards in a single call.
1839
+
1840
+ To list individual job records (one per run), use `GET /v1/jobs?_flowId=...` instead.
1841
+ properties:
1842
+ stats:
1843
+ type: array
1844
+ description: |-
1845
+ Per-flow aggregate entries. One element per flow that has at least one run matching the request
1846
+ filter.
1847
+ items:
1848
+ $ref: '#/components/schemas/FlowRunStatsEntry'
1849
+ pagingPostBody:
1850
+ type: object
1851
+ description: |-
1852
+ Cursor for the next page. Absent on the last (or only) page. Pagination is **body-based**:
1853
+ POST this object back to the same endpoint as the next request body to fetch the next page.
1854
+ The object echoes the caller's filter plus a server-added watermark
1855
+ (`endedOnOrBefore`) that carries the cursor position. Single-page responses (typical for
1856
+ normal account sizes) omit this field entirely.
1857
+ properties:
1858
+ endedOnOrBefore:
1859
+ type: string
1860
+ format: date-time
1861
+ description: Server-added cursor watermark — only runs with `endedAt <= this` are included on the next page.
1862
+ examples:
1863
+ - '2026-04-23T02:51:52.551Z'
1864
+ JobsFamilyBatchRequest:
1865
+ type: array
1866
+ description: Array of job ids to fetch family information for (max 1000 ids per request).
1867
+ items:
1868
+ type: string
1869
+ format: objectId
1870
+ x-celigo-refModel: jobs
1871
+ examples:
1872
+ - 69e981ee18808f3e5ed1b2fd
1873
+ JobFilesSignedUrlRequest:
1874
+ type: object
1875
+ description: |
1876
+ Request body for `POST /v1/jobs/{_id}/files/signedURL`.
1877
+ Provide `fileIds` to request signed URLs for specific files.
1878
+ properties:
1879
+ fileIds:
1880
+ type: array
1881
+ description: Optional list of job file ids to download.
1882
+ items:
1883
+ type: string
1884
+ examples:
1885
+ - 694b97c4f4f1f4a1b9d9e001
1886
+ JobFilesSignedUrlResponse:
1887
+ type: object
1888
+ description: Signed URL response for downloading job files.
1889
+ properties:
1890
+ signedURL:
1891
+ type:
1892
+ - string
1893
+ - 'null'
1894
+ description: |-
1895
+ A single signed URL. Requests that pass `fileIds` return the `signedURLs` array instead, even for
1896
+ a single file — check both fields.
1897
+ examples:
1898
+ - https://integrator-templates.s3.us-east-1.amazonaws.com/694b97c4f4f1f4a1b9d9e001.csv?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Expires=900&X-Amz-Credential=AKIAEXAMPLE123%2F20260613%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260613T120000Z&X-Amz-SignedHeaders=host&X-Amz-Signature=4f9b2c1e8a3d7f0b5c6e9a2d4f8b1c3e7a0d5f2b9c4e6a8d1f3b7c0e5a9d2f4b
1899
+ signedURLs:
1900
+ type: array
1901
+ description: |-
1902
+ Signed URLs for the returned files, one per file. Returned as an array even when a single file is
1903
+ requested via `fileIds`.
1904
+ items:
1905
+ type: string
1906
+ examples:
1907
+ - https://integrator-templates.s3.us-east-1.amazonaws.com/694b97c4f4f1f4a1b9d9e001.csv?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Expires=900&X-Amz-Credential=AKIAEXAMPLE123%2F20260613%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260613T120000Z&X-Amz-SignedHeaders=host&X-Amz-Signature=4f9b2c1e8a3d7f0b5c6e9a2d4f8b1c3e7a0d5f2b9c4e6a8d1f3b7c0e5a9d2f4b
1908
+ JobDiagnosticsResponse:
1909
+ allOf:
1910
+ - $ref: '#/components/schemas/JobFilesSignedUrlResponse'
1911
+ - type: object
1912
+ description: Signed URL response for downloading diagnostics for a job.
1913
+ responses:
1914
+ 401-unauthorized:
1915
+ description: |-
1916
+ Unauthorized. The request lacks a valid bearer token, or the provided token
1917
+ failed to authenticate.
1918
+
1919
+ Note: the 401 response is produced by the auth middleware **before** the
1920
+ request reaches the endpoint handler, so it does **not** follow the
1921
+ standard `{errors: [...]}` envelope. Instead the body is a bare
1922
+ `{message: string}` object with no `code`, no `errors` array. Callers
1923
+ handling 401s should key off the HTTP status and the `message` string,
1924
+ not try to destructure an `errors[]`.
1925
+ content:
1926
+ application/json:
1927
+ schema:
1928
+ type: object
1929
+ properties:
1930
+ message:
1931
+ type: string
1932
+ description: |-
1933
+ Human-readable description of the auth failure. Known values:
1934
+ - `"Unauthorized"` — no `Authorization` header on the request.
1935
+ - `"Bearer Authentication Failed"` — header present but token
1936
+ is invalid, revoked, or expired.
1937
+ required:
1938
+ - message
1939
+ examples:
1940
+ missing_token:
1941
+ summary: No Authorization header sent
1942
+ value:
1943
+ message: Unauthorized
1944
+ invalid_token:
1945
+ summary: Bearer token invalid or revoked
1946
+ value:
1947
+ message: Bearer Authentication Failed
1948
+ 400-bad-request:
1949
+ description: |
1950
+ Bad request. The server could not understand the request because of malformed syntax or invalid parameters.
1951
+ content:
1952
+ application/json:
1953
+ schema:
1954
+ $ref: '#/components/schemas/Error'
1955
+ examples:
1956
+ default:
1957
+ value:
1958
+ errors:
1959
+ - code: invalid_request
1960
+ message: The request body failed validation.
1961
+ 403-forbidden:
1962
+ description: |
1963
+ Forbidden. The authenticated caller does not have permission to perform this operation.
1964
+ content:
1965
+ application/json:
1966
+ schema:
1967
+ $ref: '#/components/schemas/Error'
1968
+ examples:
1969
+ default:
1970
+ value:
1971
+ errors:
1972
+ - code: forbidden
1973
+ message: You do not have permission to access this resource.
1974
+ 404-not-found:
1975
+ description: |
1976
+ Not found. The requested resource does not exist or is not visible to the caller.
1977
+ content:
1978
+ application/json:
1979
+ schema:
1980
+ $ref: '#/components/schemas/Error'
1981
+ examples:
1982
+ default:
1983
+ value:
1984
+ errors:
1985
+ - code: not_found
1986
+ message: The requested resource was not found.
1987
+ parameters:
1988
+ Include:
1989
+ name: include
1990
+ in: query
1991
+ required: false
1992
+ description: |-
1993
+ Comma-separated list of fields to project into each returned record.
1994
+ Triggers summary projection: the response contains a minimal identity
1995
+ set (`_id`, `name`, plus resource-specific fields) with the requested
1996
+ fields added on top. Supports dot notation for nested fields.
1997
+ Mutually exclusive with `exclude`.
1998
+ schema:
1999
+ type: string
2000
+ example: _integrationId,disabled,lastModified
2001
+ Exclude:
2002
+ name: exclude
2003
+ in: query
2004
+ required: false
2005
+ description: |-
2006
+ Comma-separated list of fields to strip from the default response.
2007
+ Unlike `include`, does not trigger summary projection — returns the
2008
+ full record with the named fields removed. Protected identity fields
2009
+ (e.g. `name`) cannot be stripped. Mutually exclusive with `include`.
2010
+ schema:
2011
+ type: string
2012
+ example: createdAt,lastModified
2013
+ x-enable-proxy: true
2014
+ x-internal: false