@celigo/api-specs 0.2.169 → 0.2.171

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.
@@ -9,7 +9,9 @@ info:
9
9
  (`GET`/`PUT /v1/mft/fileserver`) and the partner accounts that log in to it
10
10
  (`/v1/mft/fileserver/accounts`), each chrooted to a Celigo Storage folder. Requires a
11
11
  full-access API token — folder-path-scoped and other restricted tokens answer 403
12
- FILESERVER_FULL_ACCESS_TOKEN_REQUIRED on every route.
12
+ FILESERVER_FULL_ACCESS_TOKEN_REQUIRED on every route, and so does every personal access
13
+ token, whatever its creator's role. Only the account owner and administrators may manage
14
+ the server.
13
15
  servers:
14
16
  - url: https://api.integrator.io
15
17
  description: Production (US / default region)
@@ -24,7 +26,7 @@ security:
24
26
  tags:
25
27
  - name: File Server
26
28
  description: |-
27
- Each environment can run a Celigo-hosted SFTP file server. Enabling it claims a permanent `identifier` that becomes part of every partner login (`<username>@<identifier>`) and exposes the shared endpoint and host-key fingerprints partners need to connect. Partner accounts are created under the server, each with its own password and a Celigo Storage folder that becomes the account's root, so files a partner uploads appear in that folder and files placed there are what the partner can download. The account's license must include the file server add-on (`fileserver.enabled`), and every call needs a full-access API token.
29
+ Each environment can run a Celigo-hosted SFTP file server. Enabling it claims a permanent `identifier` that becomes part of every partner login (`<username>@<identifier>`) and exposes the shared endpoint and host-key fingerprints partners need to connect. Partner accounts are created under the server, each with its own password and a Celigo Storage folder that becomes the account's root, so files a partner uploads appear in that folder and files placed there are what the partner can download. The account's license must include the file server add-on (`fileserver.enabled`), and every call needs a full-access API token: scoped tokens and personal access tokens are refused, and so are manage, monitor and integration-level users.
28
30
 
29
31
  ## File server and account schemas
30
32
 
@@ -87,7 +89,11 @@ paths:
87
89
  '401':
88
90
  $ref: '#/components/responses/401-unauthorized'
89
91
  '403':
90
- description: The token is not a full-access API token (`FILESERVER_FULL_ACCESS_TOKEN_REQUIRED`).
92
+ description: |-
93
+ The token is not a full-access API token (`FILESERVER_FULL_ACCESS_TOKEN_REQUIRED`). A
94
+ personal access token is refused the same way as a scoped token, and a manage, monitor
95
+ or integration-level user gets `access_restricted`: only the owner and administrators
96
+ manage the file server.
91
97
  content:
92
98
  application/json:
93
99
  schema:
@@ -98,6 +104,12 @@ paths:
98
104
  errors:
99
105
  - code: FILESERVER_FULL_ACCESS_TOKEN_REQUIRED
100
106
  message: The file server management APIs require an API token with full access
107
+ notAdministrator:
108
+ summary: A manage, monitor or integration-level user
109
+ value:
110
+ errors:
111
+ - code: access_restricted
112
+ message: The role which you are associated with doesn't have the required permissions to perform the action.
101
113
  '404':
102
114
  description: The environment is entitled but its server has never been enabled (`FILESERVER_NOT_FOUND`).
103
115
  content:
@@ -220,7 +232,7 @@ paths:
220
232
  description: |-
221
233
  The token is not a full-access API token (`FILESERVER_FULL_ACCESS_TOKEN_REQUIRED`),
222
234
  the account's license lacks the file server add-on or the environment is a
223
- sandbox (`FILESERVER_NOT_ENTITLED`).
235
+ sandbox (`FILESERVER_NOT_ENTITLED`). A personal access token is refused the same way as a scoped token, and a manage, monitor or integration-level user gets `access_restricted`: only the owner and administrators manage the file server.
224
236
  content:
225
237
  application/json:
226
238
  schema:
@@ -231,6 +243,12 @@ paths:
231
243
  errors:
232
244
  - code: FILESERVER_NOT_ENTITLED
233
245
  message: The file server add-on is not enabled for this account
246
+ notAdministrator:
247
+ summary: A manage, monitor or integration-level user
248
+ value:
249
+ errors:
250
+ - code: access_restricted
251
+ message: The role which you are associated with doesn't have the required permissions to perform the action.
234
252
  '404':
235
253
  description: A disable was sent for an environment whose server was never enabled (`FILESERVER_NOT_FOUND`).
236
254
  content:
@@ -396,7 +414,11 @@ paths:
396
414
  '401':
397
415
  $ref: '#/components/responses/401-unauthorized'
398
416
  '403':
399
- description: The token is not a full-access API token (`FILESERVER_FULL_ACCESS_TOKEN_REQUIRED`), or the environment is a sandbox (`FILESERVER_NOT_ENTITLED`).
417
+ description: |-
418
+ The token is not a full-access API token (`FILESERVER_FULL_ACCESS_TOKEN_REQUIRED`), or
419
+ the environment is a sandbox (`FILESERVER_NOT_ENTITLED`). A personal access token is
420
+ refused the same way as a scoped token, and a manage, monitor or integration-level user
421
+ gets `access_restricted`: only the owner and administrators manage the file server.
400
422
  content:
401
423
  application/json:
402
424
  schema:
@@ -407,6 +429,12 @@ paths:
407
429
  errors:
408
430
  - code: FILESERVER_FULL_ACCESS_TOKEN_REQUIRED
409
431
  message: The file server management APIs require an API token with full access
432
+ notAdministrator:
433
+ summary: A manage, monitor or integration-level user
434
+ value:
435
+ errors:
436
+ - code: access_restricted
437
+ message: The role which you are associated with doesn't have the required permissions to perform the action.
410
438
  '422':
411
439
  description: The environment's server has never been enabled (`FILESERVER_NOT_ENABLED`); a disabled server is still manageable.
412
440
  content:
@@ -487,7 +515,7 @@ paths:
487
515
  The token is not a full-access API token (`FILESERVER_FULL_ACCESS_TOKEN_REQUIRED`);
488
516
  the license lacks the add-on or the environment is a sandbox
489
517
  (`FILESERVER_NOT_ENTITLED`); or the environment already holds
490
- `limits.maxAccounts` enabled accounts (`FILESERVER_MAX_ACCOUNTS_EXCEEDED`).
518
+ `limits.maxAccounts` enabled accounts (`FILESERVER_MAX_ACCOUNTS_EXCEEDED`). A personal access token is refused the same way as a scoped token, and a manage, monitor or integration-level user gets `access_restricted`: only the owner and administrators manage the file server.
491
519
  content:
492
520
  application/json:
493
521
  schema:
@@ -498,6 +526,12 @@ paths:
498
526
  errors:
499
527
  - code: FILESERVER_MAX_ACCOUNTS_EXCEEDED
500
528
  message: The maximum number of enabled accounts for this environment has been reached
529
+ notAdministrator:
530
+ summary: A manage, monitor or integration-level user
531
+ value:
532
+ errors:
533
+ - code: access_restricted
534
+ message: The role which you are associated with doesn't have the required permissions to perform the action.
501
535
  '409':
502
536
  description: Another account in this environment already has that username, enabled or not (`FILESERVER_USERNAME_TAKEN`).
503
537
  content:
@@ -688,7 +722,7 @@ paths:
688
722
  The token is not a full-access API token (`FILESERVER_FULL_ACCESS_TOKEN_REQUIRED`);
689
723
  the license lacks the add-on or the environment is a sandbox
690
724
  (`FILESERVER_NOT_ENTITLED`); or re-enabling would exceed `limits.maxAccounts`
691
- (`FILESERVER_MAX_ACCOUNTS_EXCEEDED`).
725
+ (`FILESERVER_MAX_ACCOUNTS_EXCEEDED`). A personal access token is refused the same way as a scoped token, and a manage, monitor or integration-level user gets `access_restricted`: only the owner and administrators manage the file server.
692
726
  content:
693
727
  application/json:
694
728
  schema:
@@ -699,6 +733,12 @@ paths:
699
733
  errors:
700
734
  - code: FILESERVER_MAX_ACCOUNTS_EXCEEDED
701
735
  message: The maximum number of enabled accounts for this environment has been reached
736
+ notAdministrator:
737
+ summary: A manage, monitor or integration-level user
738
+ value:
739
+ errors:
740
+ - code: access_restricted
741
+ message: The role which you are associated with doesn't have the required permissions to perform the action.
702
742
  '404':
703
743
  $ref: '#/components/responses/404-account-not-found'
704
744
  '409':
@@ -1407,7 +1447,12 @@ components:
1407
1447
  value:
1408
1448
  message: Bearer Authentication Failed
1409
1449
  403-full-access-required:
1410
- description: The token is not a full-access API token (`FILESERVER_FULL_ACCESS_TOKEN_REQUIRED`), or the license lacks the add-on / the environment is a sandbox (`FILESERVER_NOT_ENTITLED`).
1450
+ description: |-
1451
+ The token is not a full-access API token (`FILESERVER_FULL_ACCESS_TOKEN_REQUIRED`) --
1452
+ a scoped API token, or any personal access token, which never counts as full access --
1453
+ or the license lacks the add-on / the environment is a sandbox (`FILESERVER_NOT_ENTITLED`).
1454
+ A manage, monitor or integration-level user is refused with `access_restricted`: only the
1455
+ account owner and administrators manage the file server.
1411
1456
  content:
1412
1457
  application/json:
1413
1458
  schema:
@@ -1418,6 +1463,12 @@ components:
1418
1463
  errors:
1419
1464
  - code: FILESERVER_FULL_ACCESS_TOKEN_REQUIRED
1420
1465
  message: The file server management APIs require an API token with full access
1466
+ notAdministrator:
1467
+ summary: A manage, monitor or integration-level user
1468
+ value:
1469
+ errors:
1470
+ - code: access_restricted
1471
+ message: The role which you are associated with doesn't have the required permissions to perform the action.
1421
1472
  404-account-not-found:
1422
1473
  description: No account with this id in the caller's environment, or the id is not a valid identifier (`FILESERVER_ACCOUNT_NOT_FOUND`).
1423
1474
  content:
package/dist/flow.yml CHANGED
@@ -6637,9 +6637,12 @@ components:
6637
6637
  source:
6638
6638
  type: string
6639
6639
  description: |-
6640
- Step stage or system the error came from, such as `application` (raised from the
6641
- destination's response), `connection`, a hook (`pre_save_page_hook`,
6642
- `post_response_map_hook`) or a filter (`output_filter`). `GET /v1/errors/filterMetadata`
6640
+ Step stage or system the error came from, such as `application`, `connection`, a hook
6641
+ (`pre_save_page_hook`, `post_response_map_hook`) or a filter (`output_filter`).
6642
+ `application` covers the step's whole call to the external system, not only its answer:
6643
+ besides errors the destination returned, it marks a request that never got an answer,
6644
+ such as a URL template that failed to render (`handlebars_template_parse_error`) or a
6645
+ refused connection, so read `code` and `message` with it. `GET /v1/errors/filterMetadata`
6643
6646
  lists the source values the errors filter accepts.
6644
6647
  examples:
6645
6648
  - application
@@ -594,9 +594,9 @@ components:
594
594
  LLM configuration for an `ai_agent` guardrail — which provider and model evaluate each
595
595
  record, with instructions, parameter tuning, and output format. Guardrails never invoke
596
596
  tools, so unlike an AI agent import no block here accepts a `tools` array. MCP `prompts`
597
- and `resources` are accepted on save, but an unreachable MCP server doesn't fail the
598
- run (verified on OpenAI), so put the policy the guardrail must apply in its
599
- instructions. Providers come in two families with two configuration formats:
597
+ and `resources` are accepted on save but never used at run time, so put the policy the
598
+ guardrail must apply in its instructions. Providers come in two families with two
599
+ configuration formats:
600
600
 
601
601
  - **Built-in providers** — each has its own configuration block.
602
602
  - **openai**: OpenAI models (GPT-4.1, GPT-5, etc.). Configure via the `openai` object.
@@ -761,7 +761,7 @@ components:
761
761
  type: array
762
762
  description: |-
763
763
  MCP prompt entries saved with a catalog-provider guardrail (generic flat format).
764
- Each entry references one MCP connection and the prompt names allowed from it.
764
+ Each entry references one MCP connection and prompt names; a guardrail's run never fetches them.
765
765
  items:
766
766
  type: object
767
767
  properties:
@@ -782,7 +782,7 @@ components:
782
782
  description: Connection to the MCP server that exposes the prompts.
783
783
  allowedPrompts:
784
784
  type: array
785
- description: Prompt names the model may fetch from the server.
785
+ description: Prompt names saved with the entry; a guardrail's run never fetches them.
786
786
  items:
787
787
  type: string
788
788
  x-celigo-ai-guidance:
@@ -1039,7 +1039,7 @@ components:
1039
1039
  type: array
1040
1040
  description: |-
1041
1041
  MCP prompt entries saved with the guardrail. Each item references one
1042
- MCP connection and the prompt names allowed from it.
1042
+ MCP connection and prompt names; a guardrail's run never fetches them.
1043
1043
  items:
1044
1044
  type: object
1045
1045
  properties:
@@ -1061,7 +1061,7 @@ components:
1061
1061
  description: Connection to the MCP server.
1062
1062
  allowedPrompts:
1063
1063
  type: array
1064
- description: Prompt names to allow from the MCP server.
1064
+ description: Prompt names saved with the entry; a guardrail's run never fetches them.
1065
1065
  items:
1066
1066
  type: string
1067
1067
  resources:
@@ -1228,7 +1228,7 @@ components:
1228
1228
  type: array
1229
1229
  description: |-
1230
1230
  MCP prompt entries saved with a Gemini guardrail. Each item references one
1231
- MCP connection and the prompt names allowed from it.
1231
+ MCP connection and prompt names; a guardrail's run never fetches them.
1232
1232
  items:
1233
1233
  type: object
1234
1234
  properties:
@@ -1250,7 +1250,7 @@ components:
1250
1250
  description: Connection to the MCP server.
1251
1251
  allowedPrompts:
1252
1252
  type: array
1253
- description: Prompt names to allow from the MCP server.
1253
+ description: Prompt names saved with the entry; a guardrail's run never fetches them.
1254
1254
  items:
1255
1255
  type: string
1256
1256
  resources:
@@ -1450,7 +1450,7 @@ components:
1450
1450
  type: array
1451
1451
  description: |-
1452
1452
  MCP prompt entries saved with a Claude guardrail. Each item references one
1453
- MCP connection and the prompt names allowed from it.
1453
+ MCP connection and prompt names; a guardrail's run never fetches them.
1454
1454
  items:
1455
1455
  type: object
1456
1456
  properties:
@@ -1472,7 +1472,7 @@ components:
1472
1472
  description: Connection to the MCP server.
1473
1473
  allowedPrompts:
1474
1474
  type: array
1475
- description: Prompt names to allow from the MCP server.
1475
+ description: Prompt names saved with the entry; a guardrail's run never fetches them.
1476
1476
  items:
1477
1477
  type: string
1478
1478
  resources:
@@ -1544,10 +1544,9 @@ components:
1544
1544
  (`aiAgent.tools`, `aiAgent.openai.tools`, `aiAgent.litellm._overrides.gemini.tools`,
1545
1545
  `aiAgent.litellm._overrides.anthropic.tools`) fails the save with 422
1546
1546
  `guardrail_tools_not_allowed`. MCP `prompts` and `resources` are still accepted on
1547
- save, but don't rely on them for the check: with their MCP server unreachable, a
1548
- guardrail runs on its instructions and input alone, with no error, where an AI agent's
1549
- run fails (verified on OpenAI). Put the policy the guardrail must apply in its
1550
- instructions.
1547
+ save, but a guardrail's run never uses them: it gives the model only its instructions
1548
+ and input, whether the MCP server can be reached or not. Put the policy the guardrail
1549
+ must apply in its instructions.
1551
1550
  properties:
1552
1551
  type:
1553
1552
  type: string
@@ -2177,7 +2176,8 @@ components:
2177
2176
  mapping:
2178
2177
  type: object
2179
2178
  description: |-
2180
- Mapper 1.0 input mapping that selects the field evaluated as `text`.
2179
+ Mapper 1.0 input mapping that selects what is evaluated: a field mapped
2180
+ to `text`, or an object mapped to `record` (evaluated as its JSON).
2181
2181
  Served only when populated — a guardrail created without one has no
2182
2182
  `mapping` in responses, and evaluates the whole record (or the
2183
2183
  record's own top-level `text` field, when it has one).
@@ -2353,7 +2353,8 @@ components:
2353
2353
  record field to the `text` input (e.g.
2354
2354
  `{"fields": [{"extract": "employeeSummary", "generate": "text"}]}`);
2355
2355
  only that field is evaluated, and fields outside it are neither
2356
- scanned nor masked. Optional — when omitted the whole record is
2356
+ scanned nor masked. A mapping can also generate `record`, an object
2357
+ evaluated as its JSON. Optional — when omitted the whole record is
2357
2358
  evaluated, serialized as JSON, unless the record has its own
2358
2359
  top-level `text` field, which is then evaluated alone. The server
2359
2360
  serves this field only when populated.
@@ -2362,10 +2363,13 @@ components:
2362
2363
  Send the input selection here as `mapping`, not as Mapper 2.0
2363
2364
  `mappings` rows. Map the field explicitly when records carry their
2364
2365
  own `text` field.
2366
+ - |-
2367
+ A guardrail keeps no conversation history, so a mapped
2368
+ `conversationHistoryId` changes nothing.
2365
2369
  properties:
2366
2370
  fields:
2367
2371
  type: array
2368
- description: Field-level mapping entries; `generate` targets the guardrail input (typically `text`).
2372
+ description: Field-level mapping entries; `generate` targets the guardrail input (`text`, or `record` for an object).
2369
2373
  items:
2370
2374
  $ref: '#/components/schemas/MappingField'
2371
2375
  lists:
package/dist/import.yml CHANGED
@@ -1572,12 +1572,25 @@ components:
1572
1572
  Use `assistant_graphql` as the default value if there is a connector available
1573
1573
  for the system and the connector supports GraphQL.
1574
1574
  - |-
1575
- The value selects the editor only. Each `http.body[]` entry stays a template STRING — a
1575
+ The value selects the editor and changes one thing in a GraphQL request: under
1576
+ `graph_ql` and `assistant_graphql`, a `variables` member stored as a JSON string is
1577
+ parsed and sent as an object, while under `http` it is sent as the string; an object
1578
+ `variables` goes out unchanged under `graph_ql` and `http`. Live-verified 2026-10-22 with import
1579
+ previews against an echo endpoint: a string `variables` under `graph_ql`,
1580
+ `assistant_graphql` and `http`, and an object `variables` under `graph_ql` and `http`.
1581
+ - |-
1582
+ Each `http.body[]` entry stays a template STRING — a
1576
1583
  stringified `{"query", "operationName", "variables"}` envelope, one per operation for the
1577
1584
  update/create pair (`http.body[0]` / `http.body[1]`); never an object entry, which is stored
1578
1585
  as-is and does not render. The GraphQL form parses that string to show each member in its
1579
1586
  own field and re-stringifies it on save; an entry that is not parseable JSON at rest renders
1580
- those fields empty, so keep templated variables inside a JSON string value.
1587
+ those fields empty, so keep templated variables inside a JSON string value. When
1588
+ `variables` is itself a JSON string, the string values inside it sit two JSON levels
1589
+ deep: write them as `\"{{jsonEncode record.x}}\"` with double braces, because a plain
1590
+ `{{record.x}}`, or a triple-brace `jsonEncode`, fails a record whose value holds a quote
1591
+ with 422 `invalid_json` before the request is sent. An object or array there is
1592
+ `{{jsonSerialize record.x}}`, also with double braces; `{{{jsonSerialize record.x}}}`
1593
+ fails the same way (live-verified 2026-10-22).
1581
1594
  - |-
1582
1595
  Create GraphQL imports on a `graph_ql` connection (or a connector connection bound to its
1583
1596
  GraphQL API): that setup offers the Form view toggle between the GraphQL editor and the
@@ -2394,13 +2407,20 @@ components:
2394
2407
 
2395
2408
  Each entry is a DOT-PATH STRING, or null for an operation
2396
2409
  with no ID path configured. When not specified, the platform
2397
- looks for standard `id` or `_id` fields automatically.
2410
+ looks for standard `id` or `_id` fields automatically. When
2411
+ set, a response with no value at the path fails the record
2412
+ with `missing_id`, quoting the response.
2398
2413
  x-celigo-ai-guidance:
2399
2414
  - |-
2400
2415
  Common LLM mistake:
2401
2416
  splitting a single dot-path like ``"data.id"`` into array segments ``["data",
2402
2417
  "id"]`` — DO NOT do this.
2403
2418
  See the ``response`` object docs above.
2419
+ - |-
2420
+ For a GraphQL mutation, point it at the id only a successful call returns
2421
+ (``["data.customerCreate.customer.id"]``): a 200 that carries top-level ``errors``
2422
+ or the mutation's ``userErrors`` then fails the record with ``missing_id`` instead
2423
+ of counting as written. Live-verified 2026-10-22 against an echo endpoint.
2404
2424
  examples:
2405
2425
  - - id
2406
2426
  - - data.id
@@ -2474,11 +2494,23 @@ components:
2474
2494
  available, set both — the platform evaluates ``successPath``
2475
2495
  first and falls through to ``failPath`` only when the
2476
2496
  success check is inconclusive.
2497
+
2498
+ Without ``failValues``, a truthy value at the path fails
2499
+ the response. A path that resolves to an array matches only
2500
+ when the array has exactly one element.
2501
+ x-celigo-ai-guidance:
2502
+ - |-
2503
+ A GraphQL API usually reports a failed mutation with HTTP 200 and an ``errors`` array, which
2504
+ counts as written when no rule catches it. ``failPath: ["errors"]`` fails the record
2505
+ for one error and lets two or more through; use ``["errors[0].message"]`` with
2506
+ ``errorPath: "errors[0].message"`` so the record fails with the server's message.
2507
+ Live-verified 2026-10-22 with import runs against an echo endpoint.
2477
2508
  examples:
2478
2509
  - - error
2479
2510
  - - success
2480
2511
  - - error
2481
2512
  - error
2513
+ - - errors[0].message
2482
2514
  failValues:
2483
2515
  type: array
2484
2516
  items:
@@ -9642,7 +9674,7 @@ components:
9642
9674
  x-enumDescriptions:
9643
9675
  text: Free-form text response from the model.
9644
9676
  json_schema: Structured JSON output conforming to a defined schema.
9645
- blob: Binary data output for non-text content.
9677
+ blob: Image generation — the run calls the image generation tool and returns the stored image's `blobKey`, not `_text` or `_json`.
9646
9678
  default: text
9647
9679
  description: Output format type.
9648
9680
  schemaMode:
@@ -9864,11 +9896,6 @@ components:
9864
9896
  an object without a non-empty name fails with a
9865
9897
  missing-required-field error. String entries are the
9866
9898
  legacy form and stay valid.
9867
- allowedPrompts:
9868
- type: array
9869
- description: Specific prompts to allow from the MCP server (used for MCP prompt entries; all if omitted).
9870
- items:
9871
- type: string
9872
9899
  tool:
9873
9900
  type: object
9874
9901
  description: |
@@ -10011,7 +10038,7 @@ components:
10011
10038
  x-enumDescriptions:
10012
10039
  text: Free-form text response from the model.
10013
10040
  json_schema: Structured JSON output conforming to a defined schema.
10014
- blob: Binary data output for non-text content.
10041
+ blob: Image generation — the run returns the stored image's `blobKey`, not `_text` or `_json`.
10015
10042
  default: text
10016
10043
  schemaMode:
10017
10044
  type: string
@@ -10180,11 +10207,6 @@ components:
10180
10207
  description: Display description shown for the tool.
10181
10208
  required:
10182
10209
  - name
10183
- allowedPrompts:
10184
- type: array
10185
- description: Specific prompts to allow from the MCP server (used for MCP prompt entries; all if omitted).
10186
- items:
10187
- type: string
10188
10210
  tool:
10189
10211
  type: object
10190
10212
  description: Reference to a Celigo Tool resource, used when type is "tool".
@@ -10697,9 +10719,9 @@ components:
10697
10719
  LLM configuration for an `ai_agent` guardrail — which provider and model evaluate each
10698
10720
  record, with instructions, parameter tuning, and output format. Guardrails never invoke
10699
10721
  tools, so unlike an AI agent import no block here accepts a `tools` array. MCP `prompts`
10700
- and `resources` are accepted on save, but an unreachable MCP server doesn't fail the
10701
- run (verified on OpenAI), so put the policy the guardrail must apply in its
10702
- instructions. Providers come in two families with two configuration formats:
10722
+ and `resources` are accepted on save but never used at run time, so put the policy the
10723
+ guardrail must apply in its instructions. Providers come in two families with two
10724
+ configuration formats:
10703
10725
 
10704
10726
  - **Built-in providers** — each has its own configuration block.
10705
10727
  - **openai**: OpenAI models (GPT-4.1, GPT-5, etc.). Configure via the `openai` object.
@@ -10864,7 +10886,7 @@ components:
10864
10886
  type: array
10865
10887
  description: |-
10866
10888
  MCP prompt entries saved with a catalog-provider guardrail (generic flat format).
10867
- Each entry references one MCP connection and the prompt names allowed from it.
10889
+ Each entry references one MCP connection and prompt names; a guardrail's run never fetches them.
10868
10890
  items:
10869
10891
  type: object
10870
10892
  properties:
@@ -10885,7 +10907,7 @@ components:
10885
10907
  description: Connection to the MCP server that exposes the prompts.
10886
10908
  allowedPrompts:
10887
10909
  type: array
10888
- description: Prompt names the model may fetch from the server.
10910
+ description: Prompt names saved with the entry; a guardrail's run never fetches them.
10889
10911
  items:
10890
10912
  type: string
10891
10913
  x-celigo-ai-guidance:
@@ -11142,7 +11164,7 @@ components:
11142
11164
  type: array
11143
11165
  description: |-
11144
11166
  MCP prompt entries saved with the guardrail. Each item references one
11145
- MCP connection and the prompt names allowed from it.
11167
+ MCP connection and prompt names; a guardrail's run never fetches them.
11146
11168
  items:
11147
11169
  type: object
11148
11170
  properties:
@@ -11164,7 +11186,7 @@ components:
11164
11186
  description: Connection to the MCP server.
11165
11187
  allowedPrompts:
11166
11188
  type: array
11167
- description: Prompt names to allow from the MCP server.
11189
+ description: Prompt names saved with the entry; a guardrail's run never fetches them.
11168
11190
  items:
11169
11191
  type: string
11170
11192
  resources:
@@ -11331,7 +11353,7 @@ components:
11331
11353
  type: array
11332
11354
  description: |-
11333
11355
  MCP prompt entries saved with a Gemini guardrail. Each item references one
11334
- MCP connection and the prompt names allowed from it.
11356
+ MCP connection and prompt names; a guardrail's run never fetches them.
11335
11357
  items:
11336
11358
  type: object
11337
11359
  properties:
@@ -11353,7 +11375,7 @@ components:
11353
11375
  description: Connection to the MCP server.
11354
11376
  allowedPrompts:
11355
11377
  type: array
11356
- description: Prompt names to allow from the MCP server.
11378
+ description: Prompt names saved with the entry; a guardrail's run never fetches them.
11357
11379
  items:
11358
11380
  type: string
11359
11381
  resources:
@@ -11553,7 +11575,7 @@ components:
11553
11575
  type: array
11554
11576
  description: |-
11555
11577
  MCP prompt entries saved with a Claude guardrail. Each item references one
11556
- MCP connection and the prompt names allowed from it.
11578
+ MCP connection and prompt names; a guardrail's run never fetches them.
11557
11579
  items:
11558
11580
  type: object
11559
11581
  properties:
@@ -11575,7 +11597,7 @@ components:
11575
11597
  description: Connection to the MCP server.
11576
11598
  allowedPrompts:
11577
11599
  type: array
11578
- description: Prompt names to allow from the MCP server.
11600
+ description: Prompt names saved with the entry; a guardrail's run never fetches them.
11579
11601
  items:
11580
11602
  type: string
11581
11603
  resources:
@@ -11677,8 +11699,8 @@ components:
11677
11699
  `aiAgent.openai.tools`, `aiAgent.litellm._overrides.gemini.tools`, `….anthropic.tools`) —
11678
11700
  any non-empty array fails the save with 422 `guardrail_tools_not_allowed` ("Tools aren't
11679
11701
  supported on a guardrail AI agent configuration…"), on create and on update. `prompts` and
11680
- `resources` are accepted on save, but an unreachable MCP server doesn't fail the run
11681
- (verified on OpenAI), so put the policy in the instructions. The server still echoes
11702
+ `resources` are accepted on save but never used at run time, so put the policy in the
11703
+ instructions. The server still echoes
11682
11704
  `openai.tools: []` on OpenAI guardrails.
11683
11705
  properties:
11684
11706
  type:
@@ -17547,9 +17569,12 @@ components:
17547
17569
  type: array
17548
17570
  description: |-
17549
17571
  Errors recorded for the record. `source: application` with
17550
- `stage: apiCall` means the request reached the destination and its
17551
- answer was the failure; the destination's response body rides in
17552
- `message`.
17572
+ `stage: apiCall` marks the import's call to the destination. Usually
17573
+ the destination's answer was the failure, and its response body rides
17574
+ in `message`; but a request the import couldn't build carries the same
17575
+ pair and was never sent, such as a URL template that failed to render
17576
+ (`code: handlebars_template_parse_error`, "Failed to generate request
17577
+ url from template ...").
17553
17578
  items:
17554
17579
  type: object
17555
17580
  properties:
@@ -24,6 +24,10 @@ tags:
24
24
  description: |-
25
25
  Network policies are named IP allow and deny lists that control where API tokens, MCP servers, and users may connect from. A policy takes effect only once it is assigned — through `_networkPolicyId` on an API token or MCP server, or in account settings for workspace-user and end-user sign-in — and each environment (production or sandbox) keeps its own library of policies. Network policies must be enabled for the account, and only the account owner and administrators can manage them.
26
26
 
27
+ Every policy that applies to a call must admit the caller. An API token's policy is checked when the token authenticates, before the request runs; an MCP server's policy is checked on every request to it, so a call to an MCP server passes both its token's policy and the server's. A personal access token has no policy of its own: it is checked against the workspace-user sign-in policy of the environment it belongs to. Sign-in policies are checked when a workspace user signs in or switches account or environment, and when an end user signs in to an MCP server.
28
+
29
+ A refused call gets HTTP 403 with `{"errors": [{"code": "access_denied", "message": "Access denied."}]}` and nothing that names the policy or the address. An MCP server endpoint speaks JSON-RPC, so its 403 carries the MCP server's access-denied error (`-32006`) in a JSON-RPC envelope instead — `{"jsonrpc": "2.0", "error": {"code": -32006, "message": "Access denied."}, "id": <request id>}`, with `id` echoed when the request had one — and the server's request log records the call as blocked.
30
+
27
31
  ## Network policy schema
28
32
 
29
33
  {% openapi-schemas spec="networkpolicy" schemas="NetworkPolicy" grouped="true" %}