@celigo/api-specs 0.2.166 → 0.2.168

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.
@@ -41,6 +41,14 @@ paths:
41
41
  `feature_not_enabled`. Every account with the feature has at least
42
42
  one environment (Production). The full list is returned in a single
43
43
  unpaginated response.
44
+
45
+ Listing works from production for the account owner and administrators.
46
+ Outside production, only an API token created in that environment can
47
+ list (it acts as the environment's own user); a workspace user working
48
+ in a non-production environment, signed in or with a personal access
49
+ token, gets 403 `access_restricted`. Every other environment operation
50
+ is production-only and answers that 403 to any caller outside
51
+ production.
44
52
  responses:
45
53
  '200':
46
54
  description: List of environments.
@@ -70,8 +78,39 @@ paths:
70
78
  createdAt: '2025-11-12T22:28:22.433Z'
71
79
  '204':
72
80
  description: No environments exist in the account
81
+ '400':
82
+ description: The account doesn't have the environments feature.
83
+ content:
84
+ application/json:
85
+ schema:
86
+ $ref: '#/components/schemas/Error'
87
+ example:
88
+ errors:
89
+ - code: feature_not_enabled
90
+ message: The environment feature is not enabled for the account.
73
91
  '401':
74
92
  $ref: '#/components/responses/401-unauthorized'
93
+ '403':
94
+ description: |-
95
+ A manage or monitor user in production, or a workspace user (signed in, or with a
96
+ personal access token) working in a non-production environment.
97
+ content:
98
+ application/json:
99
+ schema:
100
+ $ref: '#/components/schemas/Error'
101
+ examples:
102
+ nonProductionEnvironment:
103
+ summary: A workspace user working in a non-production environment
104
+ value:
105
+ errors:
106
+ - code: access_restricted
107
+ message: This request can only be made through the production environment.
108
+ notAdministrator:
109
+ summary: A manage or monitor user
110
+ value:
111
+ errors:
112
+ - code: access_restricted
113
+ message: You don't have the right to perform this action. Please contact your account administrator to receive manage permission for this account.
75
114
  post:
76
115
  x-internal: false
77
116
  summary: Create an environment
@@ -122,6 +161,8 @@ paths:
122
161
  $ref: '#/components/responses/400-bad-request'
123
162
  '401':
124
163
  $ref: '#/components/responses/401-unauthorized'
164
+ '403':
165
+ $ref: '#/components/responses/403-production-only'
125
166
  '422':
126
167
  $ref: '#/components/responses/422-unprocessable-entity'
127
168
  /v1/environments/{_id}:
@@ -174,6 +215,8 @@ paths:
174
215
  createdAt: '2025-11-12T22:28:22.433Z'
175
216
  '401':
176
217
  $ref: '#/components/responses/401-unauthorized'
218
+ '403':
219
+ $ref: '#/components/responses/403-production-only'
177
220
  '404':
178
221
  $ref: '#/components/responses/404-not-found'
179
222
  put:
@@ -237,6 +280,8 @@ paths:
237
280
  $ref: '#/components/responses/400-bad-request'
238
281
  '401':
239
282
  $ref: '#/components/responses/401-unauthorized'
283
+ '403':
284
+ $ref: '#/components/responses/403-production-only'
240
285
  '404':
241
286
  $ref: '#/components/responses/404-not-found'
242
287
  '422':
@@ -286,6 +331,8 @@ paths:
286
331
  message: Production environment cannot be disabled.
287
332
  '401':
288
333
  $ref: '#/components/responses/401-unauthorized'
334
+ '403':
335
+ $ref: '#/components/responses/403-production-only'
289
336
  '404':
290
337
  $ref: '#/components/responses/404-not-found'
291
338
  '422':
@@ -297,7 +344,7 @@ paths:
297
344
  example:
298
345
  errors:
299
346
  - code: resolve_pending_invitation
300
- message: Please resolve pending invitations before disabling this environment.
347
+ message: Please resolve any pending user invitations to disable the environment.
301
348
  components:
302
349
  securitySchemes:
303
350
  bearerAuth:
@@ -455,15 +502,6 @@ components:
455
502
  type: boolean
456
503
  readOnly: true
457
504
  description: When true, the environment has been migrated from legacy sandbox. Present only on enterprise accounts.
458
- Request:
459
- type: object
460
- description: Fields for creating or updating an environment.
461
- x-celigo-ai-guidance:
462
- - Fields that can be sent when creating or updating a environment
463
- required:
464
- - name
465
- allOf:
466
- - $ref: '#/components/schemas/EnvironmentBase'
467
505
  Error:
468
506
  type: object
469
507
  description: Standard error response envelope returned by integrator.io APIs.
@@ -504,6 +542,15 @@ components:
504
542
  - message
505
543
  required:
506
544
  - errors
545
+ Request:
546
+ type: object
547
+ description: Fields for creating or updating an environment.
548
+ x-celigo-ai-guidance:
549
+ - Fields that can be sent when creating or updating a environment
550
+ required:
551
+ - name
552
+ allOf:
553
+ - $ref: '#/components/schemas/EnvironmentBase'
507
554
  responses:
508
555
  401-unauthorized:
509
556
  description: |-
@@ -552,6 +599,20 @@ components:
552
599
  errors:
553
600
  - code: invalid_request
554
601
  message: The request body failed validation.
602
+ 403-production-only:
603
+ description: |-
604
+ The request was made from a non-production environment -- with a token created there, or
605
+ by a workspace user working there. Environments are managed from production only.
606
+ content:
607
+ application/json:
608
+ schema:
609
+ $ref: '#/components/schemas/Error'
610
+ examples:
611
+ nonProductionEnvironment:
612
+ value:
613
+ errors:
614
+ - code: access_restricted
615
+ message: This request can only be made through the production environment.
555
616
  422-unprocessable-entity:
556
617
  description: |
557
618
  Unprocessable entity. The request was well-formed but was unable to be followed due to semantic errors.
package/dist/export.yml CHANGED
@@ -5580,7 +5580,10 @@ components:
5580
5580
  description: |-
5581
5581
  When true, a file whose records partially fail parsing against the file definition
5582
5582
  still emits the records that did parse, instead of failing the entire file. Applies to
5583
- file-definition (fixed-width, EDI) parsing only.
5583
+ file-definition (fixed-width, EDI) parsing only. For X12 and EDIFACT the unit is the
5584
+ transaction set (ST–SE, UNH–UNT), and it takes effect only with an EDI profile linked:
5585
+ a failed set is set aside and reported as an error while the file's other sets go on
5586
+ as records. Without this flag, one failed set fails the whole file.
5584
5587
  examples:
5585
5588
  - true
5586
5589
  - false
@@ -1163,8 +1163,12 @@ components:
1163
1163
  Primarily relevant for EDI EDIFACT format.
1164
1164
  skipEDIValidation:
1165
1165
  type: boolean
1166
+ default: true
1166
1167
  description: |
1167
- Whether to skip EDI structural validation during parsing.
1168
+ Whether to skip EDI element validation during parsing: element lengths, data types,
1169
+ code lists, mandatory elements and element relationships. Omitted means skipped, so
1170
+ these checks run only when it is `false`. Profile checks (`skipEDIProfileValidation`)
1171
+ and missing mandatory segments are separate and still apply.
1168
1172
  skipEDIProfileValidation:
1169
1173
  type: boolean
1170
1174
  default: false
@@ -1188,6 +1192,11 @@ components:
1188
1192
  `maxOccurrence` is 1 or unset, matches only the first row: in fixed-width and delimited
1189
1193
  files the parser drops the rest without an error, and an X12 parse fails at the next row,
1190
1194
  naming a mandatory segment as missing.
1195
+ - |-
1196
+ Cloning an export that uses a file definition also creates a new file definition, with the
1197
+ same name, and points the cloned export at it: the export's clone preview lists it as a
1198
+ `FileDefinition` object. Two definitions with one name can follow, so tell them apart by
1199
+ `_id`.
1191
1200
  ResourceResponse:
1192
1201
  type: object
1193
1202
  description: Response
@@ -1024,97 +1024,6 @@ paths:
1024
1024
  errors:
1025
1025
  - code: invalid_ref
1026
1026
  message: Integration not found.
1027
- /v1/integrations/{_id}/clonefamily:
1028
- get:
1029
- x-internal: false
1030
- operationId: listIntegrationCloneFamily
1031
- tags:
1032
- - Integrations
1033
- summary: List an integration's clone family
1034
- description: |-
1035
- Returns every member of the integration's clone family -- the original plus every clone
1036
- (recursively, across environments). Used by ILM to decide which integrations can be pull/push
1037
- sources or targets for the current integration.
1038
-
1039
- This endpoint requires the `integrator-ashareid` header to establish a shared-account context.
1040
- For simpler clone-relationship lookups, the integration's own `_sourceId` field points to the
1041
- parent it was cloned from, and `GET /v1/integrations?_sourceId=<id>` lists the children.
1042
- parameters:
1043
- - name: integrator-ashareid
1044
- in: header
1045
- required: true
1046
- description: |-
1047
- Account-share id that scopes the request to a specific shared-account context. The bearer
1048
- token's user must be the `sharedWithUser` of this ashare.
1049
- schema:
1050
- type: string
1051
- format: objectId
1052
- examples:
1053
- - 6798f4dc43db9184f4bc8ee0
1054
- - name: _id
1055
- in: path
1056
- required: true
1057
- description: Integration id.
1058
- schema:
1059
- type: string
1060
- format: objectId
1061
- x-celigo-refModel: integrations
1062
- examples:
1063
- - 6842261335b64c0bcb308e4f
1064
- responses:
1065
- '200':
1066
- description: Clone family members.
1067
- content:
1068
- application/json:
1069
- schema:
1070
- $ref: '#/components/schemas/CloneFamilyResponse'
1071
- examples:
1072
- family:
1073
- summary: Original integration plus one clone in another environment
1074
- value:
1075
- - _id: 6842261335b64c0bcb308e4f
1076
- name: Shopify → NetSuite Orders
1077
- - _id: 68f52162f00a35a1b26eaafb
1078
- name: Clone - Shopify → NetSuite Orders
1079
- _envId: 67b123456789abcdef012345
1080
- '401':
1081
- $ref: '#/components/responses/401-unauthorized'
1082
- '403':
1083
- description: |-
1084
- Either the `integrator-ashareid` header is malformed (code: `invalid_header_value`) or it
1085
- was omitted entirely (code: `get_not_allowed`, "GET resource not allowed for the given
1086
- model.").
1087
- content:
1088
- application/json:
1089
- schema:
1090
- $ref: '#/components/schemas/Error'
1091
- examples:
1092
- get_not_allowed:
1093
- summary: Header omitted entirely
1094
- value:
1095
- errors:
1096
- - code: get_not_allowed
1097
- message: GET resource not allowed for the given model.
1098
- invalid_header_value:
1099
- summary: Header malformed (not a 24-char hex id)
1100
- value:
1101
- errors:
1102
- - code: invalid_header_value
1103
- message: The value provided for request header Integrator-AShareId is invalid.
1104
- '404':
1105
- description: |-
1106
- Integration unknown, or the `integrator-ashareid` references a share whose `sharedWithUser`
1107
- isn't the bearer token's user (code: `access_restricted`).
1108
- content:
1109
- application/json:
1110
- schema:
1111
- $ref: '#/components/schemas/Error'
1112
- examples:
1113
- access_restricted:
1114
- value:
1115
- errors:
1116
- - code: access_restricted
1117
- message: Your access to an integrator.io environment or account has been disabled. For more information, contact account administrator.
1118
1027
  /v1/integrations/{_id}/flows:
1119
1028
  get:
1120
1029
  x-internal: false
@@ -2575,103 +2484,6 @@ paths:
2575
2484
  $ref: '#/components/responses/401-unauthorized'
2576
2485
  '404':
2577
2486
  $ref: '#/components/responses/404-not-found'
2578
- /v1/integrations/{_id}/iLMIgnore:
2579
- get:
2580
- x-internal: false
2581
- operationId: getIntegrationILMIgnoreFields
2582
- tags:
2583
- - Integrations
2584
- summary: List available ILM ignore fields
2585
- description: |-
2586
- Returns the catalog of *available* fields that can be ignored when pulling changes between
2587
- related integrations. Keys are lowercase resource types (`integration`, `flow`, `export`,
2588
- `import`, `connection`, `script`, ...); values are arrays of dot-path field names that can be
2589
- excluded from an ILM pull/revert. The key set is platform-driven — treat the response, not
2590
- the example list, as the authoritative catalog.
2591
-
2592
- This endpoint requires the `integrator-ashareid` header to establish a shared-account context.
2593
- The current ignore configuration lives on the integration's `iLMIgnore` field (readable via
2594
- `GET /v1/integrations/{_id}`); this endpoint only returns the menu of what *can* be ignored.
2595
- To change the configuration, PATCH the integration with
2596
- `[{op:"replace", path:"/iLMIgnore", value:{...}}]`.
2597
- parameters:
2598
- - name: integrator-ashareid
2599
- in: header
2600
- required: true
2601
- description: |-
2602
- Account-share id that scopes the request to a specific shared-account context. The bearer
2603
- token's user must be the `sharedWithUser` of this ashare.
2604
- schema:
2605
- type: string
2606
- format: objectId
2607
- examples:
2608
- - 6798f4dc43db9184f4bc8ee0
2609
- - name: _id
2610
- in: path
2611
- required: true
2612
- description: Integration id.
2613
- schema:
2614
- type: string
2615
- format: objectId
2616
- x-celigo-refModel: integrations
2617
- examples:
2618
- - 6842261335b64c0bcb308e4f
2619
- responses:
2620
- '200':
2621
- description: Available ignore fields per resource type.
2622
- content:
2623
- application/json:
2624
- schema:
2625
- $ref: '#/components/schemas/ILMIgnoreResponse'
2626
- examples:
2627
- default:
2628
- value:
2629
- integration:
2630
- - name
2631
- - description
2632
- flow:
2633
- - disabled
2634
- - name
2635
- export:
2636
- - name
2637
- - http.body
2638
- '401':
2639
- $ref: '#/components/responses/401-unauthorized'
2640
- '403':
2641
- description: |-
2642
- Either the `integrator-ashareid` header is malformed (code: `invalid_header_value`) or it
2643
- was omitted entirely (code: `get_not_allowed`).
2644
- content:
2645
- application/json:
2646
- schema:
2647
- $ref: '#/components/schemas/Error'
2648
- examples:
2649
- get_not_allowed:
2650
- summary: Header omitted entirely
2651
- value:
2652
- errors:
2653
- - code: get_not_allowed
2654
- message: GET resource not allowed for the given model.
2655
- invalid_header_value:
2656
- summary: Header malformed (not a 24-char hex id)
2657
- value:
2658
- errors:
2659
- - code: invalid_header_value
2660
- message: The value provided for request header Integrator-AShareId is invalid.
2661
- '404':
2662
- description: |-
2663
- Integration unknown, or the `integrator-ashareid` references a share whose `sharedWithUser`
2664
- isn't the bearer token's user (code: `access_restricted`).
2665
- content:
2666
- application/json:
2667
- schema:
2668
- $ref: '#/components/schemas/Error'
2669
- examples:
2670
- access_restricted:
2671
- value:
2672
- errors:
2673
- - code: access_restricted
2674
- message: Your access to an integrator.io environment or account has been disabled. For more information, contact account administrator.
2675
2487
  /v1/integrations/{_id}/template:
2676
2488
  get:
2677
2489
  x-internal: false
@@ -4957,36 +4769,6 @@ components:
4957
4769
  type: string
4958
4770
  examples:
4959
4771
  - '6044134138'
4960
- CloneFamilyResponse:
4961
- type: array
4962
- description: |-
4963
- Members of an integration's clone family — the original integration plus every clone (including
4964
- clones of clones, across environments). Used by ILM to decide which integrations can pull from or
4965
- push to the current one.
4966
- items:
4967
- type: object
4968
- description: One integration in the clone family.
4969
- properties:
4970
- _id:
4971
- type: string
4972
- format: objectId
4973
- description: Integration id.
4974
- x-celigo-refModel: integrations
4975
- examples:
4976
- - 6842261335b64c0bcb308e4f
4977
- name:
4978
- type: string
4979
- description: Display name of the integration.
4980
- examples:
4981
- - Shopify → NetSuite Orders
4982
- _envId:
4983
- type: string
4984
- format: objectId
4985
- x-celigo-refModel: environments
4986
- examples:
4987
- - 67b123456789abcdef012345
4988
- description: Environment id the integration belongs to.
4989
- additionalProperties: true
4990
4772
  LookupCacheBase:
4991
4773
  type: object
4992
4774
  description: Writable fields shared by the request and response schemas.
@@ -5345,38 +5127,6 @@ components:
5345
5127
  - To register an existing topic instead, use `PUT /v1/integrations/{_id}/topics/{_topicId}/register`.
5346
5128
  examples:
5347
5129
  - - 6ab1f4a138d7733b45998d99
5348
- ILMIgnoreResponse:
5349
- type: object
5350
- description: |-
5351
- Catalog of resource-type → field-path lists that are *available* to be ignored during ILM pulls
5352
- and reverts. This is the full menu of what can be configured — to see the current ignore
5353
- configuration, read the `iLMIgnore` field on the integration itself via
5354
- `GET /v1/integrations/{_id}`.
5355
-
5356
- Keys are lowercase resource type names (e.g. `integration`, `flow`, `export`, `import`,
5357
- `connection`, `script`). Each value is an array of dot-path strings naming fields that can be
5358
- excluded. Only resource types that have configurable ignores appear as keys.
5359
- additionalProperties:
5360
- type: array
5361
- description: Field paths (dotted) that can be ignored for this resource type.
5362
- items:
5363
- type: string
5364
- example:
5365
- integration:
5366
- - settings.general.description
5367
- - settings.general.name
5368
- flow:
5369
- - scheduling.startTime
5370
- - disabled
5371
- export:
5372
- - http.relativeURI
5373
- - delta.dateField
5374
- import:
5375
- - http.relativeURI
5376
- - mapping
5377
- connection:
5378
- - http.baseURI
5379
- - http.auth.token.token
5380
5130
  DependencyEntry:
5381
5131
  type: object
5382
5132
  description: A single resource that depends on the queried resource.
@@ -419,9 +419,13 @@ paths:
419
419
  Resources are auto-purged after 30 days. A purge removes only the
420
420
  named resource: purge the bin entries that still reference it first
421
421
  (a deleted flow references its integration and the exports and imports
422
- it used). An integration's Celigo Storage system folder is the
423
- exception: the folder and everything in it go to the bin with the
424
- integration and are purged with it.
422
+ it used). Purging a flow leaves its integration, exports, imports and
423
+ scripts where they are. A few purges remove more than the named
424
+ document: an integration's Celigo Storage system folder (with
425
+ everything in it) goes to the bin with the integration and is purged
426
+ with it; purging a connection first deletes the end users' own copies
427
+ of it (their MCP connections) for good; and purging a topic deletes
428
+ its stored messages.
425
429
  parameters:
426
430
  - $ref: '#/components/parameters/ResourceType'
427
431
  - name: _id
package/dist/sync.yml CHANGED
@@ -242,7 +242,10 @@ paths:
242
242
  description: |-
243
243
  Validation failed. `source._connectionId` is missing
244
244
  (`missing_source_connection`), the integration was not created with
245
- `syncs: true` (`integration_not_for_sync`), the destination duplicates another sync
245
+ `syncs: true` (`integration_not_for_sync`), `destination._connectionId` isn't a
246
+ connection in the account (`missing_destination_connection`), the destination
247
+ connection is offline while a `database` or `schema` is set
248
+ (`offline_destination_connection`), the destination duplicates another sync
246
249
  (`duplicate_destination_host`), the destination connector rejected the
247
250
  sync configuration (`invalid_destination_sync_config`), two enabled
248
251
  datasets resolve to the same destination table
@@ -444,14 +447,21 @@ paths:
444
447
  description: |-
445
448
  Validation failed. `source._connectionId` is missing
446
449
  (`missing_source_connection`), the sync is not ready to enable
447
- (`sync_not_enabled`), the destination duplicates another sync
450
+ (`sync_not_enabled`), the update drops the saved destination connection or names a
451
+ connection that doesn't exist (`missing_destination_connection`, "Destination
452
+ connection is missing in the request"), the new destination connection is another
453
+ warehouse type than the saved one (`duplicate_destination_type`, "Destination
454
+ connection type is not same as the previous destination connection type"), a new
455
+ `database` or `schema` was sent while the destination connection is offline
456
+ (`offline_destination_connection` — the platform creates the schema when the
457
+ destination is saved), the destination duplicates another sync
448
458
  (`duplicate_destination_host`), the destination connector rejected the
449
459
  sync configuration (`invalid_destination_sync_config`), two enabled
450
460
  datasets resolve to the same destination table
451
461
  (`conflicting_table_name`), a field exceeds its size limit
452
462
  (`size_limit_exceeded`), the drift policy is inconsistent
453
463
  (`drift_policy_invalid_setup`), or the destination's application differs from
454
- the integration's other syncs or from the sync's saved destination.
464
+ the integration's other syncs.
455
465
  content:
456
466
  application/json:
457
467
  schema:
@@ -798,8 +808,9 @@ paths:
798
808
  description: |-
799
809
  Bad request. The body is not a non-empty array (`INVALID_REQUEST_BODY` /
800
810
  `EMPTY_REQUEST_BODY`), an item has both or neither of `_id`/`externalId`
801
- (`dataset_externalId_id_required`), an `externalId` already exists or an `_id`
802
- does not belong to the sync, `tableName` values collide
811
+ (`dataset_externalId_id_required`), an `externalId` already exists on the sync
812
+ (`create_dataset_present`) or an `_id` does not belong to it
813
+ (`update_dataset_not_present`), `tableName` values collide
803
814
  (`duplicate_dataset_table_names`), or an export dataset's export uses a
804
815
  different connection than the sync (`connection_mismatch`).
805
816
  content:
@@ -3016,8 +3027,10 @@ paths:
3016
3027
  deltaFields:
3017
3028
  type: array
3018
3029
  description: |-
3019
- Column names usable as the incremental-extraction cursor
3020
- (`exportProperties.delta.dateField`).
3030
+ Column names usable as the incremental-extraction cursor. A
3031
+ Salesforce dataset uses the first entry itself; a NetSuite
3032
+ saved-search dataset names its cursor in
3033
+ `exportProperties.delta.dateField`.
3021
3034
  items:
3022
3035
  type: string
3023
3036
  examples:
@@ -3438,7 +3451,8 @@ paths:
3438
3451
  type: boolean
3439
3452
  description: |-
3440
3453
  Only present (as `true`) when the export no longer uses the
3441
- sync's source connection.
3454
+ sync's source connection, or is no longer among the source
3455
+ connection's exports (for example, it was deleted).
3442
3456
  examples:
3443
3457
  - true
3444
3458
  totalFieldCount:
@@ -4421,8 +4435,10 @@ components:
4421
4435
  type: string
4422
4436
  description: |-
4423
4437
  Source field that carries each record's last-modified timestamp, used as
4424
- the delta cursor. Required for NetSuite datasets that extract via a
4425
- `netsuite.recordType`; Salesforce datasets derive it automatically.
4438
+ the delta cursor. Used by NetSuite saved-search datasets, where it is
4439
+ required when a `netsuite.recordType` is set. Salesforce datasets take the
4440
+ first entry of the column read's `deltaFields` instead, and HTTP-connector
4441
+ datasets have no date field: their delta filter is part of the request.
4426
4442
  examples:
4427
4443
  - lastmodifieddate
4428
4444
  netsuite:
@@ -4431,9 +4447,13 @@ components:
4431
4447
  properties:
4432
4448
  recordType:
4433
4449
  type: string
4450
+ writeOnly: true
4434
4451
  description: |-
4435
4452
  NetSuite record type backing a saved-search dataset. When set with
4436
- `exportProperties.type: delta`, a `delta.dateField` is required.
4453
+ `exportProperties.type: delta`, a `delta.dateField` is required. Write-only:
4454
+ dataset reads don't return it, so an update item built from a read-back
4455
+ clears it; the sync's next run restores a missing value from the saved
4456
+ search's catalog entry (`appSpecificProperties.recordType`).
4437
4457
  examples:
4438
4458
  - salesorder
4439
4459
  driftPolicy:
@@ -4466,8 +4486,10 @@ components:
4466
4486
  readOnly: true
4467
4487
  description: |-
4468
4488
  Only present (as `true`) in list responses, on export-backed datasets whose
4469
- export no longer uses the sync's source connection. Repoint the export or
4470
- recreate the dataset to resume replicating it.
4489
+ export no longer uses the sync's source connection. The source catalog listing
4490
+ also flags an export-backed dataset whose export it no longer lists, such as a
4491
+ deleted export. Repoint the export or recreate the dataset to resume replicating
4492
+ it.
4471
4493
  examples:
4472
4494
  - true
4473
4495
  DatasetUpsertItem:
@@ -4595,8 +4617,10 @@ components:
4595
4617
  type: string
4596
4618
  description: |-
4597
4619
  Source field carrying each record's last-modified timestamp, used as the
4598
- delta cursor. Required for NetSuite datasets extracted via a
4599
- `netsuite.recordType`; Salesforce datasets derive it automatically.
4620
+ delta cursor. Used by NetSuite saved-search datasets, where it is required
4621
+ when a `netsuite.recordType` is set; it isn't checked against the column
4622
+ read's `deltaFields`. Salesforce datasets take the first `deltaFields` entry
4623
+ instead, and HTTP-connector datasets take no date field.
4600
4624
  examples:
4601
4625
  - lastmodifieddate
4602
4626
  netsuite:
@@ -4606,8 +4630,11 @@ components:
4606
4630
  recordType:
4607
4631
  type: string
4608
4632
  description: |-
4609
- NetSuite record type backing a saved-search dataset. When set with
4610
- `exportProperties.type: delta`, a `delta.dateField` is required.
4633
+ NetSuite record type backing a saved-search dataset, from the saved search's
4634
+ catalog entry (`appSpecificProperties.recordType`). When set with
4635
+ `exportProperties.type: delta`, a `delta.dateField` is required. Reads never
4636
+ return it, so an update item built from a read-back clears it unless you add
4637
+ it back; the sync's next run restores a missing value from the catalog.
4611
4638
  examples:
4612
4639
  - salesorder
4613
4640
  driftPolicy:
@@ -4649,7 +4676,11 @@ components:
4649
4676
  Scopes this run to these datasets on the sync. Omit the field to run every
4650
4677
  enabled dataset; an empty array is rejected. Each id must belong to this sync
4651
4678
  and be enabled, and subset selection on a normal run is rejected unless the
4652
- account has partial normal sync enabled.
4679
+ account has partial normal sync enabled. A selection larger than the per-run
4680
+ maximum is accepted here but stops the run as it starts: no table runs, and
4681
+ the sync's errors record `max_datasets_exceeded` ("Selected datasets exceed the
4682
+ maximum allowed per run (N). Reduce the selection and retry."). Split a large
4683
+ selection across runs.
4653
4684
  items:
4654
4685
  type: string
4655
4686
  format: objectId
package/dist/tool.yml CHANGED
@@ -30253,7 +30253,10 @@ components:
30253
30253
  description: |-
30254
30254
  When true, a file whose records partially fail parsing against the file definition
30255
30255
  still emits the records that did parse, instead of failing the entire file. Applies to
30256
- file-definition (fixed-width, EDI) parsing only.
30256
+ file-definition (fixed-width, EDI) parsing only. For X12 and EDIFACT the unit is the
30257
+ transaction set (ST–SE, UNH–UNT), and it takes effect only with an EDI profile linked:
30258
+ a failed set is set aside and reported as an error while the file's other sets go on
30259
+ as records. Without this flag, one failed set fails the whole file.
30257
30260
  examples:
30258
30261
  - true
30259
30262
  - false
package/dist/user.yml CHANGED
@@ -30,7 +30,8 @@ tags:
30
30
 
31
31
  The account owner is not included — only invited users appear, plus any
32
32
  the identity provider provisioned through SCIM (`provisionedBy: scim`).
33
- Users can be disabled (reversible) or permanently removed.
33
+ Users can be disabled (reversible) or permanently removed. The license
34
+ sets no user or seat limit.
34
35
 
35
36
  ## User schema
36
37
 
@@ -223,14 +224,20 @@ paths:
223
224
  description: |-
224
225
  Replaces a workspace user's access settings. The body must grant access
225
226
  through `accessLevel` or a non-empty `integrationAccessLevel`, and
226
- `integrationAccessLevel` and `accountMFARequired` are cleared when
227
- omitted — send every value to keep. `accountSSORequired` is the
228
- exception: it changes only when the body carries it, and is ignored
229
- while the account enforces SSO for every user. `disabled` is not
230
- applied here; toggle it with `PUT /v1/ashares/{_userId}/disable`.
231
- Read-only fields echoed from the GET response are ignored, except
232
- `userType`, which is rejected. The user's email cannot be changed after
233
- invite. Callable from the production environment only.
227
+ `accessLevel`, `integrationAccessLevel` and `accountMFARequired` are
228
+ cleared when omitted — send every value to keep. The other settings
229
+ change only when the body carries them and keep their stored values
230
+ when omitted: `accountSSORequired` (also ignored while the account
231
+ enforces SSO for every user), `allowToEditRetryData`,
232
+ `allowIntegrationWorkspaceCreation` (both applied only to monitor and
233
+ integration-level users, and only when the owner or an administrator
234
+ sends them), `mcpServerAccessLevel` (send `[]` to clear it) and
235
+ `allMcpServerAccess`. `allowAccessToAPIM` isn't changed here at all.
236
+ `disabled` is not applied here; toggle it with
237
+ `PUT /v1/ashares/{_userId}/disable`. Read-only fields echoed from the
238
+ GET response are ignored, except `userType`, which is rejected. The
239
+ user's email cannot be changed after invite. A production
240
+ administrator's record can be changed only from production.
234
241
 
235
242
  End-user access records share this route with a different body — see
236
243
  the End Users API.
@@ -297,17 +304,7 @@ paths:
297
304
  '401':
298
305
  $ref: '#/components/responses/401-unauthorized'
299
306
  '403':
300
- description: The call was made from a sandbox environment.
301
- content:
302
- application/json:
303
- schema:
304
- $ref: '#/components/schemas/Error'
305
- examples:
306
- sandboxEnvironment:
307
- value:
308
- errors:
309
- - code: access_restricted
310
- message: This request can only be made through the production environment.
307
+ $ref: '#/components/responses/403-production-administrator'
311
308
  '404':
312
309
  $ref: '#/components/responses/404-not-found'
313
310
  '422':
@@ -346,6 +343,8 @@ paths:
346
343
  description: User removed from the account.
347
344
  '401':
348
345
  $ref: '#/components/responses/401-unauthorized'
346
+ '403':
347
+ $ref: '#/components/responses/403-production-administrator'
349
348
  '404':
350
349
  $ref: '#/components/responses/404-not-found'
351
350
  /v1/ashares/{_userId}/disable:
@@ -358,9 +357,14 @@ paths:
358
357
  description: |-
359
358
  Toggles the `disabled` flag on a user's access record. Call again to
360
359
  re-enable — there is no separate `/enable` path, and this is the only
361
- way to change `disabled` (the update operation does not apply it). A
362
- pending invitation cannot be toggled until the invited user accepts or
363
- declines it.
360
+ way to change `disabled` (the update operation does not apply it). Only
361
+ an accepted workspace invitation toggles: a pending one is refused with
362
+ 400, and a declined one (`dismissed: true`) answers 204 without changing
363
+ anything — delete it, or re-send it with
364
+ `PUT /v1/ashares/{_id}/reinvite`. The
365
+ user is emailed on every toggle. Disabling a production administrator
366
+ also disables their records in the other environments, and only
367
+ production can toggle one.
364
368
 
365
369
  End-user access records share this route — see the End Users API.
366
370
  parameters:
@@ -386,7 +390,7 @@ paths:
386
390
  value: {}
387
391
  responses:
388
392
  '204':
389
- description: User access toggled.
393
+ description: User access toggled, or the invitation was declined and nothing changed.
390
394
  '400':
391
395
  description: The invitation is still pending.
392
396
  content:
@@ -401,6 +405,8 @@ paths:
401
405
  message: You can't disable this invitation without it being accepted or dismissed by the invited user.
402
406
  '401':
403
407
  $ref: '#/components/responses/401-unauthorized'
408
+ '403':
409
+ $ref: '#/components/responses/403-production-administrator'
404
410
  '404':
405
411
  description: User not found.
406
412
  content:
@@ -421,6 +427,11 @@ paths:
421
427
  Re-sends the invitation to a user who previously dismissed it. Only
422
428
  works on users with `dismissed: true` in the user record. After
423
429
  reinviting, the user returns to a pending state awaiting acceptance.
430
+
431
+ There is no re-send for an invitation that is still pending: this
432
+ route refuses it, and inviting the address again answers
433
+ `invalid_invite`. Delete the pending record and invite the address
434
+ again with the same access settings.
424
435
  operationId: reinviteUser
425
436
  tags:
426
437
  - Users
@@ -458,9 +469,11 @@ paths:
458
469
  value:
459
470
  errors:
460
471
  - code: invalid_request
461
- message: User has not dismissed the invite.
472
+ message: You can reinvite a user only if he/she has dismissed you previous invite.
462
473
  '401':
463
474
  $ref: '#/components/responses/401-unauthorized'
475
+ '403':
476
+ $ref: '#/components/responses/403-production-administrator'
464
477
  '404':
465
478
  $ref: '#/components/responses/404-not-found'
466
479
  /v1/ashares/{_id}/accept:
@@ -559,6 +572,16 @@ paths:
559
572
  Invite one or more users by email. Each entry in the response array
560
573
  corresponds to the email at the same index — check `statusCode` per
561
574
  entry for partial failures.
575
+
576
+ An address that already has an access record in this environment —
577
+ accepted, still pending, or declined — fails in its entry with 400
578
+ `invalid_invite`: nothing changes and no email is sent. Change an
579
+ existing user with `PUT /v1/ashares/{_id}`, and re-send a declined
580
+ invitation with `PUT /v1/ashares/{_id}/reinvite`. A pending
581
+ invitation has no re-send: delete it and invite the address again.
582
+
583
+ Each call takes at most five addresses; the account itself has no user
584
+ limit.
562
585
  operationId: inviteUsers
563
586
  tags:
564
587
  - Users
@@ -598,11 +621,27 @@ paths:
598
621
  statusCode:
599
622
  type: integer
600
623
  description: |-
601
- Per-entry result code. `201` on success, `400` if
602
- the user already has access (use `PUT /v1/ashares/{_id}`
603
- to update permissions instead).
624
+ Per-entry result code. `201` on success; `400`
625
+ (`invalid_invite`) if the address already has an access
626
+ record in this environment. For an accepted user, change
627
+ access with `PUT /v1/ashares/{_id}`; re-send a declined
628
+ invitation with `PUT /v1/ashares/{_id}/reinvite`; a
629
+ pending invitation can't be re-sent (delete it and invite
630
+ again).
604
631
  doc:
605
632
  $ref: '#/components/schemas/User'
633
+ errors:
634
+ type: array
635
+ description: Why this address failed. Present instead of `doc` when `statusCode` isn't `201`.
636
+ items:
637
+ type: object
638
+ properties:
639
+ code:
640
+ type: string
641
+ description: Machine-readable error code, such as `invalid_invite`.
642
+ message:
643
+ type: string
644
+ description: Human-readable description of the error.
606
645
  examples:
607
646
  default:
608
647
  value:
@@ -630,10 +669,49 @@ paths:
630
669
  sharedWithUser:
631
670
  _id: 6a02b1859a09438890230aab
632
671
  email: user2@example.com
672
+ alreadyInvited:
673
+ summary: The second address already has a (pending) access record
674
+ value:
675
+ - statusCode: 201
676
+ doc:
677
+ _id: 6a02b1869a09438890230ae2
678
+ accessLevel: monitor
679
+ integrationAccessLevel: []
680
+ lastModified: '2026-05-12T04:50:14.342Z'
681
+ createdAt: '2026-05-12T04:50:14.330Z'
682
+ createdVia: existing_account_invite
683
+ sharedWithUser:
684
+ _id: 6a02b1859a09438890230a9f
685
+ email: user1@example.com
686
+ - statusCode: 400
687
+ errors:
688
+ - code: invalid_invite
689
+ message: The user already has access to this environment. Please use the edit permissions option to update the permissions for the user.
633
690
  '400':
634
691
  $ref: '#/components/responses/400-bad-request'
635
692
  '401':
636
693
  $ref: '#/components/responses/401-unauthorized'
694
+ '403':
695
+ description: |-
696
+ `emails` is empty, holds more than five addresses, or repeats one; nothing is
697
+ invited. Also returned when the caller may not invite users.
698
+ content:
699
+ application/json:
700
+ schema:
701
+ $ref: '#/components/schemas/Error'
702
+ examples:
703
+ tooMany:
704
+ summary: More than five addresses
705
+ value:
706
+ errors:
707
+ - code: limit_exceeded
708
+ message: Number of invites in the request exceeds maximum allowed limit 5.
709
+ duplicate:
710
+ summary: An address listed twice
711
+ value:
712
+ errors:
713
+ - code: duplicate_emails
714
+ message: Duplicate emails found in the request.
637
715
  components:
638
716
  securitySchemes:
639
717
  bearerAuth:
@@ -659,9 +737,11 @@ components:
659
737
 
660
738
  If per-integration level permissions are needed, omit `accessLevel` and instead populate `integrationAccessLevel`.
661
739
 
662
- On update (`PUT /v1/ashares/{_id}`) the body replaces the access settings: `integrationAccessLevel`
663
- and `accountMFARequired` are cleared when omitted, so resend them to keep them. `accountSSORequired`
664
- is different — it changes only when the body carries it.
740
+ On update (`PUT /v1/ashares/{_id}`) the body replaces the access settings: `accessLevel`,
741
+ `integrationAccessLevel` and `accountMFARequired` are cleared when omitted, so resend them to keep
742
+ them. `accountSSORequired`, `allowToEditRetryData`, `allowIntegrationWorkspaceCreation`,
743
+ `mcpServerAccessLevel` and `allMcpServerAccess` are different — each changes only when the body
744
+ carries it. An update never writes `allowAccessToAPIM`.
665
745
 
666
746
  `none` is written by SCIM provisioning for a user who has no account-wide grant; do not send it
667
747
  yourself — omit `accessLevel` and use `integrationAccessLevel` for integration-only access.
@@ -673,9 +753,10 @@ components:
673
753
  created later, so pairing it with `integrationAccessLevel` widens access rather than
674
754
  limiting it.
675
755
  - |-
676
- On PUT, "omit" means "clear" for integrationAccessLevel and accountMFARequired — GET the
677
- record first and resend both with the new accessLevel. accountSSORequired keeps its stored
678
- value when omitted.
756
+ On PUT, "omit" means "clear" for accessLevel, integrationAccessLevel and accountMFARequired —
757
+ GET the record first and resend all three. accountSSORequired, allowToEditRetryData,
758
+ allowIntegrationWorkspaceCreation, mcpServerAccessLevel and allMcpServerAccess keep their
759
+ stored values when omitted, and allowAccessToAPIM is never written by a PUT.
679
760
  enum:
680
761
  - monitor
681
762
  - manage
@@ -725,6 +806,14 @@ components:
725
806
  leaves the stored value unchanged. While the account enforces SSO for every
726
807
  user, the value sent is ignored and the stored value is kept until that
727
808
  enforcement is turned off.
809
+
810
+ While SSO applies to the user (here or account-wide) and the account's SSO
811
+ provider is enabled, requests made through the user's access record — signed in
812
+ to the UI, or with a personal access token, which acts through its creator's
813
+ record — are refused with 403 `access_restricted` ("You are required to sign in
814
+ via SSO configured for the account to access it.") when the user's login isn't
815
+ linked to that provider. Account API tokens don't act through a user's access
816
+ record, so SSO settings don't affect them.
728
817
  examples:
729
818
  - false
730
819
  x-celigo-ai-guidance:
@@ -740,7 +829,11 @@ components:
740
829
  - The invite body takes it too, so require MFA in the invite itself rather than with a follow-up update, which must resend `integrationAccessLevel` and this flag or clears them.
741
830
  allowAccessToAPIM:
742
831
  type: boolean
743
- description: When true, the user can access API Management (APIM) features for this account.
832
+ readOnly: true
833
+ description: |-
834
+ When true, the user has been set up in API Management (APIM) for this account. The platform
835
+ sets it the first time an administrator opens API Management; `PUT /v1/ashares/{_id}` never
836
+ writes it.
744
837
  allowToEditRetryData:
745
838
  type: boolean
746
839
  description: |-
@@ -753,9 +846,15 @@ components:
753
846
  This setting only applies when:
754
847
  - `accessLevel` is `monitor`, or
755
848
  - an entry in `integrationAccessLevel` grants `monitor` access for a specific integration.
849
+
850
+ On update it changes only when the body carries it, only for such a user, and only when the
851
+ owner or an administrator sends it; omitted, the stored value is kept.
756
852
  allowIntegrationWorkspaceCreation:
757
853
  type: boolean
758
- description: When true, the user can create integration workspaces.
854
+ description: |-
855
+ When true, a monitor or integration-level user can create integration workspaces, which
856
+ includes installing templates. Written on update only when the body carries it, by the
857
+ owner or an administrator; omitted, the stored value is kept.
759
858
  ResourceGrant:
760
859
  type: object
761
860
  description: |-
@@ -1190,7 +1289,13 @@ components:
1190
1289
  description: Single email address to invite (use with `POST /v1/invite`).
1191
1290
  emails:
1192
1291
  type: array
1193
- description: Email addresses to invite (use with `POST /v1/invite/multiple`).
1292
+ minItems: 1
1293
+ maxItems: 5
1294
+ uniqueItems: true
1295
+ description: |-
1296
+ Email addresses to invite (use with `POST /v1/invite/multiple`): one to five
1297
+ distinct addresses. An empty list, more than five, or a repeated address refuses
1298
+ the whole request with 403 (`no_emails`, `limit_exceeded`, `duplicate_emails`).
1194
1299
  items:
1195
1300
  type: string
1196
1301
  format: email
@@ -1244,6 +1349,21 @@ components:
1244
1349
  errors:
1245
1350
  - code: not_found
1246
1351
  message: The requested resource was not found.
1352
+ 403-production-administrator:
1353
+ description: |-
1354
+ The user is an administrator of the production environment, whose access record is
1355
+ repeated in every environment, and the request came from a non-production environment.
1356
+ Change, disable, re-invite or remove a production administrator from production.
1357
+ content:
1358
+ application/json:
1359
+ schema:
1360
+ $ref: '#/components/schemas/Error'
1361
+ examples:
1362
+ productionAdministrator:
1363
+ value:
1364
+ errors:
1365
+ - code: access_restricted
1366
+ message: This request can only be made through the production environment.
1247
1367
  400-bad-request:
1248
1368
  description: |
1249
1369
  Bad request. The server could not understand the request because of malformed syntax or invalid parameters.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@celigo/api-specs",
3
- "version": "0.2.166",
3
+ "version": "0.2.168",
4
4
  "private": false,
5
5
  "description": "Public OpenAPI bundles (dist/) and the celigo-cli lint schema pack (schemas.json).",
6
6
  "keywords": [
package/schemas.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "provenance": {
3
3
  "repo": "celigo/integrator-api-specs",
4
- "iasCommit": "ffb1b0f7",
4
+ "iasCommit": "80cddc9b",
5
5
  "generatedAt": "2026-10-22"
6
6
  },
7
7
  "roots": {