@celigo/api-specs 0.2.98 → 0.2.100
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api.yml +40 -6
- package/dist/export.yml +4 -1
- package/dist/flow.yml +64 -34
- package/dist/integration.yml +25 -8
- package/dist/marketplace.yml +71 -6
- package/dist/notification.yml +18 -1
- package/dist/tool.yml +88 -11
- package/package.json +1 -1
- package/schemas.json +1 -1
package/dist/api.yml
CHANGED
|
@@ -1685,6 +1685,10 @@ paths:
|
|
|
1685
1685
|
`runId` is the parent `flowJob._id`.
|
|
1686
1686
|
|
|
1687
1687
|
Test-run invocations do **not** surface in `GET /v1/apis/{_id}/logs`.
|
|
1688
|
+
|
|
1689
|
+
Test runs never paginate, whatever `pagination.enabled` says: the captured success
|
|
1690
|
+
response carries no `pagination` object, and a `Celigo-Next-Cursor` entry in
|
|
1691
|
+
`mockRequest.headers` is not validated — a malformed value does not fail the run.
|
|
1688
1692
|
parameters:
|
|
1689
1693
|
- name: _id
|
|
1690
1694
|
in: path
|
|
@@ -3527,7 +3531,8 @@ components:
|
|
|
3527
3531
|
Callers fetch the next page by resending the request unchanged with
|
|
3528
3532
|
the cursor in the `Celigo-Next-Cursor` request header — for every
|
|
3529
3533
|
HTTP method; a `next_cursor` field in the request body is ordinary
|
|
3530
|
-
payload, not a cursor.
|
|
3534
|
+
payload, not a cursor. Resending a cursor returns the same page again.
|
|
3535
|
+
Cursor faults fail the invocation with `400`:
|
|
3531
3536
|
`invalid_cursor_format`, `cursor_signature_invalid` (the cursor was
|
|
3532
3537
|
altered), `cursor_version_unsupported`, `cursor_api_mismatch` (the
|
|
3533
3538
|
cursor was issued by a different API), `cursor_filter_mismatch` (the
|
|
@@ -3536,7 +3541,19 @@ components:
|
|
|
3536
3541
|
pagination is off). Cursors expire and are then rejected with `410
|
|
3537
3542
|
cursor_expired`; a response hook that turns the mapped body into a
|
|
3538
3543
|
non-object fails with `422 api_pagination_response_not_object`.
|
|
3539
|
-
|
|
3544
|
+
|
|
3545
|
+
Saving the volume-driver export — even with no changes — invalidates
|
|
3546
|
+
every cursor issued so far: the next call with one returns `200` with
|
|
3547
|
+
an empty final page, `{"pagination": {"has_more": false}}`, as if the
|
|
3548
|
+
source were exhausted; restart from the first page without a cursor.
|
|
3549
|
+
Saving the API document itself leaves issued cursors valid.
|
|
3550
|
+
A success response whose `statusCode` is `204` returns no body, so the
|
|
3551
|
+
`pagination` object and cursor are lost with it — a paginated API
|
|
3552
|
+
needs a body-bearing success status.
|
|
3553
|
+
|
|
3554
|
+
Absent from responses until set. A PUT that omits `pagination` keeps
|
|
3555
|
+
the stored value; send `{"enabled": null}` to clear it (the field is
|
|
3556
|
+
then absent again).
|
|
3540
3557
|
x-celigo-ai-guidance:
|
|
3541
3558
|
- |-
|
|
3542
3559
|
When calling a paginated API, read `pagination.next_cursor` from the
|
|
@@ -3544,7 +3561,11 @@ components:
|
|
|
3544
3561
|
the identical path, query string, and body; putting it in the body
|
|
3545
3562
|
returns the first page again, and adding or changing a query
|
|
3546
3563
|
parameter fails with 400 `cursor_filter_mismatch`. Loop until
|
|
3547
|
-
`has_more` is false — the final page carries no `next_cursor`.
|
|
3564
|
+
`has_more` is false — the final page carries no `next_cursor`. Saving
|
|
3565
|
+
the volume-driver export mid-walk ends the walk early without an
|
|
3566
|
+
error: the next cursor call returns an empty
|
|
3567
|
+
`{"pagination": {"has_more": false}}` page, so restart from the first
|
|
3568
|
+
page after any save of that export.
|
|
3548
3569
|
- |-
|
|
3549
3570
|
Script-mode APIs never paginate: POST and PUT silently drop
|
|
3550
3571
|
`pagination` (it never reads back), and `PATCH /pagination/enabled`
|
|
@@ -3560,9 +3581,15 @@ components:
|
|
|
3560
3581
|
with source paging configured; otherwise the write fails with
|
|
3561
3582
|
`422` `api_pagination_no_volume_driver` (no lookup at all),
|
|
3562
3583
|
`api_pagination_adapter_not_supported` (any other adaptor), or
|
|
3563
|
-
`api_pagination_source_not_paged` (lookup without paging).
|
|
3564
|
-
|
|
3565
|
-
|
|
3584
|
+
`api_pagination_source_not_paged` (lookup without paging). The
|
|
3585
|
+
same check repeats on every later save of the API and at every
|
|
3586
|
+
invocation while the stored value is true: if the volume driver
|
|
3587
|
+
loses its paging afterwards (the export save itself succeeds),
|
|
3588
|
+
every call fails with `400 api_pagination_source_not_paged` and
|
|
3589
|
+
every PUT or PATCH of the API — including one that omits
|
|
3590
|
+
`pagination` — is refused with the `422` until paging is restored
|
|
3591
|
+
or this flag is set to false. When false, a `Celigo-Next-Cursor`
|
|
3592
|
+
header is rejected with `400 cursor_not_supported_for_api`.
|
|
3566
3593
|
examples:
|
|
3567
3594
|
- true
|
|
3568
3595
|
x-celigo-ai-guidance:
|
|
@@ -3573,6 +3600,13 @@ components:
|
|
|
3573
3600
|
webhook, or other non-HTTP/Salesforce/NetSuite lookup with 422
|
|
3574
3601
|
`api_pagination_adapter_not_supported`, and an API with no lookup
|
|
3575
3602
|
with 422 `api_pagination_no_volume_driver`.
|
|
3603
|
+
- |-
|
|
3604
|
+
Before removing paging from the volume-driver export of an API
|
|
3605
|
+
whose `enabled` is true, PATCH `/pagination/enabled` to false
|
|
3606
|
+
first (that PATCH succeeds even while the lookup is unpaged).
|
|
3607
|
+
Otherwise the export save returns 200 but every call to the API
|
|
3608
|
+
fails 400 `api_pagination_source_not_paged` and every save of
|
|
3609
|
+
the API fails 422 with the same code.
|
|
3576
3610
|
script:
|
|
3577
3611
|
$ref: '#/components/schemas/Script'
|
|
3578
3612
|
builder:
|
package/dist/export.yml
CHANGED
|
@@ -6558,7 +6558,10 @@ components:
|
|
|
6558
6558
|
- '{"records": [{"id": "{{record.id}}", "exported": true}]}'
|
|
6559
6559
|
paging:
|
|
6560
6560
|
type: object
|
|
6561
|
-
description:
|
|
6561
|
+
description: |-
|
|
6562
|
+
Controls how the export requests subsequent pages when the API returns multi-page responses. The `method` field determines which companion fields are required and how each next page is requested. For the page, skip, and token methods, reference the matching pagination variable (`{{export.http.paging.page}}`, `{{export.http.paging.skip}}`, or `{{export.http.paging.token}}`) in the relative URI or request body — misconfigured pagination is a common cause of incomplete data retrieval.
|
|
6563
|
+
|
|
6564
|
+
When this export is the first lookup of a builder-mode API with `pagination.enabled` set, it is that API's volume driver: saving the export (even unchanged) invalidates the API's issued cursors, so a caller mid-walk gets an empty final page, and removing `paging` is accepted on save but makes every call to the API fail with `400 api_pagination_source_not_paged` until paging is restored or the API's flag is turned off.
|
|
6562
6565
|
x-celigo-ai-guidance:
|
|
6563
6566
|
- Configuration object for navigating through multi-page API responses.
|
|
6564
6567
|
- |-
|
package/dist/flow.yml
CHANGED
|
@@ -1006,12 +1006,13 @@ paths:
|
|
|
1006
1006
|
collection-level endpoint used by the UI's "move to section" action — it updates multiple flows in a
|
|
1007
1007
|
single call rather than requiring a per-flow `PUT /v1/flows/{_id}` with a modified `_flowGroupingId`.
|
|
1008
1008
|
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1009
|
+
Every flow in `_flowIds` must belong to the same integration, and `_flowGroupingId` must be one
|
|
1010
|
+
of that integration's `flowGroupings` — a grouping that does not exist or belongs to another
|
|
1011
|
+
integration is rejected with 400 `flowgrouping_update_error`. Pass `_flowGroupingId: null` or
|
|
1012
|
+
omit it to move the flows back to the integration's default (Unassigned) section.
|
|
1012
1013
|
|
|
1013
|
-
Flow groupings are managed on the parent integration (`PUT /v1/integrations/{_id}`
|
|
1014
|
-
modified `flowGroupings[]` array) — create the group first, then call this to populate it.
|
|
1014
|
+
Flow groupings are managed on the parent integration (`PUT` or `PATCH /v1/integrations/{_id}`
|
|
1015
|
+
with a modified `flowGroupings[]` array) — create the group first, then call this to populate it.
|
|
1015
1016
|
requestBody:
|
|
1016
1017
|
required: true
|
|
1017
1018
|
content:
|
|
@@ -1035,10 +1036,37 @@ paths:
|
|
|
1035
1036
|
responses:
|
|
1036
1037
|
'204':
|
|
1037
1038
|
description: |-
|
|
1038
|
-
Flows reassigned. Empty response body.
|
|
1039
|
-
|
|
1039
|
+
Flows reassigned. Empty response body. Flow ids that match no flow in the account are
|
|
1040
|
+
silently skipped, so an unknown `_flowIds` entry (or an empty list) also answers 204.
|
|
1040
1041
|
'400':
|
|
1041
|
-
|
|
1042
|
+
description: |-
|
|
1043
|
+
The request was rejected: the flows span more than one integration (`invalid_request`),
|
|
1044
|
+
the grouping is not one of the flows' integration's `flowGroupings`
|
|
1045
|
+
(`flowgrouping_update_error`), or an id is not a well-formed ObjectId (`invalid_ref` —
|
|
1046
|
+
an empty-string `_flowGroupingId` fails this way; use `null` to ungroup).
|
|
1047
|
+
content:
|
|
1048
|
+
application/json:
|
|
1049
|
+
schema:
|
|
1050
|
+
$ref: '#/components/schemas/Error'
|
|
1051
|
+
examples:
|
|
1052
|
+
differentIntegrations:
|
|
1053
|
+
summary: Flows belong to different integrations
|
|
1054
|
+
value:
|
|
1055
|
+
errors:
|
|
1056
|
+
- code: invalid_request
|
|
1057
|
+
message: Unable to update flows for flowgrouping, since flows belongs to different integrations.
|
|
1058
|
+
groupingNotInIntegration:
|
|
1059
|
+
summary: Grouping does not exist or belongs to another integration
|
|
1060
|
+
value:
|
|
1061
|
+
errors:
|
|
1062
|
+
- code: flowgrouping_update_error
|
|
1063
|
+
message: 'Failed to update flow grouping for flow: Order sync. Error: Sorry, Failed to link flowGroupingId. FlowGrouping does not belong to Integration: 6ac1ef49fa3e52974f433c1b.'
|
|
1064
|
+
malformedGroupingId:
|
|
1065
|
+
summary: Grouping id is not an ObjectId (including an empty string)
|
|
1066
|
+
value:
|
|
1067
|
+
errors:
|
|
1068
|
+
- code: invalid_ref
|
|
1069
|
+
message: Please provide a valid _flowGroupingId.
|
|
1042
1070
|
'401':
|
|
1043
1071
|
$ref: '#/components/responses/401-unauthorized'
|
|
1044
1072
|
'404':
|
|
@@ -3813,15 +3841,15 @@ paths:
|
|
|
3813
3841
|
preview_import_step:
|
|
3814
3842
|
summary: Preview the import step of a one-generator flow
|
|
3815
3843
|
value:
|
|
3816
|
-
|
|
3844
|
+
flow:
|
|
3817
3845
|
name: 'Accounts: HubSpot to NetSuite'
|
|
3818
3846
|
pageGenerators:
|
|
3819
3847
|
- _exportId: 652583cf9085040ecbf54303
|
|
3820
3848
|
pageProcessors:
|
|
3821
3849
|
- type: import
|
|
3822
3850
|
_importId: 6508ab8b20b16404da729c64
|
|
3851
|
+
_selectedPageGeneratorId: 652583cf9085040ecbf54303
|
|
3823
3852
|
_pageProcessorId: 6508ab8b20b16404da729c64
|
|
3824
|
-
_selectedPageGeneratorId: 652583cf9085040ecbf54303
|
|
3825
3853
|
pageGeneratorMap:
|
|
3826
3854
|
652583cf9085040ecbf54303:
|
|
3827
3855
|
doc:
|
|
@@ -5513,10 +5541,12 @@ components:
|
|
|
5513
5541
|
format: objectId
|
|
5514
5542
|
description: |-
|
|
5515
5543
|
Flow grouping for organizing related flows in the UI. References an entry in the
|
|
5516
|
-
integration's `flowGroupings` array (not a standalone collection);
|
|
5517
|
-
|
|
5518
|
-
|
|
5519
|
-
`
|
|
5544
|
+
integration's `flowGroupings` array (not a standalone collection); an id that is not
|
|
5545
|
+
one of the flow's own integration's groupings — nonexistent, or a grouping of another
|
|
5546
|
+
integration — fails POST and PUT with 422 `flowgrouping_not_belong`. Omit it or pass
|
|
5547
|
+
`null` to leave the flow in the integration's default section. At runtime the flow's
|
|
5548
|
+
steps read the referenced group's `settings` under the fixed scope key `flowGrouping`
|
|
5549
|
+
(e.g. `{{settings.flowGrouping.<fieldId>}}`).
|
|
5520
5550
|
examples:
|
|
5521
5551
|
- 60a2c4e6f321d800129a1a3c
|
|
5522
5552
|
_keepDeltaBehindFlowId:
|
|
@@ -6170,7 +6200,9 @@ components:
|
|
|
6170
6200
|
properties:
|
|
6171
6201
|
_flowIds:
|
|
6172
6202
|
type: array
|
|
6173
|
-
description:
|
|
6203
|
+
description: |-
|
|
6204
|
+
The flows to move. All must belong to the same integration as the target flow group
|
|
6205
|
+
(400 `invalid_request` otherwise); ids that match no flow are silently skipped.
|
|
6174
6206
|
minItems: 1
|
|
6175
6207
|
items:
|
|
6176
6208
|
type: string
|
|
@@ -6180,13 +6212,14 @@ components:
|
|
|
6180
6212
|
type:
|
|
6181
6213
|
- string
|
|
6182
6214
|
- 'null'
|
|
6215
|
+
format: objectId
|
|
6183
6216
|
description: |-
|
|
6184
|
-
|
|
6185
|
-
|
|
6186
|
-
integration's default section
|
|
6217
|
+
Grouping within the integration's `flowGroupings[]` to move the flows into. Must belong to
|
|
6218
|
+
the flows' own integration (400 `flowgrouping_update_error` otherwise). Pass `null` or omit
|
|
6219
|
+
it to move the flows back to the integration's default section; an empty string is rejected
|
|
6220
|
+
with 400 `invalid_ref`.
|
|
6187
6221
|
required:
|
|
6188
6222
|
- _flowIds
|
|
6189
|
-
- _flowGroupingId
|
|
6190
6223
|
FlowStepError:
|
|
6191
6224
|
type: object
|
|
6192
6225
|
description: |-
|
|
@@ -7796,12 +7829,17 @@ components:
|
|
|
7796
7829
|
match keys in the side-loaded maps. Full flow doc shape mirrors
|
|
7797
7830
|
`POST /v1/flows` body. Accepted under key `flow` despite the
|
|
7798
7831
|
server's stale `flowDoc` error message.
|
|
7799
|
-
|
|
7800
|
-
|
|
7801
|
-
|
|
7802
|
-
|
|
7803
|
-
|
|
7804
|
-
|
|
7832
|
+
properties:
|
|
7833
|
+
_selectedPageGeneratorId:
|
|
7834
|
+
type: string
|
|
7835
|
+
format: objectId
|
|
7836
|
+
x-celigo-refModel: exports
|
|
7837
|
+
description: |-
|
|
7838
|
+
Page generator to drive the preview when the flow has multiple.
|
|
7839
|
+
Defaults to `pageGenerators[0]._exportId`. Set it inside `flow`: the
|
|
7840
|
+
server ignores a top-level `_selectedPageGeneratorId`.
|
|
7841
|
+
examples:
|
|
7842
|
+
- 61f92026dd053843b5d72350
|
|
7805
7843
|
additionalProperties: true
|
|
7806
7844
|
_pageProcessorId:
|
|
7807
7845
|
type: string
|
|
@@ -7811,14 +7849,6 @@ components:
|
|
|
7811
7849
|
in `pageProcessorMap`.
|
|
7812
7850
|
examples:
|
|
7813
7851
|
- 64a1234567890abcdef12345
|
|
7814
|
-
_selectedPageGeneratorId:
|
|
7815
|
-
type: string
|
|
7816
|
-
format: objectId
|
|
7817
|
-
description: |-
|
|
7818
|
-
Page generator to drive the preview when the flow has multiple.
|
|
7819
|
-
Defaults to `flow.pageGenerators[0]._exportId`.
|
|
7820
|
-
examples:
|
|
7821
|
-
- 61f92026dd053843b5d72350
|
|
7822
7852
|
pageGeneratorMap:
|
|
7823
7853
|
type: object
|
|
7824
7854
|
description: |-
|
|
@@ -7891,7 +7921,7 @@ components:
|
|
|
7891
7921
|
the response carries the records the target would receive as input
|
|
7892
7922
|
(for a lookup step, with its `responseMapping` already merged in).
|
|
7893
7923
|
required:
|
|
7894
|
-
-
|
|
7924
|
+
- flow
|
|
7895
7925
|
- _pageProcessorId
|
|
7896
7926
|
- pageGeneratorMap
|
|
7897
7927
|
- pageProcessorMap
|
package/dist/integration.yml
CHANGED
|
@@ -365,8 +365,8 @@ paths:
|
|
|
365
365
|
x-internal: false
|
|
366
366
|
summary: Clone an integration
|
|
367
367
|
description: |
|
|
368
|
-
Creates a copy of an existing integration.
|
|
369
|
-
|
|
368
|
+
Creates a copy of an existing integration. When the source has registered
|
|
369
|
+
connections, remap each one via `connectionMap`; mapped connections are reused, not cloned.
|
|
370
370
|
operationId: cloneIntegration
|
|
371
371
|
tags:
|
|
372
372
|
- Integrations
|
|
@@ -382,7 +382,7 @@ paths:
|
|
|
382
382
|
examples:
|
|
383
383
|
- 69680d7111d1437fbcbce534
|
|
384
384
|
requestBody:
|
|
385
|
-
required:
|
|
385
|
+
required: true
|
|
386
386
|
content:
|
|
387
387
|
application/json:
|
|
388
388
|
schema:
|
|
@@ -397,8 +397,8 @@ paths:
|
|
|
397
397
|
626168f90b6ef816b50c82d7: 64a1234567890abcdef12345
|
|
398
398
|
6553ebdeda62bb22e7fa81ff: 64a1234567890abcdef12346
|
|
399
399
|
responses:
|
|
400
|
-
'
|
|
401
|
-
description: Integration cloned successfully
|
|
400
|
+
'201':
|
|
401
|
+
description: Integration cloned successfully. Returns a manifest of the resources the clone created.
|
|
402
402
|
content:
|
|
403
403
|
application/json:
|
|
404
404
|
schema:
|
|
@@ -4063,7 +4063,10 @@ components:
|
|
|
4063
4063
|
description: |-
|
|
4064
4064
|
UI grouping configuration that groups an integration's flows into named
|
|
4065
4065
|
sections. Works on ANY integration — this is NOT an Integration-App-only
|
|
4066
|
-
feature; a plain integration can define flow groupings too.
|
|
4066
|
+
feature; a plain integration can define flow groupings too. Create groupings
|
|
4067
|
+
here, then assign flows to them via `PUT /v1/flows/updateFlowGrouping`. A
|
|
4068
|
+
grouping that still has member flows survives being removed from this array —
|
|
4069
|
+
ungroup its flows first.
|
|
4067
4070
|
|
|
4068
4071
|
Omit unless you are explicitly configuring flow grouping behavior.
|
|
4069
4072
|
x-celigo-ai-guidance:
|
|
@@ -4071,6 +4074,17 @@ components:
|
|
|
4071
4074
|
Set this ONLY when the user explicitly asks to group flows into named sections (e.g.
|
|
4072
4075
|
"create the integration with flow groups Order Intake and Fulfillment").
|
|
4073
4076
|
Otherwise omit it — do not synthesize groupings the user did not ask for.
|
|
4077
|
+
- |-
|
|
4078
|
+
`Unassigned` is a reserved name (422 `invalid_flowgrouping_name`) and names and `_id`s
|
|
4079
|
+
must be unique within the integration (422 `duplicate_field`) — on POST, PUT and PATCH
|
|
4080
|
+
alike.
|
|
4081
|
+
- |-
|
|
4082
|
+
Removing a grouping that still has member flows returns success but leaves the
|
|
4083
|
+
grouping in place; move those flows with `PUT /v1/flows/updateFlowGrouping` first.
|
|
4084
|
+
- |-
|
|
4085
|
+
`POST` and `PUT` answer with the saved integration, so a new grouping's `_id` is
|
|
4086
|
+
in the response; `PATCH` answers `204` with no body, so after a patch the `_id`
|
|
4087
|
+
comes from a follow-up `GET`.
|
|
4074
4088
|
items:
|
|
4075
4089
|
type: object
|
|
4076
4090
|
additionalProperties: true
|
|
@@ -4478,11 +4492,11 @@ components:
|
|
|
4478
4492
|
type: object
|
|
4479
4493
|
description: Request body for cloning an integration.
|
|
4480
4494
|
required:
|
|
4481
|
-
-
|
|
4495
|
+
- name
|
|
4482
4496
|
properties:
|
|
4483
4497
|
name:
|
|
4484
4498
|
type: string
|
|
4485
|
-
description: Name for the cloned integration.
|
|
4499
|
+
description: Name for the cloned integration.
|
|
4486
4500
|
examples:
|
|
4487
4501
|
- Clone - Integration 1
|
|
4488
4502
|
description:
|
|
@@ -4506,6 +4520,9 @@ components:
|
|
|
4506
4520
|
Mapping of original connection _ids to replacement connection _ids.
|
|
4507
4521
|
Keys are source connection _ids on the original integration; values
|
|
4508
4522
|
are target connection _ids in the destination environment.
|
|
4523
|
+
Required when the source integration has registered connections — omitting it or
|
|
4524
|
+
sending an empty map fails with 400 `invalid_connectionMap`. Map a connection to
|
|
4525
|
+
itself to reuse it in the clone; omit the map when the source has none.
|
|
4509
4526
|
additionalProperties:
|
|
4510
4527
|
type: string
|
|
4511
4528
|
example:
|
package/dist/marketplace.yml
CHANGED
|
@@ -48,12 +48,14 @@ paths:
|
|
|
48
48
|
an integration or an MCP server and therefore which install route to
|
|
49
49
|
call. Entries have no `docType`.
|
|
50
50
|
|
|
51
|
-
|
|
52
|
-
|
|
51
|
+
Results are sorted by `name` unless `sort_by` says otherwise, and the
|
|
52
|
+
list may be paginated: follow the `Link` header's `rel="next"` URL until
|
|
53
|
+
the header is absent. Templates that reference an application no
|
|
53
54
|
longer available on the platform are left out, so this list can be
|
|
54
55
|
shorter than the `docType: Template` subset of
|
|
55
56
|
`POST /v1/published/combined`.
|
|
56
57
|
parameters:
|
|
58
|
+
- $ref: '#/components/parameters/After'
|
|
57
59
|
- name: sort_by
|
|
58
60
|
in: query
|
|
59
61
|
required: false
|
|
@@ -74,6 +76,14 @@ paths:
|
|
|
74
76
|
responses:
|
|
75
77
|
'200':
|
|
76
78
|
description: Array of Template marketplace entries.
|
|
79
|
+
headers:
|
|
80
|
+
Link:
|
|
81
|
+
description: |-
|
|
82
|
+
RFC 5988 pagination links. When more pages remain, includes a
|
|
83
|
+
`<...>; rel="next"` entry with an `after` cursor; absent on the
|
|
84
|
+
final page.
|
|
85
|
+
schema:
|
|
86
|
+
type: string
|
|
77
87
|
content:
|
|
78
88
|
application/json:
|
|
79
89
|
schema:
|
|
@@ -110,7 +120,7 @@ paths:
|
|
|
110
120
|
'204':
|
|
111
121
|
description: No published templates are available.
|
|
112
122
|
'400':
|
|
113
|
-
description: '`sort_by` is not one of the accepted keys.'
|
|
123
|
+
description: '`sort_by` is not one of the accepted keys, or `after` is not a valid pagination cursor.'
|
|
114
124
|
content:
|
|
115
125
|
application/json:
|
|
116
126
|
schema:
|
|
@@ -121,6 +131,11 @@ paths:
|
|
|
121
131
|
errors:
|
|
122
132
|
- code: invalid_query_param
|
|
123
133
|
message: The query parameter "sort_by" has invalid value.
|
|
134
|
+
invalidCursor:
|
|
135
|
+
value:
|
|
136
|
+
errors:
|
|
137
|
+
- code: invalid_query_param
|
|
138
|
+
message: Please provide a valid cursor(i.e after or before query param) to encode or decode.
|
|
124
139
|
'401':
|
|
125
140
|
$ref: '#/components/responses/401-unauthorized'
|
|
126
141
|
/v1/templates/{_id}/preview:
|
|
@@ -256,9 +271,22 @@ paths:
|
|
|
256
271
|
use `POST /v1/published/combined` instead. Entries here have no
|
|
257
272
|
`docType` field -- that discriminator only appears in the combined
|
|
258
273
|
endpoint's response.
|
|
274
|
+
|
|
275
|
+
The list may be paginated: follow the `Link` header's `rel="next"` URL
|
|
276
|
+
until the header is absent.
|
|
277
|
+
parameters:
|
|
278
|
+
- $ref: '#/components/parameters/After'
|
|
259
279
|
responses:
|
|
260
280
|
'200':
|
|
261
281
|
description: Array of Integration App (Connector) marketplace entries.
|
|
282
|
+
headers:
|
|
283
|
+
Link:
|
|
284
|
+
description: |-
|
|
285
|
+
RFC 5988 pagination links. When more pages remain, includes a
|
|
286
|
+
`<...>; rel="next"` entry with an `after` cursor; absent on the
|
|
287
|
+
final page.
|
|
288
|
+
schema:
|
|
289
|
+
type: string
|
|
262
290
|
content:
|
|
263
291
|
application/json:
|
|
264
292
|
schema:
|
|
@@ -283,6 +311,18 @@ paths:
|
|
|
283
311
|
trialEnabled: false
|
|
284
312
|
lastModified: '2026-04-22T14:23:56.528Z'
|
|
285
313
|
numInstalls: 1938
|
|
314
|
+
'400':
|
|
315
|
+
description: '`after` is not a valid pagination cursor.'
|
|
316
|
+
content:
|
|
317
|
+
application/json:
|
|
318
|
+
schema:
|
|
319
|
+
$ref: '#/components/schemas/Error'
|
|
320
|
+
examples:
|
|
321
|
+
invalidCursor:
|
|
322
|
+
value:
|
|
323
|
+
errors:
|
|
324
|
+
- code: invalid_query_param
|
|
325
|
+
message: Please provide a valid cursor(i.e after or before query param) to encode or decode.
|
|
286
326
|
'401':
|
|
287
327
|
$ref: '#/components/responses/401-unauthorized'
|
|
288
328
|
/v1/published/combined:
|
|
@@ -293,11 +333,12 @@ paths:
|
|
|
293
333
|
- Marketplace
|
|
294
334
|
summary: List Integration Apps and Templates together
|
|
295
335
|
description: |-
|
|
296
|
-
Returns a unified array of
|
|
336
|
+
Returns a unified array of marketplace content — both Integration
|
|
297
337
|
Apps (`docType: Connector`) and Templates (`docType: Template`). Each
|
|
298
338
|
entry carries the `docType` discriminator so callers can partition, and
|
|
299
339
|
every Template entry also carries `type` (`integration` or `mcpserver`),
|
|
300
|
-
which decides its install route.
|
|
340
|
+
which decides its install route. The list may be paginated: follow the
|
|
341
|
+
`Link` header's `rel="next"` URL until the header is absent.
|
|
301
342
|
|
|
302
343
|
Despite being a POST, this is a **read-only, safe** endpoint — the body
|
|
303
344
|
is an empty `{}` in the default CLI invocation. POST is used purely to
|
|
@@ -308,6 +349,7 @@ paths:
|
|
|
308
349
|
the body. For Connector-only listings, `GET /v1/published` is
|
|
309
350
|
lighter.
|
|
310
351
|
parameters:
|
|
352
|
+
- $ref: '#/components/parameters/After'
|
|
311
353
|
- name: sort_by
|
|
312
354
|
in: query
|
|
313
355
|
required: false
|
|
@@ -342,6 +384,14 @@ paths:
|
|
|
342
384
|
responses:
|
|
343
385
|
'200':
|
|
344
386
|
description: Array of marketplace entries, both Connectors and Templates.
|
|
387
|
+
headers:
|
|
388
|
+
Link:
|
|
389
|
+
description: |-
|
|
390
|
+
RFC 5988 pagination links. When more pages remain, includes a
|
|
391
|
+
`<...>; rel="next"` entry with an `after` cursor; absent on the
|
|
392
|
+
final page.
|
|
393
|
+
schema:
|
|
394
|
+
type: string
|
|
345
395
|
content:
|
|
346
396
|
application/json:
|
|
347
397
|
schema:
|
|
@@ -380,7 +430,7 @@ paths:
|
|
|
380
430
|
'400':
|
|
381
431
|
description: |-
|
|
382
432
|
Typically `invalid_query_param` when `sort_by` is outside the
|
|
383
|
-
accepted enum.
|
|
433
|
+
accepted enum or `after` is not a valid pagination cursor.
|
|
384
434
|
content:
|
|
385
435
|
application/json:
|
|
386
436
|
schema:
|
|
@@ -391,6 +441,11 @@ paths:
|
|
|
391
441
|
errors:
|
|
392
442
|
- code: invalid_query_param
|
|
393
443
|
message: The query parameter "sort_by" has invalid value.
|
|
444
|
+
invalidCursor:
|
|
445
|
+
value:
|
|
446
|
+
errors:
|
|
447
|
+
- code: invalid_query_param
|
|
448
|
+
message: Please provide a valid cursor(i.e after or before query param) to encode or decode.
|
|
394
449
|
'401':
|
|
395
450
|
$ref: '#/components/responses/401-unauthorized'
|
|
396
451
|
'415':
|
|
@@ -413,6 +468,16 @@ components:
|
|
|
413
468
|
bearerAuth:
|
|
414
469
|
type: http
|
|
415
470
|
scheme: bearer
|
|
471
|
+
parameters:
|
|
472
|
+
After:
|
|
473
|
+
name: after
|
|
474
|
+
in: query
|
|
475
|
+
required: false
|
|
476
|
+
description: |-
|
|
477
|
+
Opaque cursor for forward pagination. Pass the value from the `Link`
|
|
478
|
+
response header (`rel="next"`) to fetch the next page.
|
|
479
|
+
schema:
|
|
480
|
+
type: string
|
|
416
481
|
schemas:
|
|
417
482
|
MarketplaceEntry:
|
|
418
483
|
type: object
|
package/dist/notification.yml
CHANGED
|
@@ -203,6 +203,22 @@ paths:
|
|
|
203
203
|
$ref: '#/components/responses/400-bad-request'
|
|
204
204
|
'401':
|
|
205
205
|
$ref: '#/components/responses/401-unauthorized'
|
|
206
|
+
'403':
|
|
207
|
+
description: |-
|
|
208
|
+
A `subscribedByUserEmail` value matches no user in the account, so the whole
|
|
209
|
+
request is rejected with `invalid_access`, including items that name valid
|
|
210
|
+
users. The message mentions monitor access even when the caller has full access.
|
|
211
|
+
content:
|
|
212
|
+
application/json:
|
|
213
|
+
schema:
|
|
214
|
+
$ref: '#/components/schemas/Error'
|
|
215
|
+
examples:
|
|
216
|
+
unknownEmail:
|
|
217
|
+
summary: subscribedByUserEmail matches no account user
|
|
218
|
+
value:
|
|
219
|
+
errors:
|
|
220
|
+
- code: invalid_access
|
|
221
|
+
message: You can not subscribe notifications for others with monitor access. Please provide your email address while subscribing.
|
|
206
222
|
components:
|
|
207
223
|
securitySchemes:
|
|
208
224
|
bearerAuth:
|
|
@@ -463,7 +479,8 @@ components:
|
|
|
463
479
|
format: email
|
|
464
480
|
description: |-
|
|
465
481
|
Email of the user whose subscription is being modified. Must match a
|
|
466
|
-
user in the account
|
|
482
|
+
user in the account: one unknown email fails the entire request with
|
|
483
|
+
**403** `invalid_access`, not just its own item.
|
|
467
484
|
examples:
|
|
468
485
|
- jane@example.com
|
|
469
486
|
required:
|
package/dist/tool.yml
CHANGED
|
@@ -710,14 +710,26 @@ paths:
|
|
|
710
710
|
- Tools
|
|
711
711
|
summary: Clone a tool
|
|
712
712
|
description: |-
|
|
713
|
-
Creates a copy of a tool in the target integration
|
|
714
|
-
|
|
715
|
-
places it in the source
|
|
713
|
+
Creates a copy of a tool in the target integration, together with the export and
|
|
714
|
+
import steps it references, and returns a manifest of the resources the clone
|
|
715
|
+
created. The clone records its lineage in `_sourceId`, which places it in the source
|
|
716
|
+
tool's clone family.
|
|
716
717
|
|
|
717
718
|
The target integration is never inferred from the source tool — pass the source
|
|
718
|
-
tool's own integration id to clone in place.
|
|
719
|
+
tool's own integration id to clone in place. When any step of the tool references a
|
|
720
|
+
connection, `connectionMap` is required as well: every connection the tool uses must
|
|
721
|
+
appear as a key, mapped to itself to reuse it or to another connection of the account
|
|
722
|
+
to repoint the cloned steps. A tool with no connection-bearing steps clones without it.
|
|
719
723
|
|
|
720
|
-
Use `GET /v1/tools/{_id}/clone/preview` first to see what the clone would create
|
|
724
|
+
Use `GET /v1/tools/{_id}/clone/preview` first to see what the clone would create —
|
|
725
|
+
each `Connection` object in the preview is a key `connectionMap` must carry.
|
|
726
|
+
x-celigo-ai-guidance:
|
|
727
|
+
- |-
|
|
728
|
+
Build `connectionMap` from the clone preview: one key per `Connection` object it lists,
|
|
729
|
+
each mapped to its own id unless the user asked to repoint the clone. Omitting the map
|
|
730
|
+
(or sending `{}`) when a step references a connection fails with 400
|
|
731
|
+
`invalid_connectionMap`; a key the tool does not reference, or a value that is not a
|
|
732
|
+
connection in the account, fails with 422 `invalid_connectionId` and nothing is created.
|
|
721
733
|
parameters:
|
|
722
734
|
- name: _id
|
|
723
735
|
in: path
|
|
@@ -750,15 +762,37 @@ paths:
|
|
|
750
762
|
description: Name for the cloned tool. Defaults to `Clone - <source tool name>` when omitted.
|
|
751
763
|
examples:
|
|
752
764
|
- Customer enrichment tool (copy)
|
|
765
|
+
connectionMap:
|
|
766
|
+
type: object
|
|
767
|
+
description: |-
|
|
768
|
+
Connection ids the tool's steps reference, each mapped to the connection the
|
|
769
|
+
cloned steps use instead. Required when any step references a connection —
|
|
770
|
+
omitted or empty, the clone fails with 400 `invalid_connectionMap`. Map an id
|
|
771
|
+
to itself to keep the connection; every key must be a connection the tool
|
|
772
|
+
references and every value a connection in the account.
|
|
773
|
+
additionalProperties:
|
|
774
|
+
type: string
|
|
775
|
+
format: objectId
|
|
776
|
+
examples:
|
|
777
|
+
- 6ac1ef4a38b24d95ffac2545: 6ac1ef4a38b24d95ffac2545
|
|
753
778
|
examples:
|
|
754
779
|
default:
|
|
755
|
-
summary: Clone into the same integration
|
|
780
|
+
summary: Clone a tool with no connection-bearing steps into the same integration
|
|
756
781
|
value:
|
|
757
782
|
_integrationId: 6a429af50547257e3301246c
|
|
758
783
|
name: Customer enrichment tool (copy)
|
|
784
|
+
with_connection_map:
|
|
785
|
+
summary: Clone a tool whose lookup step uses a connection, reusing that connection
|
|
786
|
+
value:
|
|
787
|
+
_integrationId: 6a429af50547257e3301246c
|
|
788
|
+
name: Customer enrichment tool (copy)
|
|
789
|
+
connectionMap:
|
|
790
|
+
6ac1ef4a38b24d95ffac2545: 6ac1ef4a38b24d95ffac2545
|
|
759
791
|
responses:
|
|
760
792
|
'201':
|
|
761
|
-
description:
|
|
793
|
+
description: |-
|
|
794
|
+
The clone was created. Returns a manifest of every resource the clone created —
|
|
795
|
+
the new tool plus the export and import steps it copied.
|
|
762
796
|
content:
|
|
763
797
|
application/json:
|
|
764
798
|
schema:
|
|
@@ -769,7 +803,7 @@ paths:
|
|
|
769
803
|
properties:
|
|
770
804
|
model:
|
|
771
805
|
type: string
|
|
772
|
-
description: Model name of the created resource (e.g. `Tool`).
|
|
806
|
+
description: Model name of the created resource (e.g. `Tool`, `Export`, `Import`).
|
|
773
807
|
examples:
|
|
774
808
|
- Tool
|
|
775
809
|
_id:
|
|
@@ -780,12 +814,22 @@ paths:
|
|
|
780
814
|
- 6a869d2f3ae8ccee42a45c44
|
|
781
815
|
examples:
|
|
782
816
|
default:
|
|
783
|
-
summary: Clone created a tool
|
|
817
|
+
summary: Clone created a tool with no steps
|
|
784
818
|
value:
|
|
785
819
|
- model: Tool
|
|
786
820
|
_id: 6a869d2f3ae8ccee42a45c44
|
|
821
|
+
with_steps:
|
|
822
|
+
summary: Clone created a tool and the lookup export it references
|
|
823
|
+
value:
|
|
824
|
+
- model: Export
|
|
825
|
+
_id: 6ac1ef8a38b24d95ffac2d64
|
|
826
|
+
- model: Tool
|
|
827
|
+
_id: 6ac1ef8a38b24d95ffac2d78
|
|
787
828
|
'400':
|
|
788
|
-
description:
|
|
829
|
+
description: |-
|
|
830
|
+
The body omits `_integrationId` (`required_field_missing`), or the tool's steps
|
|
831
|
+
reference a connection and `connectionMap` is missing or empty
|
|
832
|
+
(`invalid_connectionMap`).
|
|
789
833
|
content:
|
|
790
834
|
application/json:
|
|
791
835
|
schema:
|
|
@@ -797,10 +841,40 @@ paths:
|
|
|
797
841
|
errors:
|
|
798
842
|
- code: required_field_missing
|
|
799
843
|
message: 'required field: _integrationId is missing'
|
|
844
|
+
missingConnectionMap:
|
|
845
|
+
summary: A step references a connection but no connectionMap was sent
|
|
846
|
+
value:
|
|
847
|
+
errors:
|
|
848
|
+
- code: invalid_connectionMap
|
|
849
|
+
message: The resource which you are trying to create requires a connectionMap.
|
|
800
850
|
'401':
|
|
801
851
|
$ref: '#/components/responses/401-unauthorized'
|
|
802
852
|
'404':
|
|
803
853
|
$ref: '#/components/responses/404-not-found'
|
|
854
|
+
'422':
|
|
855
|
+
description: |-
|
|
856
|
+
`connectionMap` does not match the tool: a value is not a connection in the account,
|
|
857
|
+
or a key is not a connection the tool's steps reference (the unmapped connection is
|
|
858
|
+
reported alongside). Nothing is created.
|
|
859
|
+
content:
|
|
860
|
+
application/json:
|
|
861
|
+
schema:
|
|
862
|
+
$ref: '#/components/schemas/Error'
|
|
863
|
+
examples:
|
|
864
|
+
unknownTargetConnection:
|
|
865
|
+
summary: A mapped value is not a connection in the account
|
|
866
|
+
value:
|
|
867
|
+
errors:
|
|
868
|
+
- code: invalid_connectionId
|
|
869
|
+
message: 'The _connectionId provided for the key ''6ac1ef4a38b24d95ffac2545'': ''000000000000000000000001'' is invalid.'
|
|
870
|
+
keyNotReferenced:
|
|
871
|
+
summary: A key is not one of the tool's connections, so the real one is unmapped
|
|
872
|
+
value:
|
|
873
|
+
errors:
|
|
874
|
+
- code: invalid_connectionId
|
|
875
|
+
message: The key '000000000000000000000001' in connectionMap doesn't match with any of the _id's of the connection documents.
|
|
876
|
+
- code: invalid_connectionId
|
|
877
|
+
message: 'The _connectionId provided for the key ''6ac1ef4a38b24d95ffac2545'': '''' is invalid.'
|
|
804
878
|
/v1/tools/{_id}/clone/preview:
|
|
805
879
|
get:
|
|
806
880
|
x-internal: false
|
|
@@ -30365,7 +30439,10 @@ components:
|
|
|
30365
30439
|
- '{"records": [{"id": "{{record.id}}", "exported": true}]}'
|
|
30366
30440
|
paging:
|
|
30367
30441
|
type: object
|
|
30368
|
-
description:
|
|
30442
|
+
description: |-
|
|
30443
|
+
Controls how the export requests subsequent pages when the API returns multi-page responses. The `method` field determines which companion fields are required and how each next page is requested. For the page, skip, and token methods, reference the matching pagination variable (`{{export.http.paging.page}}`, `{{export.http.paging.skip}}`, or `{{export.http.paging.token}}`) in the relative URI or request body — misconfigured pagination is a common cause of incomplete data retrieval.
|
|
30444
|
+
|
|
30445
|
+
When this export is the first lookup of a builder-mode API with `pagination.enabled` set, it is that API's volume driver: saving the export (even unchanged) invalidates the API's issued cursors, so a caller mid-walk gets an empty final page, and removing `paging` is accepted on save but makes every call to the API fail with `400 api_pagination_source_not_paged` until paging is restored or the API's flag is turned off.
|
|
30369
30446
|
x-celigo-ai-guidance:
|
|
30370
30447
|
- Configuration object for navigating through multi-page API responses.
|
|
30371
30448
|
- |-
|
package/package.json
CHANGED